diff options
author | xinliang.liu <xinliang.liu@linaro.org> | 2015-08-20 10:19:44 +0800 |
---|---|---|
committer | Guodong Xu <guodong.xu@linaro.org> | 2015-09-08 20:40:08 +0800 |
commit | 88eed1922b8bf3a8c4f20d964c1ee9a80ffa2c98 (patch) | |
tree | cc2a9362f8c074f316dbf396b4868bf321c5d7f1 | |
parent | 762c3e7d7b440bd37316a1fd1b47d0af2b525a1d (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.c | 8 |
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"; |