Commit cdba954e authored by Ander Conselvan de Oliveira's avatar Ander Conselvan de Oliveira Committed by Jani Nikula

drm/i915: Set mode_changed for audio in intel_modeset_pipe_config()

A follow up patch will make intel_modeset_compute_config() deal with
multiple crtcs, so move crtc specific stuff into the lower level crtc
specific function.
Signed-off-by: default avatarAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent c72d969b
...@@ -431,6 +431,12 @@ static void vlv_clock(int refclk, intel_clock_t *clock) ...@@ -431,6 +431,12 @@ static void vlv_clock(int refclk, intel_clock_t *clock)
clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
} }
static bool
needs_modeset(struct drm_crtc_state *state)
{
return state->mode_changed || state->active_changed;
}
/** /**
* Returns whether any output on the specified pipe is of the specified type * Returns whether any output on the specified pipe is of the specified type
*/ */
...@@ -12085,6 +12091,15 @@ intel_modeset_pipe_config(struct drm_crtc *crtc, ...@@ -12085,6 +12091,15 @@ intel_modeset_pipe_config(struct drm_crtc *crtc,
return -EINVAL; return -EINVAL;
} }
/*
* XXX: Add all connectors to make the crtc state match the encoders.
*/
if (!needs_modeset(&pipe_config->base)) {
ret = drm_atomic_add_affected_connectors(state, crtc);
if (ret)
return ret;
}
clear_intel_crtc_state(pipe_config); clear_intel_crtc_state(pipe_config);
pipe_config->cpu_transcoder = pipe_config->cpu_transcoder =
...@@ -12176,6 +12191,18 @@ intel_modeset_pipe_config(struct drm_crtc *crtc, ...@@ -12176,6 +12191,18 @@ intel_modeset_pipe_config(struct drm_crtc *crtc,
DRM_DEBUG_KMS("plane bpp: %i, pipe bpp: %i, dithering: %i\n", DRM_DEBUG_KMS("plane bpp: %i, pipe bpp: %i, dithering: %i\n",
base_bpp, pipe_config->pipe_bpp, pipe_config->dither); base_bpp, pipe_config->pipe_bpp, pipe_config->dither);
/* Check if we need to force a modeset */
if (pipe_config->has_audio !=
to_intel_crtc_state(crtc->state)->has_audio)
pipe_config->base.mode_changed = true;
/*
* Note we have an issue here with infoframes: current code
* only updates them on the full mode set path per hw
* requirements. So here we should be checking for any
* required changes and forcing a mode set.
*/
return 0; return 0;
fail: fail:
return ret; return ret;
...@@ -12193,12 +12220,6 @@ static bool intel_crtc_in_use(struct drm_crtc *crtc) ...@@ -12193,12 +12220,6 @@ static bool intel_crtc_in_use(struct drm_crtc *crtc)
return false; return false;
} }
static bool
needs_modeset(struct drm_crtc_state *state)
{
return state->mode_changed || state->active_changed;
}
static void static void
intel_modeset_update_state(struct drm_atomic_state *state) intel_modeset_update_state(struct drm_atomic_state *state)
{ {
...@@ -12785,10 +12806,6 @@ intel_modeset_compute_config(struct drm_crtc *crtc, ...@@ -12785,10 +12806,6 @@ intel_modeset_compute_config(struct drm_crtc *crtc,
struct intel_crtc_state *pipe_config; struct intel_crtc_state *pipe_config;
int ret = 0; int ret = 0;
ret = drm_atomic_add_affected_connectors(state, crtc);
if (ret)
return ERR_PTR(ret);
ret = drm_atomic_helper_check_modeset(state->dev, state); ret = drm_atomic_helper_check_modeset(state->dev, state);
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
...@@ -12810,19 +12827,7 @@ intel_modeset_compute_config(struct drm_crtc *crtc, ...@@ -12810,19 +12827,7 @@ intel_modeset_compute_config(struct drm_crtc *crtc,
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
/* Check things that can only be changed through modeset */ intel_dump_pipe_config(to_intel_crtc(crtc), pipe_config, "[modeset]");
if (pipe_config->has_audio !=
to_intel_crtc(crtc)->config->has_audio)
pipe_config->base.mode_changed = true;
/*
* Note we have an issue here with infoframes: current code
* only updates them on the full mode set path per hw
* requirements. So here we should be checking for any
* required changes and forcing a mode set.
*/
intel_dump_pipe_config(to_intel_crtc(crtc), pipe_config,"[modeset]");
ret = drm_atomic_helper_check_planes(state->dev, state); ret = drm_atomic_helper_check_planes(state->dev, state);
if (ret) if (ret)
......
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