Skip to content

Commit 8c10342

Browse files
mlankhorstdanvet
authored andcommitted
drm/atomic: Update legacy DPMS state during modesets, v3.
This is required for DPMS to work correctly, during a modeset the DPMS property should be turned off, unless the state is crtc is made active in which case it should be set to DPMS on. Changes since v1: - Set DPMS to off when a connector is removed from a crtc too. - Update the legacy dpms property too. - Add an exception for the legacy dpms paths, it updates its own state. Changes since v2: - Do not preserve dpms property. Cc: [email protected] Signed-off-by: Maarten Lankhorst <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
1 parent 9a69a9a commit 8c10342

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

drivers/gpu/drm/drm_atomic_helper.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -660,15 +660,29 @@ drm_atomic_helper_update_legacy_modeset_state(struct drm_device *dev,
660660
struct drm_crtc_state *old_crtc_state;
661661
int i;
662662

663-
/* clear out existing links */
663+
/* clear out existing links and update dpms */
664664
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
665-
if (!connector->encoder)
666-
continue;
665+
if (connector->encoder) {
666+
WARN_ON(!connector->encoder->crtc);
667+
668+
connector->encoder->crtc = NULL;
669+
connector->encoder = NULL;
670+
}
667671

668-
WARN_ON(!connector->encoder->crtc);
672+
crtc = connector->state->crtc;
673+
if ((!crtc && old_conn_state->crtc) ||
674+
(crtc && drm_atomic_crtc_needs_modeset(crtc->state))) {
675+
struct drm_property *dpms_prop =
676+
dev->mode_config.dpms_property;
677+
int mode = DRM_MODE_DPMS_OFF;
669678

670-
connector->encoder->crtc = NULL;
671-
connector->encoder = NULL;
679+
if (crtc && crtc->state->active)
680+
mode = DRM_MODE_DPMS_ON;
681+
682+
connector->dpms = mode;
683+
drm_object_property_set_value(&connector->base,
684+
dpms_prop, mode);
685+
}
672686
}
673687

674688
/* set new links */

drivers/gpu/drm/i915/intel_display.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12349,16 +12349,9 @@ intel_modeset_update_state(struct drm_atomic_state *state)
1234912349
continue;
1235012350

1235112351
if (crtc->state->active) {
12352-
struct drm_property *dpms_property =
12353-
dev->mode_config.dpms_property;
12354-
12355-
connector->dpms = DRM_MODE_DPMS_ON;
12356-
drm_object_property_set_value(&connector->base, dpms_property, DRM_MODE_DPMS_ON);
12357-
1235812352
intel_encoder = to_intel_encoder(connector->encoder);
1235912353
intel_encoder->connectors_active = true;
12360-
} else
12361-
connector->dpms = DRM_MODE_DPMS_OFF;
12354+
}
1236212355
}
1236312356
}
1236412357

0 commit comments

Comments
 (0)