drm/fsl-dcu: enable pixel clock when enabling CRTC
The pixel clock should not be on if the CRTC is not in use, hence move clock enable/disable calls into CRTC callbacks. Signed-off-by: Stefan Agner <stefan@agner.ch> Tested-By: Meng Yi <meng.yi@nxp.com>
This commit is contained in:
Родитель
9789037695
Коммит
0a70c998d0
|
@ -51,6 +51,7 @@ static void fsl_dcu_drm_disable_crtc(struct drm_crtc *crtc)
|
||||||
DCU_MODE_DCU_MODE(DCU_MODE_OFF));
|
DCU_MODE_DCU_MODE(DCU_MODE_OFF));
|
||||||
regmap_write(fsl_dev->regmap, DCU_UPDATE_MODE,
|
regmap_write(fsl_dev->regmap, DCU_UPDATE_MODE,
|
||||||
DCU_UPDATE_MODE_READREG);
|
DCU_UPDATE_MODE_READREG);
|
||||||
|
clk_disable_unprepare(fsl_dev->pix_clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc)
|
static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc)
|
||||||
|
@ -58,6 +59,7 @@ static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc)
|
||||||
struct drm_device *dev = crtc->dev;
|
struct drm_device *dev = crtc->dev;
|
||||||
struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
|
struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
|
||||||
|
|
||||||
|
clk_prepare_enable(fsl_dev->pix_clk);
|
||||||
regmap_update_bits(fsl_dev->regmap, DCU_DCU_MODE,
|
regmap_update_bits(fsl_dev->regmap, DCU_DCU_MODE,
|
||||||
DCU_MODE_DCU_MODE_MASK,
|
DCU_MODE_DCU_MODE_MASK,
|
||||||
DCU_MODE_DCU_MODE(DCU_MODE_NORMAL));
|
DCU_MODE_DCU_MODE(DCU_MODE_NORMAL));
|
||||||
|
|
|
@ -267,12 +267,6 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_prepare_enable(fsl_dev->pix_clk);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(dev, "failed to enable pix clk\n");
|
|
||||||
goto disable_dcu_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fsl_dev->tcon)
|
if (fsl_dev->tcon)
|
||||||
fsl_tcon_bypass_enable(fsl_dev->tcon);
|
fsl_tcon_bypass_enable(fsl_dev->tcon);
|
||||||
fsl_dcu_drm_init_planes(fsl_dev->drm);
|
fsl_dcu_drm_init_planes(fsl_dev->drm);
|
||||||
|
@ -286,10 +280,6 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
|
||||||
enable_irq(fsl_dev->irq);
|
enable_irq(fsl_dev->irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
disable_dcu_clk:
|
|
||||||
clk_disable_unprepare(fsl_dev->clk);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -403,18 +393,12 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
|
||||||
goto disable_clk;
|
goto disable_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_prepare_enable(fsl_dev->pix_clk);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(dev, "failed to enable pix clk\n");
|
|
||||||
goto unregister_pix_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
fsl_dev->tcon = fsl_tcon_init(dev);
|
fsl_dev->tcon = fsl_tcon_init(dev);
|
||||||
|
|
||||||
drm = drm_dev_alloc(driver, dev);
|
drm = drm_dev_alloc(driver, dev);
|
||||||
if (IS_ERR(drm)) {
|
if (IS_ERR(drm)) {
|
||||||
ret = PTR_ERR(drm);
|
ret = PTR_ERR(drm);
|
||||||
goto disable_pix_clk;
|
goto unregister_pix_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
fsl_dev->dev = dev;
|
fsl_dev->dev = dev;
|
||||||
|
@ -435,8 +419,6 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
unref:
|
unref:
|
||||||
drm_dev_unref(drm);
|
drm_dev_unref(drm);
|
||||||
disable_pix_clk:
|
|
||||||
clk_disable_unprepare(fsl_dev->pix_clk);
|
|
||||||
unregister_pix_clk:
|
unregister_pix_clk:
|
||||||
clk_unregister(fsl_dev->pix_clk);
|
clk_unregister(fsl_dev->pix_clk);
|
||||||
disable_clk:
|
disable_clk:
|
||||||
|
@ -449,7 +431,6 @@ static int fsl_dcu_drm_remove(struct platform_device *pdev)
|
||||||
struct fsl_dcu_drm_device *fsl_dev = platform_get_drvdata(pdev);
|
struct fsl_dcu_drm_device *fsl_dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
clk_disable_unprepare(fsl_dev->clk);
|
clk_disable_unprepare(fsl_dev->clk);
|
||||||
clk_disable_unprepare(fsl_dev->pix_clk);
|
|
||||||
clk_unregister(fsl_dev->pix_clk);
|
clk_unregister(fsl_dev->pix_clk);
|
||||||
drm_put_dev(fsl_dev->drm);
|
drm_put_dev(fsl_dev->drm);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче