]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: rockchip: rga: use clk_bulk api
authorSven Püschel <s.pueschel@pengutronix.de>
Wed, 20 May 2026 22:44:12 +0000 (00:44 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Thu, 21 May 2026 10:32:19 +0000 (12:32 +0200)
Use the clk_bulk API to avoid code duplication for each of the three
clocks.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/platform/rockchip/rga/rga.c
drivers/media/platform/rockchip/rga/rga.h

index fea63b94c5f3d030576fccfa7859410d26f0d97a..4e710a050cb7c97256d3448692c238eec414b862 100644 (file)
@@ -698,48 +698,10 @@ static const struct video_device rga_videodev = {
        .device_caps = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING,
 };
 
-static int rga_enable_clocks(struct rockchip_rga *rga)
-{
-       int ret;
-
-       ret = clk_prepare_enable(rga->sclk);
-       if (ret) {
-               dev_err(rga->dev, "Cannot enable rga sclk: %d\n", ret);
-               return ret;
-       }
-
-       ret = clk_prepare_enable(rga->aclk);
-       if (ret) {
-               dev_err(rga->dev, "Cannot enable rga aclk: %d\n", ret);
-               goto err_disable_sclk;
-       }
-
-       ret = clk_prepare_enable(rga->hclk);
-       if (ret) {
-               dev_err(rga->dev, "Cannot enable rga hclk: %d\n", ret);
-               goto err_disable_aclk;
-       }
-
-       return 0;
-
-err_disable_aclk:
-       clk_disable_unprepare(rga->aclk);
-err_disable_sclk:
-       clk_disable_unprepare(rga->sclk);
-
-       return ret;
-}
-
-static void rga_disable_clocks(struct rockchip_rga *rga)
-{
-       clk_disable_unprepare(rga->sclk);
-       clk_disable_unprepare(rga->hclk);
-       clk_disable_unprepare(rga->aclk);
-}
-
 static int rga_parse_dt(struct rockchip_rga *rga)
 {
        struct reset_control *core_rst, *axi_rst, *ahb_rst;
+       int ret;
 
        core_rst = devm_reset_control_get(rga->dev, "core");
        if (IS_ERR(core_rst)) {
@@ -771,23 +733,12 @@ static int rga_parse_dt(struct rockchip_rga *rga)
        udelay(1);
        reset_control_deassert(ahb_rst);
 
-       rga->sclk = devm_clk_get(rga->dev, "sclk");
-       if (IS_ERR(rga->sclk)) {
-               dev_err(rga->dev, "failed to get sclk clock\n");
-               return PTR_ERR(rga->sclk);
-       }
-
-       rga->aclk = devm_clk_get(rga->dev, "aclk");
-       if (IS_ERR(rga->aclk)) {
-               dev_err(rga->dev, "failed to get aclk clock\n");
-               return PTR_ERR(rga->aclk);
-       }
-
-       rga->hclk = devm_clk_get(rga->dev, "hclk");
-       if (IS_ERR(rga->hclk)) {
-               dev_err(rga->dev, "failed to get hclk clock\n");
-               return PTR_ERR(rga->hclk);
+       ret = devm_clk_bulk_get_all(rga->dev, &rga->clks);
+       if (ret < 0) {
+               dev_err(rga->dev, "failed to get clocks\n");
+               return ret;
        }
+       rga->num_clks = ret;
 
        return 0;
 }
@@ -935,7 +886,7 @@ static int __maybe_unused rga_runtime_suspend(struct device *dev)
 {
        struct rockchip_rga *rga = dev_get_drvdata(dev);
 
-       rga_disable_clocks(rga);
+       clk_bulk_disable_unprepare(rga->num_clks, rga->clks);
 
        return 0;
 }
@@ -944,7 +895,7 @@ static int __maybe_unused rga_runtime_resume(struct device *dev)
 {
        struct rockchip_rga *rga = dev_get_drvdata(dev);
 
-       return rga_enable_clocks(rga);
+       return clk_bulk_prepare_enable(rga->num_clks, rga->clks);
 }
 
 static const struct dev_pm_ops rga_pm = {
index 72a28b120fabfdce39e7773358d0c9528019e882..2db10acecb40576fd8aeb40e1db238aca026e8af 100644 (file)
@@ -6,6 +6,7 @@
 #ifndef __RGA_H__
 #define __RGA_H__
 
+#include <linux/clk.h>
 #include <linux/platform_device.h>
 #include <media/videobuf2-v4l2.h>
 #include <media/v4l2-ctrls.h>
@@ -81,9 +82,8 @@ struct rockchip_rga {
        struct device *dev;
        struct regmap *grf;
        void __iomem *regs;
-       struct clk *sclk;
-       struct clk *aclk;
-       struct clk *hclk;
+       struct clk_bulk_data *clks;
+       int num_clks;
        struct rockchip_rga_version version;
 
        /* vfd lock */