Of and fwnode support are separated in V4L2 and individual drivers may implement one of them. Sub-devices do not match with a notifier expecting sub-devices with fwnodes, nor the other way around. Fix this by checking for sub-device's of_node field in fwnode match and fwnode field in OF match. Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> --- drivers/media/v4l2-core/v4l2-async.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c index 0dd5e85..984e6fa 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c @@ -42,12 +42,16 @@ static bool match_devname(struct v4l2_subdev *sd, static bool match_of(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) { - return sd->of_node == asd->match.of.node; + return sd->of_node == asd->match.of.node || + (sd->fwnode && is_of_node(sd->fwnode) && + sd->fwnode == of_fwnode_handle(asd->match.of.node)); } static bool match_fwnode(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) { - return sd->fwnode == asd->match.fwnode.fwn; + return sd->fwnode == asd->match.fwnode.fwn || + (sd->of_node && + of_fwnode_handle(sd->of_node) == asd->match.fwnode.fwn); } static bool match_custom(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html