]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: qcom: Initialise V4L2 async notifier later
authorSakari Ailus <sakari.ailus@linux.intel.com>
Thu, 30 Mar 2023 09:37:02 +0000 (11:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 3 Dec 2023 06:32:10 +0000 (07:32 +0100)
[ Upstream commit 5651bab6890a0c5d126e2559b4aa353bed201e47 ]

Initialise V4L2 async notifier and parse DT for async sub-devices later,
just before registering the notifier. This way the device can be made
available to the V4L2 async framework from the notifier init time onwards.
A subsequent patch will add struct v4l2_device as an argument to
v4l2_async_nf_init().

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
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>
Stable-dep-of: f69791c39745 ("media: qcom: camss: Fix genpd cleanup")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/qcom/camss/camss.c

index 04e65edbfb8707e47d216fdfb51744e2e6057f57..f794215948e716b91ee9856261916b300d20bfd2 100644 (file)
@@ -1613,14 +1613,6 @@ static int camss_probe(struct platform_device *pdev)
        if (!camss->vfe)
                return -ENOMEM;
 
-       v4l2_async_nf_init(&camss->notifier);
-
-       num_subdevs = camss_of_parse_ports(camss);
-       if (num_subdevs < 0) {
-               ret = num_subdevs;
-               goto err_cleanup;
-       }
-
        ret = camss_icc_get(camss);
        if (ret < 0)
                goto err_cleanup;
@@ -1652,9 +1644,17 @@ static int camss_probe(struct platform_device *pdev)
                goto err_cleanup;
        }
 
+       v4l2_async_nf_init(&camss->notifier);
+
+       num_subdevs = camss_of_parse_ports(camss);
+       if (num_subdevs < 0) {
+               ret = num_subdevs;
+               goto err_cleanup;
+       }
+
        ret = camss_register_entities(camss);
        if (ret < 0)
-               goto err_register_entities;
+               goto err_cleanup;
 
        if (num_subdevs) {
                camss->notifier.ops = &camss_subdev_notifier_ops;
@@ -1689,9 +1689,8 @@ static int camss_probe(struct platform_device *pdev)
 
 err_register_subdevs:
        camss_unregister_entities(camss);
-err_register_entities:
-       v4l2_device_unregister(&camss->v4l2_dev);
 err_cleanup:
+       v4l2_device_unregister(&camss->v4l2_dev);
        v4l2_async_nf_cleanup(&camss->notifier);
 
        return ret;