Re: [PATCH v5 03/23] media: v4l2-subdev: add v4l2_subdev_get_fwnode_pad_default

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sakari,

On 4/29/20 7:39 AM, Sakari Ailus wrote:
Hi Steve,

On Sun, Apr 19, 2020 at 05:39:10PM -0700, Steve Longerbeam wrote:
Add a convenience function that can be used as the .get_fwnode_pad
operation for subdevices that map port numbers and pad indexes 1:1.
The function verifies the endpoint is owned by the subdevice, and if
so returns the endpoint port number.

Signed-off-by: Steve Longerbeam <slongerbeam@xxxxxxxxx>
---
  drivers/media/v4l2-core/v4l2-subdev.c | 25 +++++++++++++++++++++++++
  include/media/v4l2-subdev.h           | 17 +++++++++++++++++
  2 files changed, 42 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
index a376b351135f..d5b5cd7a6049 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -696,6 +696,31 @@ const struct v4l2_file_operations v4l2_subdev_fops = {
  };
#ifdef CONFIG_MEDIA_CONTROLLER
+
+int v4l2_subdev_get_fwnode_pad_default(struct media_entity *entity,
+				       struct fwnode_endpoint *endpoint)
+{
+	struct fwnode_handle *ep;
+	struct v4l2_subdev *sd;
+
+	if (!is_media_entity_v4l2_subdev(entity))
+		return -EINVAL;
+
+	sd = media_entity_to_v4l2_subdev(entity);
+
+	fwnode_graph_for_each_endpoint(dev_fwnode(sd->dev), ep) {
+		if (ep != endpoint->local_fwnode)
+			continue;
If the purpose is just to check a given endpoint belongs to a device, could
it be done in a more simple way? E.g.:

	fwnode = fwnode_graph_get_port_parent(endpoint->local_fwnode);
	fwnode_handle_put(fwnode);

	if (dev_fwnode(sd->dev) == fwnode)
		return endpoint->port;

	return -ENXIO;

Sorry you are right, I was stuck on confirming the endpoint itself is one of the devices endpoints, but yes, above is all that is needed to confirm the endpoint is owned by the device, I'll make that change.

Steve



+
+		fwnode_handle_put(ep);
+
+		return endpoint->port;
+	}
+
+	return -ENXIO;
+}
+EXPORT_SYMBOL_GPL(v4l2_subdev_get_fwnode_pad_default);
+
  int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
  				      struct media_link *link,
  				      struct v4l2_subdev_format *source_fmt,
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index a4848de59852..940181323427 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -1027,6 +1027,23 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
#ifdef CONFIG_MEDIA_CONTROLLER +/**
+ * v4l2_subdev_get_fwnode_pad_default - Get pad number from a subdev fwnode
+ *                                      endpoint, assuming 1:1 port:pad
+ *
+ * @entity - Pointer to the subdev entity
+ * @endpoint - Pointer to a parsed fwnode endpoint
+ *
+ * This function can be used as the .get_fwnode_pad operation for
+ * subdevices that map port numbers and pad indexes 1:1. If the endpoint
+ * is owned by the subdevice, the function returns the endpoint port
+ * number.
+ *
+ * Returns the endpoint port number on success or a negative error code.
+ */
+int v4l2_subdev_get_fwnode_pad_default(struct media_entity *entity,
+				       struct fwnode_endpoint *endpoint);
+
  /**
   * v4l2_subdev_link_validate_default - validates a media link
   *




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux