diff options
Diffstat (limited to 'drivers')
| -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); |
