aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/board-devkit8000.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/arm/mach-omap2/board-devkit8000.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (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.c260
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
98static 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
105static struct omap2_hsmmc_info mmc[] = { 98static 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
114static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) 107static 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
124static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev) 114static 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
130static int devkit8000_panel_enable_dvi(struct omap_dss_device *dssdev) 120static 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
137static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev) 127static 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
143static struct regulator_consumer_supply devkit8000_vmmc1_supply = 133static 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 */
148static struct regulator_consumer_supply devkit8000_vio_supply = 138static struct regulator_consumer_supply devkit8000_vio_supply =
149 REGULATOR_SUPPLY("vcc", "spi2.0"); 139 REGULATOR_SUPPLY("vcc", "spi2.0");
150 140
141static 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
151static struct omap_dss_device devkit8000_lcd_device = { 147static 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
155static 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
160static struct omap_dss_device devkit8000_dvi_device = { 161static 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
170static struct omap_dss_device devkit8000_tv_device = { 169static 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
190static struct platform_device devkit8000_dss_device = {
191 .name = "omapdss",
192 .id = -1,
193 .dev = {
194 .platform_data = &devkit8000_dss_data,
195 },
196};
197
198static struct regulator_consumer_supply devkit8000_vdda_dac_supply = 189static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
199 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 190 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
200 191
201static int board_keymap[] = { 192static 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[];
236static int devkit8000_twl_gpio_setup(struct device *dev, 227static 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
276static struct regulator_consumer_supply devkit8000_vpll1_supply = 271static 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) */
280static struct regulator_init_data devkit8000_vmmc1 = { 277static 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
341static struct twl4030_codec_audio_data devkit8000_audio_data = { 338static struct twl4030_codec_audio_data devkit8000_audio_data;
342 .audio_mclk = 26000000,
343};
344 339
345static struct twl4030_codec_data devkit8000_codec_data = { 340static 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
365static 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
374static int __init devkit8000_i2c_init(void) 360static 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
432static 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
447static void __init devkit8000_init_irq(void) 439static 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
458static 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
473static int ads7846_get_pendown_state(void)
474{
475 return !gpio_get_value(OMAP3_DEVKIT_TS_GPIO);
476}
477
478static 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
491static struct omap2_mcspi_device_config ads7846_mcspi_config = {
492 .turbo_mode = 0,
493 .single_channel = 1, /* 0: slave, 1: master */
494};
495
496static 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
510static struct resource omap_dm9000_resources[] = { 449static 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
565static struct platform_device *devkit8000_devices[] __initdata = { 504static 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
572static void __init devkit8000_flash_init(void) 510static 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
605static struct omap_musb_board_data musb_board_data = {
606 .interface_type = MUSB_INTERFACE_ULPI,
607 .mode = MUSB_OTG,
608 .power = 100,
609};
610
611static 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
623static struct omap_board_mux board_mux[] __initdata = { 523static 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
777static void __init devkit8000_init(void) 678static 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
802MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") 703MACHINE_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,