From: hjc Date: Tue, 5 May 2015 06:40:00 +0000 (+0800) Subject: rk3368 lcdc: fix system crash when send reboot cmd in sleep mode X-Git-Tag: firefly_0821_release~4158^2~119 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=506d331dde0ded2b8450134927a73bd93103a7d8;p=firefly-linux-kernel-4.4.55.git rk3368 lcdc: fix system crash when send reboot cmd in sleep mode Signed-off-by: hjc --- diff --git a/drivers/video/rockchip/lcdc/rk3368_lcdc.c b/drivers/video/rockchip/lcdc/rk3368_lcdc.c index 39fc8f50fff3..a86ef24df06b 100755 --- a/drivers/video/rockchip/lcdc/rk3368_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3368_lcdc.c @@ -479,25 +479,26 @@ static void rk3368_lcdc_deint(struct lcdc_device *lcdc_dev) { u32 mask, val; - rk3368_lcdc_disable_irq(lcdc_dev); - spin_lock(&lcdc_dev->reg_lock); - mask = m_WIN0_EN; - val = v_WIN0_EN(0); - lcdc_msk_reg(lcdc_dev, WIN0_CTRL0, mask, val); - lcdc_msk_reg(lcdc_dev, WIN1_CTRL0, mask, val); - - mask = m_WIN2_EN | m_WIN2_MST0_EN | - m_WIN2_MST1_EN | - m_WIN2_MST2_EN | m_WIN2_MST3_EN; - val = v_WIN2_EN(0) | v_WIN2_MST0_EN(0) | - v_WIN2_MST1_EN(0) | - v_WIN2_MST2_EN(0) | v_WIN2_MST3_EN(0); - lcdc_msk_reg(lcdc_dev, WIN2_CTRL0, mask, val); - lcdc_msk_reg(lcdc_dev, WIN3_CTRL0, mask, val); - lcdc_cfg_done(lcdc_dev); - spin_unlock(&lcdc_dev->reg_lock); - mdelay(50); + if (lcdc_dev->clk_on) { + rk3368_lcdc_disable_irq(lcdc_dev); + spin_lock(&lcdc_dev->reg_lock); + mask = m_WIN0_EN; + val = v_WIN0_EN(0); + lcdc_msk_reg(lcdc_dev, WIN0_CTRL0, mask, val); + lcdc_msk_reg(lcdc_dev, WIN1_CTRL0, mask, val); + mask = m_WIN2_EN | m_WIN2_MST0_EN | + m_WIN2_MST1_EN | + m_WIN2_MST2_EN | m_WIN2_MST3_EN; + val = v_WIN2_EN(0) | v_WIN2_MST0_EN(0) | + v_WIN2_MST1_EN(0) | + v_WIN2_MST2_EN(0) | v_WIN2_MST3_EN(0); + lcdc_msk_reg(lcdc_dev, WIN2_CTRL0, mask, val); + lcdc_msk_reg(lcdc_dev, WIN3_CTRL0, mask, val); + lcdc_cfg_done(lcdc_dev); + spin_unlock(&lcdc_dev->reg_lock); + mdelay(50); + } } static int rk3368_lcdc_post_cfg(struct rk_lcdc_driver *dev_drv) @@ -4847,8 +4848,8 @@ static void rk3368_lcdc_shutdown(struct platform_device *pdev) flush_kthread_worker(&dev_drv->update_regs_worker); kthread_stop(dev_drv->update_regs_thread); rk3368_lcdc_deint(lcdc_dev); - if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable) - dev_drv->trsm_ops->disable(); + /*if (dev_drv->trsm_ops && dev_drv->trsm_ops->disable) + dev_drv->trsm_ops->disable();*/ rk3368_lcdc_clk_disable(lcdc_dev); rk_disp_pwr_disable(dev_drv);