PageRenderTime 51ms CodeModel.GetById 9ms app.highlight 36ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/arm/mach-omap2/board-omap3evm.c

https://github.com/AICP/kernel_asus_grouper
C | 691 lines | 528 code | 107 blank | 56 comment | 17 complexity | dc85fa17b7a0d502e9bde5c0189f54f1 MD5 | raw file
  1/*
  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>
 23#include <linux/input/matrix_keypad.h>
 24#include <linux/leds.h>
 25#include <linux/interrupt.h>
 26
 27#include <linux/spi/spi.h>
 28#include <linux/spi/ads7846.h>
 29#include <linux/i2c/twl.h>
 30#include <linux/usb/otg.h>
 31#include <linux/smsc911x.h>
 32
 33#include <linux/wl12xx.h>
 34#include <linux/regulator/fixed.h>
 35#include <linux/regulator/machine.h>
 36#include <linux/mmc/host.h>
 37
 38#include <mach/hardware.h>
 39#include <asm/mach-types.h>
 40#include <asm/mach/arch.h>
 41#include <asm/mach/map.h>
 42
 43#include <plat/board.h>
 44#include <plat/usb.h>
 45#include <plat/common.h>
 46#include <plat/mcspi.h>
 47#include <video/omapdss.h>
 48#include <video/omap-panel-generic-dpi.h>
 49
 50#include "mux.h"
 51#include "sdram-micron-mt46h32m32lf-6.h"
 52#include "hsmmc.h"
 53#include "common-board-devices.h"
 54
 55#define OMAP3_EVM_TS_GPIO	175
 56#define OMAP3_EVM_EHCI_VBUS	22
 57#define OMAP3_EVM_EHCI_SELECT	61
 58
 59#define OMAP3EVM_ETHR_START	0x2c000000
 60#define OMAP3EVM_ETHR_SIZE	1024
 61#define OMAP3EVM_ETHR_ID_REV	0x50
 62#define OMAP3EVM_ETHR_GPIO_IRQ	176
 63#define OMAP3EVM_SMSC911X_CS	5
 64/*
 65 * Eth Reset signal
 66 *	64 = Generation 1 (<=RevD)
 67 *	7 = Generation 2 (>=RevE)
 68 */
 69#define OMAP3EVM_GEN1_ETHR_GPIO_RST	64
 70#define OMAP3EVM_GEN2_ETHR_GPIO_RST	7
 71
 72static u8 omap3_evm_version;
 73
 74u8 get_omap3_evm_rev(void)
 75{
 76	return omap3_evm_version;
 77}
 78EXPORT_SYMBOL(get_omap3_evm_rev);
 79
 80static void __init omap3_evm_get_revision(void)
 81{
 82	void __iomem *ioaddr;
 83	unsigned int smsc_id;
 84
 85	/* Ethernet PHY ID is stored at ID_REV register */
 86	ioaddr = ioremap_nocache(OMAP3EVM_ETHR_START, SZ_1K);
 87	if (!ioaddr)
 88		return;
 89	smsc_id = readl(ioaddr + OMAP3EVM_ETHR_ID_REV) & 0xFFFF0000;
 90	iounmap(ioaddr);
 91
 92	switch (smsc_id) {
 93	/*SMSC9115 chipset*/
 94	case 0x01150000:
 95		omap3_evm_version = OMAP3EVM_BOARD_GEN_1;
 96		break;
 97	/*SMSC 9220 chipset*/
 98	case 0x92200000:
 99	default:
100		omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
101	}
102}
103
104#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
105#include <plat/gpmc-smsc911x.h>
106
107static struct omap_smsc911x_platform_data smsc911x_cfg = {
108	.cs             = OMAP3EVM_SMSC911X_CS,
109	.gpio_irq       = OMAP3EVM_ETHR_GPIO_IRQ,
110	.gpio_reset     = -EINVAL,
111	.flags		= SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
112};
113
114static inline void __init omap3evm_init_smsc911x(void)
115{
116	struct clk *l3ck;
117	unsigned int rate;
118
119	l3ck = clk_get(NULL, "l3_ck");
120	if (IS_ERR(l3ck))
121		rate = 100000000;
122	else
123		rate = clk_get_rate(l3ck);
124
125	/* Configure ethernet controller reset gpio */
126	if (cpu_is_omap3430()) {
127		if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
128			smsc911x_cfg.gpio_reset = OMAP3EVM_GEN1_ETHR_GPIO_RST;
129		else
130			smsc911x_cfg.gpio_reset = OMAP3EVM_GEN2_ETHR_GPIO_RST;
131	}
132
133	gpmc_smsc911x_init(&smsc911x_cfg);
134}
135
136#else
137static inline void __init omap3evm_init_smsc911x(void) { return; }
138#endif
139
140/*
141 * OMAP3EVM LCD Panel control signals
142 */
143#define OMAP3EVM_LCD_PANEL_LR		2
144#define OMAP3EVM_LCD_PANEL_UD		3
145#define OMAP3EVM_LCD_PANEL_INI		152
146#define OMAP3EVM_LCD_PANEL_ENVDD	153
147#define OMAP3EVM_LCD_PANEL_QVGA		154
148#define OMAP3EVM_LCD_PANEL_RESB		155
149#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO	210
150#define OMAP3EVM_DVI_PANEL_EN_GPIO	199
151
152static struct gpio omap3_evm_dss_gpios[] __initdata = {
153	{ OMAP3EVM_LCD_PANEL_RESB,  GPIOF_OUT_INIT_HIGH, "lcd_panel_resb"  },
154	{ OMAP3EVM_LCD_PANEL_INI,   GPIOF_OUT_INIT_HIGH, "lcd_panel_ini"   },
155	{ OMAP3EVM_LCD_PANEL_QVGA,  GPIOF_OUT_INIT_LOW,  "lcd_panel_qvga"  },
156	{ OMAP3EVM_LCD_PANEL_LR,    GPIOF_OUT_INIT_HIGH, "lcd_panel_lr"    },
157	{ OMAP3EVM_LCD_PANEL_UD,    GPIOF_OUT_INIT_HIGH, "lcd_panel_ud"    },
158	{ OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW,  "lcd_panel_envdd" },
159};
160
161static int lcd_enabled;
162static int dvi_enabled;
163
164static void __init omap3_evm_display_init(void)
165{
166	int r;
167
168	r = gpio_request_array(omap3_evm_dss_gpios,
169			       ARRAY_SIZE(omap3_evm_dss_gpios));
170	if (r)
171		printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
172}
173
174static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
175{
176	if (dvi_enabled) {
177		printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
178		return -EINVAL;
179	}
180	gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
181
182	if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
183		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
184	else
185		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
186
187	lcd_enabled = 1;
188	return 0;
189}
190
191static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev)
192{
193	gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
194
195	if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
196		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
197	else
198		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
199
200	lcd_enabled = 0;
201}
202
203static struct omap_dss_device omap3_evm_lcd_device = {
204	.name			= "lcd",
205	.driver_name		= "sharp_ls_panel",
206	.type			= OMAP_DISPLAY_TYPE_DPI,
207	.phy.dpi.data_lines	= 18,
208	.platform_enable	= omap3_evm_enable_lcd,
209	.platform_disable	= omap3_evm_disable_lcd,
210};
211
212static int omap3_evm_enable_tv(struct omap_dss_device *dssdev)
213{
214	return 0;
215}
216
217static void omap3_evm_disable_tv(struct omap_dss_device *dssdev)
218{
219}
220
221static struct omap_dss_device omap3_evm_tv_device = {
222	.name			= "tv",
223	.driver_name		= "venc",
224	.type			= OMAP_DISPLAY_TYPE_VENC,
225	.phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO,
226	.platform_enable	= omap3_evm_enable_tv,
227	.platform_disable	= omap3_evm_disable_tv,
228};
229
230static int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
231{
232	if (lcd_enabled) {
233		printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
234		return -EINVAL;
235	}
236
237	gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
238
239	dvi_enabled = 1;
240	return 0;
241}
242
243static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
244{
245	gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
246
247	dvi_enabled = 0;
248}
249
250static struct panel_generic_dpi_data dvi_panel = {
251	.name			= "generic",
252	.platform_enable	= omap3_evm_enable_dvi,
253	.platform_disable	= omap3_evm_disable_dvi,
254};
255
256static struct omap_dss_device omap3_evm_dvi_device = {
257	.name			= "dvi",
258	.type			= OMAP_DISPLAY_TYPE_DPI,
259	.driver_name		= "generic_dpi_panel",
260	.data			= &dvi_panel,
261	.phy.dpi.data_lines	= 24,
262};
263
264static struct omap_dss_device *omap3_evm_dss_devices[] = {
265	&omap3_evm_lcd_device,
266	&omap3_evm_tv_device,
267	&omap3_evm_dvi_device,
268};
269
270static struct omap_dss_board_info omap3_evm_dss_data = {
271	.num_devices	= ARRAY_SIZE(omap3_evm_dss_devices),
272	.devices	= omap3_evm_dss_devices,
273	.default_device	= &omap3_evm_lcd_device,
274};
275
276static struct regulator_consumer_supply omap3evm_vmmc1_supply[] = {
277	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
278};
279
280static struct regulator_consumer_supply omap3evm_vsim_supply[] = {
281	REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
282};
283
284/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
285static struct regulator_init_data omap3evm_vmmc1 = {
286	.constraints = {
287		.min_uV			= 1850000,
288		.max_uV			= 3150000,
289		.valid_modes_mask	= REGULATOR_MODE_NORMAL
290					| REGULATOR_MODE_STANDBY,
291		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
292					| REGULATOR_CHANGE_MODE
293					| REGULATOR_CHANGE_STATUS,
294	},
295	.num_consumer_supplies	= ARRAY_SIZE(omap3evm_vmmc1_supply),
296	.consumer_supplies	= omap3evm_vmmc1_supply,
297};
298
299/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
300static struct regulator_init_data omap3evm_vsim = {
301	.constraints = {
302		.min_uV			= 1800000,
303		.max_uV			= 3000000,
304		.valid_modes_mask	= REGULATOR_MODE_NORMAL
305					| REGULATOR_MODE_STANDBY,
306		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
307					| REGULATOR_CHANGE_MODE
308					| REGULATOR_CHANGE_STATUS,
309	},
310	.num_consumer_supplies	= ARRAY_SIZE(omap3evm_vsim_supply),
311	.consumer_supplies	= omap3evm_vsim_supply,
312};
313
314static struct omap2_hsmmc_info mmc[] = {
315	{
316		.mmc		= 1,
317		.caps		= MMC_CAP_4_BIT_DATA,
318		.gpio_cd	= -EINVAL,
319		.gpio_wp	= 63,
320	},
321#ifdef CONFIG_WL12XX_PLATFORM_DATA
322	{
323		.name		= "wl1271",
324		.mmc		= 2,
325		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
326		.gpio_wp	= -EINVAL,
327		.gpio_cd	= -EINVAL,
328		.nonremovable	= true,
329	},
330#endif
331	{}	/* Terminator */
332};
333
334static struct gpio_led gpio_leds[] = {
335	{
336		.name			= "omap3evm::ledb",
337		/* normally not visible (board underside) */
338		.default_trigger	= "default-on",
339		.gpio			= -EINVAL,	/* gets replaced */
340		.active_low		= true,
341	},
342};
343
344static struct gpio_led_platform_data gpio_led_info = {
345	.leds		= gpio_leds,
346	.num_leds	= ARRAY_SIZE(gpio_leds),
347};
348
349static struct platform_device leds_gpio = {
350	.name	= "leds-gpio",
351	.id	= -1,
352	.dev	= {
353		.platform_data	= &gpio_led_info,
354	},
355};
356
357
358static int omap3evm_twl_gpio_setup(struct device *dev,
359		unsigned gpio, unsigned ngpio)
360{
361	int r, lcd_bl_en;
362
363	/* gpio + 0 is "mmc0_cd" (input/IRQ) */
364	omap_mux_init_gpio(63, OMAP_PIN_INPUT);
365	mmc[0].gpio_cd = gpio + 0;
366	omap2_hsmmc_init(mmc);
367
368	/*
369	 * Most GPIOs are for USB OTG.  Some are mostly sent to
370	 * the P2 connector; notably LEDA for the LCD backlight.
371	 */
372
373	/* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
374	lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
375		GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
376	r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
377	if (r)
378		printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
379
380	/* gpio + 7 == DVI Enable */
381	gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
382
383	/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
384	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
385
386	platform_device_register(&leds_gpio);
387
388	return 0;
389}
390
391static struct twl4030_gpio_platform_data omap3evm_gpio_data = {
392	.gpio_base	= OMAP_MAX_GPIO_LINES,
393	.irq_base	= TWL4030_GPIO_IRQ_BASE,
394	.irq_end	= TWL4030_GPIO_IRQ_END,
395	.use_leds	= true,
396	.setup		= omap3evm_twl_gpio_setup,
397};
398
399static uint32_t board_keymap[] = {
400	KEY(0, 0, KEY_LEFT),
401	KEY(0, 1, KEY_DOWN),
402	KEY(0, 2, KEY_ENTER),
403	KEY(0, 3, KEY_M),
404
405	KEY(1, 0, KEY_RIGHT),
406	KEY(1, 1, KEY_UP),
407	KEY(1, 2, KEY_I),
408	KEY(1, 3, KEY_N),
409
410	KEY(2, 0, KEY_A),
411	KEY(2, 1, KEY_E),
412	KEY(2, 2, KEY_J),
413	KEY(2, 3, KEY_O),
414
415	KEY(3, 0, KEY_B),
416	KEY(3, 1, KEY_F),
417	KEY(3, 2, KEY_K),
418	KEY(3, 3, KEY_P)
419};
420
421static struct matrix_keymap_data board_map_data = {
422	.keymap			= board_keymap,
423	.keymap_size		= ARRAY_SIZE(board_keymap),
424};
425
426static struct twl4030_keypad_data omap3evm_kp_data = {
427	.keymap_data	= &board_map_data,
428	.rows		= 4,
429	.cols		= 4,
430	.rep		= 1,
431};
432
433/* ads7846 on SPI */
434static struct regulator_consumer_supply omap3evm_vio_supply[] = {
435	REGULATOR_SUPPLY("vcc", "spi1.0"),
436};
437
438/* VIO for ads7846 */
439static struct regulator_init_data omap3evm_vio = {
440	.constraints = {
441		.min_uV			= 1800000,
442		.max_uV			= 1800000,
443		.apply_uV		= true,
444		.valid_modes_mask	= REGULATOR_MODE_NORMAL
445					| REGULATOR_MODE_STANDBY,
446		.valid_ops_mask		= REGULATOR_CHANGE_MODE
447					| REGULATOR_CHANGE_STATUS,
448	},
449	.num_consumer_supplies	= ARRAY_SIZE(omap3evm_vio_supply),
450	.consumer_supplies	= omap3evm_vio_supply,
451};
452
453#ifdef CONFIG_WL12XX_PLATFORM_DATA
454
455#define OMAP3EVM_WLAN_PMENA_GPIO	(150)
456#define OMAP3EVM_WLAN_IRQ_GPIO		(149)
457
458static struct regulator_consumer_supply omap3evm_vmmc2_supply[] = {
459	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
460};
461
462/* VMMC2 for driving the WL12xx module */
463static struct regulator_init_data omap3evm_vmmc2 = {
464	.constraints = {
465		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
466	},
467	.num_consumer_supplies	= ARRAY_SIZE(omap3evm_vmmc2_supply),
468	.consumer_supplies	= omap3evm_vmmc2_supply,
469};
470
471static struct fixed_voltage_config omap3evm_vwlan = {
472	.supply_name		= "vwl1271",
473	.microvolts		= 1800000, /* 1.80V */
474	.gpio			= OMAP3EVM_WLAN_PMENA_GPIO,
475	.startup_delay		= 70000, /* 70ms */
476	.enable_high		= 1,
477	.enabled_at_boot	= 0,
478	.init_data		= &omap3evm_vmmc2,
479};
480
481static struct platform_device omap3evm_wlan_regulator = {
482	.name		= "reg-fixed-voltage",
483	.id		= 1,
484	.dev = {
485		.platform_data	= &omap3evm_vwlan,
486	},
487};
488
489struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
490	.irq = OMAP_GPIO_IRQ(OMAP3EVM_WLAN_IRQ_GPIO),
491	.board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
492};
493#endif
494
495static struct twl4030_platform_data omap3evm_twldata = {
496	/* platform_data for children goes here */
497	.keypad		= &omap3evm_kp_data,
498	.gpio		= &omap3evm_gpio_data,
499	.vio		= &omap3evm_vio,
500	.vmmc1		= &omap3evm_vmmc1,
501	.vsim		= &omap3evm_vsim,
502};
503
504static int __init omap3_evm_i2c_init(void)
505{
506	omap3_pmic_get_config(&omap3evm_twldata,
507			TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC |
508			TWL_COMMON_PDATA_AUDIO,
509			TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2);
510
511	omap3evm_twldata.vdac->constraints.apply_uV = true;
512	omap3evm_twldata.vpll2->constraints.apply_uV = true;
513
514	omap3_pmic_init("twl4030", &omap3evm_twldata);
515	omap_register_i2c_bus(2, 400, NULL, 0);
516	omap_register_i2c_bus(3, 400, NULL, 0);
517	return 0;
518}
519
520static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
521};
522
523static void __init omap3_evm_init_early(void)
524{
525	omap2_init_common_infrastructure();
526	omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
527}
528
529static struct usbhs_omap_board_data usbhs_bdata __initdata = {
530
531	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
532	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
533	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
534
535	.phy_reset  = true,
536	/* PHY reset GPIO will be runtime programmed based on EVM version */
537	.reset_gpio_port[0]  = -EINVAL,
538	.reset_gpio_port[1]  = -EINVAL,
539	.reset_gpio_port[2]  = -EINVAL
540};
541
542#ifdef CONFIG_OMAP_MUX
543static struct omap_board_mux omap35x_board_mux[] __initdata = {
544	OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
545				OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
546				OMAP_PIN_OFF_WAKEUPENABLE),
547	OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
548				OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
549				OMAP_PIN_OFF_WAKEUPENABLE),
550	OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
551				OMAP_PIN_OFF_NONE),
552	OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
553				OMAP_PIN_OFF_NONE),
554#ifdef CONFIG_WL12XX_PLATFORM_DATA
555	/* WLAN IRQ - GPIO 149 */
556	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
557
558	/* WLAN POWER ENABLE - GPIO 150 */
559	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
560
561	/* MMC2 SDIO pin muxes for WL12xx */
562	OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
563	OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
564	OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
565	OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
566	OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
567	OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
568#endif
569	{ .reg_offset = OMAP_MUX_TERMINATOR },
570};
571
572static struct omap_board_mux omap36x_board_mux[] __initdata = {
573	OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
574				OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
575				OMAP_PIN_OFF_WAKEUPENABLE),
576	OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
577				OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
578				OMAP_PIN_OFF_WAKEUPENABLE),
579	/* AM/DM37x EVM: DSS data bus muxed with sys_boot */
580	OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
581	OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
582	OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
583	OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
584	OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
585	OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
586	OMAP3_MUX(SYS_BOOT0, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
587	OMAP3_MUX(SYS_BOOT1, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
588	OMAP3_MUX(SYS_BOOT3, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
589	OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
590	OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
591	OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
592#ifdef CONFIG_WL12XX_PLATFORM_DATA
593	/* WLAN IRQ - GPIO 149 */
594	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
595
596	/* WLAN POWER ENABLE - GPIO 150 */
597	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
598
599	/* MMC2 SDIO pin muxes for WL12xx */
600	OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
601	OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
602	OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
603	OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
604	OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
605	OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
606#endif
607
608	{ .reg_offset = OMAP_MUX_TERMINATOR },
609};
610#else
611#define omap35x_board_mux	NULL
612#define omap36x_board_mux	NULL
613#endif
614
615static struct omap_musb_board_data musb_board_data = {
616	.interface_type		= MUSB_INTERFACE_ULPI,
617	.mode			= MUSB_OTG,
618	.power			= 100,
619};
620
621static struct gpio omap3_evm_ehci_gpios[] __initdata = {
622	{ OMAP3_EVM_EHCI_VBUS,	 GPIOF_OUT_INIT_HIGH,  "enable EHCI VBUS" },
623	{ OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW,   "select EHCI port" },
624};
625
626static void __init omap3_evm_init(void)
627{
628	omap3_evm_get_revision();
629
630	if (cpu_is_omap3630())
631		omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
632	else
633		omap3_mux_init(omap35x_board_mux, OMAP_PACKAGE_CBB);
634
635	omap_board_config = omap3_evm_config;
636	omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
637
638	omap3_evm_i2c_init();
639
640	omap_display_init(&omap3_evm_dss_data);
641
642	omap_serial_init();
643
644	/* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
645	usb_nop_xceiv_register();
646
647	if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
648		/* enable EHCI VBUS using GPIO22 */
649		omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
650		/* Select EHCI port on main board */
651		omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
652				   OMAP_PIN_INPUT_PULLUP);
653		gpio_request_array(omap3_evm_ehci_gpios,
654				   ARRAY_SIZE(omap3_evm_ehci_gpios));
655
656		/* setup EHCI phy reset config */
657		omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
658		usbhs_bdata.reset_gpio_port[1] = 21;
659
660		/* EVM REV >= E can supply 500mA with EXTVBUS programming */
661		musb_board_data.power = 500;
662		musb_board_data.extvbus = 1;
663	} else {
664		/* setup EHCI phy reset on MDC */
665		omap_mux_init_gpio(135, OMAP_PIN_OUTPUT);
666		usbhs_bdata.reset_gpio_port[1] = 135;
667	}
668	usb_musb_init(&musb_board_data);
669	usbhs_init(&usbhs_bdata);
670	omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL);
671	omap3evm_init_smsc911x();
672	omap3_evm_display_init();
673
674#ifdef CONFIG_WL12XX_PLATFORM_DATA
675	/* WL12xx WLAN Init */
676	if (wl12xx_set_platform_data(&omap3evm_wlan_data))
677		pr_err("error setting wl12xx data\n");
678	platform_device_register(&omap3evm_wlan_regulator);
679#endif
680}
681
682MACHINE_START(OMAP3EVM, "OMAP3 EVM")
683	/* Maintainer: Syed Mohammed Khasim - Texas Instruments */
684	.boot_params	= 0x80000100,
685	.reserve	= omap_reserve,
686	.map_io		= omap3_map_io,
687	.init_early	= omap3_evm_init_early,
688	.init_irq	= omap3_init_irq,
689	.init_machine	= omap3_evm_init,
690	.timer		= &omap3_timer,
691MACHINE_END