summaryrefslogtreecommitdiff
path: root/drivers/media/v4l2-core/v4l2-async.c
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@linux.intel.com>2023-04-17 16:09:27 +0200
committerMauro Carvalho Chehab <mchehab@kernel.org>2023-07-28 10:45:12 +0200
commited59bbe18df09e654ffb18f791f2b47ff59384b1 (patch)
treee680ceaf17091b41c59d04b355ca420eaec1e80e /drivers/media/v4l2-core/v4l2-async.c
parentadb2dcd5f2d49d3ba3171160fabd4be0d4b2a86c (diff)
media: v4l: async: Clean up error handling in v4l2_async_match_notify
Add labels for error handling instead of doing it all in individual cases. Prepare for more functionality in this function. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743 Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-async.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-async.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c
index 9964d7f38480..0a9c9fb2a42c 100644
--- a/drivers/media/v4l2-core/v4l2-async.c
+++ b/drivers/media/v4l2-core/v4l2-async.c
@@ -320,10 +320,8 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
return ret;
ret = v4l2_async_nf_call_bound(notifier, sd, asc);
- if (ret < 0) {
- v4l2_device_unregister_subdev(sd);
- return ret;
- }
+ if (ret < 0)
+ goto err_unregister_subdev;
/*
* Depending of the function of the entities involved, we may want to
@@ -332,11 +330,8 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
* pad).
*/
ret = v4l2_async_create_ancillary_links(notifier, sd);
- if (ret) {
- v4l2_async_nf_call_unbind(notifier, sd, asc);
- v4l2_device_unregister_subdev(sd);
- return ret;
- }
+ if (ret)
+ goto err_call_unbind;
list_del(&asc->waiting_entry);
sd->asd = asc;
@@ -363,6 +358,14 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
subdev_notifier->parent = notifier;
return v4l2_async_nf_try_all_subdevs(subdev_notifier);
+
+err_call_unbind:
+ v4l2_async_nf_call_unbind(notifier, sd, asc);
+
+err_unregister_subdev:
+ v4l2_device_unregister_subdev(sd);
+
+ return ret;
}
/* Test all async sub-devices in a notifier for a match. */