diff mbox series

[v2,08/13] media: cadence: csi2rx: add get_frame_desc wrapper

Message ID 20240627-multistream-v2-8-6ae96c54c1c3@ti.com
State New
Headers show
Series media: cadence,ti: CSI2RX Multistream Support | expand

Commit Message

Jai Luthra June 27, 2024, 1:10 p.m. UTC
From: Pratyush Yadav <p.yadav@ti.com>

J721E wrapper CSI2RX driver needs to get the frame descriptor from the
source to find out info about virtual channel. This driver itself does
not touch the routing or virtual channels in any way. So simply pass the
descriptor through from the source.

Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
Signed-off-by: Jai Luthra <j-luthra@ti.com>
---
 drivers/media/platform/cadence/cdns-csi2rx.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

Comments

Jacopo Mondi July 12, 2024, 2:48 p.m. UTC | #1
Hi Jai

On Thu, Jun 27, 2024 at 06:40:03PM GMT, Jai Luthra wrote:
> From: Pratyush Yadav <p.yadav@ti.com>
>
> J721E wrapper CSI2RX driver needs to get the frame descriptor from the
> source to find out info about virtual channel. This driver itself does
> not touch the routing or virtual channels in any way. So simply pass the
> descriptor through from the source.
>
> Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
> Signed-off-by: Jai Luthra <j-luthra@ti.com>
> ---
>  drivers/media/platform/cadence/cdns-csi2rx.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
> index 751eadbe61ef..b6054d62c799 100644
> --- a/drivers/media/platform/cadence/cdns-csi2rx.c
> +++ b/drivers/media/platform/cadence/cdns-csi2rx.c
> @@ -135,6 +135,21 @@ static const struct csi2rx_fmt *csi2rx_get_fmt_by_code(u32 code)
>  	return NULL;
>  }
>
> +static int csi2rx_get_frame_desc_from_source(struct csi2rx_priv *csi2rx,
> +					     struct v4l2_mbus_frame_desc *fd)
> +{
> +	struct media_pad *remote_pad;
> +
> +	remote_pad = media_entity_remote_source_pad_unique(&csi2rx->subdev.entity);
> +	if (!remote_pad) {
> +		dev_err(csi2rx->dev, "No remote pad found for sink\n");
> +		return -ENODEV;
> +	}
> +
> +	return v4l2_subdev_call(csi2rx->source_subdev, pad, get_frame_desc,
> +				remote_pad->index, fd);
> +}
> +
>  static inline
>  struct csi2rx_priv *v4l2_subdev_to_csi2rx(struct v4l2_subdev *subdev)
>  {
> @@ -466,10 +481,19 @@ static int csi2rx_init_state(struct v4l2_subdev *subdev,
>  	return csi2rx_set_fmt(subdev, state, &format);
>  }
>
> +static int csi2rx_get_frame_desc(struct v4l2_subdev *subdev, unsigned int pad,
> +				 struct v4l2_mbus_frame_desc *fd)
> +{
> +	struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
> +
> +	return csi2rx_get_frame_desc_from_source(csi2rx, fd);
> +}
> +
>  static const struct v4l2_subdev_pad_ops csi2rx_pad_ops = {
>  	.enum_mbus_code	= csi2rx_enum_mbus_code,
>  	.get_fmt	= v4l2_subdev_get_fmt,
>  	.set_fmt	= csi2rx_set_fmt,
> +	.get_frame_desc = csi2rx_get_frame_desc,

The previous entries are indented with a tab

With this fixed
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

Thanks
  j

>  };
>
>  static const struct v4l2_subdev_video_ops csi2rx_video_ops = {
>
> --
> 2.43.0
>
>
Jai Luthra July 16, 2024, 9:33 a.m. UTC | #2
On Jul 12, 2024 at 16:48:28 +0200, Jacopo Mondi wrote:
> Hi Jai
> 
> On Thu, Jun 27, 2024 at 06:40:03PM GMT, Jai Luthra wrote:
> > From: Pratyush Yadav <p.yadav@ti.com>
> >
> > J721E wrapper CSI2RX driver needs to get the frame descriptor from the
> > source to find out info about virtual channel. This driver itself does
> > not touch the routing or virtual channels in any way. So simply pass the
> > descriptor through from the source.
> >
> > Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
> > Signed-off-by: Jai Luthra <j-luthra@ti.com>
> > ---
> >  drivers/media/platform/cadence/cdns-csi2rx.c | 24 ++++++++++++++++++++++++
> >  1 file changed, 24 insertions(+)
> >
> > diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
> > index 751eadbe61ef..b6054d62c799 100644
> > --- a/drivers/media/platform/cadence/cdns-csi2rx.c
> > +++ b/drivers/media/platform/cadence/cdns-csi2rx.c
> > @@ -135,6 +135,21 @@ static const struct csi2rx_fmt *csi2rx_get_fmt_by_code(u32 code)
> >  	return NULL;
> >  }
> >
> > +static int csi2rx_get_frame_desc_from_source(struct csi2rx_priv *csi2rx,
> > +					     struct v4l2_mbus_frame_desc *fd)
> > +{
> > +	struct media_pad *remote_pad;
> > +
> > +	remote_pad = media_entity_remote_source_pad_unique(&csi2rx->subdev.entity);
> > +	if (!remote_pad) {
> > +		dev_err(csi2rx->dev, "No remote pad found for sink\n");
> > +		return -ENODEV;
> > +	}
> > +
> > +	return v4l2_subdev_call(csi2rx->source_subdev, pad, get_frame_desc,
> > +				remote_pad->index, fd);
> > +}
> > +
> >  static inline
> >  struct csi2rx_priv *v4l2_subdev_to_csi2rx(struct v4l2_subdev *subdev)
> >  {
> > @@ -466,10 +481,19 @@ static int csi2rx_init_state(struct v4l2_subdev *subdev,
> >  	return csi2rx_set_fmt(subdev, state, &format);
> >  }
> >
> > +static int csi2rx_get_frame_desc(struct v4l2_subdev *subdev, unsigned int pad,
> > +				 struct v4l2_mbus_frame_desc *fd)
> > +{
> > +	struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
> > +
> > +	return csi2rx_get_frame_desc_from_source(csi2rx, fd);
> > +}
> > +
> >  static const struct v4l2_subdev_pad_ops csi2rx_pad_ops = {
> >  	.enum_mbus_code	= csi2rx_enum_mbus_code,
> >  	.get_fmt	= v4l2_subdev_get_fmt,
> >  	.set_fmt	= csi2rx_set_fmt,
> > +	.get_frame_desc = csi2rx_get_frame_desc,
> 
> The previous entries are indented with a tab

Ah thanks, will fix.

> 
> With this fixed
> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> 
> Thanks
>   j
> 
> >  };
> >
> >  static const struct v4l2_subdev_video_ops csi2rx_video_ops = {
> >
> > --
> > 2.43.0
> >
> >
diff mbox series

Patch

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
index 751eadbe61ef..b6054d62c799 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -135,6 +135,21 @@  static const struct csi2rx_fmt *csi2rx_get_fmt_by_code(u32 code)
 	return NULL;
 }
 
+static int csi2rx_get_frame_desc_from_source(struct csi2rx_priv *csi2rx,
+					     struct v4l2_mbus_frame_desc *fd)
+{
+	struct media_pad *remote_pad;
+
+	remote_pad = media_entity_remote_source_pad_unique(&csi2rx->subdev.entity);
+	if (!remote_pad) {
+		dev_err(csi2rx->dev, "No remote pad found for sink\n");
+		return -ENODEV;
+	}
+
+	return v4l2_subdev_call(csi2rx->source_subdev, pad, get_frame_desc,
+				remote_pad->index, fd);
+}
+
 static inline
 struct csi2rx_priv *v4l2_subdev_to_csi2rx(struct v4l2_subdev *subdev)
 {
@@ -466,10 +481,19 @@  static int csi2rx_init_state(struct v4l2_subdev *subdev,
 	return csi2rx_set_fmt(subdev, state, &format);
 }
 
+static int csi2rx_get_frame_desc(struct v4l2_subdev *subdev, unsigned int pad,
+				 struct v4l2_mbus_frame_desc *fd)
+{
+	struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
+
+	return csi2rx_get_frame_desc_from_source(csi2rx, fd);
+}
+
 static const struct v4l2_subdev_pad_ops csi2rx_pad_ops = {
 	.enum_mbus_code	= csi2rx_enum_mbus_code,
 	.get_fmt	= v4l2_subdev_get_fmt,
 	.set_fmt	= csi2rx_set_fmt,
+	.get_frame_desc = csi2rx_get_frame_desc,
 };
 
 static const struct v4l2_subdev_video_ops csi2rx_video_ops = {