This change implements the clocks, platform driver, and register
information necessary to use the spi100k bus with OMAP 7xx systems.

The clocks added are dummy clocks because, although we're pretty
sure there are clocks used for SPI, all current booting methods result
in proper operation without the enabling of any other clocks.

Signed-off-by: Cory Maccarrone <[email protected]>
---
 arch/arm/mach-omap1/clock.c               |    4 ++
 arch/arm/mach-omap1/devices.c             |   70 +++++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/omap7xx.h |    3 +
 arch/arm/plat-omap/include/plat/spi100k.h |   15 ++++++
 4 files changed, 92 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/plat-omap/include/plat/spi100k.h

diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c
index dc8ca91..e584c0f 100644
--- a/arch/arm/mach-omap1/clock.c
+++ b/arch/arm/mach-omap1/clock.c
@@ -135,6 +135,10 @@ static struct omap_clk omap_clks[] = {
        CLK("i2c_omap.1", "fck",        &i2c_fck,       CK_16XX | CK_1510 | 
CK_310 | CK_7XX),
        CLK("i2c_omap.1", "ick",        &i2c_ick,       CK_16XX),
        CLK("i2c_omap.1", "ick",        &dummy_ck,      CK_1510 | CK_310 | 
CK_7XX),
+       CLK("omap1_spi100k.1", "fck",   &dummy_ck,      CK_7XX),
+       CLK("omap1_spi100k.1", "ick",   &dummy_ck,      CK_7XX),
+       CLK("omap1_spi100k.2", "fck",   &dummy_ck,      CK_7XX),
+       CLK("omap1_spi100k.2", "ick",   &dummy_ck,      CK_7XX),
        CLK("omap_uwire", "fck",        &armxor_ck.clk, CK_16XX | CK_1510 | 
CK_310),
        CLK("omap-mcbsp.1", "ick",      &dspper_ck,     CK_16XX),
        CLK("omap-mcbsp.1", "ick",      &dummy_ck,      CK_1510 | CK_310),
diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c
index 23ded2d..9f1c1cc 100644
--- a/arch/arm/mach-omap1/devices.c
+++ b/arch/arm/mach-omap1/devices.c
@@ -24,6 +24,12 @@
 #include <mach/gpio.h>
 #include <plat/mmc.h>
 
+#if defined(CONFIG_SPI_OMAP_100K)
+#include <plat/omap7xx.h>
+#include <plat/spi100k.h>
+#include <linux/spi/spi.h>
+#endif
+
 /*-------------------------------------------------------------------------*/
 
 #if defined(CONFIG_RTC_DRV_OMAP) || defined(CONFIG_RTC_DRV_OMAP_MODULE)
@@ -196,6 +202,69 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data 
**mmc_data,
 
 /*-------------------------------------------------------------------------*/
 
+/* OMAP7xx SPI support */
+#if defined(CONFIG_SPI_OMAP_100K)
+
+#include <plat/omap7xx.h>
+#include <plat/spi100k.h>
+#include <linux/spi/spi.h>
+
+static struct omap_spi100k_platform_config omap_spi1_config = {
+        .num_cs         = 2,
+};
+
+static struct resource omap_spi1_resources[] = {
+       {
+               .start          = OMAP7XX_SPI1_BASE,
+               .end            = OMAP7XX_SPI1_BASE + 0x7ff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+struct platform_device omap_spi1 = {
+        .name           = "omap1_spi100k",
+        .id             = 1,
+        .num_resources  = ARRAY_SIZE(omap_spi1_resources),
+        .resource       = omap_spi1_resources,
+        .dev            = {
+                .platform_data = &omap_spi1_config,
+        },
+};
+
+static struct omap_spi100k_platform_config omap_spi2_config = {
+        .num_cs         = 2,
+};
+
+static struct resource omap_spi2_resources[] = {
+        {
+                .start          = OMAP7XX_SPI2_BASE,
+                .end            = OMAP7XX_SPI2_BASE + 0x7ff,
+                .flags          = IORESOURCE_MEM,
+        },
+};
+
+struct platform_device omap_spi2 = {
+        .name           = "omap1_spi100k",
+        .id             = 2,
+        .num_resources  = ARRAY_SIZE(omap_spi2_resources),
+        .resource       = omap_spi2_resources,
+        .dev            = {
+               .platform_data = &omap_spi2_config,
+       },
+};
+
+static void omap_init_spi100k(void)
+{
+        platform_device_register(&omap_spi1);
+        platform_device_register(&omap_spi2);
+}
+
+#else
+static inline void omap_init_spi100k(void) {}
+#endif
+
+/*-------------------------------------------------------------------------*/
+
 #if defined(CONFIG_OMAP_STI)
 
 #define OMAP1_STI_BASE         0xfffea000
@@ -263,6 +332,7 @@ static int __init omap1_init_devices(void)
 
        omap_init_mbox();
        omap_init_rtc();
+       omap_init_spi100k();
        omap_init_sti();
 
        return 0;
diff --git a/arch/arm/plat-omap/include/plat/omap7xx.h 
b/arch/arm/plat-omap/include/plat/omap7xx.h
index 53f5241..48e4757 100644
--- a/arch/arm/plat-omap/include/plat/omap7xx.h
+++ b/arch/arm/plat-omap/include/plat/omap7xx.h
@@ -46,6 +46,9 @@
 #define OMAP7XX_DSPREG_SIZE    SZ_128K
 #define OMAP7XX_DSPREG_START   0xE1000000
 
+#define OMAP7XX_SPI1_BASE      0xfffc0800
+#define OMAP7XX_SPI2_BASE      0xfffc1000
+
 /*
  * ----------------------------------------------------------------------------
  * OMAP7XX specific configuration registers
diff --git a/arch/arm/plat-omap/include/plat/spi100k.h 
b/arch/arm/plat-omap/include/plat/spi100k.h
new file mode 100644
index 0000000..a4e877f
--- /dev/null
+++ b/arch/arm/plat-omap/include/plat/spi100k.h
@@ -0,0 +1,15 @@
+#ifndef _SPI100K_H
+#define _SPI100K_H
+
+struct omap_spi100k_platform_config {
+       unsigned short  num_cs;
+};
+
+struct omap_spi100k_device_config {
+       unsigned turbo_mode:1;
+
+       /* Do we want one channel enabled at the same time? */
+       unsigned single_channel:1;
+};
+#endif /* _SPI100K_H */
+
-- 
1.6.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to