summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index 2df44041e65c..f3c8ea8d18ad 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -1492,7 +1492,6 @@ static int mxc_epdc_fb_set_par(struct fb_info *info)
*/
if (!fb_data->hw_ready) {
struct fb_videomode mode;
- bool found_match = false;
u32 xres_temp;
fb_var_to_videomode(&mode, screeninfo);
@@ -1506,19 +1505,31 @@ static int mxc_epdc_fb_set_par(struct fb_info *info)
mode.yres = xres_temp;
}
- /* Match videomode against epdc modes */
- for (i = 0; i < fb_data->pdata->num_modes; i++) {
- if (!fb_mode_is_equal(epdc_modes[i].vmode, &mode))
- continue;
- fb_data->cur_mode = &epdc_modes[i];
- found_match = true;
- break;
- }
+ /*
+ * If requested video mode does not match current video
+ * mode, search for a matching panel.
+ */
+ if (fb_data->cur_mode &&
+ !fb_mode_is_equal(fb_data->cur_mode->vmode,
+ &mode)) {
+ bool found_match = false;
+
+ /* Match videomode against epdc modes */
+ for (i = 0; i < fb_data->pdata->num_modes; i++) {
+ if (!fb_mode_is_equal(epdc_modes[i].vmode,
+ &mode))
+ continue;
+ fb_data->cur_mode = &epdc_modes[i];
+ found_match = true;
+ break;
+ }
- if (!found_match) {
- dev_err(fb_data->dev,
- "Failed to match requested video mode\n");
- return EINVAL;
+ if (!found_match) {
+ dev_err(fb_data->dev,
+ "Failed to match requested "
+ "video mode\n");
+ return EINVAL;
+ }
}
/* Found a match - Grab timing params */