struct v4l2_subdev *subdev,
                                     struct v4l2_async_subdev *asd)
 {
-       struct isp_device *isp = container_of(async, struct isp_device,
-                                             notifier);
        struct isp_async_subdev *isd =
                container_of(asd, struct isp_async_subdev, asd);
-       int ret;
-
-       ret = isp_link_entity(isp, &subdev->entity, isd->bus.interface);
-       if (ret < 0)
-               return ret;
 
        isd->sd = subdev;
        isd->sd->host_priv = &isd->bus;
 
-       return ret;
+       return 0;
 }
 
 static int isp_subdev_notifier_complete(struct v4l2_async_notifier *async)
 {
        struct isp_device *isp = container_of(async, struct isp_device,
                                              notifier);
+       struct v4l2_device *v4l2_dev = &isp->v4l2_dev;
+       struct v4l2_subdev *sd;
+       struct isp_bus_cfg *bus;
+       int ret;
+
+       list_for_each_entry(sd, &v4l2_dev->subdevs, list) {
+               /* Only try to link entities whose interface was set on bound */
+               if (sd->host_priv) {
+                       bus = (struct isp_bus_cfg *)sd->host_priv;
+                       ret = isp_link_entity(isp, &sd->entity, bus->interface);
+                       if (ret < 0)
+                               return ret;
+               }
+       }
 
        return v4l2_device_register_subdev_nodes(&isp->v4l2_dev);
 }