Commit ed6739ef authored by Ander Conselvan de Oliveira's avatar Ander Conselvan de Oliveira Committed by Daniel Vetter

drm/i915: Split shared dpll setup out of __intel_set_mode()

This simplifies __intel_set_mode() a little.
Signed-off-by: default avatarAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 07859504
...@@ -11021,6 +11021,36 @@ intel_modeset_compute_config(struct drm_crtc *crtc, ...@@ -11021,6 +11021,36 @@ intel_modeset_compute_config(struct drm_crtc *crtc,
return pipe_config; return pipe_config;
} }
static int __intel_set_mode_setup_plls(struct drm_device *dev,
unsigned modeset_pipes,
unsigned disable_pipes)
{
struct drm_i915_private *dev_priv = to_i915(dev);
unsigned clear_pipes = modeset_pipes | disable_pipes;
struct intel_crtc *intel_crtc;
int ret = 0;
if (!dev_priv->display.crtc_compute_clock)
return 0;
ret = intel_shared_dpll_start_config(dev_priv, clear_pipes);
if (ret)
goto done;
for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
struct intel_crtc_state *state = intel_crtc->new_config;
ret = dev_priv->display.crtc_compute_clock(intel_crtc,
state);
if (ret) {
intel_shared_dpll_abort_config(dev_priv);
goto done;
}
}
done:
return ret;
}
static int __intel_set_mode(struct drm_crtc *crtc, static int __intel_set_mode(struct drm_crtc *crtc,
struct drm_display_mode *mode, struct drm_display_mode *mode,
int x, int y, struct drm_framebuffer *fb, int x, int y, struct drm_framebuffer *fb,
...@@ -11058,23 +11088,9 @@ static int __intel_set_mode(struct drm_crtc *crtc, ...@@ -11058,23 +11088,9 @@ static int __intel_set_mode(struct drm_crtc *crtc,
prepare_pipes &= ~disable_pipes; prepare_pipes &= ~disable_pipes;
} }
if (dev_priv->display.crtc_compute_clock) { ret = __intel_set_mode_setup_plls(dev, modeset_pipes, disable_pipes);
unsigned clear_pipes = modeset_pipes | disable_pipes; if (ret)
goto done;
ret = intel_shared_dpll_start_config(dev_priv, clear_pipes);
if (ret)
goto done;
for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
struct intel_crtc_state *state = intel_crtc->new_config;
ret = dev_priv->display.crtc_compute_clock(intel_crtc,
state);
if (ret) {
intel_shared_dpll_abort_config(dev_priv);
goto done;
}
}
}
for_each_intel_crtc_masked(dev, disable_pipes, intel_crtc) for_each_intel_crtc_masked(dev, disable_pipes, intel_crtc)
intel_crtc_disable(&intel_crtc->base); intel_crtc_disable(&intel_crtc->base);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment