From 76b1bbf3ec3be0afdc768863ab7e9bbd2734b97b Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Fri, 24 Nov 2023 14:29:57 +0000 Subject: [PATCH] drivers: media: cfe: Find the source pads on the sensor entity The driver was assuming that pad 0 on the sensor entity was the appropriate source pad, but this isn't necessarily the case. With video-mux, it has the sink pads first, and then the source pad as the last one. Iterate through the sensor pads to find the relevant source pads. Signed-off-by: Dave Stevenson --- drivers/media/platform/raspberrypi/rp1_cfe/cfe.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) --- a/drivers/media/platform/raspberrypi/rp1_cfe/cfe.c +++ b/drivers/media/platform/raspberrypi/rp1_cfe/cfe.c @@ -1826,7 +1826,7 @@ static void cfe_unregister_nodes(struct static int cfe_link_node_pads(struct cfe_device *cfe) { - unsigned int i; + unsigned int i, source_pad = 0; int ret; for (i = 0; i < CSI2_NUM_CHANNELS; i++) { @@ -1835,14 +1835,23 @@ static int cfe_link_node_pads(struct cfe if (!check_state(cfe, NODE_REGISTERED, i)) continue; - if (i < cfe->sensor->entity.num_pads) { + /* Find next source pad */ + while (source_pad < cfe->sensor->entity.num_pads && + !(cfe->sensor->entity.pads[source_pad].flags & + MEDIA_PAD_FL_SOURCE)) + source_pad++; + + if (source_pad < cfe->sensor->entity.num_pads) { /* Sensor -> CSI2 */ - ret = media_create_pad_link(&cfe->sensor->entity, i, + ret = media_create_pad_link(&cfe->sensor->entity, source_pad, &cfe->csi2.sd.entity, i, MEDIA_LNK_FL_IMMUTABLE | MEDIA_LNK_FL_ENABLED); if (ret) return ret; + + /* Dealt with that source_pad, look at the next one next time */ + source_pad++; } /* CSI2 channel # -> /dev/video# */