mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
media: rockchip: rga: use clk_bulk api
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>
This commit is contained in:
parent
65017e26c0
commit
a2a4f69fd2
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user