Re: [RFC PATCH v1 3/5] media: tegra-video: Move PM runtime handle to streaming

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 4/28/20 6:59 AM, Dmitry Osipenko wrote:
External email: Use caution opening links or attachments


28.04.2020 07:20, Sowjanya Komatineni пишет:
diff --git a/drivers/staging/media/tegra-video/csi.c b/drivers/staging/media/tegra-video/csi.c
index b3dd0c3..29ccdae 100644
--- a/drivers/staging/media/tegra-video/csi.c
+++ b/drivers/staging/media/tegra-video/csi.c
@@ -272,8 +272,25 @@ static int tegra_csi_s_stream(struct v4l2_subdev *subdev, int enable)
       struct tegra_vi_channel *chan = v4l2_get_subdev_hostdata(subdev);
       struct tegra_csi_channel *csi_chan = to_csi_chan(subdev);
       struct tegra_csi *csi = csi_chan->csi;
+     int ret;
+
+     if (enable && atomic_add_return(1, &csi->clk_refcnt) == 1) {
+             ret = pm_runtime_get_sync(csi->dev);
+             if (ret < 0) {
+                     dev_err(csi->dev,
+                             "failed to get runtime PM: %d\n", ret);
+                     pm_runtime_put_noidle(csi->dev);
+                     atomic_dec(&csi->clk_refcnt);
+                     return ret;
+             }
+     }
+
+     ret = csi->ops->csi_streaming(csi_chan, chan->pg_mode, enable);

-     return csi->ops->csi_streaming(csi_chan, chan->pg_mode, enable);
+     if ((ret < 0 || !enable) && atomic_dec_and_test(&csi->clk_refcnt))
+             pm_runtime_put_sync(csi->dev);
Runtime PM maintains its own refcount, why these
clk_refcnt/power_on_refcnt are needed?

Streaming is per channel and we can't turn power/clocks off while other channels may still be running.





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux