blob: 3fc85c6fc559fa675a679cb70b3fe296e289c312 [file] [log] [blame]
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -07001/*
2 * linux/arch/arm/mach-omap2/board-omap3evm.c
3 *
4 * Copyright (C) 2008 Texas Instruments
5 *
6 * Modified from mach-omap2/board-3430sdp.c
7 *
8 * Initial code: Syed Mohammed Khasim
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/platform_device.h>
18#include <linux/delay.h>
19#include <linux/err.h>
20#include <linux/clk.h>
21#include <linux/gpio.h>
22#include <linux/input.h>
Janusz Krzysztofik61354342009-10-22 14:43:17 -070023#include <linux/input/matrix_keypad.h>
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070024#include <linux/leds.h>
Sriram562138a2009-11-22 10:11:30 -080025#include <linux/interrupt.h>
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070026
27#include <linux/spi/spi.h>
28#include <linux/spi/ads7846.h>
Balaji T Kebeb53e2009-12-15 20:09:02 +053029#include <linux/i2c/twl.h>
Gupta, Ajay Kumare8e2ff42009-07-29 11:58:57 +053030#include <linux/usb/otg.h>
Sriram562138a2009-11-22 10:11:30 -080031#include <linux/smsc911x.h>
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070032
Eyal Reizer741927f2011-01-27 09:49:49 +000033#include <linux/wl12xx.h>
34#include <linux/regulator/fixed.h>
Mike Rapoport1a7ec132009-11-22 10:11:29 -080035#include <linux/regulator/machine.h>
Sukumar Ghorai3a638332010-09-15 14:49:23 +000036#include <linux/mmc/host.h>
Mike Rapoport1a7ec132009-11-22 10:11:29 -080037
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070038#include <mach/hardware.h>
39#include <asm/mach-types.h>
40#include <asm/mach/arch.h>
41#include <asm/mach/map.h>
42
Tony Lindgrence491cf2009-10-20 09:40:47 -070043#include <plat/board.h>
Tony Lindgrence491cf2009-10-20 09:40:47 -070044#include <plat/usb.h>
45#include <plat/common.h>
46#include <plat/mcspi.h>
Vaibhav Hiremath703e3062010-01-04 15:34:16 +010047#include <plat/display.h>
Bryan Wu89747c92010-11-17 13:34:34 +000048#include <plat/panel-generic-dpi.h>
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070049
Tony Lindgrenca5742b2009-12-11 16:16:32 -080050#include "mux.h"
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070051#include "sdram-micron-mt46h32m32lf-6.h"
Adrian Hunterd02a9002010-02-15 10:03:34 -080052#include "hsmmc.h"
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070053
54#define OMAP3_EVM_TS_GPIO 175
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -080055#define OMAP3_EVM_EHCI_VBUS 22
56#define OMAP3_EVM_EHCI_SELECT 61
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070057
58#define OMAP3EVM_ETHR_START 0x2c000000
59#define OMAP3EVM_ETHR_SIZE 1024
Ajay Kumar Guptadb408022009-11-22 10:11:27 -080060#define OMAP3EVM_ETHR_ID_REV 0x50
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070061#define OMAP3EVM_ETHR_GPIO_IRQ 176
Sriram562138a2009-11-22 10:11:30 -080062#define OMAP3EVM_SMSC911X_CS 5
Vaibhav Hiremath9bc64b82011-01-24 19:25:55 +000063/*
64 * Eth Reset signal
65 * 64 = Generation 1 (<=RevD)
66 * 7 = Generation 2 (>=RevE)
67 */
68#define OMAP3EVM_GEN1_ETHR_GPIO_RST 64
69#define OMAP3EVM_GEN2_ETHR_GPIO_RST 7
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -070070
Ajay Kumar Guptadb408022009-11-22 10:11:27 -080071static u8 omap3_evm_version;
72
73u8 get_omap3_evm_rev(void)
74{
75 return omap3_evm_version;
76}
77EXPORT_SYMBOL(get_omap3_evm_rev);
78
79static void __init omap3_evm_get_revision(void)
80{
81 void __iomem *ioaddr;
82 unsigned int smsc_id;
83
84 /* Ethernet PHY ID is stored at ID_REV register */
85 ioaddr = ioremap_nocache(OMAP3EVM_ETHR_START, SZ_1K);
86 if (!ioaddr)
87 return;
88 smsc_id = readl(ioaddr + OMAP3EVM_ETHR_ID_REV) & 0xFFFF0000;
89 iounmap(ioaddr);
90
91 switch (smsc_id) {
92 /*SMSC9115 chipset*/
93 case 0x01150000:
94 omap3_evm_version = OMAP3EVM_BOARD_GEN_1;
95 break;
96 /*SMSC 9220 chipset*/
97 case 0x92200000:
98 default:
99 omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
100 }
101}
102
Sriram562138a2009-11-22 10:11:30 -0800103#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
Mike Rapoport21b42732011-04-16 22:29:30 +0000104#include <plat/gpmc-smsc911x.h>
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700105
Mike Rapoport21b42732011-04-16 22:29:30 +0000106static struct omap_smsc911x_platform_data smsc911x_cfg = {
107 .cs = OMAP3EVM_SMSC911X_CS,
108 .gpio_irq = OMAP3EVM_ETHR_GPIO_IRQ,
109 .gpio_reset = -EINVAL,
110 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
Sriram562138a2009-11-22 10:11:30 -0800111};
112
113static inline void __init omap3evm_init_smsc911x(void)
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700114{
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700115 struct clk *l3ck;
116 unsigned int rate;
117
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700118 l3ck = clk_get(NULL, "l3_ck");
119 if (IS_ERR(l3ck))
120 rate = 100000000;
121 else
122 rate = clk_get_rate(l3ck);
123
Vaibhav Hiremath9bc64b82011-01-24 19:25:55 +0000124 /* Configure ethernet controller reset gpio */
125 if (cpu_is_omap3430()) {
Mike Rapoport21b42732011-04-16 22:29:30 +0000126 if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
127 smsc911x_cfg.gpio_reset = OMAP3EVM_GEN1_ETHR_GPIO_RST;
128 else
129 smsc911x_cfg.gpio_reset = OMAP3EVM_GEN2_ETHR_GPIO_RST;
Vaibhav Hiremath9bc64b82011-01-24 19:25:55 +0000130 }
131
Mike Rapoport21b42732011-04-16 22:29:30 +0000132 gpmc_smsc911x_init(&smsc911x_cfg);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700133}
134
Sriram562138a2009-11-22 10:11:30 -0800135#else
136static inline void __init omap3evm_init_smsc911x(void) { return; }
137#endif
138
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100139/*
140 * OMAP3EVM LCD Panel control signals
141 */
142#define OMAP3EVM_LCD_PANEL_LR 2
143#define OMAP3EVM_LCD_PANEL_UD 3
144#define OMAP3EVM_LCD_PANEL_INI 152
145#define OMAP3EVM_LCD_PANEL_ENVDD 153
146#define OMAP3EVM_LCD_PANEL_QVGA 154
147#define OMAP3EVM_LCD_PANEL_RESB 155
148#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
149#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
150
151static int lcd_enabled;
152static int dvi_enabled;
153
154static void __init omap3_evm_display_init(void)
155{
156 int r;
157
158 r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
159 if (r) {
160 printk(KERN_ERR "failed to get lcd_panel_resb\n");
161 return;
162 }
163 gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
164
165 r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
166 if (r) {
167 printk(KERN_ERR "failed to get lcd_panel_ini\n");
168 goto err_1;
169 }
170 gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
171
172 r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
173 if (r) {
174 printk(KERN_ERR "failed to get lcd_panel_qvga\n");
175 goto err_2;
176 }
177 gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
178
179 r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
180 if (r) {
181 printk(KERN_ERR "failed to get lcd_panel_lr\n");
182 goto err_3;
183 }
184 gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
185
186 r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
187 if (r) {
188 printk(KERN_ERR "failed to get lcd_panel_ud\n");
189 goto err_4;
190 }
191 gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
192
193 r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
194 if (r) {
195 printk(KERN_ERR "failed to get lcd_panel_envdd\n");
196 goto err_5;
197 }
198 gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
199
200 return;
201
202err_5:
203 gpio_free(OMAP3EVM_LCD_PANEL_UD);
204err_4:
205 gpio_free(OMAP3EVM_LCD_PANEL_LR);
206err_3:
207 gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
208err_2:
209 gpio_free(OMAP3EVM_LCD_PANEL_INI);
210err_1:
211 gpio_free(OMAP3EVM_LCD_PANEL_RESB);
212
213}
214
215static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
216{
217 if (dvi_enabled) {
218 printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
219 return -EINVAL;
220 }
221 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
222
223 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000224 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100225 else
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000226 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100227
228 lcd_enabled = 1;
229 return 0;
230}
231
232static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev)
233{
234 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
235
236 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000237 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100238 else
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000239 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100240
241 lcd_enabled = 0;
242}
243
244static struct omap_dss_device omap3_evm_lcd_device = {
245 .name = "lcd",
246 .driver_name = "sharp_ls_panel",
247 .type = OMAP_DISPLAY_TYPE_DPI,
248 .phy.dpi.data_lines = 18,
249 .platform_enable = omap3_evm_enable_lcd,
250 .platform_disable = omap3_evm_disable_lcd,
251};
252
253static int omap3_evm_enable_tv(struct omap_dss_device *dssdev)
254{
255 return 0;
256}
257
258static void omap3_evm_disable_tv(struct omap_dss_device *dssdev)
259{
260}
261
262static struct omap_dss_device omap3_evm_tv_device = {
263 .name = "tv",
264 .driver_name = "venc",
265 .type = OMAP_DISPLAY_TYPE_VENC,
266 .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
267 .platform_enable = omap3_evm_enable_tv,
268 .platform_disable = omap3_evm_disable_tv,
269};
270
271static int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
272{
273 if (lcd_enabled) {
274 printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
275 return -EINVAL;
276 }
277
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000278 gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100279
280 dvi_enabled = 1;
281 return 0;
282}
283
284static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
285{
Vaibhav Hiremathf186e9b2011-01-25 17:37:37 +0000286 gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100287
288 dvi_enabled = 0;
289}
290
Bryan Wu89747c92010-11-17 13:34:34 +0000291static struct panel_generic_dpi_data dvi_panel = {
292 .name = "generic",
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100293 .platform_enable = omap3_evm_enable_dvi,
294 .platform_disable = omap3_evm_disable_dvi,
295};
296
Bryan Wu89747c92010-11-17 13:34:34 +0000297static struct omap_dss_device omap3_evm_dvi_device = {
298 .name = "dvi",
299 .type = OMAP_DISPLAY_TYPE_DPI,
300 .driver_name = "generic_dpi_panel",
301 .data = &dvi_panel,
302 .phy.dpi.data_lines = 24,
303};
304
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100305static struct omap_dss_device *omap3_evm_dss_devices[] = {
306 &omap3_evm_lcd_device,
307 &omap3_evm_tv_device,
308 &omap3_evm_dvi_device,
309};
310
311static struct omap_dss_board_info omap3_evm_dss_data = {
312 .num_devices = ARRAY_SIZE(omap3_evm_dss_devices),
313 .devices = omap3_evm_dss_devices,
314 .default_device = &omap3_evm_lcd_device,
315};
316
Mike Rapoport1a7ec132009-11-22 10:11:29 -0800317static struct regulator_consumer_supply omap3evm_vmmc1_supply = {
318 .supply = "vmmc",
319};
320
321static struct regulator_consumer_supply omap3evm_vsim_supply = {
322 .supply = "vmmc_aux",
323};
324
325/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
326static struct regulator_init_data omap3evm_vmmc1 = {
327 .constraints = {
328 .min_uV = 1850000,
329 .max_uV = 3150000,
330 .valid_modes_mask = REGULATOR_MODE_NORMAL
331 | REGULATOR_MODE_STANDBY,
332 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
333 | REGULATOR_CHANGE_MODE
334 | REGULATOR_CHANGE_STATUS,
335 },
336 .num_consumer_supplies = 1,
337 .consumer_supplies = &omap3evm_vmmc1_supply,
338};
339
340/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
341static struct regulator_init_data omap3evm_vsim = {
342 .constraints = {
343 .min_uV = 1800000,
344 .max_uV = 3000000,
345 .valid_modes_mask = REGULATOR_MODE_NORMAL
346 | REGULATOR_MODE_STANDBY,
347 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
348 | REGULATOR_CHANGE_MODE
349 | REGULATOR_CHANGE_STATUS,
350 },
351 .num_consumer_supplies = 1,
352 .consumer_supplies = &omap3evm_vsim_supply,
353};
354
Adrian Hunter68ff0422010-02-15 10:03:34 -0800355static struct omap2_hsmmc_info mmc[] = {
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700356 {
357 .mmc = 1,
Sukumar Ghorai3a638332010-09-15 14:49:23 +0000358 .caps = MMC_CAP_4_BIT_DATA,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700359 .gpio_cd = -EINVAL,
360 .gpio_wp = 63,
361 },
Eyal Reizer741927f2011-01-27 09:49:49 +0000362#ifdef CONFIG_WL12XX_PLATFORM_DATA
363 {
364 .name = "wl1271",
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000365 .mmc = 2,
Eyal Reizer741927f2011-01-27 09:49:49 +0000366 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
367 .gpio_wp = -EINVAL,
368 .gpio_cd = -EINVAL,
369 .nonremovable = true,
370 },
371#endif
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700372 {} /* Terminator */
373};
374
375static struct gpio_led gpio_leds[] = {
376 {
377 .name = "omap3evm::ledb",
378 /* normally not visible (board underside) */
379 .default_trigger = "default-on",
380 .gpio = -EINVAL, /* gets replaced */
381 .active_low = true,
382 },
383};
384
385static struct gpio_led_platform_data gpio_led_info = {
386 .leds = gpio_leds,
387 .num_leds = ARRAY_SIZE(gpio_leds),
388};
389
390static struct platform_device leds_gpio = {
391 .name = "leds-gpio",
392 .id = -1,
393 .dev = {
394 .platform_data = &gpio_led_info,
395 },
396};
397
398
399static int omap3evm_twl_gpio_setup(struct device *dev,
400 unsigned gpio, unsigned ngpio)
401{
Vaibhav Hiremath42fc8ca2011-01-25 17:37:40 +0000402 int r;
403
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700404 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
Tony Lindgren4896e392009-12-11 16:16:32 -0800405 omap_mux_init_gpio(63, OMAP_PIN_INPUT);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700406 mmc[0].gpio_cd = gpio + 0;
Adrian Hunter68ff0422010-02-15 10:03:34 -0800407 omap2_hsmmc_init(mmc);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700408
Mike Rapoport1a7ec132009-11-22 10:11:29 -0800409 /* link regulators to MMC adapters */
410 omap3evm_vmmc1_supply.dev = mmc[0].dev;
411 omap3evm_vsim_supply.dev = mmc[0].dev;
412
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700413 /*
414 * Most GPIOs are for USB OTG. Some are mostly sent to
415 * the P2 connector; notably LEDA for the LCD backlight.
416 */
417
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100418 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
Vaibhav Hiremath42fc8ca2011-01-25 17:37:40 +0000419 r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
420 if (!r)
421 r = gpio_direction_output(gpio + TWL4030_GPIO_MAX,
422 (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
423 if (r)
424 printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100425
426 /* gpio + 7 == DVI Enable */
427 gpio_request(gpio + 7, "EN_DVI");
428 gpio_direction_output(gpio + 7, 0);
429
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700430 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
431 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
432
433 platform_device_register(&leds_gpio);
434
435 return 0;
436}
437
438static struct twl4030_gpio_platform_data omap3evm_gpio_data = {
439 .gpio_base = OMAP_MAX_GPIO_LINES,
440 .irq_base = TWL4030_GPIO_IRQ_BASE,
441 .irq_end = TWL4030_GPIO_IRQ_END,
442 .use_leds = true,
443 .setup = omap3evm_twl_gpio_setup,
444};
445
446static struct twl4030_usb_data omap3evm_usb_data = {
447 .usb_mode = T2_USB_MODE_ULPI,
448};
449
Manjunath Kondaiah Gbead4372010-10-08 10:01:13 -0700450static uint32_t board_keymap[] = {
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700451 KEY(0, 0, KEY_LEFT),
Sanjeev Premi0621d752010-02-17 14:09:24 -0800452 KEY(0, 1, KEY_DOWN),
453 KEY(0, 2, KEY_ENTER),
454 KEY(0, 3, KEY_M),
455
456 KEY(1, 0, KEY_RIGHT),
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700457 KEY(1, 1, KEY_UP),
Sanjeev Premi0621d752010-02-17 14:09:24 -0800458 KEY(1, 2, KEY_I),
459 KEY(1, 3, KEY_N),
460
461 KEY(2, 0, KEY_A),
462 KEY(2, 1, KEY_E),
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700463 KEY(2, 2, KEY_J),
Sanjeev Premi0621d752010-02-17 14:09:24 -0800464 KEY(2, 3, KEY_O),
465
466 KEY(3, 0, KEY_B),
467 KEY(3, 1, KEY_F),
468 KEY(3, 2, KEY_K),
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700469 KEY(3, 3, KEY_P)
470};
471
Tony Lindgren4f543332009-09-24 16:23:16 -0700472static struct matrix_keymap_data board_map_data = {
473 .keymap = board_keymap,
474 .keymap_size = ARRAY_SIZE(board_keymap),
475};
476
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700477static struct twl4030_keypad_data omap3evm_kp_data = {
Tony Lindgren4f543332009-09-24 16:23:16 -0700478 .keymap_data = &board_map_data,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700479 .rows = 4,
480 .cols = 4,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700481 .rep = 1,
482};
483
484static struct twl4030_madc_platform_data omap3evm_madc_data = {
485 .irq_line = 1,
486};
487
Ilkka Koskinen6a58baf2011-03-02 13:24:05 +0000488static struct twl4030_codec_audio_data omap3evm_audio_data;
Peter Ujfalusie86fa0b2009-10-22 13:26:46 +0300489
490static struct twl4030_codec_data omap3evm_codec_data = {
Peter Ujfalusi6df74ef2009-11-04 09:58:18 +0200491 .audio_mclk = 26000000,
Peter Ujfalusie86fa0b2009-10-22 13:26:46 +0300492 .audio = &omap3evm_audio_data,
493};
494
Senthilvadivu Guruswamy1dde9732011-01-24 06:21:53 +0000495static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
Senthilvadivu Guruswamy30ea50c2011-01-24 06:22:01 +0000496 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100497
498/* VDAC for DSS driving S-Video */
499static struct regulator_init_data omap3_evm_vdac = {
500 .constraints = {
501 .min_uV = 1800000,
502 .max_uV = 1800000,
503 .apply_uV = true,
504 .valid_modes_mask = REGULATOR_MODE_NORMAL
505 | REGULATOR_MODE_STANDBY,
506 .valid_ops_mask = REGULATOR_CHANGE_MODE
507 | REGULATOR_CHANGE_STATUS,
508 },
509 .num_consumer_supplies = 1,
510 .consumer_supplies = &omap3_evm_vdda_dac_supply,
511};
512
513/* VPLL2 for digital video outputs */
Senthilvadivu Guruswamyc8aac012011-01-24 06:22:02 +0000514static struct regulator_consumer_supply omap3_evm_vpll2_supplies[] = {
515 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
516 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
517};
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100518
519static struct regulator_init_data omap3_evm_vpll2 = {
520 .constraints = {
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100521 .min_uV = 1800000,
522 .max_uV = 1800000,
523 .apply_uV = true,
524 .valid_modes_mask = REGULATOR_MODE_NORMAL
525 | REGULATOR_MODE_STANDBY,
526 .valid_ops_mask = REGULATOR_CHANGE_MODE
527 | REGULATOR_CHANGE_STATUS,
528 },
Senthilvadivu Guruswamyc8aac012011-01-24 06:22:02 +0000529 .num_consumer_supplies = ARRAY_SIZE(omap3_evm_vpll2_supplies),
530 .consumer_supplies = omap3_evm_vpll2_supplies,
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100531};
532
Vaibhav Hiremath410491d2011-01-25 17:37:38 +0000533/* ads7846 on SPI */
534static struct regulator_consumer_supply omap3evm_vio_supply =
535 REGULATOR_SUPPLY("vcc", "spi1.0");
536
537/* VIO for ads7846 */
538static struct regulator_init_data omap3evm_vio = {
539 .constraints = {
540 .min_uV = 1800000,
541 .max_uV = 1800000,
542 .apply_uV = true,
543 .valid_modes_mask = REGULATOR_MODE_NORMAL
544 | REGULATOR_MODE_STANDBY,
545 .valid_ops_mask = REGULATOR_CHANGE_MODE
546 | REGULATOR_CHANGE_STATUS,
547 },
548 .num_consumer_supplies = 1,
549 .consumer_supplies = &omap3evm_vio_supply,
550};
551
Eyal Reizer741927f2011-01-27 09:49:49 +0000552#ifdef CONFIG_WL12XX_PLATFORM_DATA
553
554#define OMAP3EVM_WLAN_PMENA_GPIO (150)
555#define OMAP3EVM_WLAN_IRQ_GPIO (149)
556
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000557static struct regulator_consumer_supply omap3evm_vmmc2_supply =
Kishore Kadiyala0005ae72011-02-28 20:48:05 +0530558 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
Eyal Reizer741927f2011-01-27 09:49:49 +0000559
560/* VMMC2 for driving the WL12xx module */
561static struct regulator_init_data omap3evm_vmmc2 = {
562 .constraints = {
563 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
564 },
565 .num_consumer_supplies = 1,
566 .consumer_supplies = &omap3evm_vmmc2_supply,
567};
568
569static struct fixed_voltage_config omap3evm_vwlan = {
570 .supply_name = "vwl1271",
571 .microvolts = 1800000, /* 1.80V */
572 .gpio = OMAP3EVM_WLAN_PMENA_GPIO,
573 .startup_delay = 70000, /* 70ms */
574 .enable_high = 1,
575 .enabled_at_boot = 0,
576 .init_data = &omap3evm_vmmc2,
577};
578
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000579static struct platform_device omap3evm_wlan_regulator = {
Eyal Reizer741927f2011-01-27 09:49:49 +0000580 .name = "reg-fixed-voltage",
581 .id = 1,
582 .dev = {
583 .platform_data = &omap3evm_vwlan,
584 },
585};
586
587struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
588 .irq = OMAP_GPIO_IRQ(OMAP3EVM_WLAN_IRQ_GPIO),
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000589 .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
Eyal Reizer741927f2011-01-27 09:49:49 +0000590};
591#endif
592
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700593static struct twl4030_platform_data omap3evm_twldata = {
594 .irq_base = TWL4030_IRQ_BASE,
595 .irq_end = TWL4030_IRQ_END,
596
597 /* platform_data for children goes here */
598 .keypad = &omap3evm_kp_data,
599 .madc = &omap3evm_madc_data,
600 .usb = &omap3evm_usb_data,
601 .gpio = &omap3evm_gpio_data,
Peter Ujfalusie86fa0b2009-10-22 13:26:46 +0300602 .codec = &omap3evm_codec_data,
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100603 .vdac = &omap3_evm_vdac,
604 .vpll2 = &omap3_evm_vpll2,
Vaibhav Hiremath410491d2011-01-25 17:37:38 +0000605 .vio = &omap3evm_vio,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700606};
607
608static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = {
609 {
610 I2C_BOARD_INFO("twl4030", 0x48),
611 .flags = I2C_CLIENT_WAKE,
612 .irq = INT_34XX_SYS_NIRQ,
613 .platform_data = &omap3evm_twldata,
614 },
615};
616
617static int __init omap3_evm_i2c_init(void)
618{
Mike Rapoport1a7ec132009-11-22 10:11:29 -0800619 /*
620 * REVISIT: These entries can be set in omap3evm_twl_data
621 * after a merge with MFD tree
622 */
623 omap3evm_twldata.vmmc1 = &omap3evm_vmmc1;
624 omap3evm_twldata.vsim = &omap3evm_vsim;
625
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700626 omap_register_i2c_bus(1, 2600, omap3evm_i2c_boardinfo,
627 ARRAY_SIZE(omap3evm_i2c_boardinfo));
628 omap_register_i2c_bus(2, 400, NULL, 0);
629 omap_register_i2c_bus(3, 400, NULL, 0);
630 return 0;
631}
632
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700633static void ads7846_dev_init(void)
634{
635 if (gpio_request(OMAP3_EVM_TS_GPIO, "ADS7846 pendown") < 0)
636 printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
637
638 gpio_direction_input(OMAP3_EVM_TS_GPIO);
Felipe Balbi48feb332010-05-26 14:42:24 -0700639 gpio_set_debounce(OMAP3_EVM_TS_GPIO, 310);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700640}
641
642static int ads7846_get_pendown_state(void)
643{
644 return !gpio_get_value(OMAP3_EVM_TS_GPIO);
645}
646
Manjunath Kondaiah G38815732010-10-08 09:56:37 -0700647static struct ads7846_platform_data ads7846_config = {
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700648 .x_max = 0x0fff,
649 .y_max = 0x0fff,
650 .x_plate_ohms = 180,
651 .pressure_max = 255,
652 .debounce_max = 10,
653 .debounce_tol = 3,
654 .debounce_rep = 1,
655 .get_pendown_state = ads7846_get_pendown_state,
656 .keep_vref_on = 1,
657 .settle_delay_usecs = 150,
Ranjith Lohithakshan7a44ad22010-05-08 12:39:21 +0530658 .wakeup = true,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700659};
660
661static struct omap2_mcspi_device_config ads7846_mcspi_config = {
662 .turbo_mode = 0,
663 .single_channel = 1, /* 0: slave, 1: master */
664};
665
Manjunath Kondaiah G38815732010-10-08 09:56:37 -0700666static struct spi_board_info omap3evm_spi_board_info[] = {
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700667 [0] = {
668 .modalias = "ads7846",
669 .bus_num = 1,
670 .chip_select = 0,
671 .max_speed_hz = 1500000,
672 .controller_data = &ads7846_mcspi_config,
673 .irq = OMAP_GPIO_IRQ(OMAP3_EVM_TS_GPIO),
674 .platform_data = &ads7846_config,
675 },
676};
677
Paul Walmsleyb3c6df32009-09-03 20:14:02 +0300678static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
Paul Walmsleyb3c6df32009-09-03 20:14:02 +0300679};
680
Russell King - ARM Linux3dc3bad2011-02-14 15:40:20 -0800681static void __init omap3_evm_init_early(void)
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700682{
Paul Walmsley48057342010-12-21 15:25:10 -0700683 omap2_init_common_infrastructure();
684 omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700685}
686
Keshava Munegowda181b2502011-03-01 20:08:16 +0530687static struct usbhs_omap_board_data usbhs_bdata __initdata = {
Felipe Balbi58a54912009-11-22 10:11:01 -0800688
Keshava Munegowda181b2502011-03-01 20:08:16 +0530689 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
690 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
691 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
Felipe Balbi58a54912009-11-22 10:11:01 -0800692
693 .phy_reset = true,
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800694 /* PHY reset GPIO will be runtime programmed based on EVM version */
Felipe Balbi58a54912009-11-22 10:11:01 -0800695 .reset_gpio_port[0] = -EINVAL,
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800696 .reset_gpio_port[1] = -EINVAL,
Felipe Balbi58a54912009-11-22 10:11:01 -0800697 .reset_gpio_port[2] = -EINVAL
698};
699
Tony Lindgrenca5742b2009-12-11 16:16:32 -0800700#ifdef CONFIG_OMAP_MUX
Vaibhav Hiremath904c5452011-01-25 17:37:39 +0000701static struct omap_board_mux omap35x_board_mux[] __initdata = {
Sanjeev Premiaa6912d82010-02-17 14:09:23 -0800702 OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
Ranjith Lohithakshanf3a8cde2010-05-03 17:07:51 +0530703 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
Sanjeev Premiaa6912d82010-02-17 14:09:23 -0800704 OMAP_PIN_OFF_WAKEUPENABLE),
Sanjeev Premi87520aa2010-02-17 14:09:24 -0800705 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
Vaibhav Hiremath854c1222011-01-25 17:37:41 +0000706 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
707 OMAP_PIN_OFF_WAKEUPENABLE),
Vaibhav Hiremath9bc64b82011-01-24 19:25:55 +0000708 OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
709 OMAP_PIN_OFF_NONE),
710 OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
711 OMAP_PIN_OFF_NONE),
Eyal Reizer741927f2011-01-27 09:49:49 +0000712#ifdef CONFIG_WL12XX_PLATFORM_DATA
713 /* WLAN IRQ - GPIO 149 */
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000714 OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
Eyal Reizer741927f2011-01-27 09:49:49 +0000715
716 /* WLAN POWER ENABLE - GPIO 150 */
717 OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
718
719 /* MMC2 SDIO pin muxes for WL12xx */
720 OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
721 OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
722 OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
723 OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
724 OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
725 OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
726#endif
Tony Lindgrenca5742b2009-12-11 16:16:32 -0800727 { .reg_offset = OMAP_MUX_TERMINATOR },
728};
Vaibhav Hiremath904c5452011-01-25 17:37:39 +0000729
730static struct omap_board_mux omap36x_board_mux[] __initdata = {
731 OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
732 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
733 OMAP_PIN_OFF_WAKEUPENABLE),
734 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
Vaibhav Hiremath854c1222011-01-25 17:37:41 +0000735 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
736 OMAP_PIN_OFF_WAKEUPENABLE),
Vaibhav Hiremath904c5452011-01-25 17:37:39 +0000737 /* AM/DM37x EVM: DSS data bus muxed with sys_boot */
738 OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
739 OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
740 OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
741 OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
742 OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
743 OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
744 OMAP3_MUX(SYS_BOOT0, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
745 OMAP3_MUX(SYS_BOOT1, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
746 OMAP3_MUX(SYS_BOOT3, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
747 OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
748 OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
749 OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000750#ifdef CONFIG_WL12XX_PLATFORM_DATA
751 /* WLAN IRQ - GPIO 149 */
752 OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
753
754 /* WLAN POWER ENABLE - GPIO 150 */
755 OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
756
757 /* MMC2 SDIO pin muxes for WL12xx */
758 OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
759 OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
760 OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
761 OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
762 OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
763 OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
764#endif
Vaibhav Hiremath904c5452011-01-25 17:37:39 +0000765
766 { .reg_offset = OMAP_MUX_TERMINATOR },
767};
768#else
769#define omap35x_board_mux NULL
770#define omap36x_board_mux NULL
Tony Lindgrenca5742b2009-12-11 16:16:32 -0800771#endif
772
Maulik Mankad884b8362010-02-17 14:09:30 -0800773static struct omap_musb_board_data musb_board_data = {
774 .interface_type = MUSB_INTERFACE_ULPI,
775 .mode = MUSB_OTG,
776 .power = 100,
777};
778
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700779static void __init omap3_evm_init(void)
780{
Ajay Kumar Guptadb408022009-11-22 10:11:27 -0800781 omap3_evm_get_revision();
Vaibhav Hiremath904c5452011-01-25 17:37:39 +0000782
783 if (cpu_is_omap3630())
784 omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
785 else
786 omap3_mux_init(omap35x_board_mux, OMAP_PACKAGE_CBB);
Ajay Kumar Guptadb408022009-11-22 10:11:27 -0800787
Tony Lindgrene41cccf2011-02-24 14:36:03 -0800788 omap_board_config = omap3_evm_config;
789 omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700790
791 omap3_evm_i2c_init();
792
Senthilvadivu Guruswamyd5e13222011-02-22 11:24:50 +0200793 omap_display_init(&omap3_evm_dss_data);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700794
795 spi_register_board_info(omap3evm_spi_board_info,
796 ARRAY_SIZE(omap3evm_spi_board_info));
797
798 omap_serial_init();
Maulik Mankad1a4f4632010-02-17 14:09:29 -0800799
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700800 /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
801 usb_nop_xceiv_register();
Maulik Mankad1a4f4632010-02-17 14:09:29 -0800802
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800803 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
804 /* enable EHCI VBUS using GPIO22 */
Tony Lindgren4896e392009-12-11 16:16:32 -0800805 omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP);
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800806 gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
807 gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
808 gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
809
810 /* Select EHCI port on main board */
Tony Lindgren4896e392009-12-11 16:16:32 -0800811 omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP);
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800812 gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port");
813 gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0);
814 gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0);
815
816 /* setup EHCI phy reset config */
Tony Lindgren4896e392009-12-11 16:16:32 -0800817 omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
Keshava Munegowda181b2502011-03-01 20:08:16 +0530818 usbhs_bdata.reset_gpio_port[1] = 21;
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800819
Ajay Kumar Gupta58815fa2010-03-25 13:25:27 +0200820 /* EVM REV >= E can supply 500mA with EXTVBUS programming */
821 musb_board_data.power = 500;
822 musb_board_data.extvbus = 1;
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800823 } else {
824 /* setup EHCI phy reset on MDC */
Tony Lindgren4896e392009-12-11 16:16:32 -0800825 omap_mux_init_gpio(135, OMAP_PIN_OUTPUT);
Keshava Munegowda181b2502011-03-01 20:08:16 +0530826 usbhs_bdata.reset_gpio_port[1] = 135;
Ajay Kumar Guptae8e51d22009-11-22 10:11:28 -0800827 }
Maulik Mankad884b8362010-02-17 14:09:30 -0800828 usb_musb_init(&musb_board_data);
Keshava Munegowda9e64bb12011-03-01 20:08:19 +0530829 usbhs_init(&usbhs_bdata);
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700830 ads7846_dev_init();
Sriram562138a2009-11-22 10:11:30 -0800831 omap3evm_init_smsc911x();
Vaibhav Hiremath703e3062010-01-04 15:34:16 +0100832 omap3_evm_display_init();
Eyal Reizer741927f2011-01-27 09:49:49 +0000833
834#ifdef CONFIG_WL12XX_PLATFORM_DATA
835 /* WL12xx WLAN Init */
836 if (wl12xx_set_platform_data(&omap3evm_wlan_data))
837 pr_err("error setting wl12xx data\n");
Eyal Reizeraca6ad02011-02-27 10:45:18 +0000838 platform_device_register(&omap3evm_wlan_regulator);
Eyal Reizer741927f2011-01-27 09:49:49 +0000839#endif
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700840}
841
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700842MACHINE_START(OMAP3EVM, "OMAP3 EVM")
843 /* Maintainer: Syed Mohammed Khasim - Texas Instruments */
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700844 .boot_params = 0x80000100,
Russell King71ee7da2010-05-23 10:18:16 +0100845 .reserve = omap_reserve,
Russell King - ARM Linux3dc3bad2011-02-14 15:40:20 -0800846 .map_io = omap3_map_io,
847 .init_early = omap3_evm_init_early,
848 .init_irq = omap_init_irq,
Syed Mohammed Khasim53c5ec32009-05-28 14:13:28 -0700849 .init_machine = omap3_evm_init,
850 .timer = &omap_timer,
851MACHINE_END