[U-Boot] [PATCH re-send v6 05/17] spi: Add support for dual and quad mode
Jagan Teki
jteki at openedev.com
Mon Dec 28 15:49:04 CET 2015
On 23 December 2015 at 20:39, Mugunthan V N <mugunthanvnm at ti.com> wrote:
> spi bus can support dual and quad wire data transfers for tx and
> rx. So defining dual and quad modes for both tx and rx. Also add
> support to parse bus width used for spi tx and rx transfers.
>
> Signed-off-by: Mugunthan V N <mugunthanvnm at ti.com>
> ---
> drivers/spi/spi-uclass.c | 31 +++++++++++++++++++++++++++++++
> include/spi.h | 4 ++++
> 2 files changed, 35 insertions(+)
>
> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
> index e0f6b25..e5df2c2 100644
> --- a/drivers/spi/spi-uclass.c
> +++ b/drivers/spi/spi-uclass.c
> @@ -157,6 +157,7 @@ static int spi_child_pre_probe(struct udevice *dev)
>
> slave->max_hz = plat->max_hz;
> slave->mode = plat->mode;
> + slave->mode_rx = plat->mode_rx;
>
> return 0;
> }
> @@ -369,6 +370,7 @@ int spi_slave_ofdata_to_platdata(const void *blob, int node,
> struct dm_spi_slave_platdata *plat)
> {
> int mode = 0;
> + int value;
>
> plat->cs = fdtdec_get_int(blob, node, "reg", -1);
> plat->max_hz = fdtdec_get_int(blob, node, "spi-max-frequency", 0);
> @@ -382,6 +384,35 @@ int spi_slave_ofdata_to_platdata(const void *blob, int node,
> mode |= SPI_3WIRE;
> if (fdtdec_get_bool(blob, node, "spi-half-duplex"))
> mode |= SPI_PREAMBLE;
> +
> + /* Device DUAL/QUAD mode */
> + value = fdtdec_get_uint(blob, node, "spi-tx-bus-width", 1);
> + switch (value) {
> + case 1:
> + break;
I think it missed case 2 for dual
> + case 4:
> + mode |= SPI_TX_QUAD;
> + break;
> + default:
> + error("spi-tx-bus-width %d not supported\n", value);
> + break;
> + }
> +
> + value = fdtdec_get_uint(blob, node, "spi-rx-bus-width", 1);
> + switch (value) {
> + case 1:
> + break;
> + case 2:
> + plat->mode_rx |= SPI_RX_DUAL;
> + break;
> + case 4:
> + plat->mode_rx |= SPI_RX_QUAD;
> + break;
> + default:
> + error("spi-rx-bus-width %d not supported\n", value);
> + break;
> + }
> +
> plat->mode = mode;
>
> return 0;
> diff --git a/include/spi.h b/include/spi.h
> index 803fb40..94d8a32 100644
> --- a/include/spi.h
> +++ b/include/spi.h
> @@ -38,11 +38,15 @@ struct dm_spi_bus {
> * @cs: Chip select number (0..n-1)
> * @max_hz: Maximum bus speed that this slave can tolerate
> * @mode: SPI mode to use for this device (see SPI mode flags)
> + * @mode_rx: SPI RX operation mode.
> + * @mode_tx: SPI TX operation mode.
> */
> struct dm_spi_slave_platdata {
> unsigned int cs;
> uint max_hz;
> uint mode;
> + u8 mode_rx;
> + u8 mode_tx;
mode_tx not required and you defined but not used.
> };
>
> #endif /* CONFIG_DM_SPI */
> --
> 2.7.0.rc1.5.gf3adf45
thanks!
--
Jagan.
More information about the U-Boot
mailing list