[kernel] video: rockchip: lcdc: 3288: fix adjust gamma lut lead to display issue

If the lcd dtsi file doesn't define dsp_lut and user open BizLineAdjust.apk
to adjust brightness or contrast will lead to display issue, now fix it.

Change-Id: Ieac8e8bb497b3c750b94cf23830524477153a717
Signed-off-by: Firefly <service@t-firefly.com>
(cherry picked from commit 01d294f51fa76b01605498ba1b4935ae5448ff47)
This commit is contained in:
Firefly
2015-12-21 15:30:03 +08:00
committed by cjp
parent ecfb074102
commit c61fa45366

View File

@ -3304,32 +3304,36 @@ static int rk3288_set_dsp_lut(struct rk_lcdc_driver *dev_drv, int *lut)
struct lcdc_device *lcdc_dev =
container_of(dev_drv, struct lcdc_device, driver);
if (!lut) {
dev_err(dev_drv->dev, "no buffer to backup lut data!\n");
return -1;
}
lcdc_msk_reg(lcdc_dev, DSP_CTRL1, m_DSP_LUT_EN, v_DSP_LUT_EN(0));
lcdc_cfg_done(lcdc_dev);
mdelay(25);
if (dev_drv->cur_screen->dsp_lut) {
for (i = 0; i < 256; i++) {
v = dev_drv->cur_screen->dsp_lut[i] = lut[i];
c = lcdc_dev->dsp_lut_addr_base + (i << 2);
b = (v & 0xff) << 2;
g = (v & 0xff00) << 4;
r = (v & 0xff0000) << 6;
v = r + g + b;
for (j = 0; j < 4; j++) {
writel_relaxed(v, c);
v += (1 + (1 << 10) + (1 << 20)) ;
c++;
}
for (i = 0; i < 256; i++) {
if (dev_drv->cur_screen->dsp_lut)
dev_drv->cur_screen->dsp_lut[i] = lut[i];
v = lut[i];
c = lcdc_dev->dsp_lut_addr_base + (i << 2);
b = (v & 0xff) << 2;
g = (v & 0xff00) << 4;
r = (v & 0xff0000) << 6;
v = r + g + b;
for (j = 0; j < 4; j++) {
writel_relaxed(v, c);
v += (1 + (1 << 10) + (1 << 20)) ;
c++;
}
} else {
dev_err(dev_drv->dev, "no buffer to backup lut data!\n");
ret = -1;
}
do{
do {
lcdc_msk_reg(lcdc_dev, DSP_CTRL1, m_DSP_LUT_EN, v_DSP_LUT_EN(1));
lcdc_cfg_done(lcdc_dev);
}while(!lcdc_read_bit(lcdc_dev,DSP_CTRL1,m_DSP_LUT_EN));
} while(!lcdc_read_bit(lcdc_dev, DSP_CTRL1, m_DSP_LUT_EN));
return ret;
}