
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;
#ifdef CONFIG_KIRKWOOD static const u32 kwspi_mpp_config[2][2] = {struct kwspi_registers *spireg; u32 data;
@@ -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