22
22
#include <linux/input.h>
23
23
#include <linux/input/matrix_keypad.h>
24
24
#include <linux/leds.h>
25
#include <linux/interrupt.h>
26
27
#include <linux/spi/spi.h>
27
28
#include <linux/spi/ads7846.h>
28
#include <linux/i2c/twl4030.h>
29
#include <linux/i2c/twl.h>
29
30
#include <linux/usb/otg.h>
31
#include <linux/smsc911x.h>
33
#include <linux/regulator/machine.h>
34
#include <linux/mmc/host.h>
31
36
#include <mach/hardware.h>
32
37
#include <asm/mach-types.h>
33
38
#include <asm/mach/arch.h>
34
39
#include <asm/mach/map.h>
36
#include <mach/board.h>
39
#include <mach/common.h>
40
#include <mach/mcspi.h>
41
#include <plat/board.h>
43
#include <plat/common.h>
44
#include <plat/mcspi.h>
45
#include <plat/display.h>
46
#include <plat/panel-generic-dpi.h>
42
49
#include "sdram-micron-mt46h32m32lf-6.h"
43
#include "mmc-twl4030.h"
45
52
#define OMAP3_EVM_TS_GPIO 175
53
#define OMAP3_EVM_EHCI_VBUS 22
54
#define OMAP3_EVM_EHCI_SELECT 61
47
56
#define OMAP3EVM_ETHR_START 0x2c000000
48
57
#define OMAP3EVM_ETHR_SIZE 1024
58
#define OMAP3EVM_ETHR_ID_REV 0x50
49
59
#define OMAP3EVM_ETHR_GPIO_IRQ 176
50
#define OMAP3EVM_SMC911X_CS 5
52
static struct resource omap3evm_smc911x_resources[] = {
60
#define OMAP3EVM_SMSC911X_CS 5
62
static u8 omap3_evm_version;
64
u8 get_omap3_evm_rev(void)
66
return omap3_evm_version;
68
EXPORT_SYMBOL(get_omap3_evm_rev);
70
static void __init omap3_evm_get_revision(void)
75
/* Ethernet PHY ID is stored at ID_REV register */
76
ioaddr = ioremap_nocache(OMAP3EVM_ETHR_START, SZ_1K);
79
smsc_id = readl(ioaddr + OMAP3EVM_ETHR_ID_REV) & 0xFFFF0000;
85
omap3_evm_version = OMAP3EVM_BOARD_GEN_1;
90
omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
94
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
95
static struct resource omap3evm_smsc911x_resources[] = {
54
97
.start = OMAP3EVM_ETHR_START,
55
98
.end = (OMAP3EVM_ETHR_START + OMAP3EVM_ETHR_SIZE - 1),
59
102
.start = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
60
103
.end = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
61
.flags = IORESOURCE_IRQ,
104
.flags = (IORESOURCE_IRQ | IRQF_TRIGGER_LOW),
65
static struct platform_device omap3evm_smc911x_device = {
108
static struct smsc911x_platform_config smsc911x_config = {
109
.phy_interface = PHY_INTERFACE_MODE_MII,
110
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
111
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
112
.flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS),
115
static struct platform_device omap3evm_smsc911x_device = {
68
.num_resources = ARRAY_SIZE(omap3evm_smc911x_resources),
69
.resource = &omap3evm_smc911x_resources[0],
118
.num_resources = ARRAY_SIZE(omap3evm_smsc911x_resources),
119
.resource = &omap3evm_smsc911x_resources[0],
121
.platform_data = &smsc911x_config,
72
static inline void __init omap3evm_init_smc911x(void)
125
static inline void __init omap3evm_init_smsc911x(void)
76
129
unsigned int rate;
78
eth_cs = OMAP3EVM_SMC911X_CS;
131
eth_cs = OMAP3EVM_SMSC911X_CS;
80
133
l3ck = clk_get(NULL, "l3_ck");
84
137
rate = clk_get_rate(l3ck);
86
if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMC911x irq") < 0) {
87
printk(KERN_ERR "Failed to request GPIO%d for smc911x IRQ\n",
139
if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) {
140
printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
88
141
OMAP3EVM_ETHR_GPIO_IRQ);
92
145
gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ);
95
static struct twl4030_hsmmc_info mmc[] = {
146
platform_device_register(&omap3evm_smsc911x_device);
150
static inline void __init omap3evm_init_smsc911x(void) { return; }
154
* OMAP3EVM LCD Panel control signals
156
#define OMAP3EVM_LCD_PANEL_LR 2
157
#define OMAP3EVM_LCD_PANEL_UD 3
158
#define OMAP3EVM_LCD_PANEL_INI 152
159
#define OMAP3EVM_LCD_PANEL_ENVDD 153
160
#define OMAP3EVM_LCD_PANEL_QVGA 154
161
#define OMAP3EVM_LCD_PANEL_RESB 155
162
#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
163
#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
165
static int lcd_enabled;
166
static int dvi_enabled;
168
static void __init omap3_evm_display_init(void)
172
r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
174
printk(KERN_ERR "failed to get lcd_panel_resb\n");
177
gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
179
r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
181
printk(KERN_ERR "failed to get lcd_panel_ini\n");
184
gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
186
r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
188
printk(KERN_ERR "failed to get lcd_panel_qvga\n");
191
gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
193
r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
195
printk(KERN_ERR "failed to get lcd_panel_lr\n");
198
gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
200
r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
202
printk(KERN_ERR "failed to get lcd_panel_ud\n");
205
gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
207
r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
209
printk(KERN_ERR "failed to get lcd_panel_envdd\n");
212
gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
217
gpio_free(OMAP3EVM_LCD_PANEL_UD);
219
gpio_free(OMAP3EVM_LCD_PANEL_LR);
221
gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
223
gpio_free(OMAP3EVM_LCD_PANEL_INI);
225
gpio_free(OMAP3EVM_LCD_PANEL_RESB);
229
static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
232
printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
235
gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
237
if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
238
gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
240
gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
246
static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev)
248
gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
250
if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
251
gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
253
gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
258
static struct omap_dss_device omap3_evm_lcd_device = {
260
.driver_name = "sharp_ls_panel",
261
.type = OMAP_DISPLAY_TYPE_DPI,
262
.phy.dpi.data_lines = 18,
263
.platform_enable = omap3_evm_enable_lcd,
264
.platform_disable = omap3_evm_disable_lcd,
267
static int omap3_evm_enable_tv(struct omap_dss_device *dssdev)
272
static void omap3_evm_disable_tv(struct omap_dss_device *dssdev)
276
static struct omap_dss_device omap3_evm_tv_device = {
278
.driver_name = "venc",
279
.type = OMAP_DISPLAY_TYPE_VENC,
280
.phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
281
.platform_enable = omap3_evm_enable_tv,
282
.platform_disable = omap3_evm_disable_tv,
285
static int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
288
printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
292
gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
298
static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
300
gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
305
static struct panel_generic_dpi_data dvi_panel = {
307
.platform_enable = omap3_evm_enable_dvi,
308
.platform_disable = omap3_evm_disable_dvi,
311
static struct omap_dss_device omap3_evm_dvi_device = {
313
.type = OMAP_DISPLAY_TYPE_DPI,
314
.driver_name = "generic_dpi_panel",
316
.phy.dpi.data_lines = 24,
319
static struct omap_dss_device *omap3_evm_dss_devices[] = {
320
&omap3_evm_lcd_device,
321
&omap3_evm_tv_device,
322
&omap3_evm_dvi_device,
325
static struct omap_dss_board_info omap3_evm_dss_data = {
326
.num_devices = ARRAY_SIZE(omap3_evm_dss_devices),
327
.devices = omap3_evm_dss_devices,
328
.default_device = &omap3_evm_lcd_device,
331
static struct platform_device omap3_evm_dss_device = {
335
.platform_data = &omap3_evm_dss_data,
339
static struct regulator_consumer_supply omap3evm_vmmc1_supply = {
343
static struct regulator_consumer_supply omap3evm_vsim_supply = {
344
.supply = "vmmc_aux",
347
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
348
static struct regulator_init_data omap3evm_vmmc1 = {
352
.valid_modes_mask = REGULATOR_MODE_NORMAL
353
| REGULATOR_MODE_STANDBY,
354
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
355
| REGULATOR_CHANGE_MODE
356
| REGULATOR_CHANGE_STATUS,
358
.num_consumer_supplies = 1,
359
.consumer_supplies = &omap3evm_vmmc1_supply,
362
/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
363
static struct regulator_init_data omap3evm_vsim = {
367
.valid_modes_mask = REGULATOR_MODE_NORMAL
368
| REGULATOR_MODE_STANDBY,
369
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
370
| REGULATOR_CHANGE_MODE
371
| REGULATOR_CHANGE_STATUS,
373
.num_consumer_supplies = 1,
374
.consumer_supplies = &omap3evm_vsim_supply,
377
static struct omap2_hsmmc_info mmc[] = {
380
.caps = MMC_CAP_4_BIT_DATA,
99
381
.gpio_cd = -EINVAL,
494
static struct twl4030_codec_audio_data omap3evm_audio_data = {
495
.audio_mclk = 26000000,
498
static struct twl4030_codec_data omap3evm_codec_data = {
499
.audio_mclk = 26000000,
500
.audio = &omap3evm_audio_data,
503
static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = {
504
.supply = "vdda_dac",
505
.dev = &omap3_evm_dss_device.dev,
508
/* VDAC for DSS driving S-Video */
509
static struct regulator_init_data omap3_evm_vdac = {
514
.valid_modes_mask = REGULATOR_MODE_NORMAL
515
| REGULATOR_MODE_STANDBY,
516
.valid_ops_mask = REGULATOR_CHANGE_MODE
517
| REGULATOR_CHANGE_STATUS,
519
.num_consumer_supplies = 1,
520
.consumer_supplies = &omap3_evm_vdda_dac_supply,
523
/* VPLL2 for digital video outputs */
524
static struct regulator_consumer_supply omap3_evm_vpll2_supply =
525
REGULATOR_SUPPLY("vdds_dsi", "omapdss");
527
static struct regulator_init_data omap3_evm_vpll2 = {
532
.valid_modes_mask = REGULATOR_MODE_NORMAL
533
| REGULATOR_MODE_STANDBY,
534
.valid_ops_mask = REGULATOR_CHANGE_MODE
535
| REGULATOR_CHANGE_STATUS,
537
.num_consumer_supplies = 1,
538
.consumer_supplies = &omap3_evm_vpll2_supply,
197
541
static struct twl4030_platform_data omap3evm_twldata = {
198
542
.irq_base = TWL4030_IRQ_BASE,
199
543
.irq_end = TWL4030_IRQ_END,
281
625
static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
282
{ OMAP_TAG_LCD, &omap3_evm_lcd_config },
285
628
static void __init omap3_evm_init_irq(void)
287
630
omap_board_config = omap3_evm_config;
288
631
omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
289
omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
632
omap2_init_common_infrastructure();
633
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
292
omap3evm_init_smc911x();
295
637
static struct platform_device *omap3_evm_devices[] __initdata = {
296
&omap3_evm_lcd_device,
297
&omap3evm_smc911x_device,
638
&omap3_evm_dss_device,
641
static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
643
.port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
644
.port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
645
.port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
648
/* PHY reset GPIO will be runtime programmed based on EVM version */
649
.reset_gpio_port[0] = -EINVAL,
650
.reset_gpio_port[1] = -EINVAL,
651
.reset_gpio_port[2] = -EINVAL
654
#ifdef CONFIG_OMAP_MUX
655
static struct omap_board_mux board_mux[] __initdata = {
656
OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
657
OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
658
OMAP_PIN_OFF_WAKEUPENABLE),
659
OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
660
OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW),
661
{ .reg_offset = OMAP_MUX_TERMINATOR },
665
static struct omap_musb_board_data musb_board_data = {
666
.interface_type = MUSB_INTERFACE_ULPI,
300
671
static void __init omap3_evm_init(void)
673
omap3_evm_get_revision();
674
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
302
676
omap3_evm_i2c_init();
304
678
platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices));
307
681
ARRAY_SIZE(omap3evm_spi_board_info));
309
683
omap_serial_init();
310
#ifdef CONFIG_NOP_USB_XCEIV
311
685
/* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
312
686
usb_nop_xceiv_register();
688
if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
689
/* enable EHCI VBUS using GPIO22 */
690
omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP);
691
gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
692
gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
693
gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
695
/* Select EHCI port on main board */
696
omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP);
697
gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port");
698
gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0);
699
gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0);
701
/* setup EHCI phy reset config */
702
omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
703
ehci_pdata.reset_gpio_port[1] = 21;
705
/* EVM REV >= E can supply 500mA with EXTVBUS programming */
706
musb_board_data.power = 500;
707
musb_board_data.extvbus = 1;
709
/* setup EHCI phy reset on MDC */
710
omap_mux_init_gpio(135, OMAP_PIN_OUTPUT);
711
ehci_pdata.reset_gpio_port[1] = 135;
713
usb_musb_init(&musb_board_data);
714
usb_ehci_init(&ehci_pdata);
315
715
ads7846_dev_init();
318
static void __init omap3_evm_map_io(void)
320
omap2_set_globals_343x();
321
omap2_map_common_io();
716
omap3evm_init_smsc911x();
717
omap3_evm_display_init();
324
720
MACHINE_START(OMAP3EVM, "OMAP3 EVM")
325
721
/* Maintainer: Syed Mohammed Khasim - Texas Instruments */
326
.phys_io = 0x48000000,
327
.io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
328
722
.boot_params = 0x80000100,
329
.map_io = omap3_evm_map_io,
723
.map_io = omap3_map_io,
724
.reserve = omap_reserve,
330
725
.init_irq = omap3_evm_init_irq,
331
726
.init_machine = omap3_evm_init,
332
727
.timer = &omap_timer,