rk fb: add disable screen scaler when switch hdmi resolution if dispmode is ONE_DUAL
authorzwl <zwl@rockchips.com>
Wed, 20 Aug 2014 07:32:17 +0000 (15:32 +0800)
committerzwl <zwl@rockchips.com>
Wed, 20 Aug 2014 07:32:30 +0000 (15:32 +0800)
drivers/video/rockchip/rk_fb.c

index f8819bf9fc44bb6df294f955caca828e00e10865..d2c2ea516fcefb145baf6e002777f34a4d075822 100755 (executable)
@@ -3216,6 +3216,7 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
        if (unlikely(!rk_fb) || unlikely(!pmy_dev_drv) || unlikely(!screen))
                return -ENODEV;
 
+       rk_fb_get_prmry_screen(&primary_screen);
        sprintf(name, "lcdc%d", lcdc_id);
        if (rk_fb->disp_mode != DUAL) {
                dev_drv = rk_fb->lcdc_dev_drv[0];
@@ -3225,6 +3226,12 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
                }
                if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable)
                        dev_drv->trsm_ops->disable();
+               /*
+                * switch lcdc screen to primary screen size that may
+                * used for MID, when hdmi remove if disp mode is ONE DUAL
+                */
+               if (primary_screen.type != SCREEN_HDMI)
+                       rk_fb_set_screen_scaler(&primary_screen, 0);
        } else {
                dev_drv = rk_get_lcdc_drv(name);
                if (dev_drv == NULL) {
@@ -3238,7 +3245,6 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
        if (enable == 2 /*&& dev_drv->enable*/)
                return 0;
 
-       rk_fb_get_prmry_screen(&primary_screen);
        if (!enable) {
                /* if screen type is different, we do not disable lcdc. */
                if (dev_drv->cur_screen->type != screen->type)
@@ -3257,10 +3263,6 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
                                        dev_drv->ops->open(dev_drv, i, 0);
                        }
                } else {
-                       /* switch lcdc screen to primary screen size
-                        * when hdmi remove if disp mode is ONE DUAL
-                        */
-                       rk_fb_set_screen_scaler(&primary_screen, 0);
                        if (dev_drv->trsm_ops && dev_drv->trsm_ops->enable)
                                dev_drv->trsm_ops->enable();
                }