[PATCH] media: rcar-vin: require master VIN only for CSI source

From: Nikita Yushchenko
Date: Wed Feb 02 2022 - 05:47:22 EST


Hardware limitations on VINs that can be used at the same time cover only
CSI data source. For parallel source, any single VIN can work.

This patch moves check for master VIN availability in
rvin_csi2_link_notify() below processing the parallel case.

This fixes media-ctl usage on KF board when both CSI and parallel cameras
are in use on the same system. In such a setup, VINs 0-3 are used for
CSI cameras and VIN5 is used for parallel camera.

Signed-off-by: Nikita Yushchenko <nikita.yoush@xxxxxxxxxxxxxxxxxx>
---
drivers/media/platform/rcar-vin/rcar-core.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
index 0186ae235113..038ee187f95a 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -826,11 +826,6 @@ static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
vin = container_of(vdev, struct rvin_dev, vdev);
master_id = rvin_group_id_to_master(vin->id);

- if (WARN_ON(!group->vin[master_id])) {
- ret = -ENODEV;
- goto out;
- }
-
/* Build a mask for already enabled links. */
for (i = master_id; i < master_id + 4; i++) {
if (!group->vin[i])
@@ -878,6 +873,11 @@ static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
goto out;
}

+ if (WARN_ON(!group->vin[master_id])) {
+ ret = -ENODEV;
+ goto out;
+ }
+
channel = rvin_group_csi_pad_to_channel(link->source->index);
mask_new = mask & rvin_csi2_get_mask(vin, csi_id, channel);
vin_dbg(vin, "Try link change mask: 0x%x new: 0x%x\n", mask, mask_new);
--
2.30.2