summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
diff options
context:
space:
mode:
authorHsiao Chien Sung <shawn.sung@mediatek.com>2023-12-14 13:58:38 +0800
committerChun-Kuang Hu <chunkuang.hu@kernel.org>2023-12-14 14:34:13 +0000
commitb97fa2f3e19b9bbac934a2cfa9218aa67f12240e (patch)
tree3ad1b412f780bbc4f211cb015e2d2008132ab1d7 /drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
parent7bacaee4f5d0fdf00b1734c1be67cc415b3822c0 (diff)
drm/mediatek: Power on/off devices with function pointers
Different from OVL, OVL adaptor is a pseudo device so we didn't define it in the device tree, consequently, pm_runtime_resume_and_get() called by .atomic_enable() powers on no device. For this reason, we implement a function to power on the RDMAs in OVL adaptor, and the system will make sure the IOMMUs are powered on as well because of the device link (iommus) in the RDMA nodes in DTS. This patch separates power and clock management process, it would be easier to maintain and add extensions. Reviewed-by: CK Hu <ck.hu@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> Link: https://patchwork.kernel.org/project/dri-devel/patch/20231214055847.4936-15-shawn.sung@mediatek.com/ Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Diffstat (limited to 'drivers/gpu/drm/mediatek/mtk_mdp_rdma.c')
-rw-r--r--drivers/gpu/drm/mediatek/mtk_mdp_rdma.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
index c3adaeefd551..dc7c9e991990 100644
--- a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
+++ b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
@@ -242,6 +242,22 @@ size_t mtk_mdp_rdma_get_num_formats(struct device *dev)
return ARRAY_SIZE(formats);
}
+int mtk_mdp_rdma_power_on(struct device *dev)
+{
+ int ret = pm_runtime_resume_and_get(dev);
+
+ if (ret < 0) {
+ dev_err(dev, "Failed to power on: %d\n", ret);
+ return ret;
+ }
+ return 0;
+}
+
+void mtk_mdp_rdma_power_off(struct device *dev)
+{
+ pm_runtime_put(dev);
+}
+
int mtk_mdp_rdma_clk_enable(struct device *dev)
{
struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev);