Commit 7ab94843 authored by Sakari Ailus's avatar Sakari Ailus Committed by Hans Verkuil
Browse files

media: pci: ipu3-cio2: Obtain remote pad from endpoint



Use the endpoint fwnode to find out the remote pad, instead of using the
first source pad found. Also improve error messages.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: default avatarBingbu Cao <bingbu.cao@intel.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
parent ec178312
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -1417,31 +1417,27 @@ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
	struct sensor_async_subdev *s_asd;
	struct v4l2_async_subdev *asd;
	struct cio2_queue *q;
	unsigned int pad;
	int ret;

	list_for_each_entry(asd, &cio2->notifier.asd_list, asd_list) {
		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,
		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;
		}
	}