diff options
author | Koen Kooi <k-kooi@ti.com> | 2009-12-16 13:50:20 +0100 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2009-12-21 10:10:23 +0100 |
commit | 6b143d814b4c3e06fd6604d2442b5755264015bb (patch) | |
tree | d89798bdbf35d2e062a0a7d74c3c0b4b409dfe98 /recipes/linux/linux-omap-2.6.32 | |
parent | 9cf6e46742ffc894fb480193a942fe85a68ef79b (diff) |
linux-omap 2.6.32: add dss2 driver for beagleboard
Diffstat (limited to 'recipes/linux/linux-omap-2.6.32')
-rwxr-xr-x | recipes/linux/linux-omap-2.6.32/dss2/beagle-dss2-support.diff | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.32/dss2/beagle-dss2-support.diff b/recipes/linux/linux-omap-2.6.32/dss2/beagle-dss2-support.diff new file mode 100755 index 0000000000..15d7971fa8 --- /dev/null +++ b/recipes/linux/linux-omap-2.6.32/dss2/beagle-dss2-support.diff @@ -0,0 +1,308 @@ +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -30,6 +30,7 @@ + + #include <linux/regulator/machine.h> + #include <linux/i2c/twl4030.h> ++#include <linux/omapfb.h> + + #include <mach/hardware.h> + #include <asm/mach-types.h> +@@ -44,6 +45,7 @@ + #include <plat/mux.h> + #include <plat/usb.h> + #include <plat/timer-gp.h> ++#include <plat/display.h> + + #include "mmc-twl4030.h" + +@@ -115,15 +117,6 @@ + .gpio_wp = 29, + }, + {} /* 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 = { +@@ -179,16 +172,6 @@ + .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13) + | BIT(15) | BIT(16) | BIT(17), + .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) */ +@@ -221,35 +204,6 @@ + .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, + }; +@@ -262,39 +216,6 @@ + .audio_mclk = 26000000, + .audio = &beagle_audio_data, + }; +- +-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, +- .codec = &beagle_codec_data, +- .vmmc1 = &beagle_vmmc1, +- .vsim = &beagle_vsim, +- .vdac = &beagle_vdac, +- .vpll2 = &beagle_vpll2, +-}; +- +-static struct i2c_board_info __initdata beagle_i2c_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_i2c_boardinfo, +- ARRAY_SIZE(beagle_i2c_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[] = { + { +@@ -349,14 +270,156 @@ + }, + }; + +-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)); ++ /* 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(); +@@ -367,7 +430,7 @@ + } + + static struct platform_device *omap3_beagle_devices[] __initdata = { +- &omap3_beagle_lcd_device, ++ &beagle_dss_device, + &leds_gpio, + &keys_gpio, + }; +@@ -437,6 +500,8 @@ + usb_musb_init(); + 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); + |