aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch b/target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch
new file mode 100644
index 0000000000..f7775015e1
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.10/950-0541-rpivid-Switch-to-new-clock-api.patch
@@ -0,0 +1,54 @@
+From 4ffdf70996826a87fceb78f2399c98e8a4c6aa89 Mon Sep 17 00:00:00 2001
+From: Dom Cobley <popcornmix@gmail.com>
+Date: Mon, 19 Apr 2021 19:30:26 +0100
+Subject: [PATCH] rpivid: Switch to new clock api
+
+Signed-off-by: Dom Cobley <popcornmix@gmail.com>
+---
+ drivers/staging/media/rpivid/rpivid.h | 1 +
+ drivers/staging/media/rpivid/rpivid_video.c | 11 +++--------
+ 2 files changed, 4 insertions(+), 8 deletions(-)
+
+--- a/drivers/staging/media/rpivid/rpivid.h
++++ b/drivers/staging/media/rpivid/rpivid.h
+@@ -172,6 +172,7 @@ struct rpivid_dev {
+ void __iomem *base_h265;
+
+ struct clk *clock;
++ struct clk_request *hevc_req;
+
+ struct rpivid_hw_irq_ctrl ic_active1;
+ struct rpivid_hw_irq_ctrl ic_active2;
+--- a/drivers/staging/media/rpivid/rpivid_video.c
++++ b/drivers/staging/media/rpivid/rpivid_video.c
+@@ -499,8 +499,8 @@ static int rpivid_start_streaming(struct
+ if (V4L2_TYPE_IS_OUTPUT(vq->type) && dev->dec_ops->start)
+ ret = dev->dec_ops->start(ctx);
+
+- ret = clk_set_rate(dev->clock, max_hevc_clock);
+- if (ret) {
++ dev->hevc_req = clk_request_start(dev->clock, max_hevc_clock);
++ if (!dev->hevc_req) {
+ dev_err(dev->dev, "Failed to set clock rate\n");
+ goto out;
+ }
+@@ -520,18 +520,13 @@ static void rpivid_stop_streaming(struct
+ {
+ struct rpivid_ctx *ctx = vb2_get_drv_priv(vq);
+ struct rpivid_dev *dev = ctx->dev;
+- long min_hevc_clock = clk_round_rate(dev->clock, 0);
+- int ret;
+
+ if (V4L2_TYPE_IS_OUTPUT(vq->type) && dev->dec_ops->stop)
+ dev->dec_ops->stop(ctx);
+
+ rpivid_queue_cleanup(vq, VB2_BUF_STATE_ERROR);
+
+- ret = clk_set_rate(dev->clock, min_hevc_clock);
+- if (ret)
+- dev_err(dev->dev, "Failed to set minimum clock rate\n");
+-
++ clk_request_done(dev->hevc_req);
+ clk_disable_unprepare(dev->clock);
+ }
+