media: v4l: async: Set v4l2_device and subdev in async notifier init
authorSakari Ailus <sakari.ailus@linux.intel.com>
Thu, 23 Feb 2023 15:24:48 +0000 (16:24 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Thu, 10 Aug 2023 05:58:32 +0000 (07:58 +0200)
Set the v4l2_device already in async notifier init, so struct device
related to it will be available before the notifier is registered. This
requires separating notifier initialisation into two functions, one that
takes v4l2_device as its argument, v4l2_async_nf_init and
v4l2_async_subdev_nf_init, for sub-device notifiers. Registering the
notifier will use a single function, v4l2_async_nf_register.

This is done in order to make struct device available earlier, during
construction of the async connections, for sensible debug prints.

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>
53 files changed:
drivers/media/i2c/ds90ub913.c
drivers/media/i2c/ds90ub953.c
drivers/media/i2c/ds90ub960.c
drivers/media/i2c/max9286.c
drivers/media/i2c/st-mipid02.c
drivers/media/i2c/tc358746.c
drivers/media/pci/intel/ipu3/ipu3-cio2.c
drivers/media/platform/atmel/atmel-isi.c
drivers/media/platform/cadence/cdns-csi2rx.c
drivers/media/platform/intel/pxa_camera.c
drivers/media/platform/marvell/cafe-driver.c
drivers/media/platform/marvell/mcam-core.c
drivers/media/platform/marvell/mmp-driver.c
drivers/media/platform/microchip/microchip-csi2dc.c
drivers/media/platform/microchip/microchip-sama5d2-isc.c
drivers/media/platform/microchip/microchip-sama7g5-isc.c
drivers/media/platform/nxp/imx-mipi-csis.c
drivers/media/platform/nxp/imx7-media-csi.c
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
drivers/media/platform/nxp/imx8mq-mipi-csi2.c
drivers/media/platform/qcom/camss/camss.c
drivers/media/platform/renesas/rcar-isp.c
drivers/media/platform/renesas/rcar-vin/rcar-core.c
drivers/media/platform/renesas/rcar-vin/rcar-csi2.c
drivers/media/platform/renesas/rcar_drif.c
drivers/media/platform/renesas/renesas-ceu.c
drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c
drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
drivers/media/platform/samsung/exynos4-is/media-dev.c
drivers/media/platform/st/stm32/stm32-dcmi.c
drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c
drivers/media/platform/ti/am437x/am437x-vpfe.c
drivers/media/platform/ti/cal/cal.c
drivers/media/platform/ti/davinci/vpif_capture.c
drivers/media/platform/ti/omap3isp/isp.c
drivers/media/platform/video-mux.c
drivers/media/platform/xilinx/xilinx-vipp.c
drivers/media/v4l2-core/v4l2-async.c
drivers/media/v4l2-core/v4l2-fwnode.c
drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
drivers/staging/media/atomisp/pci/atomisp_v4l2.c
drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c
drivers/staging/media/imx/imx-media-csi.c
drivers/staging/media/imx/imx-media-dev-common.c
drivers/staging/media/imx/imx6-mipi-csi2.c
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
drivers/staging/media/tegra-video/vi.c
include/media/v4l2-async.h

index 349c34724eee841093eb6a71061e56458f31356f..80d9cf6dd9455f89e07c4772b56bcf65f637509e 100644 (file)
@@ -568,7 +568,7 @@ static int ub913_v4l2_notifier_register(struct ub913_data *priv)
                return -ENODEV;
        }
 
                return -ENODEV;
        }
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
                                              struct v4l2_async_connection);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
                                              struct v4l2_async_connection);
@@ -583,7 +583,7 @@ static int ub913_v4l2_notifier_register(struct ub913_data *priv)
 
        priv->notifier.ops = &ub913_notify_ops;
 
 
        priv->notifier.ops = &ub913_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
index 440af7bdd73ae6285f7dcdce4540da1e307fc323..cadf75eb077326f158cb972d404b9d08206f49ca 100644 (file)
@@ -773,7 +773,7 @@ static int ub953_v4l2_notifier_register(struct ub953_data *priv)
                return -ENODEV;
        }
 
                return -ENODEV;
        }
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
                                              struct v4l2_async_connection);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
                                              struct v4l2_async_connection);
@@ -788,7 +788,7 @@ static int ub953_v4l2_notifier_register(struct ub953_data *priv)
 
        priv->notifier.ops = &ub953_notify_ops;
 
 
        priv->notifier.ops = &ub953_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
index a2b1056ba99b66323cbcdf3c0f9b891a945d08cb..4833b39b9178c793bc57cd62311b2028dd03cf8b 100644 (file)
@@ -3599,7 +3599,7 @@ static int ub960_v4l2_notifier_register(struct ub960_data *priv)
        unsigned int i;
        int ret;
 
        unsigned int i;
        int ret;
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd);
 
        for (i = 0; i < priv->hw_data->num_rxports; i++) {
                struct ub960_rxport *rxport = priv->rxports[i];
 
        for (i = 0; i < priv->hw_data->num_rxports; i++) {
                struct ub960_rxport *rxport = priv->rxports[i];
@@ -3623,7 +3623,7 @@ static int ub960_v4l2_notifier_register(struct ub960_data *priv)
 
        priv->notifier.ops = &ub960_notify_ops;
 
 
        priv->notifier.ops = &ub960_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
index 78c77cd50823af7a291a605ccd67e5228018beb9..20e7c7cf5eeb953d60babada315c2e020acf7d37 100644 (file)
@@ -746,7 +746,7 @@ static int max9286_v4l2_notifier_register(struct max9286_priv *priv)
        if (!priv->nsources)
                return 0;
 
        if (!priv->nsources)
                return 0;
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd);
 
        for_each_source(priv, source) {
                unsigned int i = to_index(priv, source);
 
        for_each_source(priv, source) {
                unsigned int i = to_index(priv, source);
@@ -766,7 +766,7 @@ static int max9286_v4l2_notifier_register(struct max9286_priv *priv)
 
        priv->notifier.ops = &max9286_notify_ops;
 
 
        priv->notifier.ops = &max9286_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
        if (ret) {
                dev_err(dev, "Failed to register subdev_notifier");
                v4l2_async_nf_cleanup(&priv->notifier);
index 5cd87b1d57591c68ea69cce0f096c69f33ba4199..782633b9e11e20ac16feec918dd8b69b53ea7178 100644 (file)
@@ -911,7 +911,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
        bridge->rx = ep;
 
        /* register async notifier so we get noticed when sensor is connected */
        bridge->rx = ep;
 
        /* register async notifier so we get noticed when sensor is connected */
-       v4l2_async_nf_init(&bridge->notifier);
+       v4l2_async_subdev_nf_init(&bridge->notifier, &bridge->sd);
        asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
                                              of_fwnode_handle(ep_node),
                                              struct v4l2_async_connection);
        asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
                                              of_fwnode_handle(ep_node),
                                              struct v4l2_async_connection);
@@ -924,7 +924,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
        }
        bridge->notifier.ops = &mipid02_notifier_ops;
 
        }
        bridge->notifier.ops = &mipid02_notifier_ops;
 
-       ret = v4l2_async_subdev_nf_register(&bridge->sd, &bridge->notifier);
+       ret = v4l2_async_nf_register(&bridge->notifier);
        if (ret)
                v4l2_async_nf_cleanup(&bridge->notifier);
 
        if (ret)
                v4l2_async_nf_cleanup(&bridge->notifier);
 
index 203eb337efce5da4981140306e34acd9365bec27..566f5eaddd572ef2fa7a1d4192773c741212a028 100644 (file)
@@ -1460,7 +1460,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
                return err;
        }
 
                return err;
        }
 
-       v4l2_async_nf_init(&tc358746->notifier);
+       v4l2_async_subdev_nf_init(&tc358746->notifier, &tc358746->sd);
        asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep,
                                              struct v4l2_async_connection);
        fwnode_handle_put(ep);
        asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep,
                                              struct v4l2_async_connection);
        fwnode_handle_put(ep);
@@ -1472,7 +1472,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
 
        tc358746->notifier.ops = &tc358746_notify_ops;
 
 
        tc358746->notifier.ops = &tc358746_notify_ops;
 
-       err = v4l2_async_subdev_nf_register(&tc358746->sd, &tc358746->notifier);
+       err = v4l2_async_nf_register(&tc358746->notifier);
        if (err)
                goto err_cleanup;
 
        if (err)
                goto err_cleanup;
 
index 0e89a3b9293a4d7c08078986676c597dce078771..4ebab0a95f35434b17f607c3f8c7fec652ea2514 100644 (file)
@@ -1500,7 +1500,7 @@ err_parse:
         * suspend.
         */
        cio2->notifier.ops = &cio2_async_ops;
         * suspend.
         */
        cio2->notifier.ops = &cio2_async_ops;
-       ret = v4l2_async_nf_register(&cio2->v4l2_dev, &cio2->notifier);
+       ret = v4l2_async_nf_register(&cio2->notifier);
        if (ret)
                dev_err(dev, "failed to register async notifier : %d\n", ret);
 
        if (ret)
                dev_err(dev, "failed to register async notifier : %d\n", ret);
 
@@ -1795,7 +1795,7 @@ static int cio2_pci_probe(struct pci_dev *pci_dev,
        if (r)
                goto fail_v4l2_device_unregister;
 
        if (r)
                goto fail_v4l2_device_unregister;
 
-       v4l2_async_nf_init(&cio2->notifier);
+       v4l2_async_nf_init(&cio2->notifier, &cio2->v4l2_dev);
 
        /* Register notifier for subdevices we care */
        r = cio2_parse_firmware(cio2);
 
        /* Register notifier for subdevices we care */
        r = cio2_parse_firmware(cio2);
index 13902b94473148a16d6e6a7a3313c7ca4e9758f5..4046212d48b4154801e313bff2241e7f6c66e8de 100644 (file)
@@ -1159,7 +1159,7 @@ static int isi_graph_init(struct atmel_isi *isi)
        if (!ep)
                return -EINVAL;
 
        if (!ep)
                return -EINVAL;
 
-       v4l2_async_nf_init(&isi->notifier);
+       v4l2_async_nf_init(&isi->notifier, &isi->v4l2_dev);
 
        asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
                                              of_fwnode_handle(ep),
 
        asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
                                              of_fwnode_handle(ep),
@@ -1171,7 +1171,7 @@ static int isi_graph_init(struct atmel_isi *isi)
 
        isi->notifier.ops = &isi_graph_notify_ops;
 
 
        isi->notifier.ops = &isi_graph_notify_ops;
 
-       ret = v4l2_async_nf_register(&isi->v4l2_dev, &isi->notifier);
+       ret = v4l2_async_nf_register(&isi->notifier);
        if (ret < 0) {
                dev_err(isi->dev, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&isi->notifier);
        if (ret < 0) {
                dev_err(isi->dev, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&isi->notifier);
index a6d7de98b755855725c5da5365ccd93d06c21902..0d879d71d8185014baa11ec653aef1a11ecc582b 100644 (file)
@@ -474,7 +474,7 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
                return -EINVAL;
        }
 
                return -EINVAL;
        }
 
-       v4l2_async_nf_init(&csi2rx->notifier);
+       v4l2_async_subdev_nf_init(&csi2rx->notifier, &csi2rx->subdev);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
                                              struct v4l2_async_connection);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
                                              struct v4l2_async_connection);
@@ -484,7 +484,7 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
 
        csi2rx->notifier.ops = &csi2rx_notifier_ops;
 
 
        csi2rx->notifier.ops = &csi2rx_notifier_ops;
 
-       ret = v4l2_async_subdev_nf_register(&csi2rx->subdev, &csi2rx->notifier);
+       ret = v4l2_async_nf_register(&csi2rx->notifier);
        if (ret)
                v4l2_async_nf_cleanup(&csi2rx->notifier);
 
        if (ret)
                v4l2_async_nf_cleanup(&csi2rx->notifier);
 
index 6112d31c22282af5c0a99b79f6c9c87887c38fd7..6e6caf50e11ef8026b5788973ec734ed10ac19e4 100644 (file)
@@ -2302,7 +2302,7 @@ static int pxa_camera_probe(struct platform_device *pdev)
        if (err)
                return err;
 
        if (err)
                return err;
 
-       v4l2_async_nf_init(&pcdev->notifier);
+       v4l2_async_nf_init(&pcdev->notifier, &pcdev->v4l2_dev);
        pcdev->res = res;
        pcdev->pdata = pdev->dev.platform_data;
        if (pcdev->pdata) {
        pcdev->res = res;
        pcdev->pdata = pdev->dev.platform_data;
        if (pcdev->pdata) {
@@ -2402,7 +2402,7 @@ static int pxa_camera_probe(struct platform_device *pdev)
        }
 
        pcdev->notifier.ops = &pxa_camera_sensor_ops;
        }
 
        pcdev->notifier.ops = &pxa_camera_sensor_ops;
-       err = v4l2_async_nf_register(&pcdev->v4l2_dev, &pcdev->notifier);
+       err = v4l2_async_nf_register(&pcdev->notifier);
        if (err)
                goto exit_deactivate;
 
        if (err)
                goto exit_deactivate;
 
index fbfbb9f67ddfcd1920c6a572ab5e8d8c232a0751..ef810249def61c26e8b0d70c76caadbf182f63ab 100644 (file)
@@ -540,7 +540,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
        if (ret)
                goto out_smbus_shutdown;
 
        if (ret)
                goto out_smbus_shutdown;
 
-       v4l2_async_nf_init(&mcam->notifier);
+       v4l2_async_nf_init(&mcam->notifier, &mcam->v4l2_dev);
 
        asd = v4l2_async_nf_add_i2c(&mcam->notifier,
                                    i2c_adapter_id(cam->i2c_adapter),
 
        asd = v4l2_async_nf_add_i2c(&mcam->notifier,
                                    i2c_adapter_id(cam->i2c_adapter),
index 7a6e043ac7539157582444ea35a468d6f6271086..66688b4aece5d8fcb0f8f20622efc30c9f8cc8ff 100644 (file)
@@ -1870,7 +1870,7 @@ int mccic_register(struct mcam_camera *cam)
        cam->mbus_code = mcam_def_mbus_code;
 
        cam->notifier.ops = &mccic_notify_ops;
        cam->mbus_code = mcam_def_mbus_code;
 
        cam->notifier.ops = &mccic_notify_ops;
-       ret = v4l2_async_nf_register(&cam->v4l2_dev, &cam->notifier);
+       ret = v4l2_async_nf_register(&cam->notifier);
        if (ret < 0) {
                cam_warn(cam, "failed to register a sensor notifier");
                goto out;
        if (ret < 0) {
                cam_warn(cam, "failed to register a sensor notifier");
                goto out;
index 43e046b821156a89e2c301ebc20ee960bc98cd47..170907cc1885cf11fe5d3f871fe9728e586c596c 100644 (file)
@@ -238,7 +238,7 @@ static int mmpcam_probe(struct platform_device *pdev)
        if (!ep)
                return -ENODEV;
 
        if (!ep)
                return -ENODEV;
 
-       v4l2_async_nf_init(&mcam->notifier);
+       v4l2_async_nf_init(&mcam->notifier, &mcam->v4l2_dev);
 
        asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
                                              struct v4l2_async_connection);
 
        asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
                                              struct v4l2_async_connection);
index d631c3880c5368c277477e4005dda0c909a86da5..988c1cc1d8b6b9540c04758f12faafd9fd9095bf 100644 (file)
@@ -523,7 +523,7 @@ static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc,
        struct v4l2_async_connection *asd;
        int ret = 0;
 
        struct v4l2_async_connection *asd;
        int ret = 0;
 
-       v4l2_async_nf_init(&csi2dc->notifier);
+       v4l2_async_subdev_nf_init(&csi2dc->notifier, &csi2dc->csi2dc_sd);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier,
                                              input_fwnode,
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier,
                                              input_fwnode,
@@ -542,8 +542,7 @@ static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc,
 
        csi2dc->notifier.ops = &csi2dc_async_ops;
 
 
        csi2dc->notifier.ops = &csi2dc_async_ops;
 
-       ret = v4l2_async_subdev_nf_register(&csi2dc->csi2dc_sd,
-                                           &csi2dc->notifier);
+       ret = v4l2_async_nf_register(&csi2dc->notifier);
        if (ret) {
                dev_err(csi2dc->dev, "fail to register async notifier: %d\n",
                        ret);
        if (ret) {
                dev_err(csi2dc->dev, "fail to register async notifier: %d\n",
                        ret);
index e8dfe30cc62d2f0dec103d499c048dcc0b1f113d..5ac149cf3647f1c65cd3bfb0052fec9e745bb7d8 100644 (file)
@@ -527,7 +527,7 @@ static int microchip_isc_probe(struct platform_device *pdev)
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
-               v4l2_async_nf_init(&subdev_entity->notifier);
+               v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
@@ -543,8 +543,7 @@ static int microchip_isc_probe(struct platform_device *pdev)
 
                subdev_entity->notifier.ops = &microchip_isc_async_ops;
 
 
                subdev_entity->notifier.ops = &microchip_isc_async_ops;
 
-               ret = v4l2_async_nf_register(&isc->v4l2_dev,
-                                            &subdev_entity->notifier);
+               ret = v4l2_async_nf_register(&subdev_entity->notifier);
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
index cd982a995d72c7b1ac78b250851dc1351a01e117..73445f33d26ba3a2a7cfdd6109efad86bf75aaed 100644 (file)
@@ -517,7 +517,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
-               v4l2_async_nf_init(&subdev_entity->notifier);
+               v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
@@ -533,8 +533,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
 
                subdev_entity->notifier.ops = &microchip_isc_async_ops;
 
 
                subdev_entity->notifier.ops = &microchip_isc_async_ops;
 
-               ret = v4l2_async_nf_register(&isc->v4l2_dev,
-                                            &subdev_entity->notifier);
+               ret = v4l2_async_nf_register(&subdev_entity->notifier);
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
index f7d64fb48434e8586e1a50cb42a3a8dacfce13e4..16f19a6401301e01e879af3baca3fb59672ac536 100644 (file)
@@ -1251,7 +1251,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
        unsigned int i;
        int ret;
 
        unsigned int i;
        int ret;
 
-       v4l2_async_nf_init(&csis->notifier);
+       v4l2_async_subdev_nf_init(&csis->notifier, &csis->sd);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
@@ -1287,7 +1287,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 
        csis->notifier.ops = &mipi_csis_notify_ops;
 
 
        csis->notifier.ops = &mipi_csis_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&csis->sd, &csis->notifier);
+       ret = v4l2_async_nf_register(&csis->notifier);
        if (ret)
                return ret;
 
        if (ret)
                return ret;
 
index 565c093fdff25b70e0fa43c13c1208f9304fbb8f..50f6efaaa7f2358dd67e39198b0ccc38c25ca0ca 100644 (file)
@@ -2061,7 +2061,7 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
        struct fwnode_handle *ep;
        int ret;
 
        struct fwnode_handle *ep;
        int ret;
 
-       v4l2_async_nf_init(&csi->notifier);
+       v4l2_async_nf_init(&csi->notifier, &csi->v4l2_dev);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
@@ -2084,7 +2084,7 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
 
        csi->notifier.ops = &imx7_csi_notify_ops;
 
 
        csi->notifier.ops = &imx7_csi_notify_ops;
 
-       ret = v4l2_async_nf_register(&csi->v4l2_dev, &csi->notifier);
+       ret = v4l2_async_nf_register(&csi->notifier);
        if (ret)
                goto error;
 
        if (ret)
                goto error;
 
index da1572f8ff42fcb99210fff34b223f681c8f913e..5fdd0fe9efbec667989317826887c8e152d6a1dd 100644 (file)
@@ -175,7 +175,7 @@ static int mxc_isi_v4l2_init(struct mxc_isi_dev *isi)
        }
 
        /* Initialize, fill and register the async notifier. */
        }
 
        /* Initialize, fill and register the async notifier. */
-       v4l2_async_nf_init(&isi->notifier);
+       v4l2_async_nf_init(&isi->notifier, v4l2_dev);
        isi->notifier.ops = &mxc_isi_async_notifier_ops;
 
        for (i = 0; i < isi->pdata->num_ports; ++i) {
        isi->notifier.ops = &mxc_isi_async_notifier_ops;
 
        for (i = 0; i < isi->pdata->num_ports; ++i) {
@@ -200,7 +200,7 @@ static int mxc_isi_v4l2_init(struct mxc_isi_dev *isi)
                masd->port = i;
        }
 
                masd->port = i;
        }
 
-       ret = v4l2_async_nf_register(v4l2_dev, &isi->notifier);
+       ret = v4l2_async_nf_register(&isi->notifier);
        if (ret < 0) {
                dev_err(isi->dev,
                        "Failed to register async notifier: %d\n", ret);
        if (ret < 0) {
                dev_err(isi->dev,
                        "Failed to register async notifier: %d\n", ret);
index 326c3763b85a8ac908cb1e0b83fa0d5cc208bb48..39f7e86ad5312dfe81182814cd9f9845a212ffc6 100644 (file)
@@ -592,7 +592,7 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
        unsigned int i;
        int ret;
 
        unsigned int i;
        int ret;
 
-       v4l2_async_nf_init(&state->notifier);
+       v4l2_async_subdev_nf_init(&state->notifier, &state->sd);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
@@ -629,7 +629,7 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 
        state->notifier.ops = &imx8mq_mipi_csi_notify_ops;
 
 
        state->notifier.ops = &imx8mq_mipi_csi_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&state->sd, &state->notifier);
+       ret = v4l2_async_nf_register(&state->notifier);
        if (ret)
                return ret;
 
        if (ret)
                return ret;
 
index b89e2bb5b505e02eeab6342bd38a0a2fab7fb779..f11dc59135a5acd83ae686b065e95b341067e95e 100644 (file)
@@ -1640,7 +1640,7 @@ static int camss_probe(struct platform_device *pdev)
                goto err_cleanup;
        }
 
                goto err_cleanup;
        }
 
-       v4l2_async_nf_init(&camss->notifier);
+       v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev);
 
        num_subdevs = camss_of_parse_ports(camss);
        if (num_subdevs < 0) {
 
        num_subdevs = camss_of_parse_ports(camss);
        if (num_subdevs < 0) {
@@ -1655,8 +1655,7 @@ static int camss_probe(struct platform_device *pdev)
        if (num_subdevs) {
                camss->notifier.ops = &camss_subdev_notifier_ops;
 
        if (num_subdevs) {
                camss->notifier.ops = &camss_subdev_notifier_ops;
 
-               ret = v4l2_async_nf_register(&camss->v4l2_dev,
-                                            &camss->notifier);
+               ret = v4l2_async_nf_register(&camss->notifier);
                if (ret) {
                        dev_err(dev,
                                "Failed to register async subdev nodes: %d\n",
                if (ret) {
                        dev_err(dev,
                                "Failed to register async subdev nodes: %d\n",
index 9e3b8a8850a0f4461477c8a892fe404a7e6cba35..7360cf3863f2c8d8c507a76bf16b231672c17870 100644 (file)
@@ -392,7 +392,7 @@ static int risp_parse_dt(struct rcar_isp *isp)
 
        dev_dbg(isp->dev, "Found '%pOF'\n", to_of_node(fwnode));
 
 
        dev_dbg(isp->dev, "Found '%pOF'\n", to_of_node(fwnode));
 
-       v4l2_async_nf_init(&isp->notifier);
+       v4l2_async_subdev_nf_init(&isp->notifier, &isp->subdev);
        isp->notifier.ops = &risp_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode,
        isp->notifier.ops = &risp_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode,
@@ -401,7 +401,7 @@ static int risp_parse_dt(struct rcar_isp *isp)
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
-       ret = v4l2_async_subdev_nf_register(&isp->subdev, &isp->notifier);
+       ret = v4l2_async_nf_register(&isp->notifier);
        if (ret)
                v4l2_async_nf_cleanup(&isp->notifier);
 
        if (ret)
                v4l2_async_nf_cleanup(&isp->notifier);
 
index b44f12bd01c495850b00dace70b222e65e5d8439..809c3a38cc4af967f127d14e1d9c9cc7c2f4a7f2 100644 (file)
@@ -375,7 +375,7 @@ static int rvin_group_notifier_init(struct rvin_dev *vin, unsigned int port,
 
        mutex_unlock(&vin->group->lock);
 
 
        mutex_unlock(&vin->group->lock);
 
-       v4l2_async_nf_init(&vin->group->notifier);
+       v4l2_async_nf_init(&vin->group->notifier, &vin->v4l2_dev);
 
        /*
         * Some subdevices may overlap but the parser function can handle it and
 
        /*
         * Some subdevices may overlap but the parser function can handle it and
@@ -399,7 +399,7 @@ static int rvin_group_notifier_init(struct rvin_dev *vin, unsigned int port,
                return 0;
 
        vin->group->notifier.ops = &rvin_group_notify_ops;
                return 0;
 
        vin->group->notifier.ops = &rvin_group_notify_ops;
-       ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->group->notifier);
+       ret = v4l2_async_nf_register(&vin->group->notifier);
        if (ret < 0) {
                vin_err(vin, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&vin->group->notifier);
        if (ret < 0) {
                vin_err(vin, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&vin->group->notifier);
@@ -712,7 +712,7 @@ static int rvin_parallel_init(struct rvin_dev *vin)
 {
        int ret;
 
 {
        int ret;
 
-       v4l2_async_nf_init(&vin->notifier);
+       v4l2_async_nf_init(&vin->notifier, &vin->v4l2_dev);
 
        ret = rvin_parallel_parse_of(vin);
        if (ret)
 
        ret = rvin_parallel_parse_of(vin);
        if (ret)
@@ -725,7 +725,7 @@ static int rvin_parallel_init(struct rvin_dev *vin)
                to_of_node(vin->parallel.asc->match.fwnode));
 
        vin->notifier.ops = &rvin_parallel_notify_ops;
                to_of_node(vin->parallel.asc->match.fwnode));
 
        vin->notifier.ops = &rvin_parallel_notify_ops;
-       ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier);
+       ret = v4l2_async_nf_register(&vin->notifier);
        if (ret < 0) {
                vin_err(vin, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&vin->notifier);
        if (ret < 0) {
                vin_err(vin, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&vin->notifier);
index c3a1179954931e8c6b7f2d4d7974bd2708ca9919..f536b635914665bd842343a0881f8a38125bfa9b 100644 (file)
@@ -1122,7 +1122,7 @@ static int rcsi2_parse_dt(struct rcar_csi2 *priv)
 
        dev_dbg(priv->dev, "Found '%pOF'\n", to_of_node(fwnode));
 
 
        dev_dbg(priv->dev, "Found '%pOF'\n", to_of_node(fwnode));
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->subdev);
        priv->notifier.ops = &rcar_csi2_notify_ops;
 
        asc = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
        priv->notifier.ops = &rcar_csi2_notify_ops;
 
        asc = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
@@ -1131,7 +1131,7 @@ static int rcsi2_parse_dt(struct rcar_csi2 *priv)
        if (IS_ERR(asc))
                return PTR_ERR(asc);
 
        if (IS_ERR(asc))
                return PTR_ERR(asc);
 
-       ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret)
                v4l2_async_nf_cleanup(&priv->notifier);
 
        if (ret)
                v4l2_async_nf_cleanup(&priv->notifier);
 
index ef24bab04995d500514eb5200688bf7a19a57794..163a4ba61c1735f459bba959c10828dc9e02db69 100644 (file)
@@ -1208,7 +1208,7 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
        struct fwnode_handle *fwnode, *ep;
        struct v4l2_async_connection *asd;
 
        struct fwnode_handle *fwnode, *ep;
        struct v4l2_async_connection *asd;
 
-       v4l2_async_nf_init(notifier);
+       v4l2_async_nf_init(&sdr->notifier, &sdr->v4l2_dev);
 
        ep = fwnode_graph_get_next_endpoint(of_fwnode_handle(sdr->dev->of_node),
                                            NULL);
 
        ep = fwnode_graph_get_next_endpoint(of_fwnode_handle(sdr->dev->of_node),
                                            NULL);
@@ -1342,7 +1342,7 @@ static int rcar_drif_sdr_probe(struct rcar_drif_sdr *sdr)
        sdr->notifier.ops = &rcar_drif_notify_ops;
 
        /* Register notifier */
        sdr->notifier.ops = &rcar_drif_notify_ops;
 
        /* Register notifier */
-       ret = v4l2_async_nf_register(&sdr->v4l2_dev, &sdr->notifier);
+       ret = v4l2_async_nf_register(&sdr->notifier);
        if (ret < 0) {
                dev_err(sdr->dev, "failed: notifier register ret %d\n", ret);
                goto cleanup;
        if (ret < 0) {
                dev_err(sdr->dev, "failed: notifier register ret %d\n", ret);
                goto cleanup;
index f9e0bb954307b4484fc8f80558c01ad822af9b0c..ec631c6e2a571752bdbd322fd23c73e7502bca67 100644 (file)
@@ -1657,7 +1657,7 @@ static int ceu_probe(struct platform_device *pdev)
        if (ret)
                goto error_pm_disable;
 
        if (ret)
                goto error_pm_disable;
 
-       v4l2_async_nf_init(&ceudev->notifier);
+       v4l2_async_nf_init(&ceudev->notifier, &ceudev->v4l2_dev);
 
        if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
                ceu_data = of_device_get_match_data(dev);
 
        if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
                ceu_data = of_device_get_match_data(dev);
@@ -1679,7 +1679,7 @@ static int ceu_probe(struct platform_device *pdev)
 
        ceudev->notifier.v4l2_dev       = &ceudev->v4l2_dev;
        ceudev->notifier.ops            = &ceu_notify_ops;
 
        ceudev->notifier.v4l2_dev       = &ceudev->v4l2_dev;
        ceudev->notifier.ops            = &ceu_notify_ops;
-       ret = v4l2_async_nf_register(&ceudev->v4l2_dev, &ceudev->notifier);
+       ret = v4l2_async_nf_register(&ceudev->notifier);
        if (ret)
                goto error_cleanup;
 
        if (ret)
                goto error_cleanup;
 
index a5aa6a73f84d1224f61c868232efb6570afd889f..280efd2a8185596a3812d29928358dc54515f834 100644 (file)
@@ -182,7 +182,7 @@ static int rzg2l_cru_mc_parse_of_graph(struct rzg2l_cru_dev *cru)
 {
        int ret;
 
 {
        int ret;
 
-       v4l2_async_nf_init(&cru->notifier);
+       v4l2_async_nf_init(&cru->notifier, &cru->v4l2_dev);
 
        ret = rzg2l_cru_mc_parse_of(cru);
        if (ret)
 
        ret = rzg2l_cru_mc_parse_of(cru);
        if (ret)
@@ -193,7 +193,7 @@ static int rzg2l_cru_mc_parse_of_graph(struct rzg2l_cru_dev *cru)
        if (list_empty(&cru->notifier.waiting_list))
                return 0;
 
        if (list_empty(&cru->notifier.waiting_list))
                return 0;
 
-       ret = v4l2_async_nf_register(&cru->v4l2_dev, &cru->notifier);
+       ret = v4l2_async_nf_register(&cru->notifier);
        if (ret < 0) {
                dev_err(cru->dev, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&cru->notifier);
        if (ret < 0) {
                dev_err(cru->dev, "Notifier registration failed\n");
                v4l2_async_nf_cleanup(&cru->notifier);
index da233d76c31546020362401702b52c411bc528a3..ad2bd71037abdb2e46e8aa6764f871811b8af951 100644 (file)
@@ -673,7 +673,7 @@ static int rzg2l_csi2_parse_dt(struct rzg2l_csi2 *csi2)
        fwnode = fwnode_graph_get_remote_endpoint(ep);
        fwnode_handle_put(ep);
 
        fwnode = fwnode_graph_get_remote_endpoint(ep);
        fwnode_handle_put(ep);
 
-       v4l2_async_nf_init(&csi2->notifier);
+       v4l2_async_subdev_nf_init(&csi2->notifier, &csi2->subdev);
        csi2->notifier.ops = &rzg2l_csi2_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode,
        csi2->notifier.ops = &rzg2l_csi2_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode,
@@ -682,7 +682,7 @@ static int rzg2l_csi2_parse_dt(struct rzg2l_csi2 *csi2)
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
-       ret = v4l2_async_subdev_nf_register(&csi2->subdev, &csi2->notifier);
+       ret = v4l2_async_nf_register(&csi2->notifier);
        if (ret)
                v4l2_async_nf_cleanup(&csi2->notifier);
 
        if (ret)
                v4l2_async_nf_cleanup(&csi2->notifier);
 
index 6b9bd97afabedefb9b5950b9e1cb33cb202288cc..c41abd2833f12f0ef5e4348ee26fb119236137d0 100644 (file)
@@ -187,7 +187,7 @@ static int rkisp1_subdev_notifier_register(struct rkisp1_device *rkisp1)
        unsigned int index = 0;
        int ret = 0;
 
        unsigned int index = 0;
        int ret = 0;
 
-       v4l2_async_nf_init(ntf);
+       v4l2_async_nf_init(ntf, &rkisp1->v4l2_dev);
 
        ntf->ops = &rkisp1_subdev_notifier_ops;
 
 
        ntf->ops = &rkisp1_subdev_notifier_ops;
 
@@ -287,7 +287,7 @@ static int rkisp1_subdev_notifier_register(struct rkisp1_device *rkisp1)
        if (!index)
                dev_dbg(rkisp1->dev, "no remote subdevice found\n");
 
        if (!index)
                dev_dbg(rkisp1->dev, "no remote subdevice found\n");
 
-       ret = v4l2_async_nf_register(&rkisp1->v4l2_dev, ntf);
+       ret = v4l2_async_nf_register(ntf);
        if (ret) {
                v4l2_async_nf_cleanup(ntf);
                return ret;
        if (ret) {
                v4l2_async_nf_cleanup(ntf);
                return ret;
index cb9a22b5b6b1e28d2eecda764211b33db50dd59b..5f10bb4eb4f7c947d64b0dfaa5828dcb911090d5 100644 (file)
@@ -1478,7 +1478,7 @@ static int fimc_md_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, fmd);
 
 
        platform_set_drvdata(pdev, fmd);
 
-       v4l2_async_nf_init(&fmd->subdev_notifier);
+       v4l2_async_nf_init(&fmd->subdev_notifier, &fmd->v4l2_dev);
 
        ret = fimc_md_register_platform_entities(fmd, dev->of_node);
        if (ret)
 
        ret = fimc_md_register_platform_entities(fmd, dev->of_node);
        if (ret)
@@ -1506,8 +1506,7 @@ static int fimc_md_probe(struct platform_device *pdev)
                fmd->subdev_notifier.ops = &subdev_notifier_ops;
                fmd->num_sensors = 0;
 
                fmd->subdev_notifier.ops = &subdev_notifier_ops;
                fmd->num_sensors = 0;
 
-               ret = v4l2_async_nf_register(&fmd->v4l2_dev,
-                                            &fmd->subdev_notifier);
+               ret = v4l2_async_nf_register(&fmd->subdev_notifier);
                if (ret)
                        goto err_clk_p;
        }
                if (ret)
                        goto err_clk_p;
        }
index b029efa992d64b2cd35a0084bf6d933c51861e45..b026876415ca19eb8293995f4fe5acc18edf2064 100644 (file)
@@ -1897,7 +1897,7 @@ static int dcmi_graph_init(struct stm32_dcmi *dcmi)
                return -EINVAL;
        }
 
                return -EINVAL;
        }
 
-       v4l2_async_nf_init(&dcmi->notifier);
+       v4l2_async_nf_init(&dcmi->notifier, &dcmi->v4l2_dev);
 
        asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier,
                                              of_fwnode_handle(ep),
 
        asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier,
                                              of_fwnode_handle(ep),
@@ -1912,7 +1912,7 @@ static int dcmi_graph_init(struct stm32_dcmi *dcmi)
 
        dcmi->notifier.ops = &dcmi_graph_notify_ops;
 
 
        dcmi->notifier.ops = &dcmi_graph_notify_ops;
 
-       ret = v4l2_async_nf_register(&dcmi->v4l2_dev, &dcmi->notifier);
+       ret = v4l2_async_nf_register(&dcmi->notifier);
        if (ret < 0) {
                dev_err(dcmi->dev, "Failed to register notifier\n");
                v4l2_async_nf_cleanup(&dcmi->notifier);
        if (ret < 0) {
                dev_err(dcmi->dev, "Failed to register notifier\n");
                v4l2_async_nf_cleanup(&dcmi->notifier);
index 3b6e9071a54533733c77c14b1b4c6a6ca0231896..ad13d447d483464144088454d0d9de8ba225a1b9 100644 (file)
@@ -121,7 +121,7 @@ static int sun4i_csi_notifier_init(struct sun4i_csi *csi)
        struct fwnode_handle *ep;
        int ret;
 
        struct fwnode_handle *ep;
        int ret;
 
-       v4l2_async_nf_init(&csi->notifier);
+       v4l2_async_nf_init(&csi->notifier, &csi->v4l);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
@@ -239,7 +239,7 @@ static int sun4i_csi_probe(struct platform_device *pdev)
        if (ret)
                goto err_unregister_media;
 
        if (ret)
                goto err_unregister_media;
 
-       ret = v4l2_async_nf_register(&csi->v4l, &csi->notifier);
+       ret = v4l2_async_nf_register(&csi->notifier);
        if (ret) {
                dev_err(csi->dev, "Couldn't register our notifier.\n");
                goto err_unregister_media;
        if (ret) {
                dev_err(csi->dev, "Couldn't register our notifier.\n");
                goto err_unregister_media;
index ebb725fc11ba5c5cc691845a2854dba061b1da80..e573413123b955db3b6a4f30ebb72a91ec67e369 100644 (file)
@@ -819,7 +819,10 @@ int sun6i_csi_bridge_setup(struct sun6i_csi_device *csi_dev)
 
        /* V4L2 Async */
 
 
        /* V4L2 Async */
 
-       v4l2_async_nf_init(notifier);
+       if (csi_dev->isp_available)
+               v4l2_async_subdev_nf_init(notifier, subdev);
+       else
+               v4l2_async_nf_init(notifier, v4l2_dev);
        notifier->ops = &sun6i_csi_bridge_notifier_ops;
 
        sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_parallel,
        notifier->ops = &sun6i_csi_bridge_notifier_ops;
 
        sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_parallel,
@@ -828,10 +831,7 @@ int sun6i_csi_bridge_setup(struct sun6i_csi_device *csi_dev)
        sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_mipi_csi2,
                                      SUN6I_CSI_PORT_MIPI_CSI2, NULL);
 
        sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_mipi_csi2,
                                      SUN6I_CSI_PORT_MIPI_CSI2, NULL);
 
-       if (csi_dev->isp_available)
-               ret = v4l2_async_subdev_nf_register(subdev, notifier);
-       else
-               ret = v4l2_async_nf_register(v4l2_dev, notifier);
+       ret = v4l2_async_nf_register(notifier);
        if (ret) {
                dev_err(dev, "failed to register v4l2 async notifier: %d\n",
                        ret);
        if (ret) {
                dev_err(dev, "failed to register v4l2 async notifier: %d\n",
                        ret);
index 82da38e0547ece6c84db158c5b340985f1114011..08d86c17b284a5b0f8772e84b42c62a18a8be60b 100644 (file)
@@ -530,7 +530,7 @@ static int sun6i_mipi_csi2_bridge_setup(struct sun6i_mipi_csi2_device *csi2_dev)
 
        /* V4L2 Async */
 
 
        /* V4L2 Async */
 
-       v4l2_async_nf_init(notifier);
+       v4l2_async_subdev_nf_init(notifier, subdev);
        notifier->ops = &sun6i_mipi_csi2_notifier_ops;
 
        ret = sun6i_mipi_csi2_bridge_source_setup(csi2_dev);
        notifier->ops = &sun6i_mipi_csi2_notifier_ops;
 
        ret = sun6i_mipi_csi2_bridge_source_setup(csi2_dev);
@@ -539,7 +539,7 @@ static int sun6i_mipi_csi2_bridge_setup(struct sun6i_mipi_csi2_device *csi2_dev)
 
        /* Only register the notifier when a sensor is connected. */
        if (ret != -ENODEV) {
 
        /* Only register the notifier when a sensor is connected. */
        if (ret != -ENODEV) {
-               ret = v4l2_async_subdev_nf_register(subdev, notifier);
+               ret = v4l2_async_nf_register(notifier);
                if (ret < 0)
                        goto error_v4l2_notifier_cleanup;
 
                if (ret < 0)
                        goto error_v4l2_notifier_cleanup;
 
index b96b8faf9fb9e722f1629ff0320b5724b7302589..14a1844812c0e284587ee9373bf168e9b9fd99b2 100644 (file)
@@ -568,7 +568,7 @@ sun8i_a83t_mipi_csi2_bridge_setup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
 
        /* V4L2 Async */
 
 
        /* V4L2 Async */
 
-       v4l2_async_nf_init(notifier);
+       v4l2_async_subdev_nf_init(notifier, subdev);
        notifier->ops = &sun8i_a83t_mipi_csi2_notifier_ops;
 
        ret = sun8i_a83t_mipi_csi2_bridge_source_setup(csi2_dev);
        notifier->ops = &sun8i_a83t_mipi_csi2_notifier_ops;
 
        ret = sun8i_a83t_mipi_csi2_bridge_source_setup(csi2_dev);
@@ -577,7 +577,7 @@ sun8i_a83t_mipi_csi2_bridge_setup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
 
        /* Only register the notifier when a sensor is connected. */
        if (ret != -ENODEV) {
 
        /* Only register the notifier when a sensor is connected. */
        if (ret != -ENODEV) {
-               ret = v4l2_async_subdev_nf_register(subdev, notifier);
+               ret = v4l2_async_nf_register(notifier);
                if (ret < 0)
                        goto error_v4l2_notifier_cleanup;
 
                if (ret < 0)
                        goto error_v4l2_notifier_cleanup;
 
index f559d2bcaacbc8927c6b29764253060e5daf283c..319ec5ea0527e5e7cfb18b10896127583c56ae17 100644 (file)
@@ -2300,7 +2300,7 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
 
        dev_dbg(dev, "vpfe_get_pdata\n");
 
 
        dev_dbg(dev, "vpfe_get_pdata\n");
 
-       v4l2_async_nf_init(&vpfe->notifier);
+       v4l2_async_nf_init(&vpfe->notifier, &vpfe->v4l2_dev);
 
        if (!IS_ENABLED(CONFIG_OF) || !dev->of_node)
                return dev->platform_data;
 
        if (!IS_ENABLED(CONFIG_OF) || !dev->of_node)
                return dev->platform_data;
@@ -2466,7 +2466,7 @@ static int vpfe_probe(struct platform_device *pdev)
        }
 
        vpfe->notifier.ops = &vpfe_async_ops;
        }
 
        vpfe->notifier.ops = &vpfe_async_ops;
-       ret = v4l2_async_nf_register(&vpfe->v4l2_dev, &vpfe->notifier);
+       ret = v4l2_async_nf_register(&vpfe->notifier);
        if (ret) {
                vpfe_err(vpfe, "Error registering async notifier\n");
                ret = -EINVAL;
        if (ret) {
                vpfe_err(vpfe, "Error registering async notifier\n");
                ret = -EINVAL;
index 7cd50629d9d35a7e6099c7e744b00e2a825e3028..528909ae4bd63eaa1b8da9287be5ff1586a31899 100644 (file)
@@ -865,7 +865,7 @@ static int cal_async_notifier_register(struct cal_dev *cal)
        unsigned int i;
        int ret;
 
        unsigned int i;
        int ret;
 
-       v4l2_async_nf_init(&cal->notifier);
+       v4l2_async_nf_init(&cal->notifier, &cal->v4l2_dev);
        cal->notifier.ops = &cal_async_notifier_ops;
 
        for (i = 0; i < cal->data->num_csi2_phy; ++i) {
        cal->notifier.ops = &cal_async_notifier_ops;
 
        for (i = 0; i < cal->data->num_csi2_phy; ++i) {
@@ -889,7 +889,7 @@ static int cal_async_notifier_register(struct cal_dev *cal)
                casd->phy = phy;
        }
 
                casd->phy = phy;
        }
 
-       ret = v4l2_async_nf_register(&cal->v4l2_dev, &cal->notifier);
+       ret = v4l2_async_nf_register(&cal->notifier);
        if (ret) {
                cal_err(cal, "Error registering async notifier\n");
                goto error;
        if (ret) {
                cal_err(cal, "Error registering async notifier\n");
                goto error;
index 10b13d8e76e54489a28f4c124ca9eed6f1148497..bf5330b6fcd56403ee5bdc623003df4b90a54e85 100644 (file)
@@ -1483,7 +1483,8 @@ static const struct v4l2_async_notifier_operations vpif_async_ops = {
 };
 
 static struct vpif_capture_config *
 };
 
 static struct vpif_capture_config *
-vpif_capture_get_pdata(struct platform_device *pdev)
+vpif_capture_get_pdata(struct platform_device *pdev,
+                      struct v4l2_device *v4l2_dev)
 {
        struct device_node *endpoint = NULL;
        struct device_node *rem = NULL;
 {
        struct device_node *endpoint = NULL;
        struct device_node *rem = NULL;
@@ -1492,7 +1493,7 @@ vpif_capture_get_pdata(struct platform_device *pdev)
        struct vpif_capture_chan_config *chan;
        unsigned int i;
 
        struct vpif_capture_chan_config *chan;
        unsigned int i;
 
-       v4l2_async_nf_init(&vpif_obj.notifier);
+       v4l2_async_nf_init(&vpif_obj.notifier, v4l2_dev);
 
        /*
         * DT boot: OF node from parent device contains
 
        /*
         * DT boot: OF node from parent device contains
@@ -1640,7 +1641,8 @@ static __init int vpif_probe(struct platform_device *pdev)
                        goto vpif_unregister;
        } while (++res_idx);
 
                        goto vpif_unregister;
        } while (++res_idx);
 
-       pdev->dev.platform_data = vpif_capture_get_pdata(pdev);
+       pdev->dev.platform_data =
+               vpif_capture_get_pdata(pdev, &vpif_obj.v4l2_dev);
        if (!pdev->dev.platform_data) {
                dev_warn(&pdev->dev, "Missing platform data. Giving up.\n");
                goto vpif_unregister;
        if (!pdev->dev.platform_data) {
                dev_warn(&pdev->dev, "Missing platform data. Giving up.\n");
                goto vpif_unregister;
@@ -1683,8 +1685,7 @@ static __init int vpif_probe(struct platform_device *pdev)
                        goto probe_subdev_out;
        } else {
                vpif_obj.notifier.ops = &vpif_async_ops;
                        goto probe_subdev_out;
        } else {
                vpif_obj.notifier.ops = &vpif_async_ops;
-               err = v4l2_async_nf_register(&vpif_obj.v4l2_dev,
-                                            &vpif_obj.notifier);
+               err = v4l2_async_nf_register(&vpif_obj.notifier);
                if (err) {
                        vpif_err("Error registering async notifier\n");
                        err = -EINVAL;
                if (err) {
                        vpif_err("Error registering async notifier\n");
                        err = -EINVAL;
index f0de621f7f8be25dde81e2859520666530ba8e81..52c480437ed254680e675b4cb173f22ae9af2c30 100644 (file)
@@ -2420,13 +2420,13 @@ static int isp_probe(struct platform_device *pdev)
 
        isp->notifier.ops = &isp_subdev_notifier_ops;
 
 
        isp->notifier.ops = &isp_subdev_notifier_ops;
 
-       v4l2_async_nf_init(&isp->notifier);
+       v4l2_async_nf_init(&isp->notifier, &isp->v4l2_dev);
 
        ret = isp_parse_of_endpoints(isp);
        if (ret < 0)
                goto error_register_entities;
 
 
        ret = isp_parse_of_endpoints(isp);
        if (ret < 0)
                goto error_register_entities;
 
-       ret = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier);
+       ret = v4l2_async_nf_register(&isp->notifier);
        if (ret)
                goto error_register_entities;
 
        if (ret)
                goto error_register_entities;
 
index 6cc0dde42e80930b106373a15a4da033a512db07..5de6b6694f53bf637ec0ec52846ab6450a3edd28 100644 (file)
@@ -331,7 +331,7 @@ static int video_mux_async_register(struct video_mux *vmux,
        unsigned int i;
        int ret;
 
        unsigned int i;
        int ret;
 
-       v4l2_async_nf_init(&vmux->notifier);
+       v4l2_async_subdev_nf_init(&vmux->notifier, &vmux->subdev);
 
        for (i = 0; i < num_input_pads; i++) {
                struct v4l2_async_connection *asd;
 
        for (i = 0; i < num_input_pads; i++) {
                struct v4l2_async_connection *asd;
@@ -366,7 +366,7 @@ static int video_mux_async_register(struct video_mux *vmux,
 
        vmux->notifier.ops = &video_mux_notify_ops;
 
 
        vmux->notifier.ops = &video_mux_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&vmux->subdev, &vmux->notifier);
+       ret = v4l2_async_nf_register(&vmux->notifier);
        if (ret)
                goto err_nf_cleanup;
 
        if (ret)
                goto err_nf_cleanup;
 
index 6bb426a25fe90035b5b0ab2f40643ae913aefff9..4285770fde184ca3eccf4617bf18e273ae0fb1f2 100644 (file)
@@ -494,7 +494,7 @@ static int xvip_graph_init(struct xvip_composite_device *xdev)
                goto done;
        }
 
                goto done;
        }
 
-       v4l2_async_nf_init(&xdev->notifier);
+       v4l2_async_nf_init(&xdev->notifier, &xdev->v4l2_dev);
 
        /* Parse the graph to extract a list of subdevice DT nodes. */
        ret = xvip_graph_parse(xdev);
 
        /* Parse the graph to extract a list of subdevice DT nodes. */
        ret = xvip_graph_parse(xdev);
@@ -512,7 +512,7 @@ static int xvip_graph_init(struct xvip_composite_device *xdev)
        /* Register the subdevices notifier. */
        xdev->notifier.ops = &xvip_graph_notify_ops;
 
        /* Register the subdevices notifier. */
        xdev->notifier.ops = &xvip_graph_notify_ops;
 
-       ret = v4l2_async_nf_register(&xdev->v4l2_dev, &xdev->notifier);
+       ret = v4l2_async_nf_register(&xdev->notifier);
        if (ret < 0) {
                dev_err(xdev->dev, "notifier registration failed\n");
                goto done;
        if (ret < 0) {
                dev_err(xdev->dev, "notifier registration failed\n");
                goto done;
index ea27e04f0f753d20c8c38aaba7f3b4b657ed6b42..f465a0964adf7a6ad18b7303a3fd8f74a8014eba 100644 (file)
@@ -558,13 +558,24 @@ static int v4l2_async_nf_match_valid(struct v4l2_async_notifier *notifier,
        return 0;
 }
 
        return 0;
 }
 
-void v4l2_async_nf_init(struct v4l2_async_notifier *notifier)
+void v4l2_async_nf_init(struct v4l2_async_notifier *notifier,
+                       struct v4l2_device *v4l2_dev)
 {
        INIT_LIST_HEAD(&notifier->waiting_list);
        INIT_LIST_HEAD(&notifier->done_list);
 {
        INIT_LIST_HEAD(&notifier->waiting_list);
        INIT_LIST_HEAD(&notifier->done_list);
+       notifier->v4l2_dev = v4l2_dev;
 }
 EXPORT_SYMBOL(v4l2_async_nf_init);
 
 }
 EXPORT_SYMBOL(v4l2_async_nf_init);
 
+void v4l2_async_subdev_nf_init(struct v4l2_async_notifier *notifier,
+                              struct v4l2_subdev *sd)
+{
+       INIT_LIST_HEAD(&notifier->waiting_list);
+       INIT_LIST_HEAD(&notifier->done_list);
+       notifier->sd = sd;
+}
+EXPORT_SYMBOL_GPL(v4l2_async_subdev_nf_init);
+
 static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
 {
        struct v4l2_async_connection *asc;
 static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
 {
        struct v4l2_async_connection *asc;
@@ -605,16 +616,13 @@ err_unlock:
        return ret;
 }
 
        return ret;
 }
 
-int v4l2_async_nf_register(struct v4l2_device *v4l2_dev,
-                          struct v4l2_async_notifier *notifier)
+int v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
 {
        int ret;
 
 {
        int ret;
 
-       if (WARN_ON(!v4l2_dev || notifier->sd))
+       if (WARN_ON(!notifier->v4l2_dev == !notifier->sd))
                return -EINVAL;
 
                return -EINVAL;
 
-       notifier->v4l2_dev = v4l2_dev;
-
        ret = __v4l2_async_nf_register(notifier);
        if (ret)
                notifier->v4l2_dev = NULL;
        ret = __v4l2_async_nf_register(notifier);
        if (ret)
                notifier->v4l2_dev = NULL;
@@ -623,24 +631,6 @@ int v4l2_async_nf_register(struct v4l2_device *v4l2_dev,
 }
 EXPORT_SYMBOL(v4l2_async_nf_register);
 
 }
 EXPORT_SYMBOL(v4l2_async_nf_register);
 
-int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd,
-                                 struct v4l2_async_notifier *notifier)
-{
-       int ret;
-
-       if (WARN_ON(!sd || notifier->v4l2_dev))
-               return -EINVAL;
-
-       notifier->sd = sd;
-
-       ret = __v4l2_async_nf_register(notifier);
-       if (ret)
-               notifier->sd = NULL;
-
-       return ret;
-}
-EXPORT_SYMBOL(v4l2_async_subdev_nf_register);
-
 static void
 __v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)
 {
 static void
 __v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)
 {
@@ -649,9 +639,6 @@ __v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)
 
        v4l2_async_nf_unbind_all_subdevs(notifier);
 
 
        v4l2_async_nf_unbind_all_subdevs(notifier);
 
-       notifier->sd = NULL;
-       notifier->v4l2_dev = NULL;
-
        list_del(&notifier->notifier_entry);
 }
 
        list_del(&notifier->notifier_entry);
 }
 
@@ -683,6 +670,9 @@ static void __v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
 
                kfree(asc);
        }
 
                kfree(asc);
        }
+
+       notifier->sd = NULL;
+       notifier->v4l2_dev = NULL;
 }
 
 void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
 }
 
 void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
index f30f98b9f2d025d6d7008fb518dfcf0a6c2a2581..7f181fbbb14070a706f8c4c2dcc387505e141165 100644 (file)
@@ -1215,7 +1215,7 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
        if (!notifier)
                return -ENOMEM;
 
        if (!notifier)
                return -ENOMEM;
 
-       v4l2_async_nf_init(notifier);
+       v4l2_async_subdev_nf_init(notifier, sd);
 
        ret = v4l2_subdev_get_privacy_led(sd);
        if (ret < 0)
 
        ret = v4l2_subdev_get_privacy_led(sd);
        if (ret < 0)
@@ -1225,7 +1225,7 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
        if (ret < 0)
                goto out_cleanup;
 
        if (ret < 0)
                goto out_cleanup;
 
-       ret = v4l2_async_subdev_nf_register(sd, notifier);
+       ret = v4l2_async_nf_register(notifier);
        if (ret < 0)
                goto out_cleanup;
 
        if (ret < 0)
                goto out_cleanup;
 
index dbb0160e71b729b2405c4e81cf8fa761d749080a..46d9f31986c9b2f1ee6de87cff193250d998c436 100644 (file)
@@ -825,7 +825,7 @@ int atomisp_csi2_bridge_parse_firmware(struct atomisp_device *isp)
 {
        int i, mipi_port, ret;
 
 {
        int i, mipi_port, ret;
 
-       v4l2_async_nf_init(&isp->notifier);
+       v4l2_async_nf_init(&isp->notifier, &isp->v4l2_dev);
        isp->notifier.ops = &atomisp_async_ops;
 
        for (i = 0; i < ATOMISP_CAMERA_NR_PORTS; i++) {
        isp->notifier.ops = &atomisp_async_ops;
 
        for (i = 0; i < ATOMISP_CAMERA_NR_PORTS; i++) {
index c43b916a006ee763d12cd12ff58b79d0e8b22140..21233e68b1e16470e0158bfd65543b021b7bcaf7 100644 (file)
@@ -1508,7 +1508,7 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
        isp->firmware = NULL;
        isp->css_env.isp_css_fw.data = NULL;
 
        isp->firmware = NULL;
        isp->css_env.isp_css_fw.data = NULL;
 
-       err = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier);
+       err = v4l2_async_nf_register(&isp->notifier);
        if (err) {
                dev_err(isp->dev, "failed to register async notifier : %d\n", err);
                goto css_init_fail;
        if (err) {
                dev_err(isp->dev, "failed to register async notifier : %d\n", err);
                goto css_init_fail;
index 58c8c7813e0f9d6cba4b6fdf3e343f2bc994064d..31b2b48085c59a67c56d09972d1606a8192ea47a 100644 (file)
@@ -507,7 +507,7 @@ static int atmel_isc_probe(struct platform_device *pdev)
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
-               v4l2_async_nf_init(&subdev_entity->notifier);
+               v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
@@ -523,8 +523,7 @@ static int atmel_isc_probe(struct platform_device *pdev)
 
                subdev_entity->notifier.ops = &atmel_isc_async_ops;
 
 
                subdev_entity->notifier.ops = &atmel_isc_async_ops;
 
-               ret = v4l2_async_nf_register(&isc->v4l2_dev,
-                                            &subdev_entity->notifier);
+               ret = v4l2_async_nf_register(&subdev_entity->notifier);
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
index f10ddee0949e1e5363cc9c70df1c76683631b7e0..020034f631f57c9ad136332d6d931002553199c6 100644 (file)
@@ -497,7 +497,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
-               v4l2_async_nf_init(&subdev_entity->notifier);
+               v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
@@ -513,8 +513,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
 
                subdev_entity->notifier.ops = &atmel_isc_async_ops;
 
 
                subdev_entity->notifier.ops = &atmel_isc_async_ops;
 
-               ret = v4l2_async_nf_register(&isc->v4l2_dev,
-                                            &subdev_entity->notifier);
+               ret = v4l2_async_nf_register(&subdev_entity->notifier);
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
                if (ret) {
                        dev_err(dev, "fail to register async notifier\n");
                        goto cleanup_subdev;
index 09b8b396022e050963d2e0be5ba66737e6dfb4ee..dda1ebc34692aa4cb0866636cd03a2dcc799f6f7 100644 (file)
@@ -1918,7 +1918,7 @@ static int imx_csi_async_register(struct csi_priv *priv)
        unsigned int port;
        int ret;
 
        unsigned int port;
        int ret;
 
-       v4l2_async_nf_init(&priv->notifier);
+       v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd);
 
        /* get this CSI's port id */
        ret = fwnode_property_read_u32(dev_fwnode(priv->dev), "reg", &port);
 
        /* get this CSI's port id */
        ret = fwnode_property_read_u32(dev_fwnode(priv->dev), "reg", &port);
@@ -1944,7 +1944,7 @@ static int imx_csi_async_register(struct csi_priv *priv)
 
        priv->notifier.ops = &csi_notify_ops;
 
 
        priv->notifier.ops = &csi_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
+       ret = v4l2_async_nf_register(&priv->notifier);
        if (ret)
                return ret;
 
        if (ret)
                return ret;
 
index 67c1b16db655839e4daae9012af0743e7cd3c135..46bf717255b3efbf44c4f4968359cdcebaf5fb72 100644 (file)
@@ -367,7 +367,7 @@ struct imx_media_dev *imx_media_dev_init(struct device *dev,
 
        INIT_LIST_HEAD(&imxmd->vdev_list);
 
 
        INIT_LIST_HEAD(&imxmd->vdev_list);
 
-       v4l2_async_nf_init(&imxmd->notifier);
+       v4l2_async_nf_init(&imxmd->notifier, &imxmd->v4l2_dev);
 
        return imxmd;
 
 
        return imxmd;
 
@@ -391,7 +391,7 @@ int imx_media_dev_notifier_register(struct imx_media_dev *imxmd,
 
        /* prepare the async subdev notifier and register it */
        imxmd->notifier.ops = ops ? ops : &imx_media_notifier_ops;
 
        /* prepare the async subdev notifier and register it */
        imxmd->notifier.ops = ops ? ops : &imx_media_notifier_ops;
-       ret = v4l2_async_nf_register(&imxmd->v4l2_dev, &imxmd->notifier);
+       ret = v4l2_async_nf_register(&imxmd->notifier);
        if (ret) {
                v4l2_err(&imxmd->v4l2_dev,
                         "v4l2_async_nf_register failed with %d\n", ret);
        if (ret) {
                v4l2_err(&imxmd->v4l2_dev,
                         "v4l2_async_nf_register failed with %d\n", ret);
index e3273c5c9b602901d485201ff4d081ef957cbefa..b2d8476d83a0af92a38cde90f504b40751d602bd 100644 (file)
@@ -680,7 +680,7 @@ static int csi2_async_register(struct csi2_dev *csi2)
        struct fwnode_handle *ep;
        int ret;
 
        struct fwnode_handle *ep;
        int ret;
 
-       v4l2_async_nf_init(&csi2->notifier);
+       v4l2_async_subdev_nf_init(&csi2->notifier, &csi2->sd);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi2->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi2->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
@@ -705,7 +705,7 @@ static int csi2_async_register(struct csi2_dev *csi2)
 
        csi2->notifier.ops = &csi2_notify_ops;
 
 
        csi2->notifier.ops = &csi2_notify_ops;
 
-       ret = v4l2_async_subdev_nf_register(&csi2->sd, &csi2->notifier);
+       ret = v4l2_async_nf_register(&csi2->notifier);
        if (ret)
                return ret;
 
        if (ret)
                return ret;
 
index dd7dfecb9ef333120db39dc7f16f5040ec997a76..ccbb530aa2e23636387309e87417e08cb5e386d7 100644 (file)
@@ -536,7 +536,7 @@ int sun6i_isp_proc_setup(struct sun6i_isp_device *isp_dev)
 
        /* V4L2 Async */
 
 
        /* V4L2 Async */
 
-       v4l2_async_nf_init(notifier);
+       v4l2_async_nf_init(notifier, v4l2_dev);
        notifier->ops = &sun6i_isp_proc_notifier_ops;
 
        sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi0,
        notifier->ops = &sun6i_isp_proc_notifier_ops;
 
        sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi0,
@@ -544,7 +544,7 @@ int sun6i_isp_proc_setup(struct sun6i_isp_device *isp_dev)
        sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi1,
                                    SUN6I_ISP_PORT_CSI1);
 
        sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi1,
                                    SUN6I_ISP_PORT_CSI1);
 
-       ret = v4l2_async_nf_register(v4l2_dev, notifier);
+       ret = v4l2_async_nf_register(notifier);
        if (ret) {
                v4l2_err(v4l2_dev,
                         "failed to register v4l2 async notifier: %d\n", ret);
        if (ret) {
                v4l2_err(v4l2_dev,
                         "failed to register v4l2 async notifier: %d\n", ret);
index ee4ae1f1f2fae6baa7712c6f39dbbddc60b2ae91..b5facc0640fbb747eaa79fd31b7f2ec7714cc853 100644 (file)
@@ -1181,7 +1181,7 @@ static int tegra_channel_init(struct tegra_vi_channel *chan)
        }
 
        if (!IS_ENABLED(CONFIG_VIDEO_TEGRA_TPG))
        }
 
        if (!IS_ENABLED(CONFIG_VIDEO_TEGRA_TPG))
-               v4l2_async_nf_init(&chan->notifier);
+               v4l2_async_nf_init(&chan->notifier, &vid->v4l2_dev);
 
        return 0;
 
 
        return 0;
 
@@ -1748,7 +1748,6 @@ cleanup:
 
 static int tegra_vi_graph_init(struct tegra_vi *vi)
 {
 
 static int tegra_vi_graph_init(struct tegra_vi *vi)
 {
-       struct tegra_video_device *vid = dev_get_drvdata(vi->client.host);
        struct tegra_vi_channel *chan;
        struct fwnode_handle *fwnode = dev_fwnode(vi->dev);
        int ret;
        struct tegra_vi_channel *chan;
        struct fwnode_handle *fwnode = dev_fwnode(vi->dev);
        int ret;
@@ -1779,7 +1778,7 @@ static int tegra_vi_graph_init(struct tegra_vi *vi)
                        continue;
 
                chan->notifier.ops = &tegra_vi_async_ops;
                        continue;
 
                chan->notifier.ops = &tegra_vi_async_ops;
-               ret = v4l2_async_nf_register(&vid->v4l2_dev, &chan->notifier);
+               ret = v4l2_async_nf_register(&chan->notifier);
                if (ret < 0) {
                        dev_err(vi->dev,
                                "failed to register channel %d notifier: %d\n",
                if (ret < 0) {
                        dev_err(vi->dev,
                                "failed to register channel %d notifier: %d\n",
index 41a9c4bada8a70928d1b40887cbf0ad343431227..9bd326d31181294580becead9546975724138fa1 100644 (file)
@@ -148,13 +148,30 @@ void v4l2_async_debug_init(struct dentry *debugfs_dir);
  * v4l2_async_nf_init - Initialize a notifier.
  *
  * @notifier: pointer to &struct v4l2_async_notifier
  * v4l2_async_nf_init - Initialize a notifier.
  *
  * @notifier: pointer to &struct v4l2_async_notifier
+ * @v4l2_dev: pointer to &struct v4l2_device
+ *
+ * This function initializes the notifier @asc_entry. It must be called
+ * before adding a subdevice to a notifier, using one of:
+ * v4l2_async_nf_add_fwnode_remote(),
+ * v4l2_async_nf_add_fwnode() or
+ * v4l2_async_nf_add_i2c().
+ */
+void v4l2_async_nf_init(struct v4l2_async_notifier *notifier,
+                       struct v4l2_device *v4l2_dev);
+
+/**
+ * v4l2_async_subdev_nf_init - Initialize a sub-device notifier.
+ *
+ * @notifier: pointer to &struct v4l2_async_notifier
+ * @sd: pointer to &struct v4l2_subdev
  *
  * This function initializes the notifier @asc_list. It must be called
  * before adding a subdevice to a notifier, using one of:
  * v4l2_async_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or
  * v4l2_async_nf_add_i2c().
  */
  *
  * This function initializes the notifier @asc_list. It must be called
  * before adding a subdevice to a notifier, using one of:
  * v4l2_async_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or
  * v4l2_async_nf_add_i2c().
  */
-void v4l2_async_nf_init(struct v4l2_async_notifier *notifier);
+void v4l2_async_subdev_nf_init(struct v4l2_async_notifier *notifier,
+                              struct v4l2_subdev *sd);
 
 struct v4l2_async_connection *
 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
 
 struct v4l2_async_connection *
 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
@@ -259,21 +276,9 @@ v4l2_async_connection_unique(struct v4l2_subdev *sd);
 /**
  * v4l2_async_nf_register - registers a subdevice asynchronous notifier
  *
 /**
  * v4l2_async_nf_register - registers a subdevice asynchronous notifier
  *
- * @v4l2_dev: pointer to &struct v4l2_device
- * @notifier: pointer to &struct v4l2_async_notifier
- */
-int v4l2_async_nf_register(struct v4l2_device *v4l2_dev,
-                          struct v4l2_async_notifier *notifier);
-
-/**
- * v4l2_async_subdev_nf_register - registers a subdevice asynchronous
- *                                      notifier for a sub-device
- *
- * @sd: pointer to &struct v4l2_subdev
  * @notifier: pointer to &struct v4l2_async_notifier
  */
  * @notifier: pointer to &struct v4l2_async_notifier
  */
-int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd,
-                                 struct v4l2_async_notifier *notifier);
+int v4l2_async_nf_register(struct v4l2_async_notifier *notifier);
 
 /**
  * v4l2_async_nf_unregister - unregisters a subdevice
 
 /**
  * v4l2_async_nf_unregister - unregisters a subdevice