diff options
author | Alison Wang <b18965@freescale.com> | 2017-09-14 03:32:01 (GMT) |
---|---|---|
committer | Xie Xiaobo <xiaobo.xie@nxp.com> | 2017-09-25 07:25:50 (GMT) |
commit | 3c9d544d91741b259bbd863ae9841be2e49de94c (patch) | |
tree | e3fcc8727021211034c0910efe15011b7de39e40 /drivers/gpu | |
parent | 618875870eace8f96e83b48cb1ceff2042db8109 (diff) | |
download | linux-3c9d544d91741b259bbd863ae9841be2e49de94c.tar.xz |
drm/fsl-dcu: Fix the interrupt issue in suspend/resume functions
drm_atomic_helper_suspend()/drm_atomic_helper_resume() are used in
suspend/resume functions. Interrupt can not be disabled when calling
drm_atomic_helper_resume(). Or else vblank interrupt will not generate
and the error about vblank wait timed out will occur.
This patch will enable interrupt before calling
drm_atomic_helper_resume().
The patch is verified on LS1021ATWR board.
Signed-off-by: Alison Wang <alison.wang@nxp.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c index b1b4ab3..54f60ba 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c @@ -225,7 +225,6 @@ static int fsl_dcu_drm_pm_suspend(struct device *dev) if (!fsl_dev) return 0; - disable_irq(fsl_dev->irq); drm_kms_helper_poll_disable(fsl_dev->drm); console_lock(); @@ -243,6 +242,8 @@ static int fsl_dcu_drm_pm_suspend(struct device *dev) return PTR_ERR(fsl_dev->state); } + disable_irq(fsl_dev->irq); + clk_disable_unprepare(fsl_dev->pix_clk); clk_disable_unprepare(fsl_dev->clk); @@ -269,6 +270,8 @@ static int fsl_dcu_drm_pm_resume(struct device *dev) return ret; } + enable_irq(fsl_dev->irq); + if (fsl_dev->tcon) fsl_tcon_bypass_enable(fsl_dev->tcon); fsl_dcu_drm_init_planes(fsl_dev->drm); @@ -279,7 +282,6 @@ static int fsl_dcu_drm_pm_resume(struct device *dev) console_unlock(); drm_kms_helper_poll_enable(fsl_dev->drm); - enable_irq(fsl_dev->irq); return 0; } |