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) |
