[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251216-rcar-streams-v4-6-f28b4831cc67@ideasonboard.com>
Date: Tue, 16 Dec 2025 17:18:23 +0200
From: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
To: Niklas Söderlund <niklas.soderlund@...natech.se>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Sakari Ailus <sakari.ailus@...ux.intel.com>
Cc: linux-media@...r.kernel.org, linux-renesas-soc@...r.kernel.org,
linux-kernel@...r.kernel.org,
Niklas Söderlund <niklas.soderlund+renesas@...natech.se>,
Mauro Carvalho Chehab <mchehab+huawei@...nel.org>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Jacopo Mondi <jacopo.mondi@...asonboard.com>,
Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
Subject: [PATCH v4 06/15] media: rcar-vin: Link VINs on Gen3 to a single
channel on each CSI-2
The stream routing will be fully configurable when we add full streams
support to the rcar pipeline. Thus there is no need for the user to be
able to link VINs to different CSI-2 channels. In fact, allowing e.g.
VIN0 to be connected to CSI-2 channel 3 would be wrong, as the hardware
doesn't allow that.
Change rvin_csi2_create_link() so that it creates media links only
between matching VINs and CSI-2 channels (VIN0 - channel 0, VIN1 -
channel 1, etc.).
Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
---
.../media/platform/renesas/rcar-vin/rcar-core.c | 27 ++++++++++++----------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-core.c b/drivers/media/platform/renesas/rcar-vin/rcar-core.c
index 100105b620e3..acaf22d1f450 100644
--- a/drivers/media/platform/renesas/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/renesas/rcar-vin/rcar-core.c
@@ -673,23 +673,26 @@ static int rvin_csi2_create_link(struct rvin_group *group, unsigned int id,
struct media_entity *source = &group->remotes[route->csi].subdev->entity;
struct media_entity *sink = &group->vin[id]->vdev.entity;
struct media_pad *sink_pad = &sink->pads[0];
+ struct media_pad *source_pad;
+ unsigned int source_idx;
unsigned int channel;
- int ret;
- for (channel = 0; channel < 4; channel++) {
- unsigned int source_idx = rvin_group_csi_channel_to_pad(channel);
- struct media_pad *source_pad = &source->pads[source_idx];
+ /*
+ * The channels from CSI-2 blocks and the VIN groups have a set of
+ * hardcoded routing options to choose from. We only support the routing
+ * where all VINs in a group are connected to the same CSI-2 block,
+ * and the Nth VIN in the group is connected to the Nth CSI-2 channel.
+ */
- /* Skip if link already exists. */
- if (media_entity_find_link(source_pad, sink_pad))
- continue;
+ channel = id % 4;
+ source_idx = rvin_group_csi_channel_to_pad(channel);
+ source_pad = &source->pads[source_idx];
- ret = media_create_pad_link(source, source_idx, sink, 0, 0);
- if (ret)
- return ret;
- }
+ /* Skip if link already exists. */
+ if (media_entity_find_link(source_pad, sink_pad))
+ return 0;
- return 0;
+ return media_create_pad_link(source, source_idx, sink, 0, 0);
}
static int rvin_parallel_setup_links(struct rvin_group *group)
--
2.43.0
Powered by blists - more mailing lists