blackfin: bf609: add softswitch config command

Add softswitch_output command for bf609-ezkit to enable softswitches.

Signed-off-by: Bob Liu <lliubbo@gmail.com>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
This commit is contained in:
Bob Liu 2013-02-05 19:05:41 +08:00 committed by Sonic Zhang
parent e7b9aa96b1
commit 7d861d95a3
7 changed files with 81 additions and 19 deletions

1
README
View file

@ -898,6 +898,7 @@ The following options need to be configured:
CONFIG_CMD_SF * Read/write/erase SPI NOR flash
CONFIG_CMD_SHA1SUM print sha1 memory digest
(requires CONFIG_CMD_MEMORY)
CONFIG_CMD_SOFTSWITCH * Soft switch setting command for BF60x
CONFIG_CMD_SOURCE "source" command Support
CONFIG_CMD_SPI * SPI serial bus support
CONFIG_CMD_TFTPSRV * TFTP transfer in server mode

View file

@ -0,0 +1,18 @@
/*
* U-boot - main board file
*
* Copyright (c) 2008-2012 Analog Devices Inc.
*
* Licensed under the GPL-2 or later.
*/
#ifndef __SOFT_SWITCH_H__
#define __SOFT_SWITCH_H__
#define IO_PORT_A 0
#define IO_PORT_B 1
#define IO_PORT_INPUT 0
#define IO_PORT_OUTPUT 1
int config_switch_bit(int num, int port, int bit, int dir, uchar value);
#endif

View file

@ -12,14 +12,6 @@
#include <i2c.h>
#include "soft_switch.h"
#define SWITCH_ADDR 0x21
#define NUM_SWITCH 3
#define IODIRA 0x0
#define IODIRB 0x1
#define OLATA 0x14
#define OLATB 0x15
struct switch_config {
uchar dir0; /* IODIRA */
uchar dir1; /* IODIRB */
@ -126,9 +118,8 @@ static int setup_soft_switch(int addr, struct switch_config *config)
return i2c_write(addr, IODIRB, 1, &config->dir1, 1);
}
int config_switch_bit(int num, int port, int bit, int dir, uchar value)
int config_switch_bit(int addr, int port, int bit, int dir, uchar value)
{
int addr = SWITCH_ADDR + num;
int ret, data_reg, dir_reg;
uchar tmp;

View file

@ -6,8 +6,10 @@
* Licensed under the GPL-2 or later.
*/
#ifndef __SOFT_SWITCH_H__
#define __SOFT_SWITCH_H__
#ifndef __BOARD_SOFT_SWITCH_H__
#define __BOARD_SOFT_SWITCH_H__
#include <asm/soft_switch.h>
/* switch 0 port A */
#define CAN_EN 0x1
@ -61,11 +63,18 @@
#define PD3_SPI0MOSI_EN 0x1
#define PD4_SPI0CK_EN 0x2
#define IO_PORT_A 0
#define IO_PORT_B 1
#define IO_PORT_INPUT 0
#define IO_PORT_OUTPUT 1
int config_switch_bit(int num, int port, int bit, int dir, uchar value);
int setup_board_switches(void);
#ifdef CONFIG_BFIN_BOARD_VERSION_1_0
#define SWITCH_ADDR 0x21
#else
#define SWITCH_ADDR 0x20
#endif
#define NUM_SWITCH 3
#define IODIRA 0x0
#define IODIRB 0x1
#define OLATA 0x14
#define OLATB 0x15
int setup_board_switches(void);
#endif /* __BOARD_SOFT_SWITCH_H__ */

View file

@ -164,6 +164,7 @@ COBJS-$(CONFIG_CMD_SF) += cmd_sf.o
COBJS-$(CONFIG_CMD_SCSI) += cmd_scsi.o
COBJS-$(CONFIG_CMD_SHA1SUM) += cmd_sha1sum.o
COBJS-$(CONFIG_CMD_SETEXPR) += cmd_setexpr.o
COBJS-$(CONFIG_CMD_SOFTSWITCH) += cmd_softswitch.o
COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o
COBJS-$(CONFIG_CMD_SPIBOOTLDR) += cmd_spibootldr.o
COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o

41
common/cmd_softswitch.c Normal file
View file

@ -0,0 +1,41 @@
/*
* cmd_softswitch.c - set the softswitch for bf60x
*
* Copyright (c) 2012 Analog Devices Inc.
*
* Licensed under the GPL-2 or later.
*/
#include <common.h>
#include <command.h>
#include <asm/blackfin.h>
#include <asm/soft_switch.h>
int do_softswitch(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int switchaddr, value, pin, port;
if (argc != 5)
return CMD_RET_USAGE;
if (strcmp(argv[2], "GPA") == 0)
port = IO_PORT_A;
else if (strcmp(argv[2], "GPB") == 0)
port = IO_PORT_B;
else
return CMD_RET_USAGE;
switchaddr = simple_strtoul(argv[1], NULL, 16);
pin = simple_strtoul(argv[3], NULL, 16);
value = simple_strtoul(argv[4], NULL, 16);
config_switch_bit(switchaddr, port, (1 << pin), IO_PORT_OUTPUT, value);
return 0;
}
U_BOOT_CMD(
softswitch_output, 5, 1, do_softswitch,
"switchaddr GPA/GPB pin_offset value",
""
);

View file

@ -144,6 +144,7 @@
#define CONFIG_UART_CONSOLE 0
#define CONFIG_CMD_MEMORY
#define CONFIG_CMD_SOFTSWITCH
#define CONFIG_SYS_MEMTEST_END (CONFIG_STACKBASE - 20*1024*1024 + 4)
#define CONFIG_BFIN_SOFT_SWITCH