aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-10-23 14:23:35 -0400
committerDave Airlie <airlied@redhat.com>2012-11-20 00:51:06 -0500
commit5e2cb2f6da72323877e5847512f8bd8d53c532f2 (patch)
tree5f1dd2dc8d1f2480247f2e3a1c5a3ad09a836d71
parent69787f7da6b2adc4054357a661aaa1701a9ca76f (diff)
drm: properly init/reset connector status
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>
-rw-r--r--drivers/gpu/drm/drm_crtc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 6a1b2cc39898..d6d007275947 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -553,6 +553,7 @@ int drm_connector_init(struct drm_device *dev,
553 INIT_LIST_HEAD(&connector->probed_modes); 553 INIT_LIST_HEAD(&connector->probed_modes);
554 INIT_LIST_HEAD(&connector->modes); 554 INIT_LIST_HEAD(&connector->modes);
555 connector->edid_blob_ptr = NULL; 555 connector->edid_blob_ptr = NULL;
556 connector->status = connector_status_unknown;
556 557
557 list_add_tail(&connector->head, &dev->mode_config.connector_list); 558 list_add_tail(&connector->head, &dev->mode_config.connector_list);
558 dev->mode_config.num_connector++; 559 dev->mode_config.num_connector++;
@@ -3672,9 +3673,12 @@ void drm_mode_config_reset(struct drm_device *dev)
3672 if (encoder->funcs->reset) 3673 if (encoder->funcs->reset)
3673 encoder->funcs->reset(encoder); 3674 encoder->funcs->reset(encoder);
3674 3675
3675 list_for_each_entry(connector, &dev->mode_config.connector_list, head) 3676 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
3677 connector->status = connector_status_unknown;
3678
3676 if (connector->funcs->reset) 3679 if (connector->funcs->reset)
3677 connector->funcs->reset(connector); 3680 connector->funcs->reset(connector);
3681 }
3678} 3682}
3679EXPORT_SYMBOL(drm_mode_config_reset); 3683EXPORT_SYMBOL(drm_mode_config_reset);
3680 3684