diff options
Diffstat (limited to 'arch/arm/plat-omap/devices.c')
-rw-r--r-- | arch/arm/plat-omap/devices.c | 143 |
1 files changed, 108 insertions, 35 deletions
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index 9dcce904b608..079b67deac0f 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/arch/board.h> | 24 | #include <asm/arch/board.h> |
25 | #include <asm/arch/mux.h> | 25 | #include <asm/arch/mux.h> |
26 | #include <asm/arch/gpio.h> | 26 | #include <asm/arch/gpio.h> |
27 | #include <asm/arch/menelaus.h> | ||
27 | 28 | ||
28 | 29 | ||
29 | void omap_nop_release(struct device *dev) | 30 | void omap_nop_release(struct device *dev) |
@@ -98,6 +99,62 @@ static inline void omap_init_i2c(void) {} | |||
98 | #endif | 99 | #endif |
99 | 100 | ||
100 | /*-------------------------------------------------------------------------*/ | 101 | /*-------------------------------------------------------------------------*/ |
102 | #if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE) | ||
103 | |||
104 | static void omap_init_kp(void) | ||
105 | { | ||
106 | if (machine_is_omap_h2() || machine_is_omap_h3()) { | ||
107 | omap_cfg_reg(F18_1610_KBC0); | ||
108 | omap_cfg_reg(D20_1610_KBC1); | ||
109 | omap_cfg_reg(D19_1610_KBC2); | ||
110 | omap_cfg_reg(E18_1610_KBC3); | ||
111 | omap_cfg_reg(C21_1610_KBC4); | ||
112 | |||
113 | omap_cfg_reg(G18_1610_KBR0); | ||
114 | omap_cfg_reg(F19_1610_KBR1); | ||
115 | omap_cfg_reg(H14_1610_KBR2); | ||
116 | omap_cfg_reg(E20_1610_KBR3); | ||
117 | omap_cfg_reg(E19_1610_KBR4); | ||
118 | omap_cfg_reg(N19_1610_KBR5); | ||
119 | } else if (machine_is_omap_perseus2()) { | ||
120 | omap_cfg_reg(E2_730_KBR0); | ||
121 | omap_cfg_reg(J7_730_KBR1); | ||
122 | omap_cfg_reg(E1_730_KBR2); | ||
123 | omap_cfg_reg(F3_730_KBR3); | ||
124 | omap_cfg_reg(D2_730_KBR4); | ||
125 | |||
126 | omap_cfg_reg(C2_730_KBC0); | ||
127 | omap_cfg_reg(D3_730_KBC1); | ||
128 | omap_cfg_reg(E4_730_KBC2); | ||
129 | omap_cfg_reg(F4_730_KBC3); | ||
130 | omap_cfg_reg(E3_730_KBC4); | ||
131 | } else if (machine_is_omap_h4()) { | ||
132 | omap_cfg_reg(T19_24XX_KBR0); | ||
133 | omap_cfg_reg(R19_24XX_KBR1); | ||
134 | omap_cfg_reg(V18_24XX_KBR2); | ||
135 | omap_cfg_reg(M21_24XX_KBR3); | ||
136 | omap_cfg_reg(E5__24XX_KBR4); | ||
137 | if (omap_has_menelaus()) { | ||
138 | omap_cfg_reg(B3__24XX_KBR5); | ||
139 | omap_cfg_reg(AA4_24XX_KBC2); | ||
140 | omap_cfg_reg(B13_24XX_KBC6); | ||
141 | } else { | ||
142 | omap_cfg_reg(M18_24XX_KBR5); | ||
143 | omap_cfg_reg(H19_24XX_KBC2); | ||
144 | omap_cfg_reg(N19_24XX_KBC6); | ||
145 | } | ||
146 | omap_cfg_reg(R20_24XX_KBC0); | ||
147 | omap_cfg_reg(M14_24XX_KBC1); | ||
148 | omap_cfg_reg(V17_24XX_KBC3); | ||
149 | omap_cfg_reg(P21_24XX_KBC4); | ||
150 | omap_cfg_reg(L14_24XX_KBC5); | ||
151 | } | ||
152 | } | ||
153 | #else | ||
154 | static inline void omap_init_kp(void) {} | ||
155 | #endif | ||
156 | |||
157 | /*-------------------------------------------------------------------------*/ | ||
101 | 158 | ||
102 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) | 159 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) |
103 | 160 | ||
@@ -240,6 +297,55 @@ static void __init omap_init_mmc(void) | |||
240 | static inline void omap_init_mmc(void) {} | 297 | static inline void omap_init_mmc(void) {} |
241 | #endif | 298 | #endif |
242 | 299 | ||
300 | /*-------------------------------------------------------------------------*/ | ||
301 | |||
302 | /* Numbering for the SPI-capable controllers when used for SPI: | ||
303 | * spi = 1 | ||
304 | * uwire = 2 | ||
305 | * mmc1..2 = 3..4 | ||
306 | * mcbsp1..3 = 5..7 | ||
307 | */ | ||
308 | |||
309 | #if defined(CONFIG_SPI_OMAP_UWIRE) || defined(CONFIG_SPI_OMAP_UWIRE_MODULE) | ||
310 | |||
311 | #define OMAP_UWIRE_BASE 0xfffb3000 | ||
312 | |||
313 | static struct resource uwire_resources[] = { | ||
314 | { | ||
315 | .start = OMAP_UWIRE_BASE, | ||
316 | .end = OMAP_UWIRE_BASE + 0x20, | ||
317 | .flags = IORESOURCE_MEM, | ||
318 | }, | ||
319 | }; | ||
320 | |||
321 | static struct platform_device omap_uwire_device = { | ||
322 | .name = "omap_uwire", | ||
323 | .id = -1, | ||
324 | .dev = { | ||
325 | .release = omap_nop_release, | ||
326 | }, | ||
327 | .num_resources = ARRAY_SIZE(uwire_resources), | ||
328 | .resource = uwire_resources, | ||
329 | }; | ||
330 | |||
331 | static void omap_init_uwire(void) | ||
332 | { | ||
333 | /* FIXME define and use a boot tag; not all boards will be hooking | ||
334 | * up devices to the microwire controller, and multi-board configs | ||
335 | * mean that CONFIG_SPI_OMAP_UWIRE may be configured anyway... | ||
336 | */ | ||
337 | |||
338 | /* board-specific code must configure chipselects (only a few | ||
339 | * are normally used) and SCLK/SDI/SDO (each has two choices). | ||
340 | */ | ||
341 | (void) platform_device_register(&omap_uwire_device); | ||
342 | } | ||
343 | #else | ||
344 | static inline void omap_init_uwire(void) {} | ||
345 | #endif | ||
346 | |||
347 | /*-------------------------------------------------------------------------*/ | ||
348 | |||
243 | #if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE) | 349 | #if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE) |
244 | 350 | ||
245 | #ifdef CONFIG_ARCH_OMAP24XX | 351 | #ifdef CONFIG_ARCH_OMAP24XX |
@@ -310,40 +416,6 @@ static void omap_init_rng(void) | |||
310 | static inline void omap_init_rng(void) {} | 416 | static inline void omap_init_rng(void) {} |
311 | #endif | 417 | #endif |
312 | 418 | ||
313 | #if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE) | ||
314 | |||
315 | static struct omap_lcd_config omap_fb_conf; | ||
316 | |||
317 | static u64 omap_fb_dma_mask = ~(u32)0; | ||
318 | |||
319 | static struct platform_device omap_fb_device = { | ||
320 | .name = "omapfb", | ||
321 | .id = -1, | ||
322 | .dev = { | ||
323 | .release = omap_nop_release, | ||
324 | .dma_mask = &omap_fb_dma_mask, | ||
325 | .coherent_dma_mask = ~(u32)0, | ||
326 | .platform_data = &omap_fb_conf, | ||
327 | }, | ||
328 | .num_resources = 0, | ||
329 | }; | ||
330 | |||
331 | static inline void omap_init_fb(void) | ||
332 | { | ||
333 | const struct omap_lcd_config *conf; | ||
334 | |||
335 | conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); | ||
336 | if (conf != NULL) | ||
337 | omap_fb_conf = *conf; | ||
338 | platform_device_register(&omap_fb_device); | ||
339 | } | ||
340 | |||
341 | #else | ||
342 | |||
343 | static inline void omap_init_fb(void) {} | ||
344 | |||
345 | #endif | ||
346 | |||
347 | /* | 419 | /* |
348 | * This gets called after board-specific INIT_MACHINE, and initializes most | 420 | * This gets called after board-specific INIT_MACHINE, and initializes most |
349 | * on-chip peripherals accessible on this board (except for few like USB): | 421 | * on-chip peripherals accessible on this board (except for few like USB): |
@@ -369,9 +441,10 @@ static int __init omap_init_devices(void) | |||
369 | /* please keep these calls, and their implementations above, | 441 | /* please keep these calls, and their implementations above, |
370 | * in alphabetical order so they're easier to sort through. | 442 | * in alphabetical order so they're easier to sort through. |
371 | */ | 443 | */ |
372 | omap_init_fb(); | ||
373 | omap_init_i2c(); | 444 | omap_init_i2c(); |
445 | omap_init_kp(); | ||
374 | omap_init_mmc(); | 446 | omap_init_mmc(); |
447 | omap_init_uwire(); | ||
375 | omap_init_wdt(); | 448 | omap_init_wdt(); |
376 | omap_init_rng(); | 449 | omap_init_rng(); |
377 | 450 | ||