diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-23 14:23:35 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-11-20 00:51:06 -0500 |
commit | 5e2cb2f6da72323877e5847512f8bd8d53c532f2 (patch) | |
tree | 5f1dd2dc8d1f2480247f2e3a1c5a3ad09a836d71 | |
parent | 69787f7da6b2adc4054357a661aaa1701a9ca76f (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.c | 6 |
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 | } |
3679 | EXPORT_SYMBOL(drm_mode_config_reset); | 3683 | EXPORT_SYMBOL(drm_mode_config_reset); |
3680 | 3684 | ||