spin_unlock(&lcdc_dev->reg_lock);
return ovl;
}
+static rk3288_lcdc_set_irq_to_cpu(struct rk_lcdc_driver * dev_drv,int enable)
+{
+ struct lcdc_device *lcdc_dev =
+ container_of(dev_drv,struct lcdc_device,driver);
+ if (enable)
+ enable_irq(lcdc_dev->irq);
+ else
+ disable_irq(lcdc_dev->irq);
+ return 0;
+}
int rk3288_lcdc_poll_vblank(struct rk_lcdc_driver *dev_drv)
{
u32 int_reg;
int ret;
- if (lcdc_dev->clk_on) {
+ if (lcdc_dev->clk_on &&(!dev_drv->suspend_flag)){
int_reg = lcdc_readl(lcdc_dev, INTR_CTRL0);
if (int_reg & m_LINE_FLAG_INTR_STS) {
lcdc_msk_reg(lcdc_dev, INTR_CTRL0, m_LINE_FLAG_INTR_CLR,
.dump_reg = rk3288_lcdc_reg_dump,
.mmu_en = rk3288_lcdc_mmu_en,
.cfg_done = rk3288_lcdc_config_done,
+ .set_irq_to_cpu = rk3288_lcdc_set_irq_to_cpu,
};
static int rk3288_lcdc_parse_irq(struct lcdc_device *lcdc_dev,unsigned int reg_val)
{
bool rk_fb_poll_wait_frame_complete(void)
{
uint32_t timeout = RK_LF_MAX_TIMEOUT;
- if (rk_fb_poll_prmry_screen_vblank() == RK_LF_STATUS_NC)
+ struct rk_lcdc_driver *dev_drv = rk_get_prmry_lcdc_drv();
+
+ if (likely(dev_drv)) {
+ if (dev_drv->ops->set_irq_to_cpu)
+ dev_drv->ops->set_irq_to_cpu(dev_drv,0);
+ }
+
+
+ if (rk_fb_poll_prmry_screen_vblank() == RK_LF_STATUS_NC){
+ if(dev_drv->ops->set_irq_to_cpu)
+ dev_drv->ops->set_irq_to_cpu(dev_drv,1);
return false;
+ }
while (!(rk_fb_poll_prmry_screen_vblank() == RK_LF_STATUS_FR) && --timeout);
while (!(rk_fb_poll_prmry_screen_vblank() == RK_LF_STATUS_FC) && --timeout);
+ if (likely(dev_drv)) {
+ if (dev_drv->ops->set_irq_to_cpu)
+ dev_drv->ops->set_irq_to_cpu(dev_drv,1);
+ }
+
return true;
}
static int rk_fb_open(struct fb_info *info, int user)
int (*set_dsp_lut) (struct rk_lcdc_driver * dev_drv, int *lut);
int (*read_dsp_lut) (struct rk_lcdc_driver * dev_drv, int *lut);
int (*lcdc_hdmi_process) (struct rk_lcdc_driver * dev_drv, int mode); //some lcdc need to some process in hdmi mode
+ int (*set_irq_to_cpu)(struct rk_lcdc_driver *dev_drv,int enable);
int (*poll_vblank) (struct rk_lcdc_driver * dev_drv);
int (*lcdc_rst) (struct rk_lcdc_driver * dev_drv);
int (*dpi_open) (struct rk_lcdc_driver * dev_drv, bool open);