diff options
| -rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 2957636161e8..3969f7553fe7 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
| @@ -484,6 +484,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 484 | struct drm_connector *save_connectors, *connector; | 484 | struct drm_connector *save_connectors, *connector; |
| 485 | int count = 0, ro, fail = 0; | 485 | int count = 0, ro, fail = 0; |
| 486 | struct drm_crtc_helper_funcs *crtc_funcs; | 486 | struct drm_crtc_helper_funcs *crtc_funcs; |
| 487 | struct drm_mode_set save_set; | ||
| 487 | int ret = 0; | 488 | int ret = 0; |
| 488 | int i; | 489 | int i; |
| 489 | 490 | ||
| @@ -556,6 +557,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 556 | save_connectors[count++] = *connector; | 557 | save_connectors[count++] = *connector; |
| 557 | } | 558 | } |
| 558 | 559 | ||
| 560 | save_set.crtc = set->crtc; | ||
| 561 | save_set.mode = &set->crtc->mode; | ||
| 562 | save_set.x = set->crtc->x; | ||
| 563 | save_set.y = set->crtc->y; | ||
| 564 | save_set.fb = set->crtc->fb; | ||
| 565 | |||
| 559 | /* We should be able to check here if the fb has the same properties | 566 | /* We should be able to check here if the fb has the same properties |
| 560 | * and then just flip_or_move it */ | 567 | * and then just flip_or_move it */ |
| 561 | if (set->crtc->fb != set->fb) { | 568 | if (set->crtc->fb != set->fb) { |
| @@ -721,6 +728,12 @@ fail: | |||
| 721 | *connector = save_connectors[count++]; | 728 | *connector = save_connectors[count++]; |
| 722 | } | 729 | } |
| 723 | 730 | ||
| 731 | /* Try to restore the config */ | ||
| 732 | if (mode_changed && | ||
| 733 | !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x, | ||
| 734 | save_set.y, save_set.fb)) | ||
| 735 | DRM_ERROR("failed to restore config after modeset failure\n"); | ||
| 736 | |||
| 724 | kfree(save_connectors); | 737 | kfree(save_connectors); |
| 725 | kfree(save_encoders); | 738 | kfree(save_encoders); |
| 726 | kfree(save_crtcs); | 739 | kfree(save_crtcs); |
