diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/arm/mach-omap2/board-devkit8000.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'arch/arm/mach-omap2/board-devkit8000.c')
-rw-r--r-- | arch/arm/mach-omap2/board-devkit8000.c | 260 |
1 files changed, 80 insertions, 180 deletions
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index a07086d6a0b2..34956ec83296 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/mtd/mtd.h> | 28 | #include <linux/mtd/mtd.h> |
29 | #include <linux/mtd/partitions.h> | 29 | #include <linux/mtd/partitions.h> |
30 | #include <linux/mtd/nand.h> | 30 | #include <linux/mtd/nand.h> |
31 | #include <linux/mmc/host.h> | ||
31 | 32 | ||
32 | #include <linux/regulator/machine.h> | 33 | #include <linux/regulator/machine.h> |
33 | #include <linux/i2c/twl.h> | 34 | #include <linux/i2c/twl.h> |
@@ -44,13 +45,12 @@ | |||
44 | #include <plat/gpmc.h> | 45 | #include <plat/gpmc.h> |
45 | #include <plat/nand.h> | 46 | #include <plat/nand.h> |
46 | #include <plat/usb.h> | 47 | #include <plat/usb.h> |
47 | #include <plat/timer-gp.h> | 48 | #include <video/omapdss.h> |
48 | #include <plat/display.h> | 49 | #include <video/omap-panel-generic-dpi.h> |
49 | 50 | ||
50 | #include <plat/mcspi.h> | 51 | #include <plat/mcspi.h> |
51 | #include <linux/input/matrix_keypad.h> | 52 | #include <linux/input/matrix_keypad.h> |
52 | #include <linux/spi/spi.h> | 53 | #include <linux/spi/spi.h> |
53 | #include <linux/spi/ads7846.h> | ||
54 | #include <linux/dm9000.h> | 54 | #include <linux/dm9000.h> |
55 | #include <linux/interrupt.h> | 55 | #include <linux/interrupt.h> |
56 | 56 | ||
@@ -58,8 +58,8 @@ | |||
58 | 58 | ||
59 | #include "mux.h" | 59 | #include "mux.h" |
60 | #include "hsmmc.h" | 60 | #include "hsmmc.h" |
61 | 61 | #include "timer-gp.h" | |
62 | #define NAND_BLOCK_SIZE SZ_128K | 62 | #include "common-board-devices.h" |
63 | 63 | ||
64 | #define OMAP_DM9000_GPIO_IRQ 25 | 64 | #define OMAP_DM9000_GPIO_IRQ 25 |
65 | #define OMAP3_DEVKIT_TS_GPIO 27 | 65 | #define OMAP3_DEVKIT_TS_GPIO 27 |
@@ -95,17 +95,10 @@ static struct mtd_partition devkit8000_nand_partitions[] = { | |||
95 | }, | 95 | }, |
96 | }; | 96 | }; |
97 | 97 | ||
98 | static struct omap_nand_platform_data devkit8000_nand_data = { | ||
99 | .options = NAND_BUSWIDTH_16, | ||
100 | .parts = devkit8000_nand_partitions, | ||
101 | .nr_parts = ARRAY_SIZE(devkit8000_nand_partitions), | ||
102 | .dma_channel = -1, /* disable DMA in OMAP NAND driver */ | ||
103 | }; | ||
104 | |||
105 | static struct omap2_hsmmc_info mmc[] = { | 98 | static struct omap2_hsmmc_info mmc[] = { |
106 | { | 99 | { |
107 | .mmc = 1, | 100 | .mmc = 1, |
108 | .wires = 8, | 101 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
109 | .gpio_wp = 29, | 102 | .gpio_wp = 29, |
110 | }, | 103 | }, |
111 | {} /* Terminator */ | 104 | {} /* Terminator */ |
@@ -113,58 +106,64 @@ static struct omap2_hsmmc_info mmc[] = { | |||
113 | 106 | ||
114 | static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) | 107 | static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) |
115 | { | 108 | { |
116 | twl_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80, REG_GPIODATADIR1); | ||
117 | twl_i2c_write_u8(TWL4030_MODULE_LED, 0x0, 0x0); | ||
118 | |||
119 | if (gpio_is_valid(dssdev->reset_gpio)) | 109 | if (gpio_is_valid(dssdev->reset_gpio)) |
120 | gpio_set_value(dssdev->reset_gpio, 1); | 110 | gpio_set_value_cansleep(dssdev->reset_gpio, 1); |
121 | return 0; | 111 | return 0; |
122 | } | 112 | } |
123 | 113 | ||
124 | static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev) | 114 | static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev) |
125 | { | 115 | { |
126 | if (gpio_is_valid(dssdev->reset_gpio)) | 116 | if (gpio_is_valid(dssdev->reset_gpio)) |
127 | gpio_set_value(dssdev->reset_gpio, 0); | 117 | gpio_set_value_cansleep(dssdev->reset_gpio, 0); |
128 | } | 118 | } |
129 | 119 | ||
130 | static int devkit8000_panel_enable_dvi(struct omap_dss_device *dssdev) | 120 | static int devkit8000_panel_enable_dvi(struct omap_dss_device *dssdev) |
131 | { | 121 | { |
132 | if (gpio_is_valid(dssdev->reset_gpio)) | 122 | if (gpio_is_valid(dssdev->reset_gpio)) |
133 | gpio_set_value(dssdev->reset_gpio, 1); | 123 | gpio_set_value_cansleep(dssdev->reset_gpio, 1); |
134 | return 0; | 124 | return 0; |
135 | } | 125 | } |
136 | 126 | ||
137 | static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev) | 127 | static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev) |
138 | { | 128 | { |
139 | if (gpio_is_valid(dssdev->reset_gpio)) | 129 | if (gpio_is_valid(dssdev->reset_gpio)) |
140 | gpio_set_value(dssdev->reset_gpio, 0); | 130 | gpio_set_value_cansleep(dssdev->reset_gpio, 0); |
141 | } | 131 | } |
142 | 132 | ||
143 | static struct regulator_consumer_supply devkit8000_vmmc1_supply = | 133 | static struct regulator_consumer_supply devkit8000_vmmc1_supply = |
144 | REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); | 134 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"); |
145 | 135 | ||
146 | 136 | ||
147 | /* ads7846 on SPI */ | 137 | /* ads7846 on SPI */ |
148 | static struct regulator_consumer_supply devkit8000_vio_supply = | 138 | static struct regulator_consumer_supply devkit8000_vio_supply = |
149 | REGULATOR_SUPPLY("vcc", "spi2.0"); | 139 | REGULATOR_SUPPLY("vcc", "spi2.0"); |
150 | 140 | ||
141 | static struct panel_generic_dpi_data lcd_panel = { | ||
142 | .name = "generic", | ||
143 | .platform_enable = devkit8000_panel_enable_lcd, | ||
144 | .platform_disable = devkit8000_panel_disable_lcd, | ||
145 | }; | ||
146 | |||
151 | static struct omap_dss_device devkit8000_lcd_device = { | 147 | static struct omap_dss_device devkit8000_lcd_device = { |
152 | .name = "lcd", | 148 | .name = "lcd", |
153 | .driver_name = "generic_panel", | ||
154 | .type = OMAP_DISPLAY_TYPE_DPI, | 149 | .type = OMAP_DISPLAY_TYPE_DPI, |
150 | .driver_name = "generic_dpi_panel", | ||
151 | .data = &lcd_panel, | ||
155 | .phy.dpi.data_lines = 24, | 152 | .phy.dpi.data_lines = 24, |
156 | .reset_gpio = -EINVAL, /* will be replaced */ | ||
157 | .platform_enable = devkit8000_panel_enable_lcd, | ||
158 | .platform_disable = devkit8000_panel_disable_lcd, | ||
159 | }; | 153 | }; |
154 | |||
155 | static struct panel_generic_dpi_data dvi_panel = { | ||
156 | .name = "generic", | ||
157 | .platform_enable = devkit8000_panel_enable_dvi, | ||
158 | .platform_disable = devkit8000_panel_disable_dvi, | ||
159 | }; | ||
160 | |||
160 | static struct omap_dss_device devkit8000_dvi_device = { | 161 | static struct omap_dss_device devkit8000_dvi_device = { |
161 | .name = "dvi", | 162 | .name = "dvi", |
162 | .driver_name = "generic_panel", | ||
163 | .type = OMAP_DISPLAY_TYPE_DPI, | 163 | .type = OMAP_DISPLAY_TYPE_DPI, |
164 | .driver_name = "generic_dpi_panel", | ||
165 | .data = &dvi_panel, | ||
164 | .phy.dpi.data_lines = 24, | 166 | .phy.dpi.data_lines = 24, |
165 | .reset_gpio = -EINVAL, /* will be replaced */ | ||
166 | .platform_enable = devkit8000_panel_enable_dvi, | ||
167 | .platform_disable = devkit8000_panel_disable_dvi, | ||
168 | }; | 167 | }; |
169 | 168 | ||
170 | static struct omap_dss_device devkit8000_tv_device = { | 169 | static struct omap_dss_device devkit8000_tv_device = { |
@@ -187,18 +186,10 @@ static struct omap_dss_board_info devkit8000_dss_data = { | |||
187 | .default_device = &devkit8000_lcd_device, | 186 | .default_device = &devkit8000_lcd_device, |
188 | }; | 187 | }; |
189 | 188 | ||
190 | static struct platform_device devkit8000_dss_device = { | ||
191 | .name = "omapdss", | ||
192 | .id = -1, | ||
193 | .dev = { | ||
194 | .platform_data = &devkit8000_dss_data, | ||
195 | }, | ||
196 | }; | ||
197 | |||
198 | static struct regulator_consumer_supply devkit8000_vdda_dac_supply = | 189 | static struct regulator_consumer_supply devkit8000_vdda_dac_supply = |
199 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 190 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
200 | 191 | ||
201 | static int board_keymap[] = { | 192 | static uint32_t board_keymap[] = { |
202 | KEY(0, 0, KEY_1), | 193 | KEY(0, 0, KEY_1), |
203 | KEY(1, 0, KEY_2), | 194 | KEY(1, 0, KEY_2), |
204 | KEY(2, 0, KEY_3), | 195 | KEY(2, 0, KEY_3), |
@@ -236,28 +227,33 @@ static struct gpio_led gpio_leds[]; | |||
236 | static int devkit8000_twl_gpio_setup(struct device *dev, | 227 | static int devkit8000_twl_gpio_setup(struct device *dev, |
237 | unsigned gpio, unsigned ngpio) | 228 | unsigned gpio, unsigned ngpio) |
238 | { | 229 | { |
230 | int ret; | ||
231 | |||
239 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); | 232 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); |
240 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 233 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
241 | mmc[0].gpio_cd = gpio + 0; | 234 | mmc[0].gpio_cd = gpio + 0; |
242 | omap2_hsmmc_init(mmc); | 235 | omap2_hsmmc_init(mmc); |
243 | 236 | ||
244 | /* link regulators to MMC adapters */ | ||
245 | devkit8000_vmmc1_supply.dev = mmc[0].dev; | ||
246 | |||
247 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | 237 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ |
248 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 238 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; |
249 | 239 | ||
250 | /* gpio + 1 is "LCD_PWREN" (out, active high) */ | 240 | /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */ |
251 | devkit8000_lcd_device.reset_gpio = gpio + 1; | 241 | devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0; |
252 | gpio_request(devkit8000_lcd_device.reset_gpio, "LCD_PWREN"); | 242 | ret = gpio_request_one(devkit8000_lcd_device.reset_gpio, |
253 | /* Disable until needed */ | 243 | GPIOF_OUT_INIT_LOW, "LCD_PWREN"); |
254 | gpio_direction_output(devkit8000_lcd_device.reset_gpio, 0); | 244 | if (ret < 0) { |
245 | devkit8000_lcd_device.reset_gpio = -EINVAL; | ||
246 | printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n"); | ||
247 | } | ||
255 | 248 | ||
256 | /* gpio + 7 is "DVI_PD" (out, active low) */ | 249 | /* gpio + 7 is "DVI_PD" (out, active low) */ |
257 | devkit8000_dvi_device.reset_gpio = gpio + 7; | 250 | devkit8000_dvi_device.reset_gpio = gpio + 7; |
258 | gpio_request(devkit8000_dvi_device.reset_gpio, "DVI PowerDown"); | 251 | ret = gpio_request_one(devkit8000_dvi_device.reset_gpio, |
259 | /* Disable until needed */ | 252 | GPIOF_OUT_INIT_LOW, "DVI PowerDown"); |
260 | gpio_direction_output(devkit8000_dvi_device.reset_gpio, 0); | 253 | if (ret < 0) { |
254 | devkit8000_dvi_device.reset_gpio = -EINVAL; | ||
255 | printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n"); | ||
256 | } | ||
261 | 257 | ||
262 | return 0; | 258 | return 0; |
263 | } | 259 | } |
@@ -267,14 +263,15 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = { | |||
267 | .irq_base = TWL4030_GPIO_IRQ_BASE, | 263 | .irq_base = TWL4030_GPIO_IRQ_BASE, |
268 | .irq_end = TWL4030_GPIO_IRQ_END, | 264 | .irq_end = TWL4030_GPIO_IRQ_END, |
269 | .use_leds = true, | 265 | .use_leds = true, |
270 | .pullups = BIT(1), | 266 | .pulldowns = BIT(1) | BIT(2) | BIT(6) | BIT(8) | BIT(13) |
271 | .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13) | ||
272 | | BIT(15) | BIT(16) | BIT(17), | 267 | | BIT(15) | BIT(16) | BIT(17), |
273 | .setup = devkit8000_twl_gpio_setup, | 268 | .setup = devkit8000_twl_gpio_setup, |
274 | }; | 269 | }; |
275 | 270 | ||
276 | static struct regulator_consumer_supply devkit8000_vpll1_supply = | 271 | static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = { |
277 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 272 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
273 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
274 | }; | ||
278 | 275 | ||
279 | /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ | 276 | /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ |
280 | static struct regulator_init_data devkit8000_vmmc1 = { | 277 | static struct regulator_init_data devkit8000_vmmc1 = { |
@@ -315,8 +312,8 @@ static struct regulator_init_data devkit8000_vpll1 = { | |||
315 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 312 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
316 | | REGULATOR_CHANGE_STATUS, | 313 | | REGULATOR_CHANGE_STATUS, |
317 | }, | 314 | }, |
318 | .num_consumer_supplies = 1, | 315 | .num_consumer_supplies = ARRAY_SIZE(devkit8000_vpll1_supplies), |
319 | .consumer_supplies = &devkit8000_vpll1_supply, | 316 | .consumer_supplies = devkit8000_vpll1_supplies, |
320 | }; | 317 | }; |
321 | 318 | ||
322 | /* VAUX4 for ads7846 and nubs */ | 319 | /* VAUX4 for ads7846 and nubs */ |
@@ -338,9 +335,7 @@ static struct twl4030_usb_data devkit8000_usb_data = { | |||
338 | .usb_mode = T2_USB_MODE_ULPI, | 335 | .usb_mode = T2_USB_MODE_ULPI, |
339 | }; | 336 | }; |
340 | 337 | ||
341 | static struct twl4030_codec_audio_data devkit8000_audio_data = { | 338 | static struct twl4030_codec_audio_data devkit8000_audio_data; |
342 | .audio_mclk = 26000000, | ||
343 | }; | ||
344 | 339 | ||
345 | static struct twl4030_codec_data devkit8000_codec_data = { | 340 | static struct twl4030_codec_data devkit8000_codec_data = { |
346 | .audio_mclk = 26000000, | 341 | .audio_mclk = 26000000, |
@@ -362,19 +357,9 @@ static struct twl4030_platform_data devkit8000_twldata = { | |||
362 | .keypad = &devkit8000_kp_data, | 357 | .keypad = &devkit8000_kp_data, |
363 | }; | 358 | }; |
364 | 359 | ||
365 | static struct i2c_board_info __initdata devkit8000_i2c_boardinfo[] = { | ||
366 | { | ||
367 | I2C_BOARD_INFO("tps65930", 0x48), | ||
368 | .flags = I2C_CLIENT_WAKE, | ||
369 | .irq = INT_34XX_SYS_NIRQ, | ||
370 | .platform_data = &devkit8000_twldata, | ||
371 | }, | ||
372 | }; | ||
373 | |||
374 | static int __init devkit8000_i2c_init(void) | 360 | static int __init devkit8000_i2c_init(void) |
375 | { | 361 | { |
376 | omap_register_i2c_bus(1, 2600, devkit8000_i2c_boardinfo, | 362 | omap3_pmic_init("tps65930", &devkit8000_twldata); |
377 | ARRAY_SIZE(devkit8000_i2c_boardinfo)); | ||
378 | /* Bus 3 is attached to the DVI port where devices like the pico DLP | 363 | /* Bus 3 is attached to the DVI port where devices like the pico DLP |
379 | * projector don't work reliably with 400kHz */ | 364 | * projector don't work reliably with 400kHz */ |
380 | omap_register_i2c_bus(3, 400, NULL, 0); | 365 | omap_register_i2c_bus(3, 400, NULL, 0); |
@@ -444,67 +429,21 @@ static struct platform_device keys_gpio = { | |||
444 | }; | 429 | }; |
445 | 430 | ||
446 | 431 | ||
432 | static void __init devkit8000_init_early(void) | ||
433 | { | ||
434 | omap2_init_common_infrastructure(); | ||
435 | omap2_init_common_devices(mt46h32m32lf6_sdrc_params, | ||
436 | mt46h32m32lf6_sdrc_params); | ||
437 | } | ||
438 | |||
447 | static void __init devkit8000_init_irq(void) | 439 | static void __init devkit8000_init_irq(void) |
448 | { | 440 | { |
449 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, | ||
450 | mt46h32m32lf6_sdrc_params); | ||
451 | omap_init_irq(); | 441 | omap_init_irq(); |
452 | #ifdef CONFIG_OMAP_32K_TIMER | 442 | #ifdef CONFIG_OMAP_32K_TIMER |
453 | omap2_gp_clockevent_set_gptimer(12); | 443 | omap2_gp_clockevent_set_gptimer(12); |
454 | #endif | 444 | #endif |
455 | omap_gpio_init(); | ||
456 | } | 445 | } |
457 | 446 | ||
458 | static void __init devkit8000_ads7846_init(void) | ||
459 | { | ||
460 | int gpio = OMAP3_DEVKIT_TS_GPIO; | ||
461 | int ret; | ||
462 | |||
463 | ret = gpio_request(gpio, "ads7846_pen_down"); | ||
464 | if (ret < 0) { | ||
465 | printk(KERN_ERR "Failed to request GPIO %d for " | ||
466 | "ads7846 pen down IRQ\n", gpio); | ||
467 | return; | ||
468 | } | ||
469 | |||
470 | gpio_direction_input(gpio); | ||
471 | } | ||
472 | |||
473 | static int ads7846_get_pendown_state(void) | ||
474 | { | ||
475 | return !gpio_get_value(OMAP3_DEVKIT_TS_GPIO); | ||
476 | } | ||
477 | |||
478 | static struct ads7846_platform_data ads7846_config = { | ||
479 | .x_max = 0x0fff, | ||
480 | .y_max = 0x0fff, | ||
481 | .x_plate_ohms = 180, | ||
482 | .pressure_max = 255, | ||
483 | .debounce_max = 10, | ||
484 | .debounce_tol = 5, | ||
485 | .debounce_rep = 1, | ||
486 | .get_pendown_state = ads7846_get_pendown_state, | ||
487 | .keep_vref_on = 1, | ||
488 | .settle_delay_usecs = 150, | ||
489 | }; | ||
490 | |||
491 | static struct omap2_mcspi_device_config ads7846_mcspi_config = { | ||
492 | .turbo_mode = 0, | ||
493 | .single_channel = 1, /* 0: slave, 1: master */ | ||
494 | }; | ||
495 | |||
496 | static struct spi_board_info devkit8000_spi_board_info[] __initdata = { | ||
497 | { | ||
498 | .modalias = "ads7846", | ||
499 | .bus_num = 2, | ||
500 | .chip_select = 0, | ||
501 | .max_speed_hz = 1500000, | ||
502 | .controller_data = &ads7846_mcspi_config, | ||
503 | .irq = OMAP_GPIO_IRQ(OMAP3_DEVKIT_TS_GPIO), | ||
504 | .platform_data = &ads7846_config, | ||
505 | } | ||
506 | }; | ||
507 | |||
508 | #define OMAP_DM9000_BASE 0x2c000000 | 447 | #define OMAP_DM9000_BASE 0x2c000000 |
509 | 448 | ||
510 | static struct resource omap_dm9000_resources[] = { | 449 | static struct resource omap_dm9000_resources[] = { |
@@ -542,14 +481,14 @@ static void __init omap_dm9000_init(void) | |||
542 | { | 481 | { |
543 | unsigned char *eth_addr = omap_dm9000_platdata.dev_addr; | 482 | unsigned char *eth_addr = omap_dm9000_platdata.dev_addr; |
544 | struct omap_die_id odi; | 483 | struct omap_die_id odi; |
484 | int ret; | ||
545 | 485 | ||
546 | if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) { | 486 | ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq"); |
487 | if (ret < 0) { | ||
547 | printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n", | 488 | printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n", |
548 | OMAP_DM9000_GPIO_IRQ); | 489 | OMAP_DM9000_GPIO_IRQ); |
549 | return; | 490 | return; |
550 | } | 491 | } |
551 | |||
552 | gpio_direction_input(OMAP_DM9000_GPIO_IRQ); | ||
553 | 492 | ||
554 | /* init the mac address using DIE id */ | 493 | /* init the mac address using DIE id */ |
555 | omap_get_die_id(&odi); | 494 | omap_get_die_id(&odi); |
@@ -563,56 +502,16 @@ static void __init omap_dm9000_init(void) | |||
563 | } | 502 | } |
564 | 503 | ||
565 | static struct platform_device *devkit8000_devices[] __initdata = { | 504 | static struct platform_device *devkit8000_devices[] __initdata = { |
566 | &devkit8000_dss_device, | ||
567 | &leds_gpio, | 505 | &leds_gpio, |
568 | &keys_gpio, | 506 | &keys_gpio, |
569 | &omap_dm9000_dev, | 507 | &omap_dm9000_dev, |
570 | }; | 508 | }; |
571 | 509 | ||
572 | static void __init devkit8000_flash_init(void) | 510 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
573 | { | ||
574 | u8 cs = 0; | ||
575 | u8 nandcs = GPMC_CS_NUM + 1; | ||
576 | |||
577 | /* find out the chip-select on which NAND exists */ | ||
578 | while (cs < GPMC_CS_NUM) { | ||
579 | u32 ret = 0; | ||
580 | ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); | ||
581 | |||
582 | if ((ret & 0xC00) == 0x800) { | ||
583 | printk(KERN_INFO "Found NAND on CS%d\n", cs); | ||
584 | if (nandcs > GPMC_CS_NUM) | ||
585 | nandcs = cs; | ||
586 | } | ||
587 | cs++; | ||
588 | } | ||
589 | |||
590 | if (nandcs > GPMC_CS_NUM) { | ||
591 | printk(KERN_INFO "NAND: Unable to find configuration " | ||
592 | "in GPMC\n "); | ||
593 | return; | ||
594 | } | ||
595 | 511 | ||
596 | if (nandcs < GPMC_CS_NUM) { | 512 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
597 | devkit8000_nand_data.cs = nandcs; | 513 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, |
598 | 514 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | |
599 | printk(KERN_INFO "Registering NAND on CS%d\n", nandcs); | ||
600 | if (gpmc_nand_init(&devkit8000_nand_data) < 0) | ||
601 | printk(KERN_ERR "Unable to register NAND device\n"); | ||
602 | } | ||
603 | } | ||
604 | |||
605 | static struct omap_musb_board_data musb_board_data = { | ||
606 | .interface_type = MUSB_INTERFACE_ULPI, | ||
607 | .mode = MUSB_OTG, | ||
608 | .power = 100, | ||
609 | }; | ||
610 | |||
611 | static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { | ||
612 | |||
613 | .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, | ||
614 | .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN, | ||
615 | .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, | ||
616 | 515 | ||
617 | .phy_reset = true, | 516 | .phy_reset = true, |
618 | .reset_gpio_port[0] = -EINVAL, | 517 | .reset_gpio_port[0] = -EINVAL, |
@@ -620,6 +519,7 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { | |||
620 | .reset_gpio_port[2] = -EINVAL | 519 | .reset_gpio_port[2] = -EINVAL |
621 | }; | 520 | }; |
622 | 521 | ||
522 | #ifdef CONFIG_OMAP_MUX | ||
623 | static struct omap_board_mux board_mux[] __initdata = { | 523 | static struct omap_board_mux board_mux[] __initdata = { |
624 | /* nCS and IRQ for Devkit8000 ethernet */ | 524 | /* nCS and IRQ for Devkit8000 ethernet */ |
625 | OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE0), | 525 | OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE0), |
@@ -773,6 +673,7 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
773 | 673 | ||
774 | { .reg_offset = OMAP_MUX_TERMINATOR }, | 674 | { .reg_offset = OMAP_MUX_TERMINATOR }, |
775 | }; | 675 | }; |
676 | #endif | ||
776 | 677 | ||
777 | static void __init devkit8000_init(void) | 678 | static void __init devkit8000_init(void) |
778 | { | 679 | { |
@@ -785,14 +686,14 @@ static void __init devkit8000_init(void) | |||
785 | platform_add_devices(devkit8000_devices, | 686 | platform_add_devices(devkit8000_devices, |
786 | ARRAY_SIZE(devkit8000_devices)); | 687 | ARRAY_SIZE(devkit8000_devices)); |
787 | 688 | ||
788 | spi_register_board_info(devkit8000_spi_board_info, | 689 | omap_display_init(&devkit8000_dss_data); |
789 | ARRAY_SIZE(devkit8000_spi_board_info)); | ||
790 | 690 | ||
791 | devkit8000_ads7846_init(); | 691 | omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL); |
792 | 692 | ||
793 | usb_musb_init(&musb_board_data); | 693 | usb_musb_init(NULL); |
794 | usb_ehci_init(&ehci_pdata); | 694 | usbhs_init(&usbhs_bdata); |
795 | devkit8000_flash_init(); | 695 | omap_nand_flash_init(NAND_BUSWIDTH_16, devkit8000_nand_partitions, |
696 | ARRAY_SIZE(devkit8000_nand_partitions)); | ||
796 | 697 | ||
797 | /* Ensure SDRC pins are mux'd for self-refresh */ | 698 | /* Ensure SDRC pins are mux'd for self-refresh */ |
798 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); | 699 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); |
@@ -800,11 +701,10 @@ static void __init devkit8000_init(void) | |||
800 | } | 701 | } |
801 | 702 | ||
802 | MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") | 703 | MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") |
803 | .phys_io = 0x48000000, | ||
804 | .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, | ||
805 | .boot_params = 0x80000100, | 704 | .boot_params = 0x80000100, |
806 | .map_io = omap3_map_io, | ||
807 | .reserve = omap_reserve, | 705 | .reserve = omap_reserve, |
706 | .map_io = omap3_map_io, | ||
707 | .init_early = devkit8000_init_early, | ||
808 | .init_irq = devkit8000_init_irq, | 708 | .init_irq = devkit8000_init_irq, |
809 | .init_machine = devkit8000_init, | 709 | .init_machine = devkit8000_init, |
810 | .timer = &omap_timer, | 710 | .timer = &omap_timer, |