From: Archit Taneja <archit@ti.com> To: tomi.valkeinen@ti.com Cc: linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org, sumit.semwal@ti.com, rob@ti.com, Archit Taneja <archit@ti.com> Subject: [RFC 09/17] OMAPDSS: HDMI: Use our own omap_video_timings field when setting interface timings Date: Wed, 01 Aug 2012 10:43:20 +0000 [thread overview] Message-ID: <1343817088-29645-10-git-send-email-archit@ti.com> (raw) In-Reply-To: <1343817088-29645-1-git-send-email-archit@ti.com> The hdmi driver currently updates only the 'code' member of hdmi_config when the op omapdss_hdmi_display_set_timing() is called by the hdmi panel driver. The 'timing' field of hdmi_config is updated only when hdmi_power_on is called. It makes more sense to configure the whole hdmi_config field in the set_timing op called by the panel driver. This way, we don't need to call both functions to ensure that our hdmi_config is configured correctly. Also, we don't need to calculate hdmi_config during hdmi_power_on, or rely on the omap_video_timings in the panel's omap_dss_device struct. A default timing is now configured in hdmi's probe if the panel driver doesn't set any timing, or doesn't set a valid timing before enabling the panel. Also, when setting manager timings, use the omap_video_timing calculated by hdmi_get_timings(), this returns the timings as specified in the CEA/VESA tables, don't use the one provided by the panel driver directly. Signed-off-by: Archit Taneja <archit@ti.com> --- drivers/video/omap2/dss/dss.h | 3 ++- drivers/video/omap2/dss/hdmi.c | 41 +++++++++++++++++----------------- drivers/video/omap2/dss/hdmi_panel.c | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h index 8a9630b..7e38ffd 100644 --- a/drivers/video/omap2/dss/dss.h +++ b/drivers/video/omap2/dss/dss.h @@ -485,7 +485,8 @@ static inline unsigned long hdmi_get_pixel_clock(void) #endif int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev); void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev); -void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev); +void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev, + struct omap_video_timings *timings); int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev, struct omap_video_timings *timings); int omapdss_hdmi_read_edid(u8 *buf, int len); diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 6635b09..01665fa 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -462,7 +462,6 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) { const struct omapdss_clock_config *clks; int r; - const struct hdmi_config *timing; struct omap_video_timings *p; unsigned long phy; @@ -472,22 +471,10 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) dss_mgr_disable(dssdev->manager); - p = &dssdev->panel.timings; + p = &hdmi.ip_data.cfg.timings; - DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", - dssdev->panel.timings.x_res, - dssdev->panel.timings.y_res); + DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", p->x_res, p->y_res); - timing = hdmi_get_timings(); - if (timing = NULL) { - /* HDMI code 4 corresponds to 640 * 480 VGA */ - hdmi.ip_data.cfg.cm.code = 4; - /* DVI mode 1 corresponds to HDMI 0 to DVI */ - hdmi.ip_data.cfg.cm.mode = HDMI_DVI; - hdmi.ip_data.cfg = vesa_timings[0]; - } else { - hdmi.ip_data.cfg = *timing; - } phy = p->pixel_clock; hdmi_compute_pll(phy, &hdmi.ip_data.pll_data); @@ -525,7 +512,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) dispc_enable_gamma_table(0); /* tv size */ - dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings); + dss_mgr_set_timings(dssdev->manager, p); r = hdmi.ip_data.ops->video_enable(&hdmi.ip_data); if (r) @@ -571,13 +558,18 @@ int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev, } -void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev) +void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev, + struct omap_video_timings *timings) { struct hdmi_cm cm; + const struct hdmi_config *timing; + + cm = hdmi_get_code(timings); + hdmi.ip_data.cfg.cm = cm; - cm = hdmi_get_code(&dssdev->panel.timings); - hdmi.ip_data.cfg.cm.code = cm.code; - hdmi.ip_data.cfg.cm.mode = cm.mode; + timing = hdmi_get_timings(); + if (timing != NULL) + hdmi.ip_data.cfg = *timing; if (dssdev->state = OMAP_DSS_DISPLAY_ACTIVE) { int r; @@ -588,7 +580,7 @@ void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev) if (r) DSSERR("failed to power on device\n"); } else { - dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings); + dss_mgr_set_timings(dssdev->manager, &timing->timings); } } @@ -933,6 +925,13 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev) hdmi.ip_data.core_av_offset = HDMI_CORE_AV; hdmi.ip_data.pll_offset = HDMI_PLLCTRL; hdmi.ip_data.phy_offset = HDMI_PHY; + + /* + * initialize hdmi timings to default value: + * HDMI code 4(VGA) and HDMI mode 1(DVI) + */ + hdmi.ip_data.cfg = vesa_timings[0]; + mutex_init(&hdmi.ip_data.lock); hdmi_panel_init(); diff --git a/drivers/video/omap2/dss/hdmi_panel.c b/drivers/video/omap2/dss/hdmi_panel.c index e10844f..8dce206 100644 --- a/drivers/video/omap2/dss/hdmi_panel.c +++ b/drivers/video/omap2/dss/hdmi_panel.c @@ -336,8 +336,8 @@ static void hdmi_set_timings(struct omap_dss_device *dssdev, */ hdmi_panel_audio_disable(dssdev); + omapdss_hdmi_display_set_timing(dssdev, timings); dssdev->panel.timings = *timings; - omapdss_hdmi_display_set_timing(dssdev); mutex_unlock(&hdmi.lock); } -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Archit Taneja <archit@ti.com> To: tomi.valkeinen@ti.com Cc: linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org, sumit.semwal@ti.com, rob@ti.com, Archit Taneja <archit@ti.com> Subject: [RFC 09/17] OMAPDSS: HDMI: Use our own omap_video_timings field when setting interface timings Date: Wed, 1 Aug 2012 16:01:20 +0530 [thread overview] Message-ID: <1343817088-29645-10-git-send-email-archit@ti.com> (raw) In-Reply-To: <1343817088-29645-1-git-send-email-archit@ti.com> The hdmi driver currently updates only the 'code' member of hdmi_config when the op omapdss_hdmi_display_set_timing() is called by the hdmi panel driver. The 'timing' field of hdmi_config is updated only when hdmi_power_on is called. It makes more sense to configure the whole hdmi_config field in the set_timing op called by the panel driver. This way, we don't need to call both functions to ensure that our hdmi_config is configured correctly. Also, we don't need to calculate hdmi_config during hdmi_power_on, or rely on the omap_video_timings in the panel's omap_dss_device struct. A default timing is now configured in hdmi's probe if the panel driver doesn't set any timing, or doesn't set a valid timing before enabling the panel. Also, when setting manager timings, use the omap_video_timing calculated by hdmi_get_timings(), this returns the timings as specified in the CEA/VESA tables, don't use the one provided by the panel driver directly. Signed-off-by: Archit Taneja <archit@ti.com> --- drivers/video/omap2/dss/dss.h | 3 ++- drivers/video/omap2/dss/hdmi.c | 41 +++++++++++++++++----------------- drivers/video/omap2/dss/hdmi_panel.c | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h index 8a9630b..7e38ffd 100644 --- a/drivers/video/omap2/dss/dss.h +++ b/drivers/video/omap2/dss/dss.h @@ -485,7 +485,8 @@ static inline unsigned long hdmi_get_pixel_clock(void) #endif int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev); void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev); -void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev); +void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev, + struct omap_video_timings *timings); int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev, struct omap_video_timings *timings); int omapdss_hdmi_read_edid(u8 *buf, int len); diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 6635b09..01665fa 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -462,7 +462,6 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) { const struct omapdss_clock_config *clks; int r; - const struct hdmi_config *timing; struct omap_video_timings *p; unsigned long phy; @@ -472,22 +471,10 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) dss_mgr_disable(dssdev->manager); - p = &dssdev->panel.timings; + p = &hdmi.ip_data.cfg.timings; - DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", - dssdev->panel.timings.x_res, - dssdev->panel.timings.y_res); + DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", p->x_res, p->y_res); - timing = hdmi_get_timings(); - if (timing == NULL) { - /* HDMI code 4 corresponds to 640 * 480 VGA */ - hdmi.ip_data.cfg.cm.code = 4; - /* DVI mode 1 corresponds to HDMI 0 to DVI */ - hdmi.ip_data.cfg.cm.mode = HDMI_DVI; - hdmi.ip_data.cfg = vesa_timings[0]; - } else { - hdmi.ip_data.cfg = *timing; - } phy = p->pixel_clock; hdmi_compute_pll(phy, &hdmi.ip_data.pll_data); @@ -525,7 +512,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) dispc_enable_gamma_table(0); /* tv size */ - dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings); + dss_mgr_set_timings(dssdev->manager, p); r = hdmi.ip_data.ops->video_enable(&hdmi.ip_data); if (r) @@ -571,13 +558,18 @@ int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev, } -void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev) +void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev, + struct omap_video_timings *timings) { struct hdmi_cm cm; + const struct hdmi_config *timing; + + cm = hdmi_get_code(timings); + hdmi.ip_data.cfg.cm = cm; - cm = hdmi_get_code(&dssdev->panel.timings); - hdmi.ip_data.cfg.cm.code = cm.code; - hdmi.ip_data.cfg.cm.mode = cm.mode; + timing = hdmi_get_timings(); + if (timing != NULL) + hdmi.ip_data.cfg = *timing; if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) { int r; @@ -588,7 +580,7 @@ void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev) if (r) DSSERR("failed to power on device\n"); } else { - dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings); + dss_mgr_set_timings(dssdev->manager, &timing->timings); } } @@ -933,6 +925,13 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev) hdmi.ip_data.core_av_offset = HDMI_CORE_AV; hdmi.ip_data.pll_offset = HDMI_PLLCTRL; hdmi.ip_data.phy_offset = HDMI_PHY; + + /* + * initialize hdmi timings to default value: + * HDMI code 4(VGA) and HDMI mode 1(DVI) + */ + hdmi.ip_data.cfg = vesa_timings[0]; + mutex_init(&hdmi.ip_data.lock); hdmi_panel_init(); diff --git a/drivers/video/omap2/dss/hdmi_panel.c b/drivers/video/omap2/dss/hdmi_panel.c index e10844f..8dce206 100644 --- a/drivers/video/omap2/dss/hdmi_panel.c +++ b/drivers/video/omap2/dss/hdmi_panel.c @@ -336,8 +336,8 @@ static void hdmi_set_timings(struct omap_dss_device *dssdev, */ hdmi_panel_audio_disable(dssdev); + omapdss_hdmi_display_set_timing(dssdev, timings); dssdev->panel.timings = *timings; - omapdss_hdmi_display_set_timing(dssdev); mutex_unlock(&hdmi.lock); } -- 1.7.9.5
next prev parent reply other threads:[~2012-08-01 10:43 UTC|newest] Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-08-01 10:31 [RFC 00/17] OMAPDSS: Change way of passing timings from panel driver to interface Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 01/17] OMAPDSS: APPLY: Constify timings argument in dss_mgr_set_timings Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 02/17] OMAPDSS: DPI: Remove omap_dss_device arguments in dpi_set_dsi_clk/dpi_set_dispc_clk Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 03/17] OMAPDSS: HDMI: Remove omap_dss_device argument from hdmi_compute_pll Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 04/17] OMAPDSS: DPI: Add locking for DPI interface Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 05/17] OMAPDSS: DPI: Maintain our own timings field in driver data Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 06/17] OMAPDSS: DPI displays: Take care of panel timings in the driver itself Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 07/17] OMAPDSS: Displays: Add locking in generic DPI panel driver Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 08/17] OMAPDSS: DSI: Maintain own copy of timings in driver data Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-07 14:07 ` Tomi Valkeinen 2012-08-07 14:07 ` Tomi Valkeinen 2012-08-08 5:57 ` Archit Taneja 2012-08-08 6:09 ` Archit Taneja 2012-08-08 6:15 ` Tomi Valkeinen 2012-08-08 6:15 ` Tomi Valkeinen 2012-08-08 6:29 ` Archit Taneja 2012-08-08 6:41 ` Archit Taneja 2012-08-08 7:10 ` Tomi Valkeinen 2012-08-08 7:10 ` Tomi Valkeinen 2012-08-08 7:54 ` Archit Taneja 2012-08-08 8:06 ` Archit Taneja 2012-08-01 10:31 ` Archit Taneja [this message] 2012-08-01 10:43 ` [RFC 09/17] OMAPDSS: HDMI: Use our own omap_video_timings field when setting interface timings Archit Taneja 2012-08-01 10:31 ` [RFC 10/17] OMAPDSS: HDMI: Add a get_timing function for HDMI interface Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 11/17] OMAPDSS: HDMI: Add locking for hdmi interface get/set timing functions Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 12/17] OMAPDSS: SDI: Create a separate function for timing/clock configurations Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 13/17] OMAPDSS: SDI: Create a function to set timings Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-07 14:20 ` Tomi Valkeinen 2012-08-07 14:20 ` Tomi Valkeinen 2012-08-08 5:58 ` Archit Taneja 2012-08-08 6:10 ` Archit Taneja 2012-08-01 10:31 ` [RFC 14/17] OMAPDSS: SDI: Maintain our own timings field in driver data Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 15/17] OMAPDSS: VENC: Split VENC into interface and panel driver Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 16/17] OMAPDSS: VENC: Maintain our own timings field in driver data Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:31 ` [RFC 17/17] OMAPDSS: VENC: Add a get_timing function for VENC interface Archit Taneja 2012-08-01 10:43 ` Archit Taneja 2012-08-01 10:35 ` [RFC 00/17] OMAPDSS: Change way of passing timings from panel driver to interface Archit Taneja 2012-08-01 10:47 ` Archit Taneja 2012-08-07 14:32 ` Tomi Valkeinen 2012-08-07 14:32 ` Tomi Valkeinen 2012-08-08 6:05 ` Archit Taneja 2012-08-08 6:17 ` Archit Taneja 2012-08-08 6:25 ` Tomi Valkeinen 2012-08-08 6:25 ` Tomi Valkeinen 2012-08-08 6:47 ` Archit Taneja 2012-08-08 6:59 ` Archit Taneja 2012-08-08 7:27 ` Tomi Valkeinen 2012-08-08 7:27 ` Tomi Valkeinen 2012-08-08 7:59 ` Archit Taneja 2012-08-08 8:11 ` Archit Taneja 2012-08-08 8:13 ` Tomi Valkeinen 2012-08-08 8:13 ` Tomi Valkeinen 2012-08-08 8:38 ` Archit Taneja 2012-08-08 8:50 ` Archit Taneja 2012-08-08 8:48 ` Tomi Valkeinen 2012-08-08 8:48 ` Tomi Valkeinen 2012-08-08 9:24 ` Archit Taneja 2012-08-08 9:36 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 00/13] " Archit Taneja 2012-08-09 11:55 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 01/13] OMAPDSS: DPI: Maintain our own timings field in driver data Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 02/13] OMAPDSS: DPI displays: Take care of panel timings in the driver itself Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 03/13] OMAPDSS: DSI: Maintain own copy of timings in driver data Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 04/13] OMAPDSS: DSI: Add function to set panel size for command mode panels Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 05/13] OMAPDSS: DSI: Update manager timings on a manual update Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 06/13] OMAPDSS: HDMI: Use our own omap_video_timings field when setting interface timings Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 07/13] OMAPDSS: HDMI: Add a get_timing function for HDMI interface Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-14 13:02 ` Tomi Valkeinen 2012-08-14 13:02 ` Tomi Valkeinen 2012-08-14 13:15 ` Archit Taneja 2012-08-14 13:27 ` Archit Taneja 2012-08-14 14:10 ` Tomi Valkeinen 2012-08-14 14:10 ` Tomi Valkeinen 2012-08-14 17:16 ` Archit Taneja 2012-08-14 17:28 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 08/13] OMAPDSS: HDMI: Add locking for hdmi interface get/set timing functions Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 09/13] OMAPDSS: SDI: Create a function to set timings Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-14 13:44 ` Tomi Valkeinen 2012-08-14 13:44 ` Tomi Valkeinen 2012-08-14 16:56 ` Archit Taneja 2012-08-14 17:08 ` Archit Taneja 2012-08-14 17:33 ` Tomi Valkeinen 2012-08-14 17:33 ` Tomi Valkeinen 2012-08-14 19:08 ` Archit Taneja 2012-08-14 19:20 ` Archit Taneja 2012-08-15 6:43 ` Tomi Valkeinen 2012-08-15 6:43 ` Tomi Valkeinen 2012-08-14 19:26 ` Rob Clark 2012-08-14 19:26 ` Rob Clark 2012-08-09 11:49 ` [PATCH v2 10/13] OMAPDSS: SDI: Maintain our own timings field in driver data Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 11/13] OMAPDSS: VENC: Split VENC into interface and panel driver Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 12/13] OMAPDSS: VENC: Maintain our own timings field in driver data Archit Taneja 2012-08-09 11:56 ` Archit Taneja 2012-08-09 11:49 ` [PATCH v2 13/13] OMAPDSS: VENC: Add a get_timing function for VENC interface Archit Taneja 2012-08-09 11:56 ` Archit Taneja
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1343817088-29645-10-git-send-email-archit@ti.com \ --to=archit@ti.com \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=rob@ti.com \ --cc=sumit.semwal@ti.com \ --cc=tomi.valkeinen@ti.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.