drm: properly init/reset connector status
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 23 Oct 2012 18:23:35 +0000 (18:23 +0000)
committerDave Airlie <airlied@redhat.com>
Tue, 20 Nov 2012 05:51:06 +0000 (15:51 +1000)
This can help drivers to make somewhat intelligent decisions in their
->detect callback: If the connector is hpd capable and in the unknown
state, the driver needs to force a full detect cycle. Otherwise it
could just (if it chooses so) to update the connector state from it's
hpd handler directly, and always return that in the ->detect callback.

Atm only drm/i915 calls drm_mode_config_reset at resume time, so other
drivers would need to add that call first before using this facility.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_crtc.c

index 6a1b2cc3989819048d0f4dbbc8e0195745effe72..d6d007275947a34372f1bf1c7716b8073c02e4fc 100644 (file)
@@ -553,6 +553,7 @@ int drm_connector_init(struct drm_device *dev,
        INIT_LIST_HEAD(&connector->probed_modes);
        INIT_LIST_HEAD(&connector->modes);
        connector->edid_blob_ptr = NULL;
+       connector->status = connector_status_unknown;
 
        list_add_tail(&connector->head, &dev->mode_config.connector_list);
        dev->mode_config.num_connector++;
@@ -3672,9 +3673,12 @@ void drm_mode_config_reset(struct drm_device *dev)
                if (encoder->funcs->reset)
                        encoder->funcs->reset(encoder);
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+               connector->status = connector_status_unknown;
+
                if (connector->funcs->reset)
                        connector->funcs->reset(connector);
+       }
 }
 EXPORT_SYMBOL(drm_mode_config_reset);