diff options
Diffstat (limited to 'drivers/gpu/drm/drm_crtc_helper.c')
-rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 4231d6db72e..7d0f00a935f 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
@@ -216,7 +216,7 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc) | |||
216 | EXPORT_SYMBOL(drm_helper_crtc_in_use); | 216 | EXPORT_SYMBOL(drm_helper_crtc_in_use); |
217 | 217 | ||
218 | /** | 218 | /** |
219 | * drm_disable_unused_functions - disable unused objects | 219 | * drm_helper_disable_unused_functions - disable unused objects |
220 | * @dev: DRM device | 220 | * @dev: DRM device |
221 | * | 221 | * |
222 | * LOCKING: | 222 | * LOCKING: |
@@ -702,7 +702,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
702 | if (encoder->crtc != crtc) | 702 | if (encoder->crtc != crtc) |
703 | continue; | 703 | continue; |
704 | 704 | ||
705 | DRM_INFO("%s: set mode %s %x\n", drm_get_encoder_name(encoder), | 705 | DRM_DEBUG("%s: set mode %s %x\n", drm_get_encoder_name(encoder), |
706 | mode->name, mode->base.id); | 706 | mode->name, mode->base.id); |
707 | encoder_funcs = encoder->helper_private; | 707 | encoder_funcs = encoder->helper_private; |
708 | encoder_funcs->mode_set(encoder, mode, adjusted_mode); | 708 | encoder_funcs->mode_set(encoder, mode, adjusted_mode); |
@@ -1032,7 +1032,8 @@ bool drm_helper_initial_config(struct drm_device *dev) | |||
1032 | /* | 1032 | /* |
1033 | * we shouldn't end up with no modes here. | 1033 | * we shouldn't end up with no modes here. |
1034 | */ | 1034 | */ |
1035 | WARN(!count, "No connectors reported connected with modes\n"); | 1035 | if (count == 0) |
1036 | printk(KERN_INFO "No connectors reported connected with modes\n"); | ||
1036 | 1037 | ||
1037 | drm_setup_crtcs(dev); | 1038 | drm_setup_crtcs(dev); |
1038 | 1039 | ||
@@ -1162,6 +1163,9 @@ EXPORT_SYMBOL(drm_helper_mode_fill_fb_struct); | |||
1162 | int drm_helper_resume_force_mode(struct drm_device *dev) | 1163 | int drm_helper_resume_force_mode(struct drm_device *dev) |
1163 | { | 1164 | { |
1164 | struct drm_crtc *crtc; | 1165 | struct drm_crtc *crtc; |
1166 | struct drm_encoder *encoder; | ||
1167 | struct drm_encoder_helper_funcs *encoder_funcs; | ||
1168 | struct drm_crtc_helper_funcs *crtc_funcs; | ||
1165 | int ret; | 1169 | int ret; |
1166 | 1170 | ||
1167 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | 1171 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { |
@@ -1174,6 +1178,25 @@ int drm_helper_resume_force_mode(struct drm_device *dev) | |||
1174 | 1178 | ||
1175 | if (ret == false) | 1179 | if (ret == false) |
1176 | DRM_ERROR("failed to set mode on crtc %p\n", crtc); | 1180 | DRM_ERROR("failed to set mode on crtc %p\n", crtc); |
1181 | |||
1182 | /* Turn off outputs that were already powered off */ | ||
1183 | if (drm_helper_choose_crtc_dpms(crtc)) { | ||
1184 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { | ||
1185 | |||
1186 | if(encoder->crtc != crtc) | ||
1187 | continue; | ||
1188 | |||
1189 | encoder_funcs = encoder->helper_private; | ||
1190 | if (encoder_funcs->dpms) | ||
1191 | (*encoder_funcs->dpms) (encoder, | ||
1192 | drm_helper_choose_encoder_dpms(encoder)); | ||
1193 | |||
1194 | crtc_funcs = crtc->helper_private; | ||
1195 | if (crtc_funcs->dpms) | ||
1196 | (*crtc_funcs->dpms) (crtc, | ||
1197 | drm_helper_choose_crtc_dpms(crtc)); | ||
1198 | } | ||
1199 | } | ||
1177 | } | 1200 | } |
1178 | /* disable the unused connectors while restoring the modesetting */ | 1201 | /* disable the unused connectors while restoring the modesetting */ |
1179 | drm_helper_disable_unused_functions(dev); | 1202 | drm_helper_disable_unused_functions(dev); |