u64 link_frequency;
        struct v4l2_fwnode_endpoint tx;
        /* remote source */
-       struct v4l2_async_subdev asd;
        struct v4l2_async_notifier notifier;
        struct v4l2_subdev *s_subdev;
        /* registers */
 {
        struct v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY };
        struct i2c_client *client = bridge->i2c_client;
+       struct v4l2_async_subdev *asd;
        struct device_node *ep_node;
        int ret;
 
        bridge->rx = ep;
 
        /* register async notifier so we get noticed when sensor is connected */
-       bridge->asd.match.fwnode =
-               fwnode_graph_get_remote_port_parent(of_fwnode_handle(ep_node));
-       bridge->asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
+       v4l2_async_notifier_init(&bridge->notifier);
+       asd = v4l2_async_notifier_add_fwnode_remote_subdev(
+                                       &bridge->notifier,
+                                       of_fwnode_handle(ep_node),
+                                       sizeof(*asd));
        of_node_put(ep_node);
 
-       v4l2_async_notifier_init(&bridge->notifier);
-       ret = v4l2_async_notifier_add_subdev(&bridge->notifier, &bridge->asd);
-       if (ret) {
-               dev_err(&client->dev, "fail to register asd to notifier %d",
-                       ret);
-               fwnode_handle_put(bridge->asd.match.fwnode);
-               return ret;
+       if (IS_ERR(asd)) {
+               dev_err(&client->dev, "fail to register asd to notifier %ld",
+                       PTR_ERR(asd));
+               return PTR_ERR(asd);
        }
        bridge->notifier.ops = &mipid02_notifier_ops;