From: hjc Date: Mon, 8 Dec 2014 10:24:22 +0000 (+0800) Subject: rk312x lcdc: fix vop csc config error X-Git-Tag: firefly_0821_release~4407 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=59a94c106e66d0dbac82f7c57a25ba3ebe597896;p=firefly-linux-kernel-4.4.55.git rk312x lcdc: fix vop csc config error --- diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.c b/drivers/video/rockchip/lcdc/rk312x_lcdc.c index 82347910f19a..ab97f506d413 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.c @@ -258,7 +258,7 @@ static void rk_lcdc_read_reg_defalut_cfg(struct lcdc_device *lcdc_dev) spin_lock(&lcdc_dev->reg_lock); for (reg = 0; reg < 0xe0; reg += 4) { - val = lcdc_readl(lcdc_dev, reg); + val = lcdc_readl_backup(lcdc_dev, reg); if (reg == WIN0_ACT_INFO) { win0->area[0].xact = (val & m_ACT_WIDTH)+1; win0->area[0].yact = ((val & m_ACT_HEIGHT)>>16)+1; @@ -1057,7 +1057,8 @@ static void rk312x_lcdc_select_bcsh(struct rk_lcdc_driver *dev_drv, if (dev_drv->output_color == COLOR_RGB) { /* bypass */ bcsh_ctrl = lcdc_readl(lcdc_dev, BCSH_CTRL); - if ((bcsh_ctrl&m_BCSH_EN) == 1)/*bcsh enabled*/ + if (((bcsh_ctrl&m_BCSH_EN) == 1) || + (dev_drv->bcsh.enable == 1))/*bcsh enabled*/ lcdc_msk_reg(lcdc_dev, BCSH_CTRL, m_BCSH_R2Y_EN | m_BCSH_Y2R_EN, v_BCSH_R2Y_EN(1) | v_BCSH_Y2R_EN(1)); @@ -2008,7 +2009,6 @@ static int rk312x_lcdc_open_bcsh(struct rk_lcdc_driver *dev_drv, bool open) } spin_lock(&lcdc_dev->reg_lock); if (lcdc_dev->clk_on) { - rk312x_lcdc_select_bcsh(dev_drv, lcdc_dev); if (open) { lcdc_msk_reg(lcdc_dev, BCSH_CTRL, m_BCSH_EN | m_BCSH_OUT_MODE, @@ -2018,11 +2018,14 @@ static int rk312x_lcdc_open_bcsh(struct rk_lcdc_driver *dev_drv, bool open) v_BCSH_CONTRAST(0x80) | v_BCSH_SAT_CON(0x80)); lcdc_writel(lcdc_dev, BCSH_H, v_BCSH_COS_HUE(0x80)); + dev_drv->bcsh.enable = 1; } else { mask = m_BCSH_EN; val = v_BCSH_EN(0); lcdc_msk_reg(lcdc_dev, BCSH_CTRL, mask, val); + dev_drv->bcsh.enable = 0; } + rk312x_lcdc_select_bcsh(dev_drv, lcdc_dev); lcdc_cfg_done(lcdc_dev); } diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.h b/drivers/video/rockchip/lcdc/rk312x_lcdc.h index eeeed0db4950..1d3dcc8f164d 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.h +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.h @@ -703,6 +703,13 @@ static inline void lcdc_writel(struct lcdc_device *lcdc_dev, u32 offset, u32 v) } static inline u32 lcdc_readl(struct lcdc_device *lcdc_dev, u32 offset) +{ + u32 v; + v = readl_relaxed(lcdc_dev->regs + offset); + return v; +} + +static inline u32 lcdc_readl_backup(struct lcdc_device *lcdc_dev, u32 offset) { u32 v; u32 *_pv = (u32*)lcdc_dev->regsbak;