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

Commit 4eef678d authored by Steve Longerbeam's avatar Steve Longerbeam Committed by Mauro Carvalho Chehab
Browse files

media: staging/imx: pass fwnode handle to find/add async subdev



Pass the subdev's fwnode_handle to imx_media_find_async_subdev() and
imx_media_add_async_subdev(), instead of a device_node.

Signed-off-by: default avatarSteve Longerbeam <steve_longerbeam@mentor.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 4dadf056
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -33,15 +33,14 @@ static inline struct imx_media_dev *notifier2dev(struct v4l2_async_notifier *n)
}

/*
 * Find a subdev by device node or device name. This is called during
 * Find a subdev by fwnode or device name. This is called during
 * driver load to form the async subdev list and bind them.
 */
struct imx_media_subdev *
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
			    struct device_node *np,
			    struct fwnode_handle *fwnode,
			    const char *devname)
{
	struct fwnode_handle *fwnode = np ? of_fwnode_handle(np) : NULL;
	struct imx_media_subdev *imxsd;
	int i;

@@ -67,7 +66,7 @@ imx_media_find_async_subdev(struct imx_media_dev *imxmd,


/*
 * Adds a subdev to the async subdev list. If np is non-NULL, adds
 * Adds a subdev to the async subdev list. If fwnode is non-NULL, adds
 * the async as a V4L2_ASYNC_MATCH_FWNODE match type, otherwise as
 * a V4L2_ASYNC_MATCH_DEVNAME match type using the dev_name of the
 * given platform_device. This is called during driver load when
@@ -75,9 +74,10 @@ imx_media_find_async_subdev(struct imx_media_dev *imxmd,
 */
struct imx_media_subdev *
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
			   struct device_node *np,
			   struct fwnode_handle *fwnode,
			   struct platform_device *pdev)
{
	struct device_node *np = to_of_node(fwnode);
	struct imx_media_subdev *imxsd;
	struct v4l2_async_subdev *asd;
	const char *devname = NULL;
@@ -89,7 +89,7 @@ imx_media_add_async_subdev(struct imx_media_dev *imxmd,
		devname = dev_name(&pdev->dev);

	/* return -EEXIST if this subdev already added */
	if (imx_media_find_async_subdev(imxmd, np, devname)) {
	if (imx_media_find_async_subdev(imxmd, fwnode, devname)) {
		dev_dbg(imxmd->md.dev, "%s: already added %s\n",
			__func__, np ? np->name : devname);
		imxsd = ERR_PTR(-EEXIST);
@@ -107,9 +107,9 @@ imx_media_add_async_subdev(struct imx_media_dev *imxmd,
	imxsd = &imxmd->subdev[sd_idx];

	asd = &imxsd->asd;
	if (np) {
	if (fwnode) {
		asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
		asd->match.fwnode.fwnode = of_fwnode_handle(np);
		asd->match.fwnode.fwnode = fwnode;
	} else {
		asd->match_type = V4L2_ASYNC_MATCH_DEVNAME;
		asd->match.device_name.name = devname;
@@ -162,13 +162,13 @@ static int imx_media_subdev_bound(struct v4l2_async_notifier *notifier,
				  struct v4l2_async_subdev *asd)
{
	struct imx_media_dev *imxmd = notifier2dev(notifier);
	struct device_node *np = to_of_node(sd->fwnode);
	struct imx_media_subdev *imxsd;
	int ret = 0;

	mutex_lock(&imxmd->mutex);

	imxsd = imx_media_find_async_subdev(imxmd, np, dev_name(sd->dev));
	imxsd = imx_media_find_async_subdev(imxmd, sd->fwnode,
					    dev_name(sd->dev));
	if (!imxsd) {
		ret = -EINVAL;
		goto out;
+3 −4
Original line number Diff line number Diff line
@@ -87,7 +87,8 @@ of_parse_subdev(struct imx_media_dev *imxmd, struct device_node *sd_np,
	}

	/* register this subdev with async notifier */
	imxsd = imx_media_add_async_subdev(imxmd, sd_np, NULL);
	imxsd = imx_media_add_async_subdev(imxmd, of_fwnode_handle(sd_np),
					   NULL);
	ret = PTR_ERR_OR_ZERO(imxsd);
	if (ret) {
		if (ret == -EEXIST) {
@@ -176,9 +177,7 @@ static int create_of_link(struct imx_media_dev *imxmd,
	if (link->local_port >= sd->entity.num_pads)
		return -EINVAL;

	remote = imx_media_find_async_subdev(imxmd,
					     to_of_node(link->remote_node),
					     NULL);
	remote = imx_media_find_async_subdev(imxmd, link->remote_node, NULL);
	if (!remote)
		return 0;

+2 −2
Original line number Diff line number Diff line
@@ -189,11 +189,11 @@ int imx_media_ipu_image_to_mbus_fmt(struct v4l2_mbus_framefmt *mbus,

struct imx_media_subdev *
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
			    struct device_node *np,
			    struct fwnode_handle *fwnode,
			    const char *devname);
struct imx_media_subdev *
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
			   struct device_node *np,
			   struct fwnode_handle *fwnode,
			   struct platform_device *pdev);

void imx_media_grp_id_to_sd_name(char *sd_name, int sz,