[U-Boot] [PATCH v0 5/5] spi: Add support for Armada 38x second controller

Stefan Roese
2015-10-28T16:39:20Z

Hi Dirk,

On 28.10.2015 17:29, Jagan Teki wrote:
> On 28 October 2015 at 21:14, <dirk.eibach@gdsys.cc> wrote:
>> From: Dirk Eibach <dirk.eibach@gdsys.cc>
>>
>> Armada 38x has two spi controllers.
>>
>> Signed-off-by: Dirk Eibach <dirk.eibach@gdsys.cc>
>> ---
>>
>> drivers/spi/kirkwood_spi.c | 52 +++++++++++++++++++++++++++++++++++++++-------
>> 1 file changed, 45 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c
>> index e7b0982..200c391 100644
>> --- a/drivers/spi/kirkwood_spi.c
>> +++ b/drivers/spi/kirkwood_spi.c
>> @@ -18,17 +18,25 @@
>> #endif
>> #include <asm/arch-mvebu/spi.h>
>>
>> -static struct kwspi_registers *spireg =
>> - (struct kwspi_registers *)MVEBU_SPI_BASE;
>> -
>> #ifdef CONFIG_KIRKWOOD
>> static u32 cs_spi_mpp_back[2];
>> #endif
>>
>> +struct kwspi_slave {
>> + struct spi_slave slave;
>> + struct kwspi_registers *spireg;
>> +};
>> +
>> +static inline struct kwspi_slave *to_kwspi(struct spi_slave *slave)
>> +{
>> + return container_of(slave, struct kwspi_slave, slave);
>> +}
>> +
>> struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
>> unsigned int max_hz, unsigned int mode)
>> {
>> - struct spi_slave *slave;
>> + struct kwspi_slave *kwspi_slave;
>> + struct kwspi_registers *spireg;
>> u32 data;
>> #ifdef CONFIG_KIRKWOOD
>> static const u32 kwspi_mpp_config[2][2] = {
>> @@ -40,10 +48,27 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
>> if (!spi_cs_is_valid(bus, cs))
>> return NULL;
>>
>> - slave = spi_alloc_slave_base(bus, cs);
>> - if (!slave)
>> + kwspi_slave = spi_alloc_slave(struct kwspi_slave, bus, cs);
>> + if (!kwspi_slave)
>> return NULL;
>>
>> + switch (bus) {
>> + case 0:
>> + kwspi_slave->spireg = (struct kwspi_registers *)MVEBU_SPI_BASE;
>> + break;
>> +#ifdef CONFIG_ARMADA_38X
>> + /* Armada 38x has two SPI controllers */
>
> Can you please add this through driver-model, I understand it's bit
> big task but I can help you at any moment.

Yes, please do. I know this is additional work. But we really need to
get there at some time. And please note that you can use the
runtime SoC detection for this:

if (mvebu_soc_family() == MVEBU_SOC_A38X)

So no new #idefs are needed in such places.

Thanks,
Stefan