[U-Boot] [PATCH v3 05/16] spi: Add support for dual and quad mode

Mugunthan V N mugunthanvnm at ti.com
Sun Dec 6 07:03:23 CET 2015


On Thursday 03 December 2015 09:37 PM, Jagan Teki wrote:
> On 19 November 2015 at 12:35, 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>
>> Reviewed-by: Simon Glass <sjg at chromium.org>
>> Reviewed-by: Tom Rini <trini at konsulko.com>
>> ---
>>  drivers/spi/spi-uclass.c | 33 +++++++++++++++++++++++++++++++++
>>  include/spi.h            |  4 ++++
>>  2 files changed, 37 insertions(+)
>>
>> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
>> index 58388ef..62d8da7 100644
>> --- a/drivers/spi/spi-uclass.c
>> +++ b/drivers/spi/spi-uclass.c
>> @@ -349,6 +349,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);
>> @@ -360,6 +361,38 @@ int spi_slave_ofdata_to_platdata(const void *blob, int node,
>>                 mode |= SPI_CS_HIGH;
>>         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;
>> +       case 2:
>> +               mode |= SPI_TX_DUAL;
>> +               break;
>> +       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:
>> +               mode |= SPI_RX_DUAL;
>> +               break;
>> +       case 4:
>> +               mode |= SPI_RX_QUAD;
>> +               break;
>> +       default:
>> +               error("spi-rx-bus-width %d not supported\n", value);
>> +               break;
>> +       }
>> +
> 
> I think these are similar to SPI TX/RX operation modes in spi.h and I
> understand this is similar approach as with Linux but before this we
> need to do many changes on u-boot as well.

I agree that op_mode_rx/op_mode_tx can be used. I just tried to follow
Linux way of implementation to have consistency between Linux and
U-Boot. If you feel that using op_mode_(rx/tx) will be the best
approach, I can repost the series with the changes.

Regards
Mugunthan V N


More information about the U-Boot mailing list