Hi Sakari, Thank you for the patch. On Mon, May 15, 2023 at 03:21:27PM +0300, Sakari Ailus wrote: > Use the endpoint fwnode to find out the remote pad, instead of using the > first source pad found. Also improve error messages. The commit message should explain *why*. Once I know why, I'll review the patch :-) > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > --- > Oh well. Hopefully this is final then. > > since v2: > - Use remote fwnode for finding the remote pad, not local. > > drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 28 ++++++++----------- > 1 file changed, 12 insertions(+), 16 deletions(-) > > diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c b/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c > index 39a8022eec396..2743ecc9b8e4b 100644 > --- a/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c > +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c > @@ -1418,31 +1418,27 @@ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier) > struct sensor_async_subdev *s_asd; > struct v4l2_async_connection *asd; > struct cio2_queue *q; > - unsigned int pad; > int ret; > > list_for_each_entry(asd, &cio2->notifier.done_list, asc_entry) { > s_asd = to_sensor_asd(asd); > q = &cio2->queue[s_asd->csi2.port]; > > - for (pad = 0; pad < q->sensor->entity.num_pads; pad++) > - if (q->sensor->entity.pads[pad].flags & > - MEDIA_PAD_FL_SOURCE) > - break; > - > - if (pad == q->sensor->entity.num_pads) { > - dev_err(dev, "failed to find src pad for %s\n", > - q->sensor->name); > - return -ENXIO; > + ret = media_entity_get_fwnode_pad(&q->sensor->entity, > + s_asd->asd.match.fwnode, > + MEDIA_PAD_FL_SOURCE); > + if (ret < 0) { > + dev_err(dev, "no pad for endpoint %pfw (%d)\n", > + s_asd->asd.match.fwnode, ret); > + return ret; > } > > - ret = media_create_pad_link( > - &q->sensor->entity, pad, > - &q->subdev.entity, CIO2_PAD_SINK, > - 0); > + ret = media_create_pad_link(&q->sensor->entity, ret, > + &q->subdev.entity, CIO2_PAD_SINK, > + 0); > if (ret) { > - dev_err(dev, "failed to create link for %s\n", > - q->sensor->name); > + dev_err(dev, "failed to create link for %s (endpoint %pfw, error %d)\n", > + q->sensor->name, s_asd->asd.match.fwnode, ret); > return ret; > } > } -- Regards, Laurent Pinchart