]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/arm/mach-omap1/devices.c
omap: mailbox: use correct config for omap1
[mv-sheeva.git] / arch / arm / mach-omap1 / devices.c
1 /*
2  * linux/arch/arm/mach-omap1/devices.c
3  *
4  * OMAP1 platform device setup/initialization
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  */
11
12 #include <linux/module.h>
13 #include <linux/kernel.h>
14 #include <linux/init.h>
15 #include <linux/platform_device.h>
16 #include <linux/io.h>
17 #include <linux/spi/spi.h>
18
19 #include <mach/hardware.h>
20 #include <asm/mach/map.h>
21
22 #include <plat/tc.h>
23 #include <plat/board.h>
24 #include <plat/mux.h>
25 #include <mach/gpio.h>
26 #include <plat/mmc.h>
27 #include <plat/omap7xx.h>
28
29 /*-------------------------------------------------------------------------*/
30
31 #if defined(CONFIG_RTC_DRV_OMAP) || defined(CONFIG_RTC_DRV_OMAP_MODULE)
32
33 #define OMAP_RTC_BASE           0xfffb4800
34
35 static struct resource rtc_resources[] = {
36         {
37                 .start          = OMAP_RTC_BASE,
38                 .end            = OMAP_RTC_BASE + 0x5f,
39                 .flags          = IORESOURCE_MEM,
40         },
41         {
42                 .start          = INT_RTC_TIMER,
43                 .flags          = IORESOURCE_IRQ,
44         },
45         {
46                 .start          = INT_RTC_ALARM,
47                 .flags          = IORESOURCE_IRQ,
48         },
49 };
50
51 static struct platform_device omap_rtc_device = {
52         .name           = "omap_rtc",
53         .id             = -1,
54         .num_resources  = ARRAY_SIZE(rtc_resources),
55         .resource       = rtc_resources,
56 };
57
58 static void omap_init_rtc(void)
59 {
60         (void) platform_device_register(&omap_rtc_device);
61 }
62 #else
63 static inline void omap_init_rtc(void) {}
64 #endif
65
66 #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
67
68 #if defined(CONFIG_ARCH_OMAP15XX)
69 #  define OMAP1_MBOX_SIZE       0x23
70 #  define INT_DSP_MAILBOX1      INT_1510_DSP_MAILBOX1
71 #elif defined(CONFIG_ARCH_OMAP16XX)
72 #  define OMAP1_MBOX_SIZE       0x2f
73 #  define INT_DSP_MAILBOX1      INT_1610_DSP_MAILBOX1
74 #endif
75
76 static struct resource mbox_resources[] = {
77         {
78                 .start          = OMAP16XX_MAILBOX_BASE,
79                 .end            = OMAP16XX_MAILBOX_BASE + OMAP1_MBOX_SIZE,
80                 .flags          = IORESOURCE_MEM,
81         },
82         {
83                 .start          = INT_DSP_MAILBOX1,
84                 .flags          = IORESOURCE_IRQ,
85         },
86 };
87
88 static struct platform_device mbox_device = {
89         .name           = "omap1-mailbox",
90         .id             = -1,
91         .num_resources  = ARRAY_SIZE(mbox_resources),
92         .resource       = mbox_resources,
93 };
94
95 static inline void omap_init_mbox(void)
96 {
97         platform_device_register(&mbox_device);
98 }
99 #else
100 static inline void omap_init_mbox(void) { }
101 #endif
102
103 /*-------------------------------------------------------------------------*/
104
105 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
106
107 static inline void omap1_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
108                         int controller_nr)
109 {
110         if (controller_nr == 0) {
111                 if (cpu_is_omap7xx()) {
112                         omap_cfg_reg(MMC_7XX_CMD);
113                         omap_cfg_reg(MMC_7XX_CLK);
114                         omap_cfg_reg(MMC_7XX_DAT0);
115                 } else {
116                         omap_cfg_reg(MMC_CMD);
117                         omap_cfg_reg(MMC_CLK);
118                         omap_cfg_reg(MMC_DAT0);
119                 }
120
121                 if (cpu_is_omap1710()) {
122                         omap_cfg_reg(M15_1710_MMC_CLKI);
123                         omap_cfg_reg(P19_1710_MMC_CMDDIR);
124                         omap_cfg_reg(P20_1710_MMC_DATDIR0);
125                 }
126                 if (mmc_controller->slots[0].wires == 4 && !cpu_is_omap7xx()) {
127                         omap_cfg_reg(MMC_DAT1);
128                         /* NOTE: DAT2 can be on W10 (here) or M15 */
129                         if (!mmc_controller->slots[0].nomux)
130                                 omap_cfg_reg(MMC_DAT2);
131                         omap_cfg_reg(MMC_DAT3);
132                 }
133         }
134
135         /* Block 2 is on newer chips, and has many pinout options */
136         if (cpu_is_omap16xx() && controller_nr == 1) {
137                 if (!mmc_controller->slots[1].nomux) {
138                         omap_cfg_reg(Y8_1610_MMC2_CMD);
139                         omap_cfg_reg(Y10_1610_MMC2_CLK);
140                         omap_cfg_reg(R18_1610_MMC2_CLKIN);
141                         omap_cfg_reg(W8_1610_MMC2_DAT0);
142                         if (mmc_controller->slots[1].wires == 4) {
143                                 omap_cfg_reg(V8_1610_MMC2_DAT1);
144                                 omap_cfg_reg(W15_1610_MMC2_DAT2);
145                                 omap_cfg_reg(R10_1610_MMC2_DAT3);
146                         }
147
148                         /* These are needed for the level shifter */
149                         omap_cfg_reg(V9_1610_MMC2_CMDDIR);
150                         omap_cfg_reg(V5_1610_MMC2_DATDIR0);
151                         omap_cfg_reg(W19_1610_MMC2_DATDIR1);
152                 }
153
154                 /* Feedback clock must be set on OMAP-1710 MMC2 */
155                 if (cpu_is_omap1710())
156                         omap_writel(omap_readl(MOD_CONF_CTRL_1) | (1 << 24),
157                                         MOD_CONF_CTRL_1);
158         }
159 }
160
161 void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
162                         int nr_controllers)
163 {
164         int i;
165
166         for (i = 0; i < nr_controllers; i++) {
167                 unsigned long base, size;
168                 unsigned int irq = 0;
169
170                 if (!mmc_data[i])
171                         continue;
172
173                 omap1_mmc_mux(mmc_data[i], i);
174
175                 switch (i) {
176                 case 0:
177                         base = OMAP1_MMC1_BASE;
178                         irq = INT_MMC;
179                         break;
180                 case 1:
181                         if (!cpu_is_omap16xx())
182                                 return;
183                         base = OMAP1_MMC2_BASE;
184                         irq = INT_1610_MMC2;
185                         break;
186                 default:
187                         continue;
188                 }
189                 size = OMAP1_MMC_SIZE;
190
191                 omap_mmc_add("mmci-omap", i, base, size, irq, mmc_data[i]);
192         };
193 }
194
195 #endif
196
197 /*-------------------------------------------------------------------------*/
198
199 /* OMAP7xx SPI support */
200 #if defined(CONFIG_SPI_OMAP_100K) || defined(CONFIG_SPI_OMAP_100K_MODULE)
201
202 struct platform_device omap_spi1 = {
203         .name           = "omap1_spi100k",
204         .id             = 1,
205 };
206
207 struct platform_device omap_spi2 = {
208         .name           = "omap1_spi100k",
209         .id             = 2,
210 };
211
212 static void omap_init_spi100k(void)
213 {
214         omap_spi1.dev.platform_data = ioremap(OMAP7XX_SPI1_BASE, 0x7ff);
215         if (omap_spi1.dev.platform_data)
216                 platform_device_register(&omap_spi1);
217
218         omap_spi2.dev.platform_data = ioremap(OMAP7XX_SPI2_BASE, 0x7ff);
219         if (omap_spi2.dev.platform_data)
220                 platform_device_register(&omap_spi2);
221 }
222
223 #else
224 static inline void omap_init_spi100k(void)
225 {
226 }
227 #endif
228
229 /*-------------------------------------------------------------------------*/
230
231 #if defined(CONFIG_OMAP_STI)
232
233 #define OMAP1_STI_BASE          0xfffea000
234 #define OMAP1_STI_CHANNEL_BASE  (OMAP1_STI_BASE + 0x400)
235
236 static struct resource sti_resources[] = {
237         {
238                 .start          = OMAP1_STI_BASE,
239                 .end            = OMAP1_STI_BASE + SZ_1K - 1,
240                 .flags          = IORESOURCE_MEM,
241         },
242         {
243                 .start          = OMAP1_STI_CHANNEL_BASE,
244                 .end            = OMAP1_STI_CHANNEL_BASE + SZ_1K - 1,
245                 .flags          = IORESOURCE_MEM,
246         },
247         {
248                 .start          = INT_1610_STI,
249                 .flags          = IORESOURCE_IRQ,
250         }
251 };
252
253 static struct platform_device sti_device = {
254         .name           = "sti",
255         .id             = -1,
256         .num_resources  = ARRAY_SIZE(sti_resources),
257         .resource       = sti_resources,
258 };
259
260 static inline void omap_init_sti(void)
261 {
262         platform_device_register(&sti_device);
263 }
264 #else
265 static inline void omap_init_sti(void) {}
266 #endif
267
268 /*-------------------------------------------------------------------------*/
269
270 /*
271  * This gets called after board-specific INIT_MACHINE, and initializes most
272  * on-chip peripherals accessible on this board (except for few like USB):
273  *
274  *  (a) Does any "standard config" pin muxing needed.  Board-specific
275  *      code will have muxed GPIO pins and done "nonstandard" setup;
276  *      that code could live in the boot loader.
277  *  (b) Populating board-specific platform_data with the data drivers
278  *      rely on to handle wiring variations.
279  *  (c) Creating platform devices as meaningful on this board and
280  *      with this kernel configuration.
281  *
282  * Claiming GPIOs, and setting their direction and initial values, is the
283  * responsibility of the device drivers.  So is responding to probe().
284  *
285  * Board-specific knowlege like creating devices or pin setup is to be
286  * kept out of drivers as much as possible.  In particular, pin setup
287  * may be handled by the boot loader, and drivers should expect it will
288  * normally have been done by the time they're probed.
289  */
290 static int __init omap1_init_devices(void)
291 {
292         /* please keep these calls, and their implementations above,
293          * in alphabetical order so they're easier to sort through.
294          */
295
296         omap_init_mbox();
297         omap_init_rtc();
298         omap_init_spi100k();
299         omap_init_sti();
300
301         return 0;
302 }
303 arch_initcall(omap1_init_devices);
304