summaryrefslogtreecommitdiff
path: root/drivers/media/pci
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@linux.intel.com>2023-10-16 10:30:53 +0300
committerHans Verkuil <hverkuil-cisco@xs4all.nl>2023-11-22 10:56:34 +0100
commit623017a4bb042777edf65bb8ea233ce5f06e0760 (patch)
tree80cb41303def6b82894c4947c861f90a2502db04 /drivers/media/pci
parenta6a42fada1e5ee0bcc1ce534ea196625d271dfd8 (diff)
media: ivsc: csi: Clean up parsing firmware and setting up async notifier
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>
Diffstat (limited to 'drivers/media/pci')
-rw-r--r--drivers/media/pci/intel/ivsc/mei_csi.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/media/pci/intel/ivsc/mei_csi.c b/drivers/media/pci/intel/ivsc/mei_csi.c
index f11c7b25491d..41ccc5fbe74a 100644
--- a/drivers/media/pci/intel/ivsc/mei_csi.c
+++ b/drivers/media/pci/intel/ivsc/mei_csi.c
@@ -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;
}