|
@@ -160,3 +160,127 @@ static inline void __init omap3evm_init_smsc911x(void) { return; }
|
|
#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
|
|
#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
|
|
#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
|
|
#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
|
|
|
|
|
|
|
|
+static struct gpio omap3_evm_dss_gpios[] __initdata = {
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
|
|
|
|
+ { OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int lcd_enabled;
|
|
|
|
+static int dvi_enabled;
|
|
|
|
+
|
|
|
|
+static void __init omap3_evm_display_init(void)
|
|
|
|
+{
|
|
|
|
+ int r;
|
|
|
|
+
|
|
|
|
+ r = gpio_request_array(omap3_evm_dss_gpios,
|
|
|
|
+ ARRAY_SIZE(omap3_evm_dss_gpios));
|
|
|
|
+ if (r)
|
|
|
|
+ printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
|
|
|
|
+{
|
|
|
|
+ if (dvi_enabled) {
|
|
|
|
+ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+ gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
|
|
|
|
+
|
|
|
|
+ if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
|
|
|
|
+ gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
|
|
|
|
+ else
|
|
|
|
+ gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
|
|
|
|
+
|
|
|
|
+ lcd_enabled = 1;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev)
|
|
|
|
+{
|
|
|
|
+ gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
|
|
|
|
+
|
|
|
|
+ if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
|
|
|
|
+ gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
|
|
|
|
+ else
|
|
|
|
+ gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
|
|
|
|
+
|
|
|
|
+ lcd_enabled = 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct omap_dss_device omap3_evm_lcd_device = {
|
|
|
|
+ .name = "lcd",
|
|
|
|
+ .driver_name = "sharp_ls_panel",
|
|
|
|
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
|
+ .phy.dpi.data_lines = 18,
|
|
|
|
+ .platform_enable = omap3_evm_enable_lcd,
|
|
|
|
+ .platform_disable = omap3_evm_disable_lcd,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int omap3_evm_enable_tv(struct omap_dss_device *dssdev)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void omap3_evm_disable_tv(struct omap_dss_device *dssdev)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct omap_dss_device omap3_evm_tv_device = {
|
|
|
|
+ .name = "tv",
|
|
|
|
+ .driver_name = "venc",
|
|
|
|
+ .type = OMAP_DISPLAY_TYPE_VENC,
|
|
|
|
+ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
|
|
|
|
+ .platform_enable = omap3_evm_enable_tv,
|
|
|
|
+ .platform_disable = omap3_evm_disable_tv,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct tfp410_platform_data dvi_panel = {
|
|
|
|
+ .power_down_gpio = OMAP3EVM_DVI_PANEL_EN_GPIO,
|
|
|
|
+ .i2c_bus_num = -1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_dss_device omap3_evm_dvi_device = {
|
|
|
|
+ .name = "dvi",
|
|
|
|
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
|
+ .driver_name = "tfp410",
|
|
|
|
+ .data = &dvi_panel,
|
|
|
|
+ .phy.dpi.data_lines = 24,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_dss_device *omap3_evm_dss_devices[] = {
|
|
|
|
+ &omap3_evm_lcd_device,
|
|
|
|
+ &omap3_evm_tv_device,
|
|
|
|
+ &omap3_evm_dvi_device,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_dss_board_info omap3_evm_dss_data = {
|
|
|
|
+ .num_devices = ARRAY_SIZE(omap3_evm_dss_devices),
|
|
|
|
+ .devices = omap3_evm_dss_devices,
|
|
|
|
+ .default_device = &omap3_evm_lcd_device,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct regulator_consumer_supply omap3evm_vmmc1_supply[] = {
|
|
|
|
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct regulator_consumer_supply omap3evm_vsim_supply[] = {
|
|
|
|
+ REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
|
|
|
|
+static struct regulator_init_data omap3evm_vmmc1 = {
|
|
|
|
+ .constraints = {
|
|
|
|
+ .min_uV = 1850000,
|
|
|
|
+ .max_uV = 3150000,
|
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
|
+ },
|
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap3evm_vmmc1_supply),
|
|
|
|
+ .consumer_supplies = omap3evm_vmmc1_supply,
|