Linux Audio

Check our new training course

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