summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxinliang.liu <xinliang.liu@linaro.org>2015-08-20 10:19:44 +0800
committerGuodong Xu <guodong.xu@linaro.org>2015-09-08 20:40:08 +0800
commit88eed1922b8bf3a8c4f20d964c1ee9a80ffa2c98 (patch)
treecc2a9362f8c074f316dbf396b4868bf321c5d7f1
parent762c3e7d7b440bd37316a1fd1b47d0af2b525a1d (diff)
drm: when switching to a mode fails, skip to the next one
There is a bug. When swiching to a mode fails, the driver cannot proceed to the next available mode. Signed-off-by: xinliang.liu <xinliang.liu@linaro.org>
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 164dfb34799e..483174cfe8be 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -229,6 +229,7 @@ static void modehack_handler(struct work_struct *work)
struct drm_display_mode *mode1, *mode_first = NULL, *mode2 = NULL;
bool next = false;
char *envp[2];
+ int ret;
if (!modehack_set.crtc)
return;
@@ -254,6 +255,7 @@ static void modehack_handler(struct work_struct *work)
if (next) {
next = false;
mode2 = mode1;
+ break;
}
next = drm_mode_equal(&modehack_set.crtc->mode, mode1);
}
@@ -271,7 +273,11 @@ static void modehack_handler(struct work_struct *work)
modehack_set.num_connectors = 1;
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_STANDBY);
- drm_crtc_helper_set_config(&modehack_set);
+ ret = drm_crtc_helper_set_config(&modehack_set);
+ if (ret) {
+ modehack_set.crtc->mode = *mode2; /* skip this mode */
+ goto bail;
+ }
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
envp[0] = "SOURCE=hotkey";