To support suspend/resume rvin_{start,stop}_streaming() needs to be
accessible from the suspend and resume callbacks. Up until now the only
users of these functions have been the callbacks in struct vb2_ops so
the arguments to the functions are not suitable for use by the driver it
self.

Fix this by adding wrappers for the struct vb2_ops callbacks which calls
the new rvin_{start,stop}_streaming() using more friendly arguments.

Signed-off-by: Niklas Söderlund <niklas.soderlund+rene...@ragnatech.se>
---
 drivers/media/platform/rcar-vin/rcar-dma.c | 20 ++++++++++++++------
 drivers/media/platform/rcar-vin/rcar-vin.h |  3 +++
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c 
b/drivers/media/platform/rcar-vin/rcar-dma.c
index 64f7636f94d6a0a3..d11d4df1906a8962 100644
--- a/drivers/media/platform/rcar-vin/rcar-dma.c
+++ b/drivers/media/platform/rcar-vin/rcar-dma.c
@@ -1143,9 +1143,8 @@ static int rvin_set_stream(struct rvin_dev *vin, int on)
        return ret;
 }
 
-static int rvin_start_streaming(struct vb2_queue *vq, unsigned int count)
+int rvin_start_streaming(struct rvin_dev *vin)
 {
-       struct rvin_dev *vin = vb2_get_drv_priv(vq);
        unsigned long flags;
        int ret;
 
@@ -1187,9 +1186,13 @@ static int rvin_start_streaming(struct vb2_queue *vq, 
unsigned int count)
        return ret;
 }
 
-static void rvin_stop_streaming(struct vb2_queue *vq)
+static int rvin_start_streaming_vq(struct vb2_queue *vq, unsigned int count)
+{
+       return rvin_start_streaming(vb2_get_drv_priv(vq));
+}
+
+void rvin_stop_streaming(struct rvin_dev *vin)
 {
-       struct rvin_dev *vin = vb2_get_drv_priv(vq);
        unsigned long flags;
        int retries = 0;
 
@@ -1238,12 +1241,17 @@ static void rvin_stop_streaming(struct vb2_queue *vq)
                          vin->scratch_phys);
 }
 
+static void rvin_stop_streaming_vq(struct vb2_queue *vq)
+{
+       rvin_stop_streaming(vb2_get_drv_priv(vq));
+}
+
 static const struct vb2_ops rvin_qops = {
        .queue_setup            = rvin_queue_setup,
        .buf_prepare            = rvin_buffer_prepare,
        .buf_queue              = rvin_buffer_queue,
-       .start_streaming        = rvin_start_streaming,
-       .stop_streaming         = rvin_stop_streaming,
+       .start_streaming        = rvin_start_streaming_vq,
+       .stop_streaming         = rvin_stop_streaming_vq,
        .wait_prepare           = vb2_ops_wait_prepare,
        .wait_finish            = vb2_ops_wait_finish,
 };
diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h 
b/drivers/media/platform/rcar-vin/rcar-vin.h
index d21fc991b7a9da36..700fae1c1225a2f3 100644
--- a/drivers/media/platform/rcar-vin/rcar-vin.h
+++ b/drivers/media/platform/rcar-vin/rcar-vin.h
@@ -269,4 +269,7 @@ void rvin_crop_scale_comp(struct rvin_dev *vin);
 
 int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel);
 
+int rvin_start_streaming(struct rvin_dev *vin);
+void rvin_stop_streaming(struct rvin_dev *vin);
+
 #endif
-- 
2.19.2

Reply via email to