|
@@ -37,6 +37,7 @@
|
|
|
#include <plat/common.h>
|
|
|
#include <plat/dma.h>
|
|
|
#include <plat/gpmc.h>
|
|
|
+#include <plat/display.h>
|
|
|
|
|
|
#include <plat/control.h>
|
|
|
#include <plat/gpmc-smc91x.h>
|
|
@@ -152,31 +153,152 @@ static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-static struct platform_device sdp3430_lcd_device = {
|
|
|
- .name = "sdp2430_lcd",
|
|
|
- .id = -1,
|
|
|
+
|
|
|
+#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
|
|
|
+#define SDP3430_LCD_PANEL_ENABLE_GPIO 5
|
|
|
+
|
|
|
+static unsigned backlight_gpio;
|
|
|
+static unsigned enable_gpio;
|
|
|
+static int lcd_enabled;
|
|
|
+static int dvi_enabled;
|
|
|
+
|
|
|
+static void __init sdp3430_display_init(void)
|
|
|
+{
|
|
|
+ int r;
|
|
|
+
|
|
|
+ enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO;
|
|
|
+ backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
|
|
|
+
|
|
|
+ r = gpio_request(enable_gpio, "LCD reset");
|
|
|
+ if (r) {
|
|
|
+ printk(KERN_ERR "failed to get LCD reset GPIO\n");
|
|
|
+ goto err0;
|
|
|
+ }
|
|
|
+
|
|
|
+ r = gpio_request(backlight_gpio, "LCD Backlight");
|
|
|
+ if (r) {
|
|
|
+ printk(KERN_ERR "failed to get LCD backlight GPIO\n");
|
|
|
+ goto err1;
|
|
|
+ }
|
|
|
+
|
|
|
+ gpio_direction_output(enable_gpio, 0);
|
|
|
+ gpio_direction_output(backlight_gpio, 0);
|
|
|
+
|
|
|
+ return;
|
|
|
+err1:
|
|
|
+ gpio_free(enable_gpio);
|
|
|
+err0:
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
+static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ if (dvi_enabled) {
|
|
|
+ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ gpio_direction_output(enable_gpio, 1);
|
|
|
+ gpio_direction_output(backlight_gpio, 1);
|
|
|
+
|
|
|
+ lcd_enabled = 1;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ lcd_enabled = 0;
|
|
|
+
|
|
|
+ gpio_direction_output(enable_gpio, 0);
|
|
|
+ gpio_direction_output(backlight_gpio, 0);
|
|
|
+}
|
|
|
+
|
|
|
+static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ if (lcd_enabled) {
|
|
|
+ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ dvi_enabled = 1;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void sdp3430_panel_disable_dvi(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ dvi_enabled = 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int sdp3430_panel_enable_tv(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void sdp3430_panel_disable_tv(struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static struct omap_dss_device sdp3430_lcd_device = {
|
|
|
+ .name = "lcd",
|
|
|
+ .driver_name = "sharp_ls_panel",
|
|
|
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
+ .phy.dpi.data_lines = 16,
|
|
|
+ .platform_enable = sdp3430_panel_enable_lcd,
|
|
|
+ .platform_disable = sdp3430_panel_disable_lcd,
|
|
|
};
|
|
|
|
|
|
-static struct regulator_consumer_supply sdp3430_vdac_supply = {
|
|
|
- .supply = "vdac",
|
|
|
- .dev = &sdp3430_lcd_device.dev,
|
|
|
+static struct omap_dss_device sdp3430_dvi_device = {
|
|
|
+ .name = "dvi",
|
|
|
+ .driver_name = "generic_panel",
|
|
|
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
+ .phy.dpi.data_lines = 24,
|
|
|
+ .platform_enable = sdp3430_panel_enable_dvi,
|
|
|
+ .platform_disable = sdp3430_panel_disable_dvi,
|
|
|
};
|
|
|
|
|
|
-static struct regulator_consumer_supply sdp3430_vdvi_supply = {
|
|
|
- .supply = "vdvi",
|
|
|
- .dev = &sdp3430_lcd_device.dev,
|
|
|
+static struct omap_dss_device sdp3430_tv_device = {
|
|
|
+ .name = "tv",
|
|
|
+ .driver_name = "venc",
|
|
|
+ .type = OMAP_DISPLAY_TYPE_VENC,
|
|
|
+ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
|
|
|
+ .platform_enable = sdp3430_panel_enable_tv,
|
|
|
+ .platform_disable = sdp3430_panel_disable_tv,
|
|
|
};
|
|
|
|
|
|
-static struct platform_device *sdp3430_devices[] __initdata = {
|
|
|
+
|
|
|
+static struct omap_dss_device *sdp3430_dss_devices[] = {
|
|
|
&sdp3430_lcd_device,
|
|
|
+ &sdp3430_dvi_device,
|
|
|
+ &sdp3430_tv_device,
|
|
|
};
|
|
|
|
|
|
-static struct omap_lcd_config sdp3430_lcd_config __initdata = {
|
|
|
- .ctrl_name = "internal",
|
|
|
+static struct omap_dss_board_info sdp3430_dss_data = {
|
|
|
+ .num_devices = ARRAY_SIZE(sdp3430_dss_devices),
|
|
|
+ .devices = sdp3430_dss_devices,
|
|
|
+ .default_device = &sdp3430_lcd_device,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sdp3430_dss_device = {
|
|
|
+ .name = "omapdss",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &sdp3430_dss_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
|
|
|
+ .supply = "vdda_dac",
|
|
|
+ .dev = &sdp3430_dss_device.dev,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *sdp3430_devices[] __initdata = {
|
|
|
+ &sdp3430_dss_device,
|
|
|
};
|
|
|
|
|
|
static struct omap_board_config_kernel sdp3430_config[] __initdata = {
|
|
|
- { OMAP_TAG_LCD, &sdp3430_lcd_config },
|
|
|
};
|
|
|
|
|
|
static void __init omap_3430sdp_init_irq(void)
|
|
@@ -392,22 +514,34 @@ static struct regulator_init_data sdp3430_vdac = {
|
|
|
| REGULATOR_CHANGE_STATUS,
|
|
|
},
|
|
|
.num_consumer_supplies = 1,
|
|
|
- .consumer_supplies = &sdp3430_vdac_supply,
|
|
|
+ .consumer_supplies = &sdp3430_vdda_dac_supply,
|
|
|
};
|
|
|
|
|
|
/* VPLL2 for digital video outputs */
|
|
|
+static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
|
|
|
+ {
|
|
|
+ .supply = "vdvi",
|
|
|
+ .dev = &sdp3430_lcd_device.dev,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .supply = "vdds_dsi",
|
|
|
+ .dev = &sdp3430_dss_device.dev,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
static struct regulator_init_data sdp3430_vpll2 = {
|
|
|
.constraints = {
|
|
|
.name = "VDVI",
|
|
|
.min_uV = 1800000,
|
|
|
.max_uV = 1800000,
|
|
|
+ .apply_uV = true,
|
|
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
| REGULATOR_MODE_STANDBY,
|
|
|
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
|
|
| REGULATOR_CHANGE_STATUS,
|
|
|
},
|
|
|
- .num_consumer_supplies = 1,
|
|
|
- .consumer_supplies = &sdp3430_vdvi_supply,
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(sdp3430_vpll2_supplies),
|
|
|
+ .consumer_supplies = sdp3430_vpll2_supplies,
|
|
|
};
|
|
|
|
|
|
static struct twl4030_codec_audio_data sdp3430_audio = {
|
|
@@ -521,6 +655,7 @@ static void __init omap_3430sdp_init(void)
|
|
|
omap_serial_init();
|
|
|
usb_musb_init();
|
|
|
board_smc91x_init();
|
|
|
+ sdp3430_display_init();
|
|
|
enable_board_wakeup_source();
|
|
|
usb_ehci_init(&ehci_pdata);
|
|
|
}
|