staging: media: tegra-video: add a per-soc enable/disable op
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 18 Apr 2023 08:00:49 +0000 (10:00 +0200)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 25 May 2023 11:04:48 +0000 (13:04 +0200)
The Tegra20 VI needs an additional operation to enable the VI, add an
operation for that.

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/staging/media/tegra-video/vi.c
drivers/staging/media/tegra-video/vi.h

index 7e47de7..ffce002 100644 (file)
@@ -1952,6 +1952,9 @@ static int tegra_vi_probe(struct platform_device *pdev)
        vi->client.ops = &vi_client_ops;
        vi->client.dev = &pdev->dev;
 
+       if (vi->ops->vi_enable)
+               vi->ops->vi_enable(vi, true);
+
        ret = host1x_client_register(&vi->client);
        if (ret < 0) {
                dev_err(&pdev->dev,
@@ -1962,6 +1965,8 @@ static int tegra_vi_probe(struct platform_device *pdev)
        return 0;
 
 rpm_disable:
+       if (vi->ops->vi_enable)
+               vi->ops->vi_enable(vi, false);
        pm_runtime_disable(&pdev->dev);
        return ret;
 }
@@ -1972,6 +1977,8 @@ static int tegra_vi_remove(struct platform_device *pdev)
 
        host1x_client_unregister(&vi->client);
 
+       if (vi->ops->vi_enable)
+               vi->ops->vi_enable(vi, false);
        pm_runtime_disable(&pdev->dev);
 
        return 0;
index b424c96..886b10e 100644 (file)
@@ -37,8 +37,11 @@ enum tegra_vi_pg_mode {
        TEGRA_VI_PG_PATCH,
 };
 
+struct tegra_vi;
+
 /**
  * struct tegra_vi_ops - Tegra VI operations
+ * @vi_enable: soc-specific operations needed to enable/disable the VI peripheral
  * @vi_fmt_align: modify `pix` to fit the hardware alignment
  *             requirements and fill image geometry
  * @vi_start_streaming: starts media pipeline, subdevice streaming, sets up
@@ -48,6 +51,7 @@ enum tegra_vi_pg_mode {
  *             back any queued buffers.
  */
 struct tegra_vi_ops {
+       int (*vi_enable)(struct tegra_vi *vi, bool on);
        void (*vi_fmt_align)(struct v4l2_pix_format *pix, unsigned int bpp);
        int (*vi_start_streaming)(struct vb2_queue *vq, u32 count);
        void (*vi_stop_streaming)(struct vb2_queue *vq);