diff options
Diffstat (limited to 'recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch')
-rw-r--r-- | recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch new file mode 100644 index 0000000000..199e89bc93 --- /dev/null +++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch @@ -0,0 +1,307 @@ +From 7d601fa33c5475bcd3035df797a3cbe40cc542d4 Mon Sep 17 00:00:00 2001 +From: Mike Rapoport <mike@compulab.co.il> +Date: Tue, 1 Dec 2009 13:09:28 +0200 +Subject: [PATCH 2/6] omap3: cm-t35: add DSS2 display support + +Signed-off-by: Mike Rapoport <mike@compulab.co.il> +--- + arch/arm/mach-omap2/board-cm-t35.c | 234 +++++++++++++++++++++++++++++++++++- + 1 files changed, 233 insertions(+), 1 deletions(-) + +diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c +index 22c4529..2d7a819 100644 +--- a/arch/arm/mach-omap2/board-cm-t35.c ++++ b/arch/arm/mach-omap2/board-cm-t35.c +@@ -32,6 +32,9 @@ + #include <linux/i2c/twl4030.h> + #include <linux/regulator/machine.h> + ++#include <linux/spi/spi.h> ++#include <linux/spi/tdo24m.h> ++ + #include <asm/mach-types.h> + #include <asm/mach/arch.h> + #include <asm/mach/map.h> +@@ -42,6 +45,7 @@ + #include <plat/nand.h> + #include <plat/gpmc.h> + #include <plat/usb.h> ++#include <plat/display.h> + + #include <mach/hardware.h> + +@@ -248,7 +252,6 @@ static inline void cm_t35_init_nand(void) {} + + #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ + defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) +-#include <linux/spi/spi.h> + #include <linux/spi/ads7846.h> + + #include <plat/mcspi.h> +@@ -304,6 +307,193 @@ static void __init cm_t35_init_ads7846(void) + static inline void cm_t35_init_ads7846(void) {} + #endif + ++#define CM_T35_LCD_EN_GPIO 157 ++#define CM_T35_LCD_BL_GPIO 58 ++#define CM_T35_DVI_EN_GPIO 54 ++ ++static int lcd_bl_gpio; ++static int lcd_en_gpio; ++static int dvi_en_gpio; ++ ++static int lcd_enabled; ++static int dvi_enabled; ++ ++static int cm_t35_panel_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(lcd_en_gpio, 1); ++ gpio_set_value(lcd_bl_gpio, 1); ++ ++ lcd_enabled = 1; ++ ++ return 0; ++} ++ ++static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev) ++{ ++ lcd_enabled = 0; ++ ++ gpio_set_value(lcd_bl_gpio, 0); ++ gpio_set_value(lcd_en_gpio, 0); ++} ++ ++static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev) ++{ ++ if (lcd_enabled) { ++ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n"); ++ return -EINVAL; ++ } ++ ++ gpio_set_value(dvi_en_gpio, 0); ++ dvi_enabled = 1; ++ ++ return 0; ++} ++ ++static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev) ++{ ++ gpio_set_value(dvi_en_gpio, 1); ++ dvi_enabled = 0; ++} ++ ++static int cm_t35_panel_enable_tv(struct omap_dss_device *dssdev) ++{ ++ return 0; ++} ++ ++static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev) ++{ ++} ++ ++static struct omap_dss_device cm_t35_lcd_device = { ++ .name = "lcd", ++ .driver_name = "toppoly_tdo35s_panel", ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .phy.dpi.data_lines = 18, ++ .platform_enable = cm_t35_panel_enable_lcd, ++ .platform_disable = cm_t35_panel_disable_lcd, ++}; ++ ++static struct omap_dss_device cm_t35_dvi_device = { ++ .name = "dvi", ++ .driver_name = "generic_panel", ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .phy.dpi.data_lines = 24, ++ .platform_enable = cm_t35_panel_enable_dvi, ++ .platform_disable = cm_t35_panel_disable_dvi, ++}; ++ ++static struct omap_dss_device cm_t35_tv_device = { ++ .name = "tv", ++ .driver_name = "venc", ++ .type = OMAP_DISPLAY_TYPE_VENC, ++ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, ++ .platform_enable = cm_t35_panel_enable_tv, ++ .platform_disable = cm_t35_panel_disable_tv, ++}; ++ ++static struct omap_dss_device *cm_t35_dss_devices[] = { ++ &cm_t35_lcd_device, ++ &cm_t35_dvi_device, ++ &cm_t35_tv_device, ++}; ++ ++static struct omap_dss_board_info cm_t35_dss_data = { ++ .num_devices = ARRAY_SIZE(cm_t35_dss_devices), ++ .devices = cm_t35_dss_devices, ++ .default_device = &cm_t35_dvi_device, ++}; ++ ++static struct platform_device cm_t35_dss_device = { ++ .name = "omapdss", ++ .id = -1, ++ .dev = { ++ .platform_data = &cm_t35_dss_data, ++ }, ++}; ++ ++static struct omap2_mcspi_device_config tdo24m_mcspi_config = { ++ .turbo_mode = 0, ++ .single_channel = 1, /* 0: slave, 1: master */ ++}; ++ ++static struct tdo24m_platform_data tdo24m_config = { ++ .model = TDO35S, ++}; ++ ++static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = { ++ { ++ .modalias = "tdo24m", ++ .bus_num = 4, ++ .chip_select = 0, ++ .max_speed_hz = 1000000, ++ .controller_data = &tdo24m_mcspi_config, ++ .platform_data = &tdo24m_config, ++ }, ++}; ++ ++static void __init cm_t35_display_init(void) ++{ ++ int err; ++ ++ lcd_en_gpio = CM_T35_LCD_EN_GPIO; ++ lcd_bl_gpio = CM_T35_LCD_BL_GPIO; ++ dvi_en_gpio = CM_T35_DVI_EN_GPIO; ++ ++ spi_register_board_info(cm_t35_lcd_spi_board_info, ++ ARRAY_SIZE(cm_t35_lcd_spi_board_info)); ++ ++ err = gpio_request(lcd_en_gpio, "LCD RST"); ++ if (err) { ++ pr_err("CM-T35: failed to get LCD reset GPIO\n"); ++ goto out; ++ } ++ ++ err = gpio_request(lcd_bl_gpio, "LCD BL"); ++ if (err) { ++ pr_err("CM-T35: failed to get LCD backlight control GPIO\n"); ++ goto err_lcd_bl; ++ } ++ ++ err = gpio_request(dvi_en_gpio, "DVI EN"); ++ if (err) { ++ pr_err("CM-T35: failed to get DVI reset GPIO\n"); ++ goto err_dvi_en; ++ } ++ ++ gpio_export(lcd_en_gpio, 0); ++ gpio_export(lcd_bl_gpio, 0); ++ gpio_export(dvi_en_gpio, 0); ++ gpio_direction_output(lcd_en_gpio, 0); ++ gpio_direction_output(lcd_bl_gpio, 0); ++ gpio_direction_output(dvi_en_gpio, 1); ++ ++ msleep(50); ++ gpio_set_value(lcd_en_gpio, 1); ++ ++ err = platform_device_register(&cm_t35_dss_device); ++ if (err) { ++ pr_err("CM-T35: failed to register DSS device\n"); ++ goto err_dev_reg; ++ } ++ ++ return; ++ ++err_dev_reg: ++ gpio_free(dvi_en_gpio); ++err_dvi_en: ++ gpio_free(lcd_bl_gpio); ++err_lcd_bl: ++ gpio_free(lcd_en_gpio); ++out: ++ ++ return; ++} ++ + static struct regulator_consumer_supply cm_t35_vmmc1_supply = { + .supply = "vmmc", + }; +@@ -312,6 +502,16 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = { + .supply = "vmmc_aux", + }; + ++static struct regulator_consumer_supply cm_t35_vdac_supply = { ++ .supply = "vdda_dac", ++ .dev = &cm_t35_dss_device.dev, ++}; ++ ++static struct regulator_consumer_supply cm_t35_vdvi_supply = { ++ .supply = "vdvi", ++ .dev = &cm_t35_dss_device.dev, ++}; ++ + /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ + static struct regulator_init_data cm_t35_vmmc1 = { + .constraints = { +@@ -342,6 +542,35 @@ static struct regulator_init_data cm_t35_vsim = { + .consumer_supplies = &cm_t35_vsim_supply, + }; + ++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ ++static struct regulator_init_data cm_t35_vdac = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &cm_t35_vdac_supply, ++}; ++ ++/* VPLL2 for digital video outputs */ ++static struct regulator_init_data cm_t35_vpll2 = { ++ .constraints = { ++ .name = "VDVI", ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &cm_t35_vdvi_supply, ++}; ++ + static struct twl4030_usb_data cm_t35_usb_data = { + .usb_mode = T2_USB_MODE_ULPI, + }; +@@ -445,6 +674,8 @@ static struct twl4030_platform_data cm_t35_twldata = { + .gpio = &cm_t35_gpio_data, + .vmmc1 = &cm_t35_vmmc1, + .vsim = &cm_t35_vsim, ++ .vdac = &cm_t35_vdac, ++ .vpll2 = &cm_t35_vpll2, + }; + + static struct i2c_board_info __initdata cm_t35_i2c_boardinfo[] = { +@@ -490,6 +721,7 @@ static void __init cm_t35_init(void) + cm_t35_init_ads7846(); + cm_t35_init_ethernet(); + cm_t35_init_led(); ++ cm_t35_display_init(); + + usb_musb_init(); + +-- +1.6.4.4 + |