This makes poll work for the
/sys/class/drm/cardX/connectorY/dpms attributes.

Tested with i915 suspended by XScreenServer and
suspend to RAM.

Signed-off-by: Karsten Wiese <[email protected]>
---
 drivers/gpu/drm/drm_atomic.c        | 4 ++++
 drivers/gpu/drm/drm_atomic_helper.c | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 2fd383d..b6fa87b 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1880,6 +1880,10 @@ int drm_atomic_connector_commit_dpms(struct 
drm_atomic_state *state,
 out:
        if (ret != 0)
                connector->dpms = old_mode;
+       else
+               if (connector->dpms != old_mode)
+                       sysfs_notify(&connector->kdev->kobj, NULL, "dpms");
+
        return ret;
 }
 
diff --git a/drivers/gpu/drm/drm_atomic_helper.c 
b/drivers/gpu/drm/drm_atomic_helper.c
index 4e53aae..6198772 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -921,12 +921,16 @@ drm_atomic_helper_update_legacy_modeset_state(struct 
drm_device *dev,
                crtc = new_conn_state->crtc;
                if ((!crtc && old_conn_state->crtc) ||
                    (crtc && drm_atomic_crtc_needs_modeset(crtc->state))) {
-                       int mode = DRM_MODE_DPMS_OFF;
+                       int old_mode, mode = DRM_MODE_DPMS_OFF;
 
                        if (crtc && crtc->state->active)
                                mode = DRM_MODE_DPMS_ON;
 
+                       old_mode = connector->dpms;
                        connector->dpms = mode;
+                       if (old_mode != mode)
+                               sysfs_notify(&connector->kdev->kobj,
+                                               NULL, "dpms");
                }
        }
 
-- 
2.7.4

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to