Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 820342ac authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

media: v4l2-async: Add v4l2_async_notifier_add_fwnode_remote_subdev



v4l2_async_notifier_add_fwnode_remote_subdev is a convenience function for
parsing information on V4L2 fwnode subdevs.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 016413d9
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -606,6 +606,29 @@ v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
}
EXPORT_SYMBOL_GPL(v4l2_async_notifier_add_fwnode_subdev);

int
v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif,
					     struct fwnode_handle *endpoint,
					     struct v4l2_async_subdev *asd)
{
	struct fwnode_handle *remote;
	int ret;

	remote = fwnode_graph_get_remote_port_parent(endpoint);
	if (!remote)
		return -ENOTCONN;

	asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
	asd->match.fwnode = remote;

	ret = v4l2_async_notifier_add_subdev(notif, asd);
	if (ret)
		fwnode_handle_put(remote);

	return ret;
}
EXPORT_SYMBOL_GPL(v4l2_async_notifier_add_fwnode_remote_subdev);

struct v4l2_async_subdev *
v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
				   int adapter_id, unsigned short address,
+25 −0
Original line number Diff line number Diff line
@@ -181,6 +181,31 @@ v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
				      struct fwnode_handle *fwnode,
				      unsigned int asd_struct_size);

/**
 * v4l2_async_notifier_add_fwnode_remote_subdev - Allocate and add a fwnode
 *						  remote async subdev to the
 *						  notifier's master asd_list.
 *
 * @notif: pointer to &struct v4l2_async_notifier
 * @endpoint: local endpoint pointing to the remote sub-device to be matched
 * @asd: Async sub-device struct allocated by the caller. The &struct
 *	 v4l2_async_subdev shall be the first member of the driver's async
 *	 sub-device struct, i.e. both begin at the same memory address.
 *
 * Gets the remote endpoint of a given local endpoint, set it up for fwnode
 * matching and adds the async sub-device to the notifier's @asd_list. The
 * function also gets a reference of the fwnode which is released later at
 * notifier cleanup time.
 *
 * This is just like @v4l2_async_notifier_add_fwnode_subdev, but with the
 * exception that the fwnode refers to a local endpoint, not the remote one, and
 * the function relies on the caller to allocate the async sub-device struct.
 */
int
v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif,
					     struct fwnode_handle *endpoint,
					     struct v4l2_async_subdev *asd);

/**
 * v4l2_async_notifier_add_i2c_subdev - Allocate and add an i2c async
 *				subdev to the notifier's master asd_list.