mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
drm/rockchip: vop2: Add pclk support
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com> Change-Id: If35f3ce459a9e36df562fa015e47d2ecf2d740d2
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user