diff options
author | Koen Kooi <koen@openembedded.org> | 2009-09-17 19:01:41 +0200 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2009-09-17 19:01:41 +0200 |
commit | fd8af199bbe9c164e5f5a462636d973efeb2e80e (patch) | |
tree | 901750716dee28183e99594857c2a5d5aec57d79 /recipes/linux/linux-omap-2.6.31/dss2 | |
parent | 6d3ad5fb212eba132f0af77629babb58eedd1c52 (diff) |
linux-omap 2.6.31: add some more display fixes
Diffstat (limited to 'recipes/linux/linux-omap-2.6.31/dss2')
-rw-r--r-- | recipes/linux/linux-omap-2.6.31/dss2/beagle-dss2-support.patch | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.31/dss2/beagle-dss2-support.patch b/recipes/linux/linux-omap-2.6.31/dss2/beagle-dss2-support.patch new file mode 100644 index 0000000000..53f921e087 --- /dev/null +++ b/recipes/linux/linux-omap-2.6.31/dss2/beagle-dss2-support.patch @@ -0,0 +1,326 @@ +--- /tmp/board-omap3beagle.c 2009-09-17 17:44:58.000000000 +0200 ++++ git/arch/arm/mach-omap2/board-omap3beagle.c 2009-09-17 18:48:57.000000000 +0200 +@@ -31,6 +31,7 @@ + + #include <linux/regulator/machine.h> + #include <linux/i2c/twl4030.h> ++#include <linux/omapfb.h> + + #include <mach/hardware.h> + #include <asm/mach-types.h> +@@ -45,6 +46,7 @@ + #include <mach/mux.h> + #include <mach/usb.h> + #include <mach/timer-gp.h> ++#include <mach/display.h> + + #include "mmc-twl4030.h" + +@@ -169,15 +171,6 @@ + {} /* Terminator */ + }; + +-static struct platform_device omap3_beagle_lcd_device = { +- .name = "omap3beagle_lcd", +- .id = -1, +-}; +- +-static struct omap_lcd_config omap3_beagle_lcd_config __initdata = { +- .ctrl_name = "internal", +-}; +- + static struct regulator_consumer_supply beagle_vmmc1_supply = { + .supply = "vmmc", + }; +@@ -228,16 +221,6 @@ + .setup = beagle_twl_gpio_setup, + }; + +-static struct regulator_consumer_supply beagle_vdac_supply = { +- .supply = "vdac", +- .dev = &omap3_beagle_lcd_device.dev, +-}; +- +-static struct regulator_consumer_supply beagle_vdvi_supply = { +- .supply = "vdvi", +- .dev = &omap3_beagle_lcd_device.dev, +-}; +- + /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ + static struct regulator_init_data beagle_vmmc1 = { + .constraints = { +@@ -268,61 +251,10 @@ + .consumer_supplies = &beagle_vsim_supply, + }; + +-/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ +-static struct regulator_init_data beagle_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 = &beagle_vdac_supply, +-}; +- +-/* VPLL2 for digital video outputs */ +-static struct regulator_init_data beagle_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 = &beagle_vdvi_supply, +-}; +- + static struct twl4030_usb_data beagle_usb_data = { + .usb_mode = T2_USB_MODE_ULPI, + }; + +-static struct twl4030_platform_data beagle_twldata = { +- .irq_base = TWL4030_IRQ_BASE, +- .irq_end = TWL4030_IRQ_END, +- +- /* platform_data for children goes here */ +- .usb = &beagle_usb_data, +- .gpio = &beagle_gpio_data, +- .vmmc1 = &beagle_vmmc1, +- .vsim = &beagle_vsim, +- .vdac = &beagle_vdac, +- .vpll2 = &beagle_vpll2, +-}; +- +-static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = { +- { +- I2C_BOARD_INFO("twl4030", 0x48), +- .flags = I2C_CLIENT_WAKE, +- .irq = INT_34XX_SYS_NIRQ, +- .platform_data = &beagle_twldata, +- }, +-}; +- + #if defined(CONFIG_RTC_DRV_DS1307) || \ + defined(CONFIG_RTC_DRV_DS1307_MODULE) + +@@ -335,18 +267,6 @@ + static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {}; + #endif + +-static int __init omap3_beagle_i2c_init(void) +-{ +- omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo, +- ARRAY_SIZE(beagle_i2c1_boardinfo)); +- omap_register_i2c_bus(2, 400, beagle_i2c2_boardinfo, +- ARRAY_SIZE(beagle_i2c2_boardinfo)); +- /* Bus 3 is attached to the DVI port where devices like the pico DLP +- * projector don't work reliably with 400kHz */ +- omap_register_i2c_bus(3, 100, NULL, 0); +- return 0; +-} +- + static struct gpio_led gpio_leds[] = { + { + .name = "beagleboard::usr0", +@@ -400,14 +320,158 @@ + }, + }; + +-static struct omap_board_config_kernel omap3_beagle_config[] __initdata = { +- { OMAP_TAG_LCD, &omap3_beagle_lcd_config }, ++/* DSS */ ++ ++static int beagle_enable_dvi(struct omap_dss_device *dssdev) ++{ ++ if (dssdev->reset_gpio != -1) ++ gpio_set_value(dssdev->reset_gpio, 1); ++ ++ return 0; ++} ++ ++static void beagle_disable_dvi(struct omap_dss_device *dssdev) ++{ ++ if (dssdev->reset_gpio != -1) ++ gpio_set_value(dssdev->reset_gpio, 0); ++} ++ ++static struct omap_dss_device beagle_dvi_device = { ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .name = "dvi", ++ .driver_name = "generic_panel", ++ .phy.dpi.data_lines = 24, ++ .reset_gpio = 170, ++ .platform_enable = beagle_enable_dvi, ++ .platform_disable = beagle_disable_dvi, + }; + ++static int beagle_panel_enable_tv(struct omap_dss_device *dssdev) ++{ ++ return 0; ++} ++ ++static void beagle_panel_disable_tv(struct omap_dss_device *dssdev) ++{ ++} ++ ++static struct omap_dss_device beagle_tv_device = { ++ .name = "tv", ++ .driver_name = "venc", ++ .type = OMAP_DISPLAY_TYPE_VENC, ++ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, ++ .platform_enable = beagle_panel_enable_tv, ++ .platform_disable = beagle_panel_disable_tv, ++}; ++ ++static struct omap_dss_device *beagle_dss_devices[] = { ++ &beagle_dvi_device, ++ &beagle_tv_device, ++}; ++ ++static struct omap_dss_board_info beagle_dss_data = { ++ .num_devices = ARRAY_SIZE(beagle_dss_devices), ++ .devices = beagle_dss_devices, ++ .default_device = &beagle_dvi_device, ++}; ++ ++static struct platform_device beagle_dss_device = { ++ .name = "omapdss", ++ .id = -1, ++ .dev = { ++ .platform_data = &beagle_dss_data, ++ }, ++}; ++ ++static struct regulator_consumer_supply beagle_vdda_dac_supply = { ++ .supply = "vdda_dac", ++ .dev = &beagle_dss_device.dev, ++}; ++ ++static struct regulator_consumer_supply beagle_vdds_dsi_supply = { ++ .supply = "vdds_dsi", ++ .dev = &beagle_dss_device.dev, ++}; ++ ++static void __init beagle_display_init(void) ++{ ++ int r; ++ ++ r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset"); ++ if (r < 0) { ++ printk(KERN_ERR "Unable to get DVI reset GPIO\n"); ++ return; ++ } ++ ++ gpio_direction_output(beagle_dvi_device.reset_gpio, 0); ++} ++ ++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ ++static struct regulator_init_data beagle_vdac = { ++ .constraints = { ++ .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 = &beagle_vdda_dac_supply, ++}; ++ ++/* VPLL2 for digital video outputs */ ++static struct regulator_init_data beagle_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 = &beagle_vdds_dsi_supply, ++}; ++ ++static struct twl4030_platform_data beagle_twldata = { ++ .irq_base = TWL4030_IRQ_BASE, ++ .irq_end = TWL4030_IRQ_END, ++ ++ /* platform_data for children goes here */ ++ .usb = &beagle_usb_data, ++ .gpio = &beagle_gpio_data, ++ .vmmc1 = &beagle_vmmc1, ++ .vsim = &beagle_vsim, ++ .vdac = &beagle_vdac, ++ .vpll2 = &beagle_vpll2, ++}; ++ ++static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = { ++ { ++ I2C_BOARD_INFO("twl4030", 0x48), ++ .flags = I2C_CLIENT_WAKE, ++ .irq = INT_34XX_SYS_NIRQ, ++ .platform_data = &beagle_twldata, ++ }, ++}; ++ ++static int __init omap3_beagle_i2c_init(void) ++{ ++ omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo, ++ ARRAY_SIZE(beagle_i2c1_boardinfo)); ++ omap_register_i2c_bus(2, 400, beagle_i2c2_boardinfo, ++ ARRAY_SIZE(beagle_i2c2_boardinfo)); ++ /* Bus 3 is attached to the DVI port where devices like the pico DLP ++ * projector don't work reliably with 400kHz */ ++ omap_register_i2c_bus(3, 100, NULL, 0); ++ return 0; ++} ++ ++ + static void __init omap3_beagle_init_irq(void) + { +- omap_board_config = omap3_beagle_config; +- omap_board_config_size = ARRAY_SIZE(omap3_beagle_config); + omap2_init_common_hw(mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params); + omap_init_irq(); +@@ -418,7 +482,7 @@ + } + + static struct platform_device *omap3_beagle_devices[] __initdata = { +- &omap3_beagle_lcd_device, ++ &beagle_dss_device, + &leds_gpio, + &keys_gpio, + }; +@@ -480,11 +544,8 @@ + platform_add_devices(omap3_beagle_devices, + ARRAY_SIZE(omap3_beagle_devices)); + omap_serial_init(); +- ++ + omap_cfg_reg(J25_34XX_GPIO170); +- gpio_request(170, "DVI_nPD"); +- /* REVISIT leave DVI powered down until it's needed ... */ +- gpio_direction_output(170, true); + + omap3beagle_enc28j60_init(); + +@@ -492,6 +553,8 @@ + usb_ehci_init(&ehci_pdata); + omap3beagle_flash_init(); + ++ beagle_display_init(); ++ + /* Ensure SDRC pins are mux'd for self-refresh */ + omap_cfg_reg(H16_34XX_SDRC_CKE0); + omap_cfg_reg(H17_34XX_SDRC_CKE1); |