int ret;
 
        for (index = 0;
-            !(ret = fwnode_property_get_reference_args(dev_fwnode(dev),
-                                                       prop, NULL, 0,
-                                                       index, &args));
-            index++)
-               fwnode_handle_put(args.fwnode);
-
-       if (!index)
-               return -ENOENT;
-
-       if (ret != -ENOENT)
-               return ret;
-
-       for (index = 0;
-            !fwnode_property_get_reference_args(dev_fwnode(dev), prop, NULL,
-                                                0, index, &args);
+            !(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop,
+                                                       NULL, 0, index, &args));
             index++) {
                struct v4l2_async_subdev *asd;
 
                }
        }
 
-       return 0;
+       /* -ENOENT here means successful parsing */
+       if (ret != -ENOENT)
+               return ret;
+
+       /* Return -ENOENT if no references were found */
+       return index ? 0 : -ENOENT;
 }
 
 /*