rk312x lcdc: kernel bcsh selete depend on uboot config
authorhjc <hjc@rock-chips.com>
Fri, 31 Oct 2014 08:48:32 +0000 (16:48 +0800)
committerhjc <hjc@rock-chips.com>
Fri, 31 Oct 2014 08:49:19 +0000 (16:49 +0800)
drivers/video/rockchip/lcdc/rk312x_lcdc.c
include/linux/rk_fb.h

index 6b4b6cefe92227b66f49fb49d9bab6f8e5a94f00..d8ffc64d81056385eadf12329ac32f69a50e54cb 100755 (executable)
@@ -727,8 +727,12 @@ static int rk312x_lcdc_pre_init(struct rk_lcdc_driver *dev_drv)
                lcdc_cfg_done(lcdc_dev);
                while(lcdc_readl(lcdc_dev, SYS_CTRL) & (m_WIN0_EN | m_WIN1_EN));
        }*/
-       if ((dev_drv->ops->open_bcsh) && (dev_drv->output_color == COLOR_YCBCR))
-               dev_drv->ops->open_bcsh(dev_drv, 1);
+       if ((dev_drv->ops->open_bcsh) && (dev_drv->output_color == COLOR_YCBCR)) {
+               if(support_uboot_display())
+                       dev_drv->bcsh_init_status = 1;
+               else
+                       dev_drv->ops->open_bcsh(dev_drv, 1);
+       }
        lcdc_dev->pre_init = true;
 
        return 0;
@@ -1998,7 +2002,10 @@ static int rk312x_lcdc_open_bcsh(struct rk_lcdc_driver *dev_drv, bool open)
        struct lcdc_device *lcdc_dev =
            container_of(dev_drv, struct lcdc_device, driver);
        u32 mask, val;
-
+       if(dev_drv->bcsh_init_status && open) {
+               dev_drv->bcsh_init_status = 0;
+               return 0;
+       }
        spin_lock(&lcdc_dev->reg_lock);
        if (lcdc_dev->clk_on) {
                rk312x_lcdc_select_bcsh(dev_drv,  lcdc_dev);
index 85959bace47dfeafd3a0ce89bd75faa5fcdc9c8a..bf9b6205d68fc48ed707ac81e33399b9c4a2a5b1 100755 (executable)
@@ -593,6 +593,7 @@ struct rk_lcdc_driver {
        struct rk_lcdc_bcsh bcsh;
        int *hwc_lut;
        int uboot_logo;
+       int bcsh_init_status;
 };
 
 struct rk_fb_par {