diff options
Diffstat (limited to 'drivers/gpu/drm/drm_crtc_helper.c')
-rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 738a4294d820..6a647493ca7f 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
@@ -677,6 +677,11 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
677 | /* don't break so fail path works correct */ | 677 | /* don't break so fail path works correct */ |
678 | fail = 1; | 678 | fail = 1; |
679 | break; | 679 | break; |
680 | |||
681 | if (connector->dpms != DRM_MODE_DPMS_ON) { | ||
682 | DRM_DEBUG_KMS("connector dpms not on, full mode switch\n"); | ||
683 | mode_changed = true; | ||
684 | } | ||
680 | } | 685 | } |
681 | } | 686 | } |
682 | 687 | ||
@@ -754,6 +759,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
754 | ret = -EINVAL; | 759 | ret = -EINVAL; |
755 | goto fail; | 760 | goto fail; |
756 | } | 761 | } |
762 | DRM_DEBUG_KMS("Setting connector DPMS state to on\n"); | ||
763 | for (i = 0; i < set->num_connectors; i++) { | ||
764 | DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id, | ||
765 | drm_get_connector_name(set->connectors[i])); | ||
766 | set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON); | ||
767 | } | ||
757 | } | 768 | } |
758 | drm_helper_disable_unused_functions(dev); | 769 | drm_helper_disable_unused_functions(dev); |
759 | } else if (fb_changed) { | 770 | } else if (fb_changed) { |
@@ -771,22 +782,6 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
771 | } | 782 | } |
772 | } | 783 | } |
773 | 784 | ||
774 | /* | ||
775 | * crtc set_config helpers implicit set the crtc and all connected | ||
776 | * encoders to DPMS on for a full mode set. But for just an fb update it | ||
777 | * doesn't do that. To not confuse userspace, do an explicit DPMS_ON | ||
778 | * unconditionally. This will also ensure driver internal dpms state is | ||
779 | * consistent again. | ||
780 | */ | ||
781 | if (set->crtc->enabled) { | ||
782 | DRM_DEBUG_KMS("Setting connector DPMS state to on\n"); | ||
783 | for (i = 0; i < set->num_connectors; i++) { | ||
784 | DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id, | ||
785 | drm_get_connector_name(set->connectors[i])); | ||
786 | set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON); | ||
787 | } | ||
788 | } | ||
789 | |||
790 | kfree(save_connectors); | 785 | kfree(save_connectors); |
791 | kfree(save_encoders); | 786 | kfree(save_encoders); |
792 | kfree(save_crtcs); | 787 | kfree(save_crtcs); |