Skip to content

Commit

Permalink
v4l: async: Add some debug prints
Browse files Browse the repository at this point in the history
Just add some debug prints for V4L2 async sub-device matching process. These
might come useful in figuring out why things don't work as expected.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
  • Loading branch information
Sakari Ailus authored and intel-lab-lkp committed Feb 9, 2023
1 parent 9481798 commit e7f54a8
Showing 1 changed file with 36 additions and 5 deletions.
41 changes: 36 additions & 5 deletions drivers/media/v4l2-core/v4l2-async.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,18 @@ match_fwnode_one(struct v4l2_async_notifier *notifier,
bool sd_fwnode_is_ep;
struct device *dev;

dev_dbg(sd->dev, "async fwnode match %pfw vs. %pfw\n", sd_fwnode,
asd->match.fwnode);

/*
* Both the subdev and the async subdev can provide either an endpoint
* fwnode or a device fwnode. Start with the simple case of direct
* fwnode matching.
*/
if (sd_fwnode == asd->match.fwnode)
if (sd_fwnode == asd->match.fwnode) {
dev_dbg(sd->dev, "true\n");
return true;
}

/*
* Otherwise, check if the sd fwnode and the asd fwnode refer to an
Expand All @@ -105,8 +110,12 @@ match_fwnode_one(struct v4l2_async_notifier *notifier,
sd_fwnode_is_ep = fwnode_graph_is_endpoint(sd_fwnode);
asd_fwnode_is_ep = fwnode_graph_is_endpoint(asd->match.fwnode);

if (sd_fwnode_is_ep == asd_fwnode_is_ep)
dev_dbg(sd->dev, "async fwnode match %pfw vs. %pfw\n", sd_fwnode,
asd->match.fwnode);
if (sd_fwnode_is_ep == asd_fwnode_is_ep) {
dev_dbg(sd->dev, "unmatching node types (false)\n");
return false;
}

/*
* The sd and asd fwnodes are of different types. Get the device fwnode
Expand All @@ -120,10 +129,15 @@ match_fwnode_one(struct v4l2_async_notifier *notifier,
other_fwnode = sd_fwnode;
}

dev_dbg(sd->dev, "async fwnode (compat) match %pfw vs. %pfw\n",
dev_fwnode, other_fwnode);

fwnode_handle_put(dev_fwnode);

if (dev_fwnode != other_fwnode)
if (dev_fwnode != other_fwnode) {
dev_dbg(sd->dev, "false\n");
return false;
}

/*
* We have a heterogeneous match. Retrieve the struct device of the side
Expand All @@ -143,6 +157,8 @@ match_fwnode_one(struct v4l2_async_notifier *notifier,
dev->driver->name);
}

dev_dbg(sd->dev, "true\n");

return true;
}

Expand Down Expand Up @@ -255,7 +271,10 @@ v4l2_async_nf_can_complete(struct v4l2_async_notifier *notifier)
v4l2_async_find_subdev_notifier(sd);

if (subdev_notifier &&
!v4l2_async_nf_can_complete(subdev_notifier))
!v4l2_async_nf_can_complete(subdev_notifier)) {
if (subdev_notifier->sd)
deb_dbg(subdev_notifier->sd->dev,
"cannot complete\n");
return false;
}

Expand All @@ -273,18 +292,27 @@ v4l2_async_nf_try_complete(struct v4l2_async_notifier *notifier)
if (!list_empty(&notifier->waiting))
return 0;

if (notifier->sd)
deb_dbg(notifier->sd->dev, "trying to complete\n");

/* Check the entire notifier tree; find the root notifier first. */
while (notifier->parent)
notifier = notifier->parent;

/* This is root if it has v4l2_dev. */
if (!notifier->v4l2_dev)
if (!notifier->v4l2_dev) {
if (notifier->sd)
deb_dbg(notifier->sd->dev,
"V4L2 device not available\n");
return 0;
}

/* Is everything ready? */
if (!v4l2_async_nf_can_complete(notifier))
return 0;

deb_dbg(notifier->sd->dev, "complete\n");

return v4l2_async_nf_call_complete(notifier);
}

Expand Down Expand Up @@ -386,6 +414,9 @@ v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier)
continue;

ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd);
deb_dbg(sd->dev, "bound to %s's notifier (ret %d)\n",
notifier->sd ? dev_name(notifier->sd->dev) : "no-dev",
ret);
if (ret < 0)
return ret;

Expand Down

0 comments on commit e7f54a8

Please sign in to comment.