sf command: allow default bus and chip selects
This patch allows a board configuration file to provide default bus and chip-selects for SPI flash so that first argument to the 'sf' command is optional. On boards that use the mxc_spi driver and a GPIO for chip select, this allows a much simpler command line: U-Boot> sf probe instead of U-Boot> sf probe 0x5300 Tested-by: Jason Liu <jason.hui@linaro.org> Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
8b463dab93
commit
c1173bd075
@ -17,6 +17,12 @@
|
|||||||
#ifndef CONFIG_SF_DEFAULT_MODE
|
#ifndef CONFIG_SF_DEFAULT_MODE
|
||||||
# define CONFIG_SF_DEFAULT_MODE SPI_MODE_3
|
# define CONFIG_SF_DEFAULT_MODE SPI_MODE_3
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef CONFIG_SF_DEFAULT_CS
|
||||||
|
# define CONFIG_SF_DEFAULT_CS 0
|
||||||
|
#endif
|
||||||
|
#ifndef CONFIG_SF_DEFAULT_BUS
|
||||||
|
# define CONFIG_SF_DEFAULT_BUS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct spi_flash *flash;
|
static struct spi_flash *flash;
|
||||||
|
|
||||||
@ -63,27 +69,26 @@ static int sf_parse_len_arg(char *arg, ulong *len)
|
|||||||
|
|
||||||
static int do_spi_flash_probe(int argc, char * const argv[])
|
static int do_spi_flash_probe(int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
unsigned int bus = 0;
|
unsigned int bus = CONFIG_SF_DEFAULT_BUS;
|
||||||
unsigned int cs;
|
unsigned int cs = CONFIG_SF_DEFAULT_CS;
|
||||||
unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
|
unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
|
||||||
unsigned int mode = CONFIG_SF_DEFAULT_MODE;
|
unsigned int mode = CONFIG_SF_DEFAULT_MODE;
|
||||||
char *endp;
|
char *endp;
|
||||||
struct spi_flash *new;
|
struct spi_flash *new;
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc >= 2) {
|
||||||
return -1;
|
cs = simple_strtoul(argv[1], &endp, 0);
|
||||||
|
if (*argv[1] == 0 || (*endp != 0 && *endp != ':'))
|
||||||
cs = simple_strtoul(argv[1], &endp, 0);
|
|
||||||
if (*argv[1] == 0 || (*endp != 0 && *endp != ':'))
|
|
||||||
return -1;
|
|
||||||
if (*endp == ':') {
|
|
||||||
if (endp[1] == 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
if (*endp == ':') {
|
||||||
|
if (endp[1] == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
bus = cs;
|
bus = cs;
|
||||||
cs = simple_strtoul(endp + 1, &endp, 0);
|
cs = simple_strtoul(endp + 1, &endp, 0);
|
||||||
if (*endp != 0)
|
if (*endp != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc >= 3) {
|
if (argc >= 3) {
|
||||||
@ -299,7 +304,7 @@ usage:
|
|||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
sf, 5, 1, do_spi_flash,
|
sf, 5, 1, do_spi_flash,
|
||||||
"SPI flash sub-system",
|
"SPI flash sub-system",
|
||||||
"probe [bus:]cs [hz] [mode] - init flash device on given SPI bus\n"
|
"probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus\n"
|
||||||
" and chip select\n"
|
" and chip select\n"
|
||||||
"sf read addr offset len - read `len' bytes starting at\n"
|
"sf read addr offset len - read `len' bytes starting at\n"
|
||||||
" `offset' to memory at `addr'\n"
|
" `offset' to memory at `addr'\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user