]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/fb-helper: dpms_legacy(): Only set on connectors in use
authorNoralf Trønnes <noralf@tronnes.org>
Tue, 26 Mar 2019 17:55:32 +0000 (18:55 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 23 Sep 2019 20:11:37 +0000 (21:11 +0100)
commit 65a102f68005891d7f39354cfd79099908df6d51 upstream.

For each enabled crtc the functions sets dpms on all registered connectors.
Limit this to only doing it once and on the connectors actually in use.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Fixes: 023eb571a1d0 ("drm: correctly update connector DPMS status in drm_fb_helper")
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20190326175546.18126-3-noralf@tronnes.org
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/gpu/drm/drm_fb_helper.c

index ad0e612c5b57a9914e577c3809ae0d1665cecf2a..7cb959b1e3e992cd9499f6d396677081c3d747a1 100644 (file)
@@ -453,8 +453,8 @@ static void drm_fb_helper_dpms(struct fb_info *info, int dpms_mode)
 {
        struct drm_fb_helper *fb_helper = info->par;
        struct drm_device *dev = fb_helper->dev;
-       struct drm_crtc *crtc;
        struct drm_connector *connector;
+       struct drm_mode_set *modeset;
        int i, j;
 
        /*
@@ -475,14 +475,13 @@ static void drm_fb_helper_dpms(struct fb_info *info, int dpms_mode)
        }
 
        for (i = 0; i < fb_helper->crtc_count; i++) {
-               crtc = fb_helper->crtc_info[i].mode_set.crtc;
+               modeset = &fb_helper->crtc_info[i].mode_set;
 
-               if (!crtc->enabled)
+               if (!modeset->crtc->enabled)
                        continue;
 
-               /* Walk the connectors & encoders on this fb turning them on/off */
-               for (j = 0; j < fb_helper->connector_count; j++) {
-                       connector = fb_helper->connector_info[j]->connector;
+               for (j = 0; j < modeset->num_connectors; j++) {
+                       connector = modeset->connectors[j];
                        connector->funcs->dpms(connector, dpms_mode);
                        drm_object_property_set_value(&connector->base,
                                dev->mode_config.dpms_property, dpms_mode);