Skip to content

Commit

Permalink
drm/atomic: Extract needs_modeset function
Browse files Browse the repository at this point in the history
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: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
  • Loading branch information
Daniel Vetter committed Jun 19, 2015
1 parent 30c4cf3 commit 2465ff6
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 13 deletions.
3 changes: 1 addition & 2 deletions drivers/gpu/drm/drm_atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1216,8 +1216,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)

if (!state->allow_modeset) {
for_each_crtc_in_state(state, crtc, crtc_state, i) {
if (crtc_state->mode_changed ||
crtc_state->active_changed) {
if (drm_atomic_crtc_needs_modeset(crtc_state)) {
DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
crtc->base.id);
return -EINVAL;
Expand Down
16 changes: 5 additions & 11 deletions drivers/gpu/drm/drm_atomic_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,12 +331,6 @@ mode_fixup(struct drm_atomic_state *state)
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
* @dev: DRM device
Expand Down Expand Up @@ -414,7 +408,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
crtc_state->active_changed = true;
}

if (!needs_modeset(crtc_state))
if (!drm_atomic_crtc_needs_modeset(crtc_state))
continue;

DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
Expand Down Expand Up @@ -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)];

if (!old_crtc_state->active ||
!needs_modeset(old_conn_state->crtc->state))
!drm_atomic_crtc_needs_modeset(old_conn_state->crtc->state))
continue;

encoder = old_conn_state->best_encoder;
Expand Down Expand Up @@ -601,7 +595,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
const struct drm_crtc_helper_funcs *funcs;

/* Shut down everything that needs a full modeset. */
if (!needs_modeset(crtc->state))
if (!drm_atomic_crtc_needs_modeset(crtc->state))
continue;

if (!old_crtc_state->active)
Expand Down Expand Up @@ -792,7 +786,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
const struct drm_crtc_helper_funcs *funcs;

/* Need to filter out CRTCs where only planes change. */
if (!needs_modeset(crtc->state))
if (!drm_atomic_crtc_needs_modeset(crtc->state))
continue;

if (!crtc->state->active)
Expand All @@ -819,7 +813,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
continue;

if (!connector->state->crtc->state->active ||
!needs_modeset(connector->state->crtc->state))
!drm_atomic_crtc_needs_modeset(connector->state->crtc->state))
continue;

encoder = connector->state->best_encoder;
Expand Down
6 changes: 6 additions & 0 deletions include/drm/drm_atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,5 +163,11 @@ int __must_check drm_atomic_async_commit(struct drm_atomic_state *state);
(plane_state) = (state)->plane_states[__i], 1); \
(__i)++) \
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_ */

0 comments on commit 2465ff6

Please sign in to comment.