Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: v4l: async: Set v4l2_device and subdev in async notifier init

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>

authored by

Sakari Ailus and committed by
Mauro Carvalho Chehab
b8ec754a 5651bab6

+142 -154
+2 -2
drivers/media/i2c/ds90ub913.c
··· 568 568 return -ENODEV; 569 569 } 570 570 571 - v4l2_async_nf_init(&priv->notifier); 571 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); 572 572 573 573 asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode, 574 574 struct v4l2_async_connection); ··· 583 583 584 584 priv->notifier.ops = &ub913_notify_ops; 585 585 586 - ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier); 586 + ret = v4l2_async_nf_register(&priv->notifier); 587 587 if (ret) { 588 588 dev_err(dev, "Failed to register subdev_notifier"); 589 589 v4l2_async_nf_cleanup(&priv->notifier);
+2 -2
drivers/media/i2c/ds90ub953.c
··· 773 773 return -ENODEV; 774 774 } 775 775 776 - v4l2_async_nf_init(&priv->notifier); 776 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); 777 777 778 778 asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode, 779 779 struct v4l2_async_connection); ··· 788 788 789 789 priv->notifier.ops = &ub953_notify_ops; 790 790 791 - ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier); 791 + ret = v4l2_async_nf_register(&priv->notifier); 792 792 if (ret) { 793 793 dev_err(dev, "Failed to register subdev_notifier"); 794 794 v4l2_async_nf_cleanup(&priv->notifier);
+2 -2
drivers/media/i2c/ds90ub960.c
··· 3599 3599 unsigned int i; 3600 3600 int ret; 3601 3601 3602 - v4l2_async_nf_init(&priv->notifier); 3602 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); 3603 3603 3604 3604 for (i = 0; i < priv->hw_data->num_rxports; i++) { 3605 3605 struct ub960_rxport *rxport = priv->rxports[i]; ··· 3623 3623 3624 3624 priv->notifier.ops = &ub960_notify_ops; 3625 3625 3626 - ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier); 3626 + ret = v4l2_async_nf_register(&priv->notifier); 3627 3627 if (ret) { 3628 3628 dev_err(dev, "Failed to register subdev_notifier"); 3629 3629 v4l2_async_nf_cleanup(&priv->notifier);
+2 -2
drivers/media/i2c/max9286.c
··· 746 746 if (!priv->nsources) 747 747 return 0; 748 748 749 - v4l2_async_nf_init(&priv->notifier); 749 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); 750 750 751 751 for_each_source(priv, source) { 752 752 unsigned int i = to_index(priv, source); ··· 766 766 767 767 priv->notifier.ops = &max9286_notify_ops; 768 768 769 - ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier); 769 + ret = v4l2_async_nf_register(&priv->notifier); 770 770 if (ret) { 771 771 dev_err(dev, "Failed to register subdev_notifier"); 772 772 v4l2_async_nf_cleanup(&priv->notifier);
+2 -2
drivers/media/i2c/st-mipid02.c
··· 911 911 bridge->rx = ep; 912 912 913 913 /* register async notifier so we get noticed when sensor is connected */ 914 - v4l2_async_nf_init(&bridge->notifier); 914 + v4l2_async_subdev_nf_init(&bridge->notifier, &bridge->sd); 915 915 asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier, 916 916 of_fwnode_handle(ep_node), 917 917 struct v4l2_async_connection); ··· 924 924 } 925 925 bridge->notifier.ops = &mipid02_notifier_ops; 926 926 927 - ret = v4l2_async_subdev_nf_register(&bridge->sd, &bridge->notifier); 927 + ret = v4l2_async_nf_register(&bridge->notifier); 928 928 if (ret) 929 929 v4l2_async_nf_cleanup(&bridge->notifier); 930 930
+2 -2
drivers/media/i2c/tc358746.c
··· 1460 1460 return err; 1461 1461 } 1462 1462 1463 - v4l2_async_nf_init(&tc358746->notifier); 1463 + v4l2_async_subdev_nf_init(&tc358746->notifier, &tc358746->sd); 1464 1464 asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep, 1465 1465 struct v4l2_async_connection); 1466 1466 fwnode_handle_put(ep); ··· 1472 1472 1473 1473 tc358746->notifier.ops = &tc358746_notify_ops; 1474 1474 1475 - err = v4l2_async_subdev_nf_register(&tc358746->sd, &tc358746->notifier); 1475 + err = v4l2_async_nf_register(&tc358746->notifier); 1476 1476 if (err) 1477 1477 goto err_cleanup; 1478 1478
+2 -2
drivers/media/pci/intel/ipu3/ipu3-cio2.c
··· 1500 1500 * suspend. 1501 1501 */ 1502 1502 cio2->notifier.ops = &cio2_async_ops; 1503 - ret = v4l2_async_nf_register(&cio2->v4l2_dev, &cio2->notifier); 1503 + ret = v4l2_async_nf_register(&cio2->notifier); 1504 1504 if (ret) 1505 1505 dev_err(dev, "failed to register async notifier : %d\n", ret); 1506 1506 ··· 1795 1795 if (r) 1796 1796 goto fail_v4l2_device_unregister; 1797 1797 1798 - v4l2_async_nf_init(&cio2->notifier); 1798 + v4l2_async_nf_init(&cio2->notifier, &cio2->v4l2_dev); 1799 1799 1800 1800 /* Register notifier for subdevices we care */ 1801 1801 r = cio2_parse_firmware(cio2);
+2 -2
drivers/media/platform/atmel/atmel-isi.c
··· 1159 1159 if (!ep) 1160 1160 return -EINVAL; 1161 1161 1162 - v4l2_async_nf_init(&isi->notifier); 1162 + v4l2_async_nf_init(&isi->notifier, &isi->v4l2_dev); 1163 1163 1164 1164 asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier, 1165 1165 of_fwnode_handle(ep), ··· 1171 1171 1172 1172 isi->notifier.ops = &isi_graph_notify_ops; 1173 1173 1174 - ret = v4l2_async_nf_register(&isi->v4l2_dev, &isi->notifier); 1174 + ret = v4l2_async_nf_register(&isi->notifier); 1175 1175 if (ret < 0) { 1176 1176 dev_err(isi->dev, "Notifier registration failed\n"); 1177 1177 v4l2_async_nf_cleanup(&isi->notifier);
+2 -2
drivers/media/platform/cadence/cdns-csi2rx.c
··· 474 474 return -EINVAL; 475 475 } 476 476 477 - v4l2_async_nf_init(&csi2rx->notifier); 477 + v4l2_async_subdev_nf_init(&csi2rx->notifier, &csi2rx->subdev); 478 478 479 479 asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh, 480 480 struct v4l2_async_connection); ··· 484 484 485 485 csi2rx->notifier.ops = &csi2rx_notifier_ops; 486 486 487 - ret = v4l2_async_subdev_nf_register(&csi2rx->subdev, &csi2rx->notifier); 487 + ret = v4l2_async_nf_register(&csi2rx->notifier); 488 488 if (ret) 489 489 v4l2_async_nf_cleanup(&csi2rx->notifier); 490 490
+2 -2
drivers/media/platform/intel/pxa_camera.c
··· 2302 2302 if (err) 2303 2303 return err; 2304 2304 2305 - v4l2_async_nf_init(&pcdev->notifier); 2305 + v4l2_async_nf_init(&pcdev->notifier, &pcdev->v4l2_dev); 2306 2306 pcdev->res = res; 2307 2307 pcdev->pdata = pdev->dev.platform_data; 2308 2308 if (pcdev->pdata) { ··· 2402 2402 } 2403 2403 2404 2404 pcdev->notifier.ops = &pxa_camera_sensor_ops; 2405 - err = v4l2_async_nf_register(&pcdev->v4l2_dev, &pcdev->notifier); 2405 + err = v4l2_async_nf_register(&pcdev->notifier); 2406 2406 if (err) 2407 2407 goto exit_deactivate; 2408 2408
+1 -1
drivers/media/platform/marvell/cafe-driver.c
··· 540 540 if (ret) 541 541 goto out_smbus_shutdown; 542 542 543 - v4l2_async_nf_init(&mcam->notifier); 543 + v4l2_async_nf_init(&mcam->notifier, &mcam->v4l2_dev); 544 544 545 545 asd = v4l2_async_nf_add_i2c(&mcam->notifier, 546 546 i2c_adapter_id(cam->i2c_adapter),
+1 -1
drivers/media/platform/marvell/mcam-core.c
··· 1870 1870 cam->mbus_code = mcam_def_mbus_code; 1871 1871 1872 1872 cam->notifier.ops = &mccic_notify_ops; 1873 - ret = v4l2_async_nf_register(&cam->v4l2_dev, &cam->notifier); 1873 + ret = v4l2_async_nf_register(&cam->notifier); 1874 1874 if (ret < 0) { 1875 1875 cam_warn(cam, "failed to register a sensor notifier"); 1876 1876 goto out;
+1 -1
drivers/media/platform/marvell/mmp-driver.c
··· 238 238 if (!ep) 239 239 return -ENODEV; 240 240 241 - v4l2_async_nf_init(&mcam->notifier); 241 + v4l2_async_nf_init(&mcam->notifier, &mcam->v4l2_dev); 242 242 243 243 asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep, 244 244 struct v4l2_async_connection);
+2 -3
drivers/media/platform/microchip/microchip-csi2dc.c
··· 523 523 struct v4l2_async_connection *asd; 524 524 int ret = 0; 525 525 526 - v4l2_async_nf_init(&csi2dc->notifier); 526 + v4l2_async_subdev_nf_init(&csi2dc->notifier, &csi2dc->csi2dc_sd); 527 527 528 528 asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier, 529 529 input_fwnode, ··· 542 542 543 543 csi2dc->notifier.ops = &csi2dc_async_ops; 544 544 545 - ret = v4l2_async_subdev_nf_register(&csi2dc->csi2dc_sd, 546 - &csi2dc->notifier); 545 + ret = v4l2_async_nf_register(&csi2dc->notifier); 547 546 if (ret) { 548 547 dev_err(csi2dc->dev, "fail to register async notifier: %d\n", 549 548 ret);
+2 -3
drivers/media/platform/microchip/microchip-sama5d2-isc.c
··· 527 527 struct fwnode_handle *fwnode = 528 528 of_fwnode_handle(subdev_entity->epn); 529 529 530 - v4l2_async_nf_init(&subdev_entity->notifier); 530 + v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev); 531 531 532 532 asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, 533 533 fwnode, ··· 543 543 544 544 subdev_entity->notifier.ops = &microchip_isc_async_ops; 545 545 546 - ret = v4l2_async_nf_register(&isc->v4l2_dev, 547 - &subdev_entity->notifier); 546 + ret = v4l2_async_nf_register(&subdev_entity->notifier); 548 547 if (ret) { 549 548 dev_err(dev, "fail to register async notifier\n"); 550 549 goto cleanup_subdev;
+2 -3
drivers/media/platform/microchip/microchip-sama7g5-isc.c
··· 517 517 struct fwnode_handle *fwnode = 518 518 of_fwnode_handle(subdev_entity->epn); 519 519 520 - v4l2_async_nf_init(&subdev_entity->notifier); 520 + v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev); 521 521 522 522 asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, 523 523 fwnode, ··· 533 533 534 534 subdev_entity->notifier.ops = &microchip_isc_async_ops; 535 535 536 - ret = v4l2_async_nf_register(&isc->v4l2_dev, 537 - &subdev_entity->notifier); 536 + ret = v4l2_async_nf_register(&subdev_entity->notifier); 538 537 if (ret) { 539 538 dev_err(dev, "fail to register async notifier\n"); 540 539 goto cleanup_subdev;
+2 -2
drivers/media/platform/nxp/imx-mipi-csis.c
··· 1251 1251 unsigned int i; 1252 1252 int ret; 1253 1253 1254 - v4l2_async_nf_init(&csis->notifier); 1254 + v4l2_async_subdev_nf_init(&csis->notifier, &csis->sd); 1255 1255 1256 1256 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0, 1257 1257 FWNODE_GRAPH_ENDPOINT_NEXT); ··· 1287 1287 1288 1288 csis->notifier.ops = &mipi_csis_notify_ops; 1289 1289 1290 - ret = v4l2_async_subdev_nf_register(&csis->sd, &csis->notifier); 1290 + ret = v4l2_async_nf_register(&csis->notifier); 1291 1291 if (ret) 1292 1292 return ret; 1293 1293
+2 -2
drivers/media/platform/nxp/imx7-media-csi.c
··· 2061 2061 struct fwnode_handle *ep; 2062 2062 int ret; 2063 2063 2064 - v4l2_async_nf_init(&csi->notifier); 2064 + v4l2_async_nf_init(&csi->notifier, &csi->v4l2_dev); 2065 2065 2066 2066 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0, 2067 2067 FWNODE_GRAPH_ENDPOINT_NEXT); ··· 2084 2084 2085 2085 csi->notifier.ops = &imx7_csi_notify_ops; 2086 2086 2087 - ret = v4l2_async_nf_register(&csi->v4l2_dev, &csi->notifier); 2087 + ret = v4l2_async_nf_register(&csi->notifier); 2088 2088 if (ret) 2089 2089 goto error; 2090 2090
+2 -2
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
··· 175 175 } 176 176 177 177 /* Initialize, fill and register the async notifier. */ 178 - v4l2_async_nf_init(&isi->notifier); 178 + v4l2_async_nf_init(&isi->notifier, v4l2_dev); 179 179 isi->notifier.ops = &mxc_isi_async_notifier_ops; 180 180 181 181 for (i = 0; i < isi->pdata->num_ports; ++i) { ··· 200 200 masd->port = i; 201 201 } 202 202 203 - ret = v4l2_async_nf_register(v4l2_dev, &isi->notifier); 203 + ret = v4l2_async_nf_register(&isi->notifier); 204 204 if (ret < 0) { 205 205 dev_err(isi->dev, 206 206 "Failed to register async notifier: %d\n", ret);
+2 -2
drivers/media/platform/nxp/imx8mq-mipi-csi2.c
··· 592 592 unsigned int i; 593 593 int ret; 594 594 595 - v4l2_async_nf_init(&state->notifier); 595 + v4l2_async_subdev_nf_init(&state->notifier, &state->sd); 596 596 597 597 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0, 598 598 FWNODE_GRAPH_ENDPOINT_NEXT); ··· 629 629 630 630 state->notifier.ops = &imx8mq_mipi_csi_notify_ops; 631 631 632 - ret = v4l2_async_subdev_nf_register(&state->sd, &state->notifier); 632 + ret = v4l2_async_nf_register(&state->notifier); 633 633 if (ret) 634 634 return ret; 635 635
+2 -3
drivers/media/platform/qcom/camss/camss.c
··· 1640 1640 goto err_cleanup; 1641 1641 } 1642 1642 1643 - v4l2_async_nf_init(&camss->notifier); 1643 + v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev); 1644 1644 1645 1645 num_subdevs = camss_of_parse_ports(camss); 1646 1646 if (num_subdevs < 0) { ··· 1655 1655 if (num_subdevs) { 1656 1656 camss->notifier.ops = &camss_subdev_notifier_ops; 1657 1657 1658 - ret = v4l2_async_nf_register(&camss->v4l2_dev, 1659 - &camss->notifier); 1658 + ret = v4l2_async_nf_register(&camss->notifier); 1660 1659 if (ret) { 1661 1660 dev_err(dev, 1662 1661 "Failed to register async subdev nodes: %d\n",
+2 -2
drivers/media/platform/renesas/rcar-isp.c
··· 392 392 393 393 dev_dbg(isp->dev, "Found '%pOF'\n", to_of_node(fwnode)); 394 394 395 - v4l2_async_nf_init(&isp->notifier); 395 + v4l2_async_subdev_nf_init(&isp->notifier, &isp->subdev); 396 396 isp->notifier.ops = &risp_notify_ops; 397 397 398 398 asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode, ··· 401 401 if (IS_ERR(asd)) 402 402 return PTR_ERR(asd); 403 403 404 - ret = v4l2_async_subdev_nf_register(&isp->subdev, &isp->notifier); 404 + ret = v4l2_async_nf_register(&isp->notifier); 405 405 if (ret) 406 406 v4l2_async_nf_cleanup(&isp->notifier); 407 407
+4 -4
drivers/media/platform/renesas/rcar-vin/rcar-core.c
··· 375 375 376 376 mutex_unlock(&vin->group->lock); 377 377 378 - v4l2_async_nf_init(&vin->group->notifier); 378 + v4l2_async_nf_init(&vin->group->notifier, &vin->v4l2_dev); 379 379 380 380 /* 381 381 * Some subdevices may overlap but the parser function can handle it and ··· 399 399 return 0; 400 400 401 401 vin->group->notifier.ops = &rvin_group_notify_ops; 402 - ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->group->notifier); 402 + ret = v4l2_async_nf_register(&vin->group->notifier); 403 403 if (ret < 0) { 404 404 vin_err(vin, "Notifier registration failed\n"); 405 405 v4l2_async_nf_cleanup(&vin->group->notifier); ··· 712 712 { 713 713 int ret; 714 714 715 - v4l2_async_nf_init(&vin->notifier); 715 + v4l2_async_nf_init(&vin->notifier, &vin->v4l2_dev); 716 716 717 717 ret = rvin_parallel_parse_of(vin); 718 718 if (ret) ··· 725 725 to_of_node(vin->parallel.asc->match.fwnode)); 726 726 727 727 vin->notifier.ops = &rvin_parallel_notify_ops; 728 - ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier); 728 + ret = v4l2_async_nf_register(&vin->notifier); 729 729 if (ret < 0) { 730 730 vin_err(vin, "Notifier registration failed\n"); 731 731 v4l2_async_nf_cleanup(&vin->notifier);
+2 -2
drivers/media/platform/renesas/rcar-vin/rcar-csi2.c
··· 1122 1122 1123 1123 dev_dbg(priv->dev, "Found '%pOF'\n", to_of_node(fwnode)); 1124 1124 1125 - v4l2_async_nf_init(&priv->notifier); 1125 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->subdev); 1126 1126 priv->notifier.ops = &rcar_csi2_notify_ops; 1127 1127 1128 1128 asc = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode, ··· 1131 1131 if (IS_ERR(asc)) 1132 1132 return PTR_ERR(asc); 1133 1133 1134 - ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier); 1134 + ret = v4l2_async_nf_register(&priv->notifier); 1135 1135 if (ret) 1136 1136 v4l2_async_nf_cleanup(&priv->notifier); 1137 1137
+2 -2
drivers/media/platform/renesas/rcar_drif.c
··· 1208 1208 struct fwnode_handle *fwnode, *ep; 1209 1209 struct v4l2_async_connection *asd; 1210 1210 1211 - v4l2_async_nf_init(notifier); 1211 + v4l2_async_nf_init(&sdr->notifier, &sdr->v4l2_dev); 1212 1212 1213 1213 ep = fwnode_graph_get_next_endpoint(of_fwnode_handle(sdr->dev->of_node), 1214 1214 NULL); ··· 1342 1342 sdr->notifier.ops = &rcar_drif_notify_ops; 1343 1343 1344 1344 /* Register notifier */ 1345 - ret = v4l2_async_nf_register(&sdr->v4l2_dev, &sdr->notifier); 1345 + ret = v4l2_async_nf_register(&sdr->notifier); 1346 1346 if (ret < 0) { 1347 1347 dev_err(sdr->dev, "failed: notifier register ret %d\n", ret); 1348 1348 goto cleanup;
+2 -2
drivers/media/platform/renesas/renesas-ceu.c
··· 1657 1657 if (ret) 1658 1658 goto error_pm_disable; 1659 1659 1660 - v4l2_async_nf_init(&ceudev->notifier); 1660 + v4l2_async_nf_init(&ceudev->notifier, &ceudev->v4l2_dev); 1661 1661 1662 1662 if (IS_ENABLED(CONFIG_OF) && dev->of_node) { 1663 1663 ceu_data = of_device_get_match_data(dev); ··· 1679 1679 1680 1680 ceudev->notifier.v4l2_dev = &ceudev->v4l2_dev; 1681 1681 ceudev->notifier.ops = &ceu_notify_ops; 1682 - ret = v4l2_async_nf_register(&ceudev->v4l2_dev, &ceudev->notifier); 1682 + ret = v4l2_async_nf_register(&ceudev->notifier); 1683 1683 if (ret) 1684 1684 goto error_cleanup; 1685 1685
+2 -2
drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c
··· 182 182 { 183 183 int ret; 184 184 185 - v4l2_async_nf_init(&cru->notifier); 185 + v4l2_async_nf_init(&cru->notifier, &cru->v4l2_dev); 186 186 187 187 ret = rzg2l_cru_mc_parse_of(cru); 188 188 if (ret) ··· 193 193 if (list_empty(&cru->notifier.waiting_list)) 194 194 return 0; 195 195 196 - ret = v4l2_async_nf_register(&cru->v4l2_dev, &cru->notifier); 196 + ret = v4l2_async_nf_register(&cru->notifier); 197 197 if (ret < 0) { 198 198 dev_err(cru->dev, "Notifier registration failed\n"); 199 199 v4l2_async_nf_cleanup(&cru->notifier);
+2 -2
drivers/media/platform/renesas/rzg2l-cru/rzg2l-csi2.c
··· 673 673 fwnode = fwnode_graph_get_remote_endpoint(ep); 674 674 fwnode_handle_put(ep); 675 675 676 - v4l2_async_nf_init(&csi2->notifier); 676 + v4l2_async_subdev_nf_init(&csi2->notifier, &csi2->subdev); 677 677 csi2->notifier.ops = &rzg2l_csi2_notify_ops; 678 678 679 679 asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode, ··· 682 682 if (IS_ERR(asd)) 683 683 return PTR_ERR(asd); 684 684 685 - ret = v4l2_async_subdev_nf_register(&csi2->subdev, &csi2->notifier); 685 + ret = v4l2_async_nf_register(&csi2->notifier); 686 686 if (ret) 687 687 v4l2_async_nf_cleanup(&csi2->notifier); 688 688
+2 -2
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
··· 187 187 unsigned int index = 0; 188 188 int ret = 0; 189 189 190 - v4l2_async_nf_init(ntf); 190 + v4l2_async_nf_init(ntf, &rkisp1->v4l2_dev); 191 191 192 192 ntf->ops = &rkisp1_subdev_notifier_ops; 193 193 ··· 287 287 if (!index) 288 288 dev_dbg(rkisp1->dev, "no remote subdevice found\n"); 289 289 290 - ret = v4l2_async_nf_register(&rkisp1->v4l2_dev, ntf); 290 + ret = v4l2_async_nf_register(ntf); 291 291 if (ret) { 292 292 v4l2_async_nf_cleanup(ntf); 293 293 return ret;
+2 -3
drivers/media/platform/samsung/exynos4-is/media-dev.c
··· 1478 1478 1479 1479 platform_set_drvdata(pdev, fmd); 1480 1480 1481 - v4l2_async_nf_init(&fmd->subdev_notifier); 1481 + v4l2_async_nf_init(&fmd->subdev_notifier, &fmd->v4l2_dev); 1482 1482 1483 1483 ret = fimc_md_register_platform_entities(fmd, dev->of_node); 1484 1484 if (ret) ··· 1506 1506 fmd->subdev_notifier.ops = &subdev_notifier_ops; 1507 1507 fmd->num_sensors = 0; 1508 1508 1509 - ret = v4l2_async_nf_register(&fmd->v4l2_dev, 1510 - &fmd->subdev_notifier); 1509 + ret = v4l2_async_nf_register(&fmd->subdev_notifier); 1511 1510 if (ret) 1512 1511 goto err_clk_p; 1513 1512 }
+2 -2
drivers/media/platform/st/stm32/stm32-dcmi.c
··· 1897 1897 return -EINVAL; 1898 1898 } 1899 1899 1900 - v4l2_async_nf_init(&dcmi->notifier); 1900 + v4l2_async_nf_init(&dcmi->notifier, &dcmi->v4l2_dev); 1901 1901 1902 1902 asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier, 1903 1903 of_fwnode_handle(ep), ··· 1912 1912 1913 1913 dcmi->notifier.ops = &dcmi_graph_notify_ops; 1914 1914 1915 - ret = v4l2_async_nf_register(&dcmi->v4l2_dev, &dcmi->notifier); 1915 + ret = v4l2_async_nf_register(&dcmi->notifier); 1916 1916 if (ret < 0) { 1917 1917 dev_err(dcmi->dev, "Failed to register notifier\n"); 1918 1918 v4l2_async_nf_cleanup(&dcmi->notifier);
+2 -2
drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c
··· 121 121 struct fwnode_handle *ep; 122 122 int ret; 123 123 124 - v4l2_async_nf_init(&csi->notifier); 124 + v4l2_async_nf_init(&csi->notifier, &csi->v4l); 125 125 126 126 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0, 127 127 FWNODE_GRAPH_ENDPOINT_NEXT); ··· 239 239 if (ret) 240 240 goto err_unregister_media; 241 241 242 - ret = v4l2_async_nf_register(&csi->v4l, &csi->notifier); 242 + ret = v4l2_async_nf_register(&csi->notifier); 243 243 if (ret) { 244 244 dev_err(csi->dev, "Couldn't register our notifier.\n"); 245 245 goto err_unregister_media;
+5 -5
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
··· 819 819 820 820 /* V4L2 Async */ 821 821 822 - v4l2_async_nf_init(notifier); 822 + if (csi_dev->isp_available) 823 + v4l2_async_subdev_nf_init(notifier, subdev); 824 + else 825 + v4l2_async_nf_init(notifier, v4l2_dev); 823 826 notifier->ops = &sun6i_csi_bridge_notifier_ops; 824 827 825 828 sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_parallel, ··· 831 828 sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_mipi_csi2, 832 829 SUN6I_CSI_PORT_MIPI_CSI2, NULL); 833 830 834 - if (csi_dev->isp_available) 835 - ret = v4l2_async_subdev_nf_register(subdev, notifier); 836 - else 837 - ret = v4l2_async_nf_register(v4l2_dev, notifier); 831 + ret = v4l2_async_nf_register(notifier); 838 832 if (ret) { 839 833 dev_err(dev, "failed to register v4l2 async notifier: %d\n", 840 834 ret);
+2 -2
drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
··· 530 530 531 531 /* V4L2 Async */ 532 532 533 - v4l2_async_nf_init(notifier); 533 + v4l2_async_subdev_nf_init(notifier, subdev); 534 534 notifier->ops = &sun6i_mipi_csi2_notifier_ops; 535 535 536 536 ret = sun6i_mipi_csi2_bridge_source_setup(csi2_dev); ··· 539 539 540 540 /* Only register the notifier when a sensor is connected. */ 541 541 if (ret != -ENODEV) { 542 - ret = v4l2_async_subdev_nf_register(subdev, notifier); 542 + ret = v4l2_async_nf_register(notifier); 543 543 if (ret < 0) 544 544 goto error_v4l2_notifier_cleanup; 545 545
+2 -2
drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c
··· 568 568 569 569 /* V4L2 Async */ 570 570 571 - v4l2_async_nf_init(notifier); 571 + v4l2_async_subdev_nf_init(notifier, subdev); 572 572 notifier->ops = &sun8i_a83t_mipi_csi2_notifier_ops; 573 573 574 574 ret = sun8i_a83t_mipi_csi2_bridge_source_setup(csi2_dev); ··· 577 577 578 578 /* Only register the notifier when a sensor is connected. */ 579 579 if (ret != -ENODEV) { 580 - ret = v4l2_async_subdev_nf_register(subdev, notifier); 580 + ret = v4l2_async_nf_register(notifier); 581 581 if (ret < 0) 582 582 goto error_v4l2_notifier_cleanup; 583 583
+2 -2
drivers/media/platform/ti/am437x/am437x-vpfe.c
··· 2300 2300 2301 2301 dev_dbg(dev, "vpfe_get_pdata\n"); 2302 2302 2303 - v4l2_async_nf_init(&vpfe->notifier); 2303 + v4l2_async_nf_init(&vpfe->notifier, &vpfe->v4l2_dev); 2304 2304 2305 2305 if (!IS_ENABLED(CONFIG_OF) || !dev->of_node) 2306 2306 return dev->platform_data; ··· 2466 2466 } 2467 2467 2468 2468 vpfe->notifier.ops = &vpfe_async_ops; 2469 - ret = v4l2_async_nf_register(&vpfe->v4l2_dev, &vpfe->notifier); 2469 + ret = v4l2_async_nf_register(&vpfe->notifier); 2470 2470 if (ret) { 2471 2471 vpfe_err(vpfe, "Error registering async notifier\n"); 2472 2472 ret = -EINVAL;
+2 -2
drivers/media/platform/ti/cal/cal.c
··· 865 865 unsigned int i; 866 866 int ret; 867 867 868 - v4l2_async_nf_init(&cal->notifier); 868 + v4l2_async_nf_init(&cal->notifier, &cal->v4l2_dev); 869 869 cal->notifier.ops = &cal_async_notifier_ops; 870 870 871 871 for (i = 0; i < cal->data->num_csi2_phy; ++i) { ··· 889 889 casd->phy = phy; 890 890 } 891 891 892 - ret = v4l2_async_nf_register(&cal->v4l2_dev, &cal->notifier); 892 + ret = v4l2_async_nf_register(&cal->notifier); 893 893 if (ret) { 894 894 cal_err(cal, "Error registering async notifier\n"); 895 895 goto error;
+6 -5
drivers/media/platform/ti/davinci/vpif_capture.c
··· 1483 1483 }; 1484 1484 1485 1485 static struct vpif_capture_config * 1486 - vpif_capture_get_pdata(struct platform_device *pdev) 1486 + vpif_capture_get_pdata(struct platform_device *pdev, 1487 + struct v4l2_device *v4l2_dev) 1487 1488 { 1488 1489 struct device_node *endpoint = NULL; 1489 1490 struct device_node *rem = NULL; ··· 1493 1492 struct vpif_capture_chan_config *chan; 1494 1493 unsigned int i; 1495 1494 1496 - v4l2_async_nf_init(&vpif_obj.notifier); 1495 + v4l2_async_nf_init(&vpif_obj.notifier, v4l2_dev); 1497 1496 1498 1497 /* 1499 1498 * DT boot: OF node from parent device contains ··· 1641 1640 goto vpif_unregister; 1642 1641 } while (++res_idx); 1643 1642 1644 - pdev->dev.platform_data = vpif_capture_get_pdata(pdev); 1643 + pdev->dev.platform_data = 1644 + vpif_capture_get_pdata(pdev, &vpif_obj.v4l2_dev); 1645 1645 if (!pdev->dev.platform_data) { 1646 1646 dev_warn(&pdev->dev, "Missing platform data. Giving up.\n"); 1647 1647 goto vpif_unregister; ··· 1685 1683 goto probe_subdev_out; 1686 1684 } else { 1687 1685 vpif_obj.notifier.ops = &vpif_async_ops; 1688 - err = v4l2_async_nf_register(&vpif_obj.v4l2_dev, 1689 - &vpif_obj.notifier); 1686 + err = v4l2_async_nf_register(&vpif_obj.notifier); 1690 1687 if (err) { 1691 1688 vpif_err("Error registering async notifier\n"); 1692 1689 err = -EINVAL;
+2 -2
drivers/media/platform/ti/omap3isp/isp.c
··· 2420 2420 2421 2421 isp->notifier.ops = &isp_subdev_notifier_ops; 2422 2422 2423 - v4l2_async_nf_init(&isp->notifier); 2423 + v4l2_async_nf_init(&isp->notifier, &isp->v4l2_dev); 2424 2424 2425 2425 ret = isp_parse_of_endpoints(isp); 2426 2426 if (ret < 0) 2427 2427 goto error_register_entities; 2428 2428 2429 - ret = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier); 2429 + ret = v4l2_async_nf_register(&isp->notifier); 2430 2430 if (ret) 2431 2431 goto error_register_entities; 2432 2432
+2 -2
drivers/media/platform/video-mux.c
··· 331 331 unsigned int i; 332 332 int ret; 333 333 334 - v4l2_async_nf_init(&vmux->notifier); 334 + v4l2_async_subdev_nf_init(&vmux->notifier, &vmux->subdev); 335 335 336 336 for (i = 0; i < num_input_pads; i++) { 337 337 struct v4l2_async_connection *asd; ··· 366 366 367 367 vmux->notifier.ops = &video_mux_notify_ops; 368 368 369 - ret = v4l2_async_subdev_nf_register(&vmux->subdev, &vmux->notifier); 369 + ret = v4l2_async_nf_register(&vmux->notifier); 370 370 if (ret) 371 371 goto err_nf_cleanup; 372 372
+2 -2
drivers/media/platform/xilinx/xilinx-vipp.c
··· 494 494 goto done; 495 495 } 496 496 497 - v4l2_async_nf_init(&xdev->notifier); 497 + v4l2_async_nf_init(&xdev->notifier, &xdev->v4l2_dev); 498 498 499 499 /* Parse the graph to extract a list of subdevice DT nodes. */ 500 500 ret = xvip_graph_parse(xdev); ··· 512 512 /* Register the subdevices notifier. */ 513 513 xdev->notifier.ops = &xvip_graph_notify_ops; 514 514 515 - ret = v4l2_async_nf_register(&xdev->v4l2_dev, &xdev->notifier); 515 + ret = v4l2_async_nf_register(&xdev->notifier); 516 516 if (ret < 0) { 517 517 dev_err(xdev->dev, "notifier registration failed\n"); 518 518 goto done;
+17 -27
drivers/media/v4l2-core/v4l2-async.c
··· 558 558 return 0; 559 559 } 560 560 561 - void v4l2_async_nf_init(struct v4l2_async_notifier *notifier) 561 + void v4l2_async_nf_init(struct v4l2_async_notifier *notifier, 562 + struct v4l2_device *v4l2_dev) 562 563 { 563 564 INIT_LIST_HEAD(&notifier->waiting_list); 564 565 INIT_LIST_HEAD(&notifier->done_list); 566 + notifier->v4l2_dev = v4l2_dev; 565 567 } 566 568 EXPORT_SYMBOL(v4l2_async_nf_init); 569 + 570 + void v4l2_async_subdev_nf_init(struct v4l2_async_notifier *notifier, 571 + struct v4l2_subdev *sd) 572 + { 573 + INIT_LIST_HEAD(&notifier->waiting_list); 574 + INIT_LIST_HEAD(&notifier->done_list); 575 + notifier->sd = sd; 576 + } 577 + EXPORT_SYMBOL_GPL(v4l2_async_subdev_nf_init); 567 578 568 579 static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier) 569 580 { ··· 616 605 return ret; 617 606 } 618 607 619 - int v4l2_async_nf_register(struct v4l2_device *v4l2_dev, 620 - struct v4l2_async_notifier *notifier) 608 + int v4l2_async_nf_register(struct v4l2_async_notifier *notifier) 621 609 { 622 610 int ret; 623 611 624 - if (WARN_ON(!v4l2_dev || notifier->sd)) 612 + if (WARN_ON(!notifier->v4l2_dev == !notifier->sd)) 625 613 return -EINVAL; 626 - 627 - notifier->v4l2_dev = v4l2_dev; 628 614 629 615 ret = __v4l2_async_nf_register(notifier); 630 616 if (ret) ··· 631 623 } 632 624 EXPORT_SYMBOL(v4l2_async_nf_register); 633 625 634 - int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd, 635 - struct v4l2_async_notifier *notifier) 636 - { 637 - int ret; 638 - 639 - if (WARN_ON(!sd || notifier->v4l2_dev)) 640 - return -EINVAL; 641 - 642 - notifier->sd = sd; 643 - 644 - ret = __v4l2_async_nf_register(notifier); 645 - if (ret) 646 - notifier->sd = NULL; 647 - 648 - return ret; 649 - } 650 - EXPORT_SYMBOL(v4l2_async_subdev_nf_register); 651 - 652 626 static void 653 627 __v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier) 654 628 { ··· 638 648 return; 639 649 640 650 v4l2_async_nf_unbind_all_subdevs(notifier); 641 - 642 - notifier->sd = NULL; 643 - notifier->v4l2_dev = NULL; 644 651 645 652 list_del(&notifier->notifier_entry); 646 653 } ··· 670 683 671 684 kfree(asc); 672 685 } 686 + 687 + notifier->sd = NULL; 688 + notifier->v4l2_dev = NULL; 673 689 } 674 690 675 691 void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
+2 -2
drivers/media/v4l2-core/v4l2-fwnode.c
··· 1215 1215 if (!notifier) 1216 1216 return -ENOMEM; 1217 1217 1218 - v4l2_async_nf_init(notifier); 1218 + v4l2_async_subdev_nf_init(notifier, sd); 1219 1219 1220 1220 ret = v4l2_subdev_get_privacy_led(sd); 1221 1221 if (ret < 0) ··· 1225 1225 if (ret < 0) 1226 1226 goto out_cleanup; 1227 1227 1228 - ret = v4l2_async_subdev_nf_register(sd, notifier); 1228 + ret = v4l2_async_nf_register(notifier); 1229 1229 if (ret < 0) 1230 1230 goto out_cleanup; 1231 1231
+1 -1
drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
··· 825 825 { 826 826 int i, mipi_port, ret; 827 827 828 - v4l2_async_nf_init(&isp->notifier); 828 + v4l2_async_nf_init(&isp->notifier, &isp->v4l2_dev); 829 829 isp->notifier.ops = &atomisp_async_ops; 830 830 831 831 for (i = 0; i < ATOMISP_CAMERA_NR_PORTS; i++) {
+1 -1
drivers/staging/media/atomisp/pci/atomisp_v4l2.c
··· 1508 1508 isp->firmware = NULL; 1509 1509 isp->css_env.isp_css_fw.data = NULL; 1510 1510 1511 - err = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier); 1511 + err = v4l2_async_nf_register(&isp->notifier); 1512 1512 if (err) { 1513 1513 dev_err(isp->dev, "failed to register async notifier : %d\n", err); 1514 1514 goto css_init_fail;
+2 -3
drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
··· 507 507 struct fwnode_handle *fwnode = 508 508 of_fwnode_handle(subdev_entity->epn); 509 509 510 - v4l2_async_nf_init(&subdev_entity->notifier); 510 + v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev); 511 511 512 512 asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, 513 513 fwnode, ··· 523 523 524 524 subdev_entity->notifier.ops = &atmel_isc_async_ops; 525 525 526 - ret = v4l2_async_nf_register(&isc->v4l2_dev, 527 - &subdev_entity->notifier); 526 + ret = v4l2_async_nf_register(&subdev_entity->notifier); 528 527 if (ret) { 529 528 dev_err(dev, "fail to register async notifier\n"); 530 529 goto cleanup_subdev;
+2 -3
drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c
··· 497 497 struct fwnode_handle *fwnode = 498 498 of_fwnode_handle(subdev_entity->epn); 499 499 500 - v4l2_async_nf_init(&subdev_entity->notifier); 500 + v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev); 501 501 502 502 asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, 503 503 fwnode, ··· 513 513 514 514 subdev_entity->notifier.ops = &atmel_isc_async_ops; 515 515 516 - ret = v4l2_async_nf_register(&isc->v4l2_dev, 517 - &subdev_entity->notifier); 516 + ret = v4l2_async_nf_register(&subdev_entity->notifier); 518 517 if (ret) { 519 518 dev_err(dev, "fail to register async notifier\n"); 520 519 goto cleanup_subdev;
+2 -2
drivers/staging/media/imx/imx-media-csi.c
··· 1918 1918 unsigned int port; 1919 1919 int ret; 1920 1920 1921 - v4l2_async_nf_init(&priv->notifier); 1921 + v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); 1922 1922 1923 1923 /* get this CSI's port id */ 1924 1924 ret = fwnode_property_read_u32(dev_fwnode(priv->dev), "reg", &port); ··· 1944 1944 1945 1945 priv->notifier.ops = &csi_notify_ops; 1946 1946 1947 - ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier); 1947 + ret = v4l2_async_nf_register(&priv->notifier); 1948 1948 if (ret) 1949 1949 return ret; 1950 1950
+2 -2
drivers/staging/media/imx/imx-media-dev-common.c
··· 367 367 368 368 INIT_LIST_HEAD(&imxmd->vdev_list); 369 369 370 - v4l2_async_nf_init(&imxmd->notifier); 370 + v4l2_async_nf_init(&imxmd->notifier, &imxmd->v4l2_dev); 371 371 372 372 return imxmd; 373 373 ··· 391 391 392 392 /* prepare the async subdev notifier and register it */ 393 393 imxmd->notifier.ops = ops ? ops : &imx_media_notifier_ops; 394 - ret = v4l2_async_nf_register(&imxmd->v4l2_dev, &imxmd->notifier); 394 + ret = v4l2_async_nf_register(&imxmd->notifier); 395 395 if (ret) { 396 396 v4l2_err(&imxmd->v4l2_dev, 397 397 "v4l2_async_nf_register failed with %d\n", ret);
+2 -2
drivers/staging/media/imx/imx6-mipi-csi2.c
··· 680 680 struct fwnode_handle *ep; 681 681 int ret; 682 682 683 - v4l2_async_nf_init(&csi2->notifier); 683 + v4l2_async_subdev_nf_init(&csi2->notifier, &csi2->sd); 684 684 685 685 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi2->dev), 0, 0, 686 686 FWNODE_GRAPH_ENDPOINT_NEXT); ··· 705 705 706 706 csi2->notifier.ops = &csi2_notify_ops; 707 707 708 - ret = v4l2_async_subdev_nf_register(&csi2->sd, &csi2->notifier); 708 + ret = v4l2_async_nf_register(&csi2->notifier); 709 709 if (ret) 710 710 return ret; 711 711
+2 -2
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
··· 536 536 537 537 /* V4L2 Async */ 538 538 539 - v4l2_async_nf_init(notifier); 539 + v4l2_async_nf_init(notifier, v4l2_dev); 540 540 notifier->ops = &sun6i_isp_proc_notifier_ops; 541 541 542 542 sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi0, ··· 544 544 sun6i_isp_proc_source_setup(isp_dev, &proc->source_csi1, 545 545 SUN6I_ISP_PORT_CSI1); 546 546 547 - ret = v4l2_async_nf_register(v4l2_dev, notifier); 547 + ret = v4l2_async_nf_register(notifier); 548 548 if (ret) { 549 549 v4l2_err(v4l2_dev, 550 550 "failed to register v4l2 async notifier: %d\n", ret);
+2 -3
drivers/staging/media/tegra-video/vi.c
··· 1181 1181 } 1182 1182 1183 1183 if (!IS_ENABLED(CONFIG_VIDEO_TEGRA_TPG)) 1184 - v4l2_async_nf_init(&chan->notifier); 1184 + v4l2_async_nf_init(&chan->notifier, &vid->v4l2_dev); 1185 1185 1186 1186 return 0; 1187 1187 ··· 1748 1748 1749 1749 static int tegra_vi_graph_init(struct tegra_vi *vi) 1750 1750 { 1751 - struct tegra_video_device *vid = dev_get_drvdata(vi->client.host); 1752 1751 struct tegra_vi_channel *chan; 1753 1752 struct fwnode_handle *fwnode = dev_fwnode(vi->dev); 1754 1753 int ret; ··· 1778 1779 continue; 1779 1780 1780 1781 chan->notifier.ops = &tegra_vi_async_ops; 1781 - ret = v4l2_async_nf_register(&vid->v4l2_dev, &chan->notifier); 1782 + ret = v4l2_async_nf_register(&chan->notifier); 1782 1783 if (ret < 0) { 1783 1784 dev_err(vi->dev, 1784 1785 "failed to register channel %d notifier: %d\n",
+19 -14
include/media/v4l2-async.h
··· 148 148 * v4l2_async_nf_init - Initialize a notifier. 149 149 * 150 150 * @notifier: pointer to &struct v4l2_async_notifier 151 + * @v4l2_dev: pointer to &struct v4l2_device 152 + * 153 + * This function initializes the notifier @asc_entry. It must be called 154 + * before adding a subdevice to a notifier, using one of: 155 + * v4l2_async_nf_add_fwnode_remote(), 156 + * v4l2_async_nf_add_fwnode() or 157 + * v4l2_async_nf_add_i2c(). 158 + */ 159 + void v4l2_async_nf_init(struct v4l2_async_notifier *notifier, 160 + struct v4l2_device *v4l2_dev); 161 + 162 + /** 163 + * v4l2_async_subdev_nf_init - Initialize a sub-device notifier. 164 + * 165 + * @notifier: pointer to &struct v4l2_async_notifier 166 + * @sd: pointer to &struct v4l2_subdev 151 167 * 152 168 * This function initializes the notifier @asc_list. It must be called 153 169 * before adding a subdevice to a notifier, using one of: 154 170 * v4l2_async_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or 155 171 * v4l2_async_nf_add_i2c(). 156 172 */ 157 - void v4l2_async_nf_init(struct v4l2_async_notifier *notifier); 173 + void v4l2_async_subdev_nf_init(struct v4l2_async_notifier *notifier, 174 + struct v4l2_subdev *sd); 158 175 159 176 struct v4l2_async_connection * 160 177 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier, ··· 276 259 /** 277 260 * v4l2_async_nf_register - registers a subdevice asynchronous notifier 278 261 * 279 - * @v4l2_dev: pointer to &struct v4l2_device 280 262 * @notifier: pointer to &struct v4l2_async_notifier 281 263 */ 282 - int v4l2_async_nf_register(struct v4l2_device *v4l2_dev, 283 - struct v4l2_async_notifier *notifier); 284 - 285 - /** 286 - * v4l2_async_subdev_nf_register - registers a subdevice asynchronous 287 - * notifier for a sub-device 288 - * 289 - * @sd: pointer to &struct v4l2_subdev 290 - * @notifier: pointer to &struct v4l2_async_notifier 291 - */ 292 - int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd, 293 - struct v4l2_async_notifier *notifier); 264 + int v4l2_async_nf_register(struct v4l2_async_notifier *notifier); 294 265 295 266 /** 296 267 * v4l2_async_nf_unregister - unregisters a subdevice