drm/i915: Try harder to get best m, n, p values with minimal error

Basically check for both +ive and -ive deviation from target clock and
pick the one with minimal error. If we get a direct match, break from
loop to acheive some optimization.

v2: Use signed variable for target and calculated dsi clock values

Signed-off-by: Vijayakumar Balakrishnan <vijayakumar.balakrishnan@intel.com>
Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Shobhit Kumar 2013-12-10 12:14:57 +05:30 committed by Daniel Vetter
parent 44d4c6eebb
commit 8e1eed5aa8
1 changed files with 20 additions and 10 deletions

View File

@ -169,8 +169,8 @@ static int dsi_calc_mnp(u32 dsi_clk, struct dsi_mnp *dsi_mnp)
u32 ref_clk; u32 ref_clk;
u32 error; u32 error;
u32 tmp_error; u32 tmp_error;
u32 target_dsi_clk; int target_dsi_clk;
u32 calc_dsi_clk; int calc_dsi_clk;
u32 calc_m; u32 calc_m;
u32 calc_p; u32 calc_p;
u32 m_seed; u32 m_seed;
@ -184,22 +184,32 @@ static int dsi_calc_mnp(u32 dsi_clk, struct dsi_mnp *dsi_mnp)
ref_clk = 25000; ref_clk = 25000;
target_dsi_clk = dsi_clk; target_dsi_clk = dsi_clk;
error = 0xFFFFFFFF; error = 0xFFFFFFFF;
tmp_error = 0xFFFFFFFF;
calc_m = 0; calc_m = 0;
calc_p = 0; calc_p = 0;
for (m = 62; m <= 92; m++) { for (m = 62; m <= 92; m++) {
for (p = 2; p <= 6; p++) { for (p = 2; p <= 6; p++) {
/* Find the optimal m and p divisors
with minimal error +/- the required clock */
calc_dsi_clk = (m * ref_clk) / p; calc_dsi_clk = (m * ref_clk) / p;
if (calc_dsi_clk >= target_dsi_clk) { if (calc_dsi_clk == target_dsi_clk) {
tmp_error = calc_dsi_clk - target_dsi_clk; calc_m = m;
if (tmp_error < error) { calc_p = p;
error = tmp_error; error = 0;
calc_m = m; break;
calc_p = p; } else
} tmp_error = abs(target_dsi_clk - calc_dsi_clk);
if (tmp_error < error) {
error = tmp_error;
calc_m = m;
calc_p = p;
} }
} }
if (error == 0)
break;
} }
m_seed = lfsr_converts[calc_m - 62]; m_seed = lfsr_converts[calc_m - 62];