diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index cc8131f..c59ad5f 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -859,11 +859,12 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; - intel_clock_t clock; + intel_clock_t clock, min_err_clock; int max_n; bool found; /* approximately equals target * 0.00488 */ int err_most = (target >> 8) + (target >> 10); + int err_min = err_most + 50; found = false; if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { @@ -907,12 +908,17 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, err_most = this_err; max_n = clock.n; found = true; + } else if (this_err < err_min) { + err_min = this_err; + min_err_clock = clock; } } } } } - return found; + if (!found) + *best_clock = min_err_clock; + return true; } static bool