[PATCH V2 3/3] OMAPDSS: DISPC: Correct DISPC functional clock usage
From: Chandrabhanu Mahapatra <hidden>
Date: 2012-03-21 09:53:40
DISPC_FCLK is incorrectly used as functional clock of DISPC in scaling calculations. So, DISPC_CORE_CLK replaces as functional clock of DISPC. DISPC_CORE_CLK is derived from DISPC_FCLK divided by an independent DISPC divisor LCD. Signed-off-by: Chandrabhanu Mahapatra <redacted> --- drivers/video/omap2/dss/dispc.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index d8a1672..1fdac73 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c@@ -1761,6 +1761,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane, dss_feat_get_param_max(FEAT_PARAM_LINEWIDTH); const int max_decim_limit = 16; unsigned long fclk = 0; + unsigned long dispc_core_clk = dispc_mgr_lclk_rate(channel); int decim_x, decim_y, error, min_factor; u16 in_width, in_height, in_width_max = 0;
@@ -1803,7 +1804,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane, fclk = calc_fclk(channel, in_width, in_height, out_width, out_height); error = (in_width > maxsinglelinewidth || !fclk || - fclk > dispc_fclk_rate()); + fclk > dispc_core_clk); if (error) { if (decim_x = decim_y) { decim_x = min_factor;
@@ -1841,7 +1842,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane, out_width, out_height); error = (error || in_width > maxsinglelinewidth * 2 || (in_width > maxsinglelinewidth && *five_taps) || - !fclk || fclk > dispc_fclk_rate()); + !fclk || fclk > dispc_core_clk); if (error) { if (decim_x = decim_y) { decim_x = min_factor;
@@ -1873,7 +1874,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane, } } else { in_height = DIV_ROUND_UP(height, decim_y); - in_width_max = dispc_fclk_rate() / + in_width_max = dispc_core_clk / DIV_ROUND_UP(dispc_mgr_pclk_rate(channel), out_width); decim_x = DIV_ROUND_UP(width, in_width_max);
@@ -1894,13 +1895,13 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane, } DSSDBG("required fclk rate = %lu Hz\n", fclk); - DSSDBG("current fclk rate = %lu Hz\n", dispc_fclk_rate()); + DSSDBG("current fclk rate = %lu Hz\n", dispc_core_clk); - if (!fclk || fclk > dispc_fclk_rate()) { + if (!fclk || fclk > dispc_core_clk) { DSSERR("failed to set up scaling, " "required fclk rate = %lu Hz, " "current fclk rate = %lu Hz\n", - fclk, dispc_fclk_rate()); + fclk, dispc_core_clk); return -EINVAL; }
--
1.7.1