return 0;
}
+
static int rk312x_lcdc_set_hwc_lut(struct rk_lcdc_driver *dev_drv,
int *hwc_lut, int mode)
{
return 0;
}
-static int rk312x_lcdc_set_lut(struct rk_lcdc_driver *dev_drv)
+
+static int rk312x_lcdc_set_lut(struct rk_lcdc_driver *dev_drv,
+ int *dsp_lut)
{
int i = 0;
int __iomem *c;
struct lcdc_device *lcdc_dev =
container_of(dev_drv, struct lcdc_device, driver);
+ if (!dsp_lut)
+ return 0;
+
spin_lock(&lcdc_dev->reg_lock);
lcdc_msk_reg(lcdc_dev, SYS_CTRL, m_DSP_LUT_EN, v_DSP_LUT_EN(0));
lcdc_cfg_done(lcdc_dev);
mdelay(25);
for (i = 0; i < 256; i++) {
- v = dev_drv->cur_screen->dsp_lut[i];
- c = lcdc_dev->dsp_lut_addr_base + (i<<2);
+ v = dsp_lut[i];
+ c = lcdc_dev->dsp_lut_addr_base + i;
writel_relaxed(v, c);
}
lcdc_msk_reg(lcdc_dev, SYS_CTRL, m_DSP_LUT_EN, v_DSP_LUT_EN(1));
/* set screen lut */
if (dev_drv->cur_screen->dsp_lut)
- rk312x_lcdc_set_lut(dev_drv);
+ rk312x_lcdc_set_lut(dev_drv,
+ dev_drv->cur_screen->dsp_lut);
}
if (win_id < ARRAY_SIZE(lcdc_win))
/* set screen lut */
if (dev_drv->cur_screen && dev_drv->cur_screen->dsp_lut)
- rk312x_lcdc_set_lut(dev_drv);
+ rk312x_lcdc_set_lut(dev_drv,
+ dev_drv->cur_screen->dsp_lut);
/*set hwc lut*/
rk312x_lcdc_set_hwc_lut(dev_drv, dev_drv->hwc_lut, 0);
.get_dsp_bcsh_bcs = rk312x_lcdc_get_bcsh_bcs,
.open_bcsh = rk312x_lcdc_open_bcsh,
.set_screen_scaler = rk312x_lcdc_set_scaler,
+ .set_dsp_lut = rk312x_lcdc_set_lut,
.set_hwc_lut = rk312x_lcdc_set_hwc_lut,
.set_irq_to_cpu = rk312x_lcdc_set_irq_to_cpu,
.dsp_black = rk312x_lcdc_dsp_black,