media: ivsc: csi: Clean up parsing firmware and setting up async notifier
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 16 Oct 2023 07:30:53 +0000 (10:30 +0300)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 22 Nov 2023 09:56:34 +0000 (10:56 +0100)
Set up async notifier right after obtaining the local endpoint. This makes
error handling straightforward.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Wentong Wu <wentong.wu@intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/pci/intel/ivsc/mei_csi.c

index f11c7b25491dd36f011dec8c038919d2315bce25..41ccc5fbe74a556d88e33e2d4cb9dadb90e914a6 100644 (file)
@@ -654,21 +654,20 @@ static int mei_csi_parse_firmware(struct mei_csi *csi)
                return -EINVAL;
        }
 
+       v4l2_async_subdev_nf_init(&csi->notifier, &csi->subdev);
+       csi->notifier.ops = &mei_csi_notify_ops;
+
        ret = v4l2_fwnode_endpoint_parse(ep, &v4l2_ep);
        if (ret) {
                dev_err(dev, "could not parse v4l2 endpoint\n");
-               fwnode_handle_put(ep);
-               return -EINVAL;
+               ret = -EINVAL;
+               goto out_nf_cleanup;
        }
 
        csi->nr_of_lanes = v4l2_ep.bus.mipi_csi2.num_data_lanes;
 
-       v4l2_async_subdev_nf_init(&csi->notifier, &csi->subdev);
-       csi->notifier.ops = &mei_csi_notify_ops;
-
        asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
                                              struct v4l2_async_connection);
-       fwnode_handle_put(ep);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto out_nf_cleanup;
@@ -678,10 +677,13 @@ static int mei_csi_parse_firmware(struct mei_csi *csi)
        if (ret)
                goto out_nf_cleanup;
 
+       fwnode_handle_put(ep);
+
        return 0;
 
 out_nf_cleanup:
        v4l2_async_nf_cleanup(&csi->notifier);
+       fwnode_handle_put(ep);
 
        return ret;
 }