Commit 2465ff62 authored by Daniel Vetter's avatar Daniel Vetter

drm/atomic: Extract needs_modeset function

We use the same check already in the atomic core, so might as well
make this official. And it's also reused in e.g. i915.

Motivated by Maarten's idea to extract a connector_changed state out
of mode_changed.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-By: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
parent 30c4cf3b
...@@ -1216,8 +1216,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state) ...@@ -1216,8 +1216,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
if (!state->allow_modeset) { if (!state->allow_modeset) {
for_each_crtc_in_state(state, crtc, crtc_state, i) { for_each_crtc_in_state(state, crtc, crtc_state, i) {
if (crtc_state->mode_changed || if (drm_atomic_crtc_needs_modeset(crtc_state)) {
crtc_state->active_changed) {
DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n", DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
crtc->base.id); crtc->base.id);
return -EINVAL; return -EINVAL;
......
...@@ -331,12 +331,6 @@ mode_fixup(struct drm_atomic_state *state) ...@@ -331,12 +331,6 @@ mode_fixup(struct drm_atomic_state *state)
return 0; return 0;
} }
static bool
needs_modeset(struct drm_crtc_state *state)
{
return state->mode_changed || state->active_changed;
}
/** /**
* drm_atomic_helper_check_modeset - validate state object for modeset changes * drm_atomic_helper_check_modeset - validate state object for modeset changes
* @dev: DRM device * @dev: DRM device
...@@ -414,7 +408,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, ...@@ -414,7 +408,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
crtc_state->active_changed = true; crtc_state->active_changed = true;
} }
if (!needs_modeset(crtc_state)) if (!drm_atomic_crtc_needs_modeset(crtc_state))
continue; continue;
DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n", DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
...@@ -564,7 +558,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) ...@@ -564,7 +558,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
old_crtc_state = old_state->crtc_states[drm_crtc_index(old_conn_state->crtc)]; old_crtc_state = old_state->crtc_states[drm_crtc_index(old_conn_state->crtc)];
if (!old_crtc_state->active || if (!old_crtc_state->active ||
!needs_modeset(old_conn_state->crtc->state)) !drm_atomic_crtc_needs_modeset(old_conn_state->crtc->state))
continue; continue;
encoder = old_conn_state->best_encoder; encoder = old_conn_state->best_encoder;
...@@ -601,7 +595,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) ...@@ -601,7 +595,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
const struct drm_crtc_helper_funcs *funcs; const struct drm_crtc_helper_funcs *funcs;
/* Shut down everything that needs a full modeset. */ /* Shut down everything that needs a full modeset. */
if (!needs_modeset(crtc->state)) if (!drm_atomic_crtc_needs_modeset(crtc->state))
continue; continue;
if (!old_crtc_state->active) if (!old_crtc_state->active)
...@@ -792,7 +786,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, ...@@ -792,7 +786,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
const struct drm_crtc_helper_funcs *funcs; const struct drm_crtc_helper_funcs *funcs;
/* Need to filter out CRTCs where only planes change. */ /* Need to filter out CRTCs where only planes change. */
if (!needs_modeset(crtc->state)) if (!drm_atomic_crtc_needs_modeset(crtc->state))
continue; continue;
if (!crtc->state->active) if (!crtc->state->active)
...@@ -819,7 +813,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, ...@@ -819,7 +813,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
continue; continue;
if (!connector->state->crtc->state->active || if (!connector->state->crtc->state->active ||
!needs_modeset(connector->state->crtc->state)) !drm_atomic_crtc_needs_modeset(connector->state->crtc->state))
continue; continue;
encoder = connector->state->best_encoder; encoder = connector->state->best_encoder;
......
...@@ -163,5 +163,11 @@ int __must_check drm_atomic_async_commit(struct drm_atomic_state *state); ...@@ -163,5 +163,11 @@ int __must_check drm_atomic_async_commit(struct drm_atomic_state *state);
(plane_state) = (state)->plane_states[__i], 1); \ (plane_state) = (state)->plane_states[__i], 1); \
(__i)++) \ (__i)++) \
if (plane_state) if (plane_state)
static inline bool
drm_atomic_crtc_needs_modeset(struct drm_crtc_state *state)
{
return state->mode_changed || state->active_changed;
}
#endif /* DRM_ATOMIC_H_ */ #endif /* DRM_ATOMIC_H_ */
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