diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-3430sdp.c')
-rw-r--r-- | arch/arm/mach-omap2/board-3430sdp.c | 87 |
1 files changed, 30 insertions, 57 deletions
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index ed9274972122..496a90e4ea7a 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
@@ -39,15 +39,13 @@ | |||
39 | 39 | ||
40 | #include <mach/control.h> | 40 | #include <mach/control.h> |
41 | #include <mach/keypad.h> | 41 | #include <mach/keypad.h> |
42 | #include <mach/gpmc-smc91x.h> | ||
42 | 43 | ||
44 | #include "sdram-qimonda-hyb18m512160af-6.h" | ||
43 | #include "mmc-twl4030.h" | 45 | #include "mmc-twl4030.h" |
44 | 46 | ||
45 | #define CONFIG_DISABLE_HFCLK 1 | 47 | #define CONFIG_DISABLE_HFCLK 1 |
46 | 48 | ||
47 | #define SDP3430_ETHR_GPIO_IRQ_SDPV1 29 | ||
48 | #define SDP3430_ETHR_GPIO_IRQ_SDPV2 6 | ||
49 | #define SDP3430_SMC91X_CS 3 | ||
50 | |||
51 | #define SDP3430_TS_GPIO_IRQ_SDPV1 3 | 49 | #define SDP3430_TS_GPIO_IRQ_SDPV1 3 |
52 | #define SDP3430_TS_GPIO_IRQ_SDPV2 2 | 50 | #define SDP3430_TS_GPIO_IRQ_SDPV2 2 |
53 | 51 | ||
@@ -56,24 +54,6 @@ | |||
56 | 54 | ||
57 | #define TWL4030_MSECURE_GPIO 22 | 55 | #define TWL4030_MSECURE_GPIO 22 |
58 | 56 | ||
59 | static struct resource sdp3430_smc91x_resources[] = { | ||
60 | [0] = { | ||
61 | .flags = IORESOURCE_MEM, | ||
62 | }, | ||
63 | [1] = { | ||
64 | .start = 0, | ||
65 | .end = 0, | ||
66 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, | ||
67 | }, | ||
68 | }; | ||
69 | |||
70 | static struct platform_device sdp3430_smc91x_device = { | ||
71 | .name = "smc91x", | ||
72 | .id = -1, | ||
73 | .num_resources = ARRAY_SIZE(sdp3430_smc91x_resources), | ||
74 | .resource = sdp3430_smc91x_resources, | ||
75 | }; | ||
76 | |||
77 | static int sdp3430_keymap[] = { | 57 | static int sdp3430_keymap[] = { |
78 | KEY(0, 0, KEY_LEFT), | 58 | KEY(0, 0, KEY_LEFT), |
79 | KEY(0, 1, KEY_RIGHT), | 59 | KEY(0, 1, KEY_RIGHT), |
@@ -184,48 +164,14 @@ static struct regulator_consumer_supply sdp3430_vdvi_supply = { | |||
184 | }; | 164 | }; |
185 | 165 | ||
186 | static struct platform_device *sdp3430_devices[] __initdata = { | 166 | static struct platform_device *sdp3430_devices[] __initdata = { |
187 | &sdp3430_smc91x_device, | ||
188 | &sdp3430_lcd_device, | 167 | &sdp3430_lcd_device, |
189 | }; | 168 | }; |
190 | 169 | ||
191 | static inline void __init sdp3430_init_smc91x(void) | ||
192 | { | ||
193 | int eth_cs; | ||
194 | unsigned long cs_mem_base; | ||
195 | int eth_gpio = 0; | ||
196 | |||
197 | eth_cs = SDP3430_SMC91X_CS; | ||
198 | |||
199 | if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) { | ||
200 | printk(KERN_ERR "Failed to request GPMC mem for smc91x\n"); | ||
201 | return; | ||
202 | } | ||
203 | |||
204 | sdp3430_smc91x_resources[0].start = cs_mem_base + 0x300; | ||
205 | sdp3430_smc91x_resources[0].end = cs_mem_base + 0x30f; | ||
206 | udelay(100); | ||
207 | |||
208 | if (omap_rev() > OMAP3430_REV_ES1_0) | ||
209 | eth_gpio = SDP3430_ETHR_GPIO_IRQ_SDPV2; | ||
210 | else | ||
211 | eth_gpio = SDP3430_ETHR_GPIO_IRQ_SDPV1; | ||
212 | |||
213 | sdp3430_smc91x_resources[1].start = gpio_to_irq(eth_gpio); | ||
214 | |||
215 | if (gpio_request(eth_gpio, "SMC91x irq") < 0) { | ||
216 | printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n", | ||
217 | eth_gpio); | ||
218 | return; | ||
219 | } | ||
220 | gpio_direction_input(eth_gpio); | ||
221 | } | ||
222 | |||
223 | static void __init omap_3430sdp_init_irq(void) | 170 | static void __init omap_3430sdp_init_irq(void) |
224 | { | 171 | { |
225 | omap2_init_common_hw(NULL); | 172 | omap2_init_common_hw(hyb18m512160af6_sdrc_params); |
226 | omap_init_irq(); | 173 | omap_init_irq(); |
227 | omap_gpio_init(); | 174 | omap_gpio_init(); |
228 | sdp3430_init_smc91x(); | ||
229 | } | 175 | } |
230 | 176 | ||
231 | static struct omap_uart_config sdp3430_uart_config __initdata = { | 177 | static struct omap_uart_config sdp3430_uart_config __initdata = { |
@@ -506,6 +452,32 @@ static int __init omap3430_i2c_init(void) | |||
506 | return 0; | 452 | return 0; |
507 | } | 453 | } |
508 | 454 | ||
455 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
456 | |||
457 | static struct omap_smc91x_platform_data board_smc91x_data = { | ||
458 | .cs = 3, | ||
459 | .flags = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 | | ||
460 | IORESOURCE_IRQ_LOWLEVEL, | ||
461 | }; | ||
462 | |||
463 | static void __init board_smc91x_init(void) | ||
464 | { | ||
465 | if (omap_rev() > OMAP3430_REV_ES1_0) | ||
466 | board_smc91x_data.gpio_irq = 6; | ||
467 | else | ||
468 | board_smc91x_data.gpio_irq = 29; | ||
469 | |||
470 | gpmc_smc91x_init(&board_smc91x_data); | ||
471 | } | ||
472 | |||
473 | #else | ||
474 | |||
475 | static inline void board_smc91x_init(void) | ||
476 | { | ||
477 | } | ||
478 | |||
479 | #endif | ||
480 | |||
509 | static void __init omap_3430sdp_init(void) | 481 | static void __init omap_3430sdp_init(void) |
510 | { | 482 | { |
511 | omap3430_i2c_init(); | 483 | omap3430_i2c_init(); |
@@ -522,6 +494,7 @@ static void __init omap_3430sdp_init(void) | |||
522 | ads7846_dev_init(); | 494 | ads7846_dev_init(); |
523 | omap_serial_init(); | 495 | omap_serial_init(); |
524 | usb_musb_init(); | 496 | usb_musb_init(); |
497 | board_smc91x_init(); | ||
525 | } | 498 | } |
526 | 499 | ||
527 | static void __init omap_3430sdp_map_io(void) | 500 | static void __init omap_3430sdp_map_io(void) |