}
 
        ret = v4l2_fwnode_endpoint_parse(endpoint, &vep);
+       fwnode_handle_put(endpoint);
        if (ret) {
                dev_err(dev, "Failed to parse endpoint: %d\n", ret);
-               fwnode_handle_put(endpoint);
                return ret;
        }
 
        default:
                dev_err(dev, "Unsupported number of data lanes %u\n",
                        ov8858->num_lanes);
-               fwnode_handle_put(endpoint);
                return -EINVAL;
        }
 
-       ov8858->subdev.fwnode = endpoint;
-
        return 0;
 }
 
 
        ret = ov8858_init_ctrls(ov8858);
        if (ret)
-               goto err_put_fwnode;
+               return ret;
 
        sd = &ov8858->subdev;
        sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
        media_entity_cleanup(&sd->entity);
 err_free_handler:
        v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
-err_put_fwnode:
-       fwnode_handle_put(ov8858->subdev.fwnode);
 
        return ret;
 }
        v4l2_async_unregister_subdev(sd);
        media_entity_cleanup(&sd->entity);
        v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
-       fwnode_handle_put(ov8858->subdev.fwnode);
 
        pm_runtime_disable(&client->dev);
        if (!pm_runtime_status_suspended(&client->dev))