Message ID | 20191220114457.3235630-1-marex@denx.de |
---|---|
State | Accepted |
Commit | 6954756a1567bd4dc36081651c266dbcf9ad4ef5 |
Delegated to: | Jagannadha Sutradharudu Teki |
Headers | show |
Series | cmd: spi: Permit setting bus frequency | expand |
On Fri, 20 Dec 2019 12:44:57 +0100 Marek Vasut <marex@denx.de> wrote: > The 'sspi' command hard-coded 1 MHz bus frequency for all > transmissions. Allow changing that at runtime by specifying '@freq' > bus frequency in Hz. > > Signed-off-by: Marek Vasut <marex@denx.de> > Cc: Tom Rini <trini@konsulko.com> > --- > cmd/spi.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/cmd/spi.c b/cmd/spi.c > index 75226fd368..bfa185b6ae 100644 > --- a/cmd/spi.c > +++ b/cmd/spi.c > @@ -28,6 +28,7 @@ > static unsigned int bus; > static unsigned int cs; > static unsigned int mode; > +static unsigned int freq; > static int bitlen; > static uchar dout[MAX_SPI_BYTES]; > static uchar din[MAX_SPI_BYTES]; > @@ -45,12 +46,12 @@ static int do_spi_xfer(int bus, int cs) > str = strdup(name); > if (!str) > return -ENOMEM; > - ret = spi_get_bus_and_cs(bus, cs, 1000000, mode, > "spi_generic_drv", > + ret = spi_get_bus_and_cs(bus, cs, freq, mode, > "spi_generic_drv", str, &dev, &slave); > if (ret) > return ret; > #else > - slave = spi_setup_slave(bus, cs, 1000000, mode); > + slave = spi_setup_slave(bus, cs, freq, mode); > if (!slave) { > printf("Invalid device %d:%d\n", bus, cs); > return -EINVAL; > @@ -106,6 +107,8 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) > * We use the last specified parameters, unless new ones are > * entered. > */ > + if (freq == 0) > + freq = 1000000; > > if ((flag & CMD_FLAG_REPEAT) == 0) > { > @@ -119,7 +122,9 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) bus = CONFIG_DEFAULT_SPI_BUS; > } > if (*cp == '.') > - mode = simple_strtoul(cp+1, NULL, > 10); > + mode = simple_strtoul(cp+1, &cp, 10); > + if (*cp == '@') > + freq = simple_strtoul(cp+1, &cp, 10); > } > if (argc >= 3) > bitlen = simple_strtoul(argv[2], NULL, 10); > @@ -159,10 +164,11 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) U_BOOT_CMD( > sspi, 5, 1, do_spi, > "SPI utility command", > - "[<bus>:]<cs>[.<mode>] <bit_len> <dout> - Send and receive > bits\n" > + "[<bus>:]<cs>[.<mode>][@<freq>] <bit_len> <dout> - Send and > receive bits\n" "<bus> - Identifies the SPI bus\n" > "<cs> - Identifies the chip select\n" > "<mode> Lukasz Majewski <lukma@denx.de> - Identifies the > SPI mode to use\n" > + "<freq> - Identifies the SPI bus frequency in Hz\n" > "<bit_len> - Number of bits to send (base 10)\n" > "<dout> - Hexadecimal string that gets sent" > ); Reviewed-by: Lukasz Majewski <lukma@denx.de> Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
On Fri, Dec 20, 2019 at 5:15 PM Marek Vasut <marex@denx.de> wrote: > > The 'sspi' command hard-coded 1 MHz bus frequency for all transmissions. > Allow changing that at runtime by specifying '@freq' bus frequency in Hz. > > Signed-off-by: Marek Vasut <marex@denx.de> > Cc: Tom Rini <trini@konsulko.com> > --- Applied to u-boot-spi/master
diff --git a/cmd/spi.c b/cmd/spi.c index 75226fd368..bfa185b6ae 100644 --- a/cmd/spi.c +++ b/cmd/spi.c @@ -28,6 +28,7 @@ static unsigned int bus; static unsigned int cs; static unsigned int mode; +static unsigned int freq; static int bitlen; static uchar dout[MAX_SPI_BYTES]; static uchar din[MAX_SPI_BYTES]; @@ -45,12 +46,12 @@ static int do_spi_xfer(int bus, int cs) str = strdup(name); if (!str) return -ENOMEM; - ret = spi_get_bus_and_cs(bus, cs, 1000000, mode, "spi_generic_drv", + ret = spi_get_bus_and_cs(bus, cs, freq, mode, "spi_generic_drv", str, &dev, &slave); if (ret) return ret; #else - slave = spi_setup_slave(bus, cs, 1000000, mode); + slave = spi_setup_slave(bus, cs, freq, mode); if (!slave) { printf("Invalid device %d:%d\n", bus, cs); return -EINVAL; @@ -106,6 +107,8 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * We use the last specified parameters, unless new ones are * entered. */ + if (freq == 0) + freq = 1000000; if ((flag & CMD_FLAG_REPEAT) == 0) { @@ -119,7 +122,9 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) bus = CONFIG_DEFAULT_SPI_BUS; } if (*cp == '.') - mode = simple_strtoul(cp+1, NULL, 10); + mode = simple_strtoul(cp+1, &cp, 10); + if (*cp == '@') + freq = simple_strtoul(cp+1, &cp, 10); } if (argc >= 3) bitlen = simple_strtoul(argv[2], NULL, 10); @@ -159,10 +164,11 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) U_BOOT_CMD( sspi, 5, 1, do_spi, "SPI utility command", - "[<bus>:]<cs>[.<mode>] <bit_len> <dout> - Send and receive bits\n" + "[<bus>:]<cs>[.<mode>][@<freq>] <bit_len> <dout> - Send and receive bits\n" "<bus> - Identifies the SPI bus\n" "<cs> - Identifies the chip select\n" "<mode> - Identifies the SPI mode to use\n" + "<freq> - Identifies the SPI bus frequency in Hz\n" "<bit_len> - Number of bits to send (base 10)\n" "<dout> - Hexadecimal string that gets sent" );
The 'sspi' command hard-coded 1 MHz bus frequency for all transmissions. Allow changing that at runtime by specifying '@freq' bus frequency in Hz. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Tom Rini <trini@konsulko.com> --- cmd/spi.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)