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: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
c72d969b23
commit
cdba954e42
@ -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,
|
|||||||
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 @@ encoder_retry:
|
|||||||
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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user