Re: [PATCH v12 09/17] media: cadence: csi2rx: add get_frame_desc wrapper

From: Rishikesh Donadkar

Date: Wed May 20 2026 - 02:45:31 EST



On 19/05/26 17:26, Sakari Ailus wrote:
Hi Rishikesh,


Hi Sakari,

Thank you for the review !


On Fri, Mar 13, 2026 at 02:36:53PM +0530, Rishikesh Donadkar wrote:
From: Pratyush Yadav <p.yadav@xxxxxx>

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@xxxxxx>
Signed-off-by: Jai Luthra <j-luthra@xxxxxx>
Reviewed-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx>
Reviewed-by: Changhuang Liang <changhuang.liang@xxxxxxxxxxxxxxxx>
Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Reviewed-by: Yemike Abhilash Chandra <y-abhilashchandra@xxxxxx>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
Signed-off-by: Rishikesh Donadkar <r-donadkar@xxxxxx>
---
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 2b25314ba6ab0..52ca940acd7d0 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -229,6 +229,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) {
media_entity_remote_source_pad_unique() returns an error code on error,
never NULL.


Will fix the error handling



Could you use you use v4l2_subdev_get_frame_desc_passthrough()


Yes, v4l2_subdev_get_frame_desc_passthrough() can be directly used as .get_frame_desc helper, but will need the csi2rx_get_frame_desc_from_source() in ([PATCH 11/17] media: cadence: csi2rx: add multistream support) as we used the VCs in the fd to configure the IP.


So, I will drop this patch and add csi2rx_get_frame_desc_from_source() with improved error handling in PATCH 11/17


Rishikesh


+ 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)
{
@@ -611,12 +626,21 @@ int cdns_csi2rx_negotiate_ppc(struct v4l2_subdev *subdev, unsigned int pad,
}
EXPORT_SYMBOL_FOR_MODULES(cdns_csi2rx_negotiate_ppc, "j721e-csi2rx");
+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,
.enable_streams = csi2rx_enable_streams,
.disable_streams = csi2rx_disable_streams,
+ .get_frame_desc = csi2rx_get_frame_desc,
};
static const struct v4l2_subdev_core_ops csi2rx_core_ops = {