drm/rockchip: vop2: Add pclk support

Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
Change-Id: If35f3ce459a9e36df562fa015e47d2ecf2d740d2
This commit is contained in:
Wyon Bi
2021-11-23 18:32:29 +08:00
committed by Tao Huang
parent 01ac874b5c
commit 3fdf77eb6f

View File

@@ -690,6 +690,7 @@ struct vop2 {
unsigned int enable_count;
struct clk *hclk;
struct clk *aclk;
struct clk *pclk;
/* list_head of internal clk */
struct list_head clk_list_head;
@@ -2391,8 +2392,14 @@ static int vop2_core_clks_enable(struct vop2 *vop2)
if (ret < 0)
goto err_disable_hclk;
ret = clk_enable(vop2->pclk);
if (ret < 0)
goto err_disable_aclk;
return 0;
err_disable_aclk:
clk_disable(vop2->aclk);
err_disable_hclk:
clk_disable(vop2->hclk);
return ret;
@@ -2400,6 +2407,7 @@ err_disable_hclk:
static void vop2_core_clks_disable(struct vop2 *vop2)
{
clk_disable(vop2->pclk);
clk_disable(vop2->aclk);
clk_disable(vop2->hclk);
}
@@ -2925,7 +2933,15 @@ static int vop2_core_clks_prepare_enable(struct vop2 *vop2)
goto err;
}
ret = clk_prepare_enable(vop2->pclk);
if (ret < 0) {
dev_err(vop2->dev, "failed to enable pclk - %d\n", ret);
goto err1;
}
return 0;
err1:
clk_disable_unprepare(vop2->aclk);
err:
clk_disable_unprepare(vop2->hclk);
@@ -3135,6 +3151,7 @@ static void vop2_disable(struct drm_crtc *crtc)
pm_runtime_put_sync(vop2->dev);
clk_disable_unprepare(vop2->pclk);
clk_disable_unprepare(vop2->aclk);
clk_disable_unprepare(vop2->hclk);
}
@@ -8218,6 +8235,12 @@ static int vop2_bind(struct device *dev, struct device *master, void *data)
return PTR_ERR(vop2->aclk);
}
vop2->pclk = devm_clk_get_optional(vop2->dev, "pclk_vop");
if (IS_ERR(vop2->pclk)) {
DRM_DEV_ERROR(vop2->dev, "failed to get pclk source\n");
return PTR_ERR(vop2->pclk);
}
vop2->irq = platform_get_irq(pdev, 0);
if (vop2->irq < 0) {
DRM_DEV_ERROR(dev, "cannot find irq for vop2\n");