From a052e95f86c46135c8fc41dcbe4910fec7271adb Mon Sep 17 00:00:00 2001 From: David Anders Date: Wed, 30 Mar 2011 16:48:01 -0500 Subject: [PATCH 01/60] omap4: pandaboard: fix dvi support fetch patch from http://www.elinux.org/images/9/97/0001-omap4-pandaboard-fix-dvi-support.patch this patch fixes some clock issues, provides a base 720p dvi panel and adds the panda_dvi_defconfig for testing purposes. Integrated-by: Jingdong Lu --- arch/arm/mach-omap2/board-omap4panda.c | 11 ++++++- drivers/video/omap2/displays/panel-generic-dpi.c | 24 ++++++++++++++++ drivers/video/omap2/dss/dss.c | 33 ++++++++++++++++++++-- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 0cfe200..c77834a 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -583,7 +583,7 @@ static void omap4_panda_disable_dvi(struct omap_dss_device *dssdev) /* Using generic display panel */ static struct panel_generic_dpi_data omap4_dvi_panel = { - .name = "generic", + .name = "dvi_720p", .platform_enable = omap4_panda_enable_dvi, .platform_disable = omap4_panda_disable_dvi, }; @@ -612,6 +612,7 @@ int __init omap4_panda_dvi_init(void) } +#ifdef CONFIG_OMAP4_DSS_HDMI static void omap4_panda_hdmi_mux_init(void) { /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */ @@ -663,6 +664,12 @@ static struct omap_dss_device *omap4_panda_dss_devices[] = { &omap4_panda_hdmi_device, }; +#else +static struct omap_dss_device *omap4_panda_dss_devices[] = { + &omap4_panda_dvi_device, +}; +#endif + static struct omap_dss_board_info omap4_panda_dss_data = { .num_devices = ARRAY_SIZE(omap4_panda_dss_devices), .devices = omap4_panda_dss_devices, @@ -677,7 +684,9 @@ void omap4_panda_display_init(void) if (r) pr_err("error initializing panda DVI\n"); +#ifdef CONFIG_OMAP4_DSS_HDMI omap4_panda_hdmi_mux_init(); +#endif omap_display_init(&omap4_panda_dss_data); } diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c index 9c90f75..68582bd 100644 --- a/drivers/video/omap2/displays/panel-generic-dpi.c +++ b/drivers/video/omap2/displays/panel-generic-dpi.c @@ -232,6 +232,30 @@ static struct panel_config generic_dpi_panels[] = { .power_off_delay = 0, .name = "powertip_ph480272t", }, + + /* Vesa 720p 1280x768 */ + { + { + .x_res = 1280, + .y_res = 768, + + .pixel_clock = 71000, + + .hfp = 128, + .hsw = 64, + .hbp = 192, + + .vfp = 3, + .vsw = 7, + .vbp = 20, + }, + .acbi = 0x0, + .acb = 0x0, + .config = OMAP_DSS_LCD_TFT, + .power_on_delay = 0, + .power_off_delay = 0, + .name = "dvi_720p", + }, }; struct panel_drv_data { diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index d9489d5..ea35e6d 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c @@ -67,6 +67,7 @@ static struct { struct clk *dss_sys_clk; struct clk *dss_tv_fck; struct clk *dss_video_fck; + struct clk *dss_dss_clk; unsigned num_clks_enabled; unsigned long cache_req_pck; @@ -851,6 +852,7 @@ static int dss_get_clocks(void) dss.dss_sys_clk = NULL; dss.dss_tv_fck = NULL; dss.dss_video_fck = NULL; + dss.dss_dss_clk = NULL; r = dss_get_clock(&dss.dss_ick, "ick"); if (r) @@ -883,6 +885,12 @@ static int dss_get_clocks(void) goto err; } + if (pdata->opt_clock_available("dss_clk")) { + r = dss_get_clock(&dss.dss_dss_clk, "dss_clk"); + if (r) + goto err; + } + return 0; err: @@ -896,7 +904,8 @@ err: clk_put(dss.dss_tv_fck); if (dss.dss_video_fck) clk_put(dss.dss_video_fck); - + if (dss.dss_dss_clk) + clk_put(dss.dss_dss_clk); return r; } @@ -908,6 +917,8 @@ static void dss_put_clocks(void) clk_put(dss.dss_tv_fck); if (dss.dss_sys_clk) clk_put(dss.dss_sys_clk); + if (dss.dss_dss_clk) + clk_put(dss.dss_dss_clk); clk_put(dss.dss_fck); clk_put(dss.dss_ick); } @@ -955,8 +966,16 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks) if (clks & DSS_CLK_ICK) clk_enable(dss.dss_ick); - if (clks & DSS_CLK_FCK) + /* + * XXX: tie dss_dss_clk to FCK - this will change with following + * pm_runtime patches. Needed for OMAP4 boot up due to stricter + * clock cutting in pm framework post 2.6.38-rc5. + */ + if (clks & DSS_CLK_FCK) { clk_enable(dss.dss_fck); + if (dss.dss_dss_clk) + clk_enable(dss.dss_dss_clk); + } if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk) clk_enable(dss.dss_sys_clk); if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck) @@ -991,8 +1010,16 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks) if (clks & DSS_CLK_ICK) clk_disable(dss.dss_ick); - if (clks & DSS_CLK_FCK) + /* + * XXX: tie dss_dss_clk to FCK - this will change with following + * pm_runtime patches. Needed for OMAP4 boot up due to stricter + * clock cutting in pm framework post 2.6.38-rc5. + */ + if (clks & DSS_CLK_FCK) { clk_disable(dss.dss_fck); + if (dss.dss_dss_clk) + clk_disable(dss.dss_dss_clk); + } if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk) clk_disable(dss.dss_sys_clk); if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck) -- 1.7.4.1