[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