[U-Boot] [PATCH re-send v6 05/17] spi: Add support for dual and quad mode
Mugunthan V N
mugunthanvnm at ti.com
Wed Dec 30 06:55:18 CET 2015
On Monday 28 December 2015 08:19 PM, Jagan Teki wrote:
> 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
I tried searching spi devices using dual mode for tx in kernel dt files,
but I found only single and quad mode, so I dropped dual mode parsing.
It can be added when there is a controller which supports max dual mode.
>
>> + 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.
Oops, missed removing this unused. Do you want me to post this patch
only as a followup patch or the entire series as v7?
Regards
Mugunthan V N
>
>> };
>>
>> #endif /* CONFIG_DM_SPI */
>> --
>> 2.7.0.rc1.5.gf3adf45
>
> thanks!
>
More information about the U-Boot
mailing list