media: v4l: async: Rename async nf functions, clean up long lines
Rename V4L2 async notifier functions, replacing "notifier" with "nf" and removing "_subdev" at the end of the function names adding subdevs as you can only add subdevs to a notifier. Also wrap and otherwise clean up long lines. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com> (imx7) Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
406bb586de
commit
3c8c153914
|
@ -191,21 +191,21 @@ registered this way are stored in a global list of subdevices, ready to be
|
||||||
picked up by bridge drivers.
|
picked up by bridge drivers.
|
||||||
|
|
||||||
Bridge drivers in turn have to register a notifier object. This is
|
Bridge drivers in turn have to register a notifier object. This is
|
||||||
performed using the :c:func:`v4l2_async_notifier_register` call. To
|
performed using the :c:func:`v4l2_async_nf_register` call. To
|
||||||
unregister the notifier the driver has to call
|
unregister the notifier the driver has to call
|
||||||
:c:func:`v4l2_async_notifier_unregister`. The former of the two functions
|
:c:func:`v4l2_async_nf_unregister`. The former of the two functions
|
||||||
takes two arguments: a pointer to struct :c:type:`v4l2_device` and a
|
takes two arguments: a pointer to struct :c:type:`v4l2_device` and a
|
||||||
pointer to struct :c:type:`v4l2_async_notifier`.
|
pointer to struct :c:type:`v4l2_async_notifier`.
|
||||||
|
|
||||||
Before registering the notifier, bridge drivers must do two things: first, the
|
Before registering the notifier, bridge drivers must do two things: first, the
|
||||||
notifier must be initialized using the :c:func:`v4l2_async_notifier_init`.
|
notifier must be initialized using the :c:func:`v4l2_async_nf_init`.
|
||||||
Second, bridge drivers can then begin to form a list of subdevice descriptors
|
Second, bridge drivers can then begin to form a list of subdevice descriptors
|
||||||
that the bridge device needs for its operation. Several functions are available
|
that the bridge device needs for its operation. Several functions are available
|
||||||
to add subdevice descriptors to a notifier, depending on the type of device and
|
to add subdevice descriptors to a notifier, depending on the type of device and
|
||||||
the needs of the driver.
|
the needs of the driver.
|
||||||
|
|
||||||
:c:func:`v4l2_async_notifier_add_fwnode_remote_subdev` and
|
:c:func:`v4l2_async_nf_add_fwnode_remote` and
|
||||||
:c:func:`v4l2_async_notifier_add_i2c_subdev` are for bridge and ISP drivers for
|
:c:func:`v4l2_async_nf_add_i2c` are for bridge and ISP drivers for
|
||||||
registering their async sub-devices with the notifier.
|
registering their async sub-devices with the notifier.
|
||||||
|
|
||||||
:c:func:`v4l2_async_register_subdev_sensor` is a helper function for
|
:c:func:`v4l2_async_register_subdev_sensor` is a helper function for
|
||||||
|
@ -230,8 +230,8 @@ These functions allocate an async sub-device descriptor which is of type struct
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
my_asd = v4l2_async_notifier_add_fwnode_remote_subdev(¬ifier, ep,
|
my_asd = v4l2_async_nf_add_fwnode_remote(¬ifier, ep,
|
||||||
struct my_async_subdev);
|
struct my_async_subdev);
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
|
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
|
|
|
@ -606,19 +606,18 @@ static int max9286_v4l2_notifier_register(struct max9286_priv *priv)
|
||||||
if (!priv->nsources)
|
if (!priv->nsources)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&priv->notifier);
|
v4l2_async_nf_init(&priv->notifier);
|
||||||
|
|
||||||
for_each_source(priv, source) {
|
for_each_source(priv, source) {
|
||||||
unsigned int i = to_index(priv, source);
|
unsigned int i = to_index(priv, source);
|
||||||
struct max9286_asd *mas;
|
struct max9286_asd *mas;
|
||||||
|
|
||||||
mas = v4l2_async_notifier_add_fwnode_subdev(&priv->notifier,
|
mas = v4l2_async_nf_add_fwnode(&priv->notifier, source->fwnode,
|
||||||
source->fwnode,
|
struct max9286_asd);
|
||||||
struct max9286_asd);
|
|
||||||
if (IS_ERR(mas)) {
|
if (IS_ERR(mas)) {
|
||||||
dev_err(dev, "Failed to add subdev for source %u: %ld",
|
dev_err(dev, "Failed to add subdev for source %u: %ld",
|
||||||
i, PTR_ERR(mas));
|
i, PTR_ERR(mas));
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
return PTR_ERR(mas);
|
return PTR_ERR(mas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -627,10 +626,10 @@ 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_notifier_register(&priv->sd, &priv->notifier);
|
ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Failed to register subdev_notifier");
|
dev_err(dev, "Failed to register subdev_notifier");
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,8 +641,8 @@ static void max9286_v4l2_notifier_unregister(struct max9286_priv *priv)
|
||||||
if (!priv->nsources)
|
if (!priv->nsources)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&priv->notifier);
|
v4l2_async_nf_unregister(&priv->notifier);
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int max9286_s_stream(struct v4l2_subdev *sd, int enable)
|
static int max9286_s_stream(struct v4l2_subdev *sd, int enable)
|
||||||
|
|
|
@ -876,11 +876,10 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
|
||||||
bridge->rx = ep;
|
bridge->rx = ep;
|
||||||
|
|
||||||
/* register async notifier so we get noticed when sensor is connected */
|
/* register async notifier so we get noticed when sensor is connected */
|
||||||
v4l2_async_notifier_init(&bridge->notifier);
|
v4l2_async_nf_init(&bridge->notifier);
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
|
||||||
&bridge->notifier,
|
of_fwnode_handle(ep_node),
|
||||||
of_fwnode_handle(ep_node),
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
of_node_put(ep_node);
|
of_node_put(ep_node);
|
||||||
|
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
|
@ -890,10 +889,9 @@ 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_notifier_register(&bridge->sd,
|
ret = v4l2_async_subdev_nf_register(&bridge->sd, &bridge->notifier);
|
||||||
&bridge->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
v4l2_async_notifier_cleanup(&bridge->notifier);
|
v4l2_async_nf_cleanup(&bridge->notifier);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -1031,8 +1029,8 @@ static int mipid02_probe(struct i2c_client *client)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unregister_notifier:
|
unregister_notifier:
|
||||||
v4l2_async_notifier_unregister(&bridge->notifier);
|
v4l2_async_nf_unregister(&bridge->notifier);
|
||||||
v4l2_async_notifier_cleanup(&bridge->notifier);
|
v4l2_async_nf_cleanup(&bridge->notifier);
|
||||||
power_off:
|
power_off:
|
||||||
mipid02_set_power_off(bridge);
|
mipid02_set_power_off(bridge);
|
||||||
entity_cleanup:
|
entity_cleanup:
|
||||||
|
@ -1048,8 +1046,8 @@ static int mipid02_remove(struct i2c_client *client)
|
||||||
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
||||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&bridge->notifier);
|
v4l2_async_nf_unregister(&bridge->notifier);
|
||||||
v4l2_async_notifier_cleanup(&bridge->notifier);
|
v4l2_async_nf_cleanup(&bridge->notifier);
|
||||||
v4l2_async_unregister_subdev(&bridge->sd);
|
v4l2_async_unregister_subdev(&bridge->sd);
|
||||||
mipid02_set_power_off(bridge);
|
mipid02_set_power_off(bridge);
|
||||||
media_entity_cleanup(&bridge->sd.entity);
|
media_entity_cleanup(&bridge->sd.entity);
|
||||||
|
|
|
@ -1478,8 +1478,9 @@ static int cio2_parse_firmware(struct cio2_device *cio2)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
|
||||||
s_asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
s_asd = v4l2_async_nf_add_fwnode_remote(&cio2->notifier, ep,
|
||||||
&cio2->notifier, ep, struct sensor_async_subdev);
|
struct
|
||||||
|
sensor_async_subdev);
|
||||||
if (IS_ERR(s_asd)) {
|
if (IS_ERR(s_asd)) {
|
||||||
ret = PTR_ERR(s_asd);
|
ret = PTR_ERR(s_asd);
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
@ -1502,7 +1503,7 @@ static int cio2_parse_firmware(struct cio2_device *cio2)
|
||||||
* suspend.
|
* suspend.
|
||||||
*/
|
*/
|
||||||
cio2->notifier.ops = &cio2_async_ops;
|
cio2->notifier.ops = &cio2_async_ops;
|
||||||
ret = v4l2_async_notifier_register(&cio2->v4l2_dev, &cio2->notifier);
|
ret = v4l2_async_nf_register(&cio2->v4l2_dev, &cio2->notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(&cio2->pci_dev->dev,
|
dev_err(&cio2->pci_dev->dev,
|
||||||
"failed to register async notifier : %d\n", ret);
|
"failed to register async notifier : %d\n", ret);
|
||||||
|
@ -1804,7 +1805,7 @@ static int cio2_pci_probe(struct pci_dev *pci_dev,
|
||||||
if (r)
|
if (r)
|
||||||
goto fail_v4l2_device_unregister;
|
goto fail_v4l2_device_unregister;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&cio2->notifier);
|
v4l2_async_nf_init(&cio2->notifier);
|
||||||
|
|
||||||
/* Register notifier for subdevices we care */
|
/* Register notifier for subdevices we care */
|
||||||
r = cio2_parse_firmware(cio2);
|
r = cio2_parse_firmware(cio2);
|
||||||
|
@ -1824,8 +1825,8 @@ static int cio2_pci_probe(struct pci_dev *pci_dev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_clean_notifier:
|
fail_clean_notifier:
|
||||||
v4l2_async_notifier_unregister(&cio2->notifier);
|
v4l2_async_nf_unregister(&cio2->notifier);
|
||||||
v4l2_async_notifier_cleanup(&cio2->notifier);
|
v4l2_async_nf_cleanup(&cio2->notifier);
|
||||||
cio2_queues_exit(cio2);
|
cio2_queues_exit(cio2);
|
||||||
fail_v4l2_device_unregister:
|
fail_v4l2_device_unregister:
|
||||||
v4l2_device_unregister(&cio2->v4l2_dev);
|
v4l2_device_unregister(&cio2->v4l2_dev);
|
||||||
|
@ -1844,8 +1845,8 @@ static void cio2_pci_remove(struct pci_dev *pci_dev)
|
||||||
struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
|
struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
|
||||||
|
|
||||||
media_device_unregister(&cio2->media_dev);
|
media_device_unregister(&cio2->media_dev);
|
||||||
v4l2_async_notifier_unregister(&cio2->notifier);
|
v4l2_async_nf_unregister(&cio2->notifier);
|
||||||
v4l2_async_notifier_cleanup(&cio2->notifier);
|
v4l2_async_nf_cleanup(&cio2->notifier);
|
||||||
cio2_queues_exit(cio2);
|
cio2_queues_exit(cio2);
|
||||||
cio2_fbpt_exit_dummy(cio2);
|
cio2_fbpt_exit_dummy(cio2);
|
||||||
v4l2_device_unregister(&cio2->v4l2_dev);
|
v4l2_device_unregister(&cio2->v4l2_dev);
|
||||||
|
|
|
@ -2297,7 +2297,7 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
|
||||||
|
|
||||||
dev_dbg(dev, "vpfe_get_pdata\n");
|
dev_dbg(dev, "vpfe_get_pdata\n");
|
||||||
|
|
||||||
v4l2_async_notifier_init(&vpfe->notifier);
|
v4l2_async_nf_init(&vpfe->notifier);
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_OF) || !dev->of_node)
|
if (!IS_ENABLED(CONFIG_OF) || !dev->of_node)
|
||||||
return dev->platform_data;
|
return dev->platform_data;
|
||||||
|
@ -2365,9 +2365,10 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->asd[i] = v4l2_async_notifier_add_fwnode_subdev(
|
pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpfe->notifier,
|
||||||
&vpfe->notifier, of_fwnode_handle(rem),
|
of_fwnode_handle(rem),
|
||||||
struct v4l2_async_subdev);
|
struct
|
||||||
|
v4l2_async_subdev);
|
||||||
of_node_put(rem);
|
of_node_put(rem);
|
||||||
if (IS_ERR(pdata->asd[i]))
|
if (IS_ERR(pdata->asd[i]))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -2377,7 +2378,7 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
|
||||||
return pdata;
|
return pdata;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_cleanup(&vpfe->notifier);
|
v4l2_async_nf_cleanup(&vpfe->notifier);
|
||||||
of_node_put(endpoint);
|
of_node_put(endpoint);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2465,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_notifier_register(&vpfe->v4l2_dev, &vpfe->notifier);
|
ret = v4l2_async_nf_register(&vpfe->v4l2_dev, &vpfe->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
vpfe_err(vpfe, "Error registering async notifier\n");
|
vpfe_err(vpfe, "Error registering async notifier\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -2477,7 +2478,7 @@ static int vpfe_probe(struct platform_device *pdev)
|
||||||
probe_out_v4l2_unregister:
|
probe_out_v4l2_unregister:
|
||||||
v4l2_device_unregister(&vpfe->v4l2_dev);
|
v4l2_device_unregister(&vpfe->v4l2_dev);
|
||||||
probe_out_cleanup:
|
probe_out_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&vpfe->notifier);
|
v4l2_async_nf_cleanup(&vpfe->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2490,8 +2491,8 @@ static int vpfe_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&vpfe->notifier);
|
v4l2_async_nf_unregister(&vpfe->notifier);
|
||||||
v4l2_async_notifier_cleanup(&vpfe->notifier);
|
v4l2_async_nf_cleanup(&vpfe->notifier);
|
||||||
v4l2_device_unregister(&vpfe->v4l2_dev);
|
v4l2_device_unregister(&vpfe->v4l2_dev);
|
||||||
video_unregister_device(&vpfe->video_dev);
|
video_unregister_device(&vpfe->video_dev);
|
||||||
|
|
||||||
|
|
|
@ -2222,8 +2222,8 @@ void isc_subdev_cleanup(struct isc_device *isc)
|
||||||
struct isc_subdev_entity *subdev_entity;
|
struct isc_subdev_entity *subdev_entity;
|
||||||
|
|
||||||
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
||||||
v4l2_async_notifier_unregister(&subdev_entity->notifier);
|
v4l2_async_nf_unregister(&subdev_entity->notifier);
|
||||||
v4l2_async_notifier_cleanup(&subdev_entity->notifier);
|
v4l2_async_nf_cleanup(&subdev_entity->notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT_LIST_HEAD(&isc->subdev_entities);
|
INIT_LIST_HEAD(&isc->subdev_entities);
|
||||||
|
|
|
@ -1159,12 +1159,11 @@ static int isi_graph_init(struct atmel_isi *isi)
|
||||||
if (!ep)
|
if (!ep)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&isi->notifier);
|
v4l2_async_nf_init(&isi->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
|
||||||
&isi->notifier,
|
of_fwnode_handle(ep),
|
||||||
of_fwnode_handle(ep),
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
of_node_put(ep);
|
of_node_put(ep);
|
||||||
|
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
|
@ -1172,10 +1171,10 @@ 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_notifier_register(&isi->v4l2_dev, &isi->notifier);
|
ret = v4l2_async_nf_register(&isi->v4l2_dev, &isi->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(isi->dev, "Notifier registration failed\n");
|
dev_err(isi->dev, "Notifier registration failed\n");
|
||||||
v4l2_async_notifier_cleanup(&isi->notifier);
|
v4l2_async_nf_cleanup(&isi->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1327,8 +1326,8 @@ static int atmel_isi_remove(struct platform_device *pdev)
|
||||||
isi->p_fb_descriptors,
|
isi->p_fb_descriptors,
|
||||||
isi->fb_descriptors_phys);
|
isi->fb_descriptors_phys);
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
v4l2_async_notifier_unregister(&isi->notifier);
|
v4l2_async_nf_unregister(&isi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&isi->notifier);
|
v4l2_async_nf_cleanup(&isi->notifier);
|
||||||
v4l2_device_unregister(&isi->v4l2_dev);
|
v4l2_device_unregister(&isi->v4l2_dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -512,13 +512,14 @@ static int atmel_isc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
struct fwnode_handle *fwnode =
|
||||||
|
of_fwnode_handle(subdev_entity->epn);
|
||||||
|
|
||||||
v4l2_async_notifier_init(&subdev_entity->notifier);
|
v4l2_async_nf_init(&subdev_entity->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
|
||||||
&subdev_entity->notifier,
|
fwnode,
|
||||||
of_fwnode_handle(subdev_entity->epn),
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
|
|
||||||
of_node_put(subdev_entity->epn);
|
of_node_put(subdev_entity->epn);
|
||||||
subdev_entity->epn = NULL;
|
subdev_entity->epn = NULL;
|
||||||
|
@ -530,8 +531,8 @@ static int atmel_isc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
subdev_entity->notifier.ops = &isc_async_ops;
|
subdev_entity->notifier.ops = &isc_async_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&isc->v4l2_dev,
|
ret = v4l2_async_nf_register(&isc->v4l2_dev,
|
||||||
&subdev_entity->notifier);
|
&subdev_entity->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "fail to register async notifier\n");
|
dev_err(dev, "fail to register async notifier\n");
|
||||||
goto cleanup_subdev;
|
goto cleanup_subdev;
|
||||||
|
|
|
@ -505,13 +505,14 @@ static int microchip_xisc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
struct fwnode_handle *fwnode =
|
||||||
|
of_fwnode_handle(subdev_entity->epn);
|
||||||
|
|
||||||
v4l2_async_notifier_init(&subdev_entity->notifier);
|
v4l2_async_nf_init(&subdev_entity->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
|
||||||
&subdev_entity->notifier,
|
fwnode,
|
||||||
of_fwnode_handle(subdev_entity->epn),
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
|
|
||||||
of_node_put(subdev_entity->epn);
|
of_node_put(subdev_entity->epn);
|
||||||
subdev_entity->epn = NULL;
|
subdev_entity->epn = NULL;
|
||||||
|
@ -523,8 +524,8 @@ static int microchip_xisc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
subdev_entity->notifier.ops = &isc_async_ops;
|
subdev_entity->notifier.ops = &isc_async_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&isc->v4l2_dev,
|
ret = v4l2_async_nf_register(&isc->v4l2_dev,
|
||||||
&subdev_entity->notifier);
|
&subdev_entity->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "fail to register async notifier\n");
|
dev_err(dev, "fail to register async notifier\n");
|
||||||
goto cleanup_subdev;
|
goto cleanup_subdev;
|
||||||
|
|
|
@ -401,21 +401,19 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_async_notifier_init(&csi2rx->notifier);
|
v4l2_async_nf_init(&csi2rx->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(&csi2rx->notifier,
|
asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
|
||||||
fwh,
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
of_node_put(ep);
|
of_node_put(ep);
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
return PTR_ERR(asd);
|
return PTR_ERR(asd);
|
||||||
|
|
||||||
csi2rx->notifier.ops = &csi2rx_notifier_ops;
|
csi2rx->notifier.ops = &csi2rx_notifier_ops;
|
||||||
|
|
||||||
ret = v4l2_async_subdev_notifier_register(&csi2rx->subdev,
|
ret = v4l2_async_subdev_nf_register(&csi2rx->subdev, &csi2rx->notifier);
|
||||||
&csi2rx->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
v4l2_async_notifier_cleanup(&csi2rx->notifier);
|
v4l2_async_nf_cleanup(&csi2rx->notifier);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -471,7 +469,7 @@ static int csi2rx_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_cleanup:
|
err_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&csi2rx->notifier);
|
v4l2_async_nf_cleanup(&csi2rx->notifier);
|
||||||
err_free_priv:
|
err_free_priv:
|
||||||
kfree(csi2rx);
|
kfree(csi2rx);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1506,7 +1506,7 @@ vpif_capture_get_pdata(struct platform_device *pdev)
|
||||||
struct vpif_capture_chan_config *chan;
|
struct vpif_capture_chan_config *chan;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&vpif_obj.notifier);
|
v4l2_async_nf_init(&vpif_obj.notifier);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DT boot: OF node from parent device contains
|
* DT boot: OF node from parent device contains
|
||||||
|
@ -1582,9 +1582,10 @@ vpif_capture_get_pdata(struct platform_device *pdev)
|
||||||
dev_dbg(&pdev->dev, "Remote device %pOF found\n", rem);
|
dev_dbg(&pdev->dev, "Remote device %pOF found\n", rem);
|
||||||
sdinfo->name = rem->full_name;
|
sdinfo->name = rem->full_name;
|
||||||
|
|
||||||
pdata->asd[i] = v4l2_async_notifier_add_fwnode_subdev(
|
pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpif_obj.notifier,
|
||||||
&vpif_obj.notifier, of_fwnode_handle(rem),
|
of_fwnode_handle(rem),
|
||||||
struct v4l2_async_subdev);
|
struct
|
||||||
|
v4l2_async_subdev);
|
||||||
if (IS_ERR(pdata->asd[i]))
|
if (IS_ERR(pdata->asd[i]))
|
||||||
goto err_cleanup;
|
goto err_cleanup;
|
||||||
|
|
||||||
|
@ -1602,7 +1603,7 @@ vpif_capture_get_pdata(struct platform_device *pdev)
|
||||||
err_cleanup:
|
err_cleanup:
|
||||||
of_node_put(rem);
|
of_node_put(rem);
|
||||||
of_node_put(endpoint);
|
of_node_put(endpoint);
|
||||||
v4l2_async_notifier_cleanup(&vpif_obj.notifier);
|
v4l2_async_nf_cleanup(&vpif_obj.notifier);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1692,8 +1693,8 @@ static __init int vpif_probe(struct platform_device *pdev)
|
||||||
goto probe_subdev_out;
|
goto probe_subdev_out;
|
||||||
} else {
|
} else {
|
||||||
vpif_obj.notifier.ops = &vpif_async_ops;
|
vpif_obj.notifier.ops = &vpif_async_ops;
|
||||||
err = v4l2_async_notifier_register(&vpif_obj.v4l2_dev,
|
err = v4l2_async_nf_register(&vpif_obj.v4l2_dev,
|
||||||
&vpif_obj.notifier);
|
&vpif_obj.notifier);
|
||||||
if (err) {
|
if (err) {
|
||||||
vpif_err("Error registering async notifier\n");
|
vpif_err("Error registering async notifier\n");
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
|
@ -1711,7 +1712,7 @@ static __init int vpif_probe(struct platform_device *pdev)
|
||||||
vpif_free:
|
vpif_free:
|
||||||
free_vpif_objs();
|
free_vpif_objs();
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_cleanup(&vpif_obj.notifier);
|
v4l2_async_nf_cleanup(&vpif_obj.notifier);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -1727,8 +1728,8 @@ static int vpif_remove(struct platform_device *device)
|
||||||
struct channel_obj *ch;
|
struct channel_obj *ch;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&vpif_obj.notifier);
|
v4l2_async_nf_unregister(&vpif_obj.notifier);
|
||||||
v4l2_async_notifier_cleanup(&vpif_obj.notifier);
|
v4l2_async_nf_cleanup(&vpif_obj.notifier);
|
||||||
v4l2_device_unregister(&vpif_obj.v4l2_dev);
|
v4l2_device_unregister(&vpif_obj.v4l2_dev);
|
||||||
|
|
||||||
kfree(vpif_obj.sd);
|
kfree(vpif_obj.sd);
|
||||||
|
|
|
@ -464,9 +464,9 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&fmd->subdev_notifier,
|
||||||
&fmd->subdev_notifier, of_fwnode_handle(ep),
|
of_fwnode_handle(ep),
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
|
|
||||||
of_node_put(ep);
|
of_node_put(ep);
|
||||||
|
|
||||||
|
@ -557,7 +557,7 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
of_node_put(ports);
|
of_node_put(ports);
|
||||||
v4l2_async_notifier_cleanup(&fmd->subdev_notifier);
|
v4l2_async_nf_cleanup(&fmd->subdev_notifier);
|
||||||
pm_runtime_put(fmd->pmf);
|
pm_runtime_put(fmd->pmf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1481,7 +1481,7 @@ static int fimc_md_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, fmd);
|
platform_set_drvdata(pdev, fmd);
|
||||||
|
|
||||||
v4l2_async_notifier_init(&fmd->subdev_notifier);
|
v4l2_async_nf_init(&fmd->subdev_notifier);
|
||||||
|
|
||||||
ret = fimc_md_register_platform_entities(fmd, dev->of_node);
|
ret = fimc_md_register_platform_entities(fmd, dev->of_node);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -1509,8 +1509,8 @@ static int fimc_md_probe(struct platform_device *pdev)
|
||||||
fmd->subdev_notifier.ops = &subdev_notifier_ops;
|
fmd->subdev_notifier.ops = &subdev_notifier_ops;
|
||||||
fmd->num_sensors = 0;
|
fmd->num_sensors = 0;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&fmd->v4l2_dev,
|
ret = v4l2_async_nf_register(&fmd->v4l2_dev,
|
||||||
&fmd->subdev_notifier);
|
&fmd->subdev_notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_clk_p;
|
goto err_clk_p;
|
||||||
}
|
}
|
||||||
|
@ -1522,7 +1522,7 @@ static int fimc_md_probe(struct platform_device *pdev)
|
||||||
err_attr:
|
err_attr:
|
||||||
device_remove_file(&pdev->dev, &dev_attr_subdev_conf_mode);
|
device_remove_file(&pdev->dev, &dev_attr_subdev_conf_mode);
|
||||||
err_cleanup:
|
err_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&fmd->subdev_notifier);
|
v4l2_async_nf_cleanup(&fmd->subdev_notifier);
|
||||||
err_m_ent:
|
err_m_ent:
|
||||||
fimc_md_unregister_entities(fmd);
|
fimc_md_unregister_entities(fmd);
|
||||||
err_clk:
|
err_clk:
|
||||||
|
@ -1542,8 +1542,8 @@ static int fimc_md_remove(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fimc_md_unregister_clk_provider(fmd);
|
fimc_md_unregister_clk_provider(fmd);
|
||||||
v4l2_async_notifier_unregister(&fmd->subdev_notifier);
|
v4l2_async_nf_unregister(&fmd->subdev_notifier);
|
||||||
v4l2_async_notifier_cleanup(&fmd->subdev_notifier);
|
v4l2_async_nf_cleanup(&fmd->subdev_notifier);
|
||||||
|
|
||||||
v4l2_device_unregister(&fmd->v4l2_dev);
|
v4l2_device_unregister(&fmd->v4l2_dev);
|
||||||
device_remove_file(&pdev->dev, &dev_attr_subdev_conf_mode);
|
device_remove_file(&pdev->dev, &dev_attr_subdev_conf_mode);
|
||||||
|
|
|
@ -544,12 +544,11 @@ static int cafe_pci_probe(struct pci_dev *pdev,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_pdown;
|
goto out_pdown;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&mcam->notifier);
|
v4l2_async_nf_init(&mcam->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_i2c_subdev(&mcam->notifier,
|
asd = v4l2_async_nf_add_i2c(&mcam->notifier,
|
||||||
i2c_adapter_id(cam->i2c_adapter),
|
i2c_adapter_id(cam->i2c_adapter),
|
||||||
ov7670_info.addr,
|
ov7670_info.addr, struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto out_smbus_shutdown;
|
goto out_smbus_shutdown;
|
||||||
|
|
|
@ -1877,7 +1877,7 @@ int mccic_register(struct mcam_camera *cam)
|
||||||
cam->mbus_code = mcam_def_mbus_code;
|
cam->mbus_code = mcam_def_mbus_code;
|
||||||
|
|
||||||
cam->notifier.ops = &mccic_notify_ops;
|
cam->notifier.ops = &mccic_notify_ops;
|
||||||
ret = v4l2_async_notifier_register(&cam->v4l2_dev, &cam->notifier);
|
ret = v4l2_async_nf_register(&cam->v4l2_dev, &cam->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
cam_warn(cam, "failed to register a sensor notifier");
|
cam_warn(cam, "failed to register a sensor notifier");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1914,9 +1914,9 @@ int mccic_register(struct mcam_camera *cam)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
v4l2_async_notifier_unregister(&cam->notifier);
|
v4l2_async_nf_unregister(&cam->notifier);
|
||||||
v4l2_device_unregister(&cam->v4l2_dev);
|
v4l2_device_unregister(&cam->v4l2_dev);
|
||||||
v4l2_async_notifier_cleanup(&cam->notifier);
|
v4l2_async_nf_cleanup(&cam->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mccic_register);
|
EXPORT_SYMBOL_GPL(mccic_register);
|
||||||
|
@ -1936,9 +1936,9 @@ void mccic_shutdown(struct mcam_camera *cam)
|
||||||
if (cam->buffer_mode == B_vmalloc)
|
if (cam->buffer_mode == B_vmalloc)
|
||||||
mcam_free_dma_bufs(cam);
|
mcam_free_dma_bufs(cam);
|
||||||
v4l2_ctrl_handler_free(&cam->ctrl_handler);
|
v4l2_ctrl_handler_free(&cam->ctrl_handler);
|
||||||
v4l2_async_notifier_unregister(&cam->notifier);
|
v4l2_async_nf_unregister(&cam->notifier);
|
||||||
v4l2_device_unregister(&cam->v4l2_dev);
|
v4l2_device_unregister(&cam->v4l2_dev);
|
||||||
v4l2_async_notifier_cleanup(&cam->notifier);
|
v4l2_async_nf_cleanup(&cam->notifier);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mccic_shutdown);
|
EXPORT_SYMBOL_GPL(mccic_shutdown);
|
||||||
|
|
||||||
|
|
|
@ -239,10 +239,10 @@ static int mmpcam_probe(struct platform_device *pdev)
|
||||||
if (!ep)
|
if (!ep)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&mcam->notifier);
|
v4l2_async_nf_init(&mcam->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(&mcam->notifier, ep,
|
asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
|
|
|
@ -2003,7 +2003,7 @@ static int isp_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct isp_device *isp = platform_get_drvdata(pdev);
|
struct isp_device *isp = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&isp->notifier);
|
v4l2_async_nf_unregister(&isp->notifier);
|
||||||
isp_unregister_entities(isp);
|
isp_unregister_entities(isp);
|
||||||
isp_cleanup_modules(isp);
|
isp_cleanup_modules(isp);
|
||||||
isp_xclk_cleanup(isp);
|
isp_xclk_cleanup(isp);
|
||||||
|
@ -2013,7 +2013,7 @@ static int isp_remove(struct platform_device *pdev)
|
||||||
__omap3isp_put(isp, false);
|
__omap3isp_put(isp, false);
|
||||||
|
|
||||||
media_entity_enum_cleanup(&isp->crashed);
|
media_entity_enum_cleanup(&isp->crashed);
|
||||||
v4l2_async_notifier_cleanup(&isp->notifier);
|
v4l2_async_nf_cleanup(&isp->notifier);
|
||||||
|
|
||||||
kfree(isp);
|
kfree(isp);
|
||||||
|
|
||||||
|
@ -2172,8 +2172,9 @@ static int isp_parse_of_endpoints(struct isp_device *isp)
|
||||||
ret = v4l2_fwnode_endpoint_parse(ep, &vep);
|
ret = v4l2_fwnode_endpoint_parse(ep, &vep);
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
isd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
isd = v4l2_async_nf_add_fwnode_remote(&isp->notifier,
|
||||||
&isp->notifier, ep, struct isp_async_subdev);
|
ep, struct
|
||||||
|
isp_async_subdev);
|
||||||
if (!IS_ERR(isd))
|
if (!IS_ERR(isd))
|
||||||
isp_parse_of_parallel_endpoint(isp->dev, &vep, &isd->bus);
|
isp_parse_of_parallel_endpoint(isp->dev, &vep, &isd->bus);
|
||||||
}
|
}
|
||||||
|
@ -2211,8 +2212,10 @@ static int isp_parse_of_endpoints(struct isp_device *isp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
isd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
isd = v4l2_async_nf_add_fwnode_remote(&isp->notifier,
|
||||||
&isp->notifier, ep, struct isp_async_subdev);
|
ep,
|
||||||
|
struct
|
||||||
|
isp_async_subdev);
|
||||||
|
|
||||||
if (!IS_ERR(isd)) {
|
if (!IS_ERR(isd)) {
|
||||||
switch (vep.bus_type) {
|
switch (vep.bus_type) {
|
||||||
|
@ -2289,7 +2292,7 @@ static int isp_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
mutex_init(&isp->isp_mutex);
|
mutex_init(&isp->isp_mutex);
|
||||||
spin_lock_init(&isp->stat_lock);
|
spin_lock_init(&isp->stat_lock);
|
||||||
v4l2_async_notifier_init(&isp->notifier);
|
v4l2_async_nf_init(&isp->notifier);
|
||||||
isp->dev = &pdev->dev;
|
isp->dev = &pdev->dev;
|
||||||
|
|
||||||
ret = isp_parse_of_endpoints(isp);
|
ret = isp_parse_of_endpoints(isp);
|
||||||
|
@ -2418,7 +2421,7 @@ static int isp_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
isp->notifier.ops = &isp_subdev_notifier_ops;
|
isp->notifier.ops = &isp_subdev_notifier_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&isp->v4l2_dev, &isp->notifier);
|
ret = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_register_entities;
|
goto error_register_entities;
|
||||||
|
|
||||||
|
@ -2437,7 +2440,7 @@ static int isp_probe(struct platform_device *pdev)
|
||||||
isp_xclk_cleanup(isp);
|
isp_xclk_cleanup(isp);
|
||||||
__omap3isp_put(isp, false);
|
__omap3isp_put(isp, false);
|
||||||
error:
|
error:
|
||||||
v4l2_async_notifier_cleanup(&isp->notifier);
|
v4l2_async_nf_cleanup(&isp->notifier);
|
||||||
mutex_destroy(&isp->isp_mutex);
|
mutex_destroy(&isp->isp_mutex);
|
||||||
error_release_isp:
|
error_release_isp:
|
||||||
kfree(isp);
|
kfree(isp);
|
||||||
|
|
|
@ -2249,10 +2249,9 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
|
||||||
if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
|
if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
|
||||||
pcdev->platform_flags |= PXA_CAMERA_PCLK_EN;
|
pcdev->platform_flags |= PXA_CAMERA_PCLK_EN;
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier,
|
||||||
&pcdev->notifier,
|
of_fwnode_handle(np),
|
||||||
of_fwnode_handle(np),
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
err = PTR_ERR(asd);
|
err = PTR_ERR(asd);
|
||||||
out:
|
out:
|
||||||
|
@ -2289,7 +2288,7 @@ static int pxa_camera_probe(struct platform_device *pdev)
|
||||||
if (IS_ERR(pcdev->clk))
|
if (IS_ERR(pcdev->clk))
|
||||||
return PTR_ERR(pcdev->clk);
|
return PTR_ERR(pcdev->clk);
|
||||||
|
|
||||||
v4l2_async_notifier_init(&pcdev->notifier);
|
v4l2_async_nf_init(&pcdev->notifier);
|
||||||
pcdev->res = res;
|
pcdev->res = res;
|
||||||
pcdev->pdata = pdev->dev.platform_data;
|
pcdev->pdata = pdev->dev.platform_data;
|
||||||
if (pcdev->pdata) {
|
if (pcdev->pdata) {
|
||||||
|
@ -2297,11 +2296,10 @@ static int pxa_camera_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
pcdev->platform_flags = pcdev->pdata->flags;
|
pcdev->platform_flags = pcdev->pdata->flags;
|
||||||
pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
|
pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
|
||||||
asd = v4l2_async_notifier_add_i2c_subdev(
|
asd = v4l2_async_nf_add_i2c(&pcdev->notifier,
|
||||||
&pcdev->notifier,
|
pcdev->pdata->sensor_i2c_adapter_id,
|
||||||
pcdev->pdata->sensor_i2c_adapter_id,
|
pcdev->pdata->sensor_i2c_address,
|
||||||
pcdev->pdata->sensor_i2c_address,
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
err = PTR_ERR(asd);
|
err = PTR_ERR(asd);
|
||||||
} else if (pdev->dev.of_node) {
|
} else if (pdev->dev.of_node) {
|
||||||
|
@ -2402,13 +2400,13 @@ static int pxa_camera_probe(struct platform_device *pdev)
|
||||||
goto exit_notifier_cleanup;
|
goto exit_notifier_cleanup;
|
||||||
|
|
||||||
pcdev->notifier.ops = &pxa_camera_sensor_ops;
|
pcdev->notifier.ops = &pxa_camera_sensor_ops;
|
||||||
err = v4l2_async_notifier_register(&pcdev->v4l2_dev, &pcdev->notifier);
|
err = v4l2_async_nf_register(&pcdev->v4l2_dev, &pcdev->notifier);
|
||||||
if (err)
|
if (err)
|
||||||
goto exit_notifier_cleanup;
|
goto exit_notifier_cleanup;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
exit_notifier_cleanup:
|
exit_notifier_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&pcdev->notifier);
|
v4l2_async_nf_cleanup(&pcdev->notifier);
|
||||||
v4l2_device_unregister(&pcdev->v4l2_dev);
|
v4l2_device_unregister(&pcdev->v4l2_dev);
|
||||||
exit_deactivate:
|
exit_deactivate:
|
||||||
pxa_camera_deactivate(pcdev);
|
pxa_camera_deactivate(pcdev);
|
||||||
|
@ -2432,8 +2430,8 @@ static int pxa_camera_remove(struct platform_device *pdev)
|
||||||
dma_release_channel(pcdev->dma_chans[1]);
|
dma_release_channel(pcdev->dma_chans[1]);
|
||||||
dma_release_channel(pcdev->dma_chans[2]);
|
dma_release_channel(pcdev->dma_chans[2]);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&pcdev->notifier);
|
v4l2_async_nf_unregister(&pcdev->notifier);
|
||||||
v4l2_async_notifier_cleanup(&pcdev->notifier);
|
v4l2_async_nf_cleanup(&pcdev->notifier);
|
||||||
|
|
||||||
v4l2_device_unregister(&pcdev->v4l2_dev);
|
v4l2_device_unregister(&pcdev->v4l2_dev);
|
||||||
|
|
||||||
|
|
|
@ -886,9 +886,9 @@ static int camss_of_parse_ports(struct camss *camss)
|
||||||
goto err_cleanup;
|
goto err_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
csd = v4l2_async_notifier_add_fwnode_subdev(
|
csd = v4l2_async_nf_add_fwnode(&camss->notifier,
|
||||||
&camss->notifier, of_fwnode_handle(remote),
|
of_fwnode_handle(remote),
|
||||||
struct camss_async_subdev);
|
struct camss_async_subdev);
|
||||||
of_node_put(remote);
|
of_node_put(remote);
|
||||||
if (IS_ERR(csd)) {
|
if (IS_ERR(csd)) {
|
||||||
ret = PTR_ERR(csd);
|
ret = PTR_ERR(csd);
|
||||||
|
@ -1361,7 +1361,7 @@ static int camss_probe(struct platform_device *pdev)
|
||||||
goto err_free;
|
goto err_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_async_notifier_init(&camss->notifier);
|
v4l2_async_nf_init(&camss->notifier);
|
||||||
|
|
||||||
num_subdevs = camss_of_parse_ports(camss);
|
num_subdevs = camss_of_parse_ports(camss);
|
||||||
if (num_subdevs < 0) {
|
if (num_subdevs < 0) {
|
||||||
|
@ -1397,8 +1397,8 @@ static int camss_probe(struct platform_device *pdev)
|
||||||
if (num_subdevs) {
|
if (num_subdevs) {
|
||||||
camss->notifier.ops = &camss_subdev_notifier_ops;
|
camss->notifier.ops = &camss_subdev_notifier_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&camss->v4l2_dev,
|
ret = v4l2_async_nf_register(&camss->v4l2_dev,
|
||||||
&camss->notifier);
|
&camss->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev,
|
dev_err(dev,
|
||||||
"Failed to register async subdev nodes: %d\n",
|
"Failed to register async subdev nodes: %d\n",
|
||||||
|
@ -1436,7 +1436,7 @@ static int camss_probe(struct platform_device *pdev)
|
||||||
err_register_entities:
|
err_register_entities:
|
||||||
v4l2_device_unregister(&camss->v4l2_dev);
|
v4l2_device_unregister(&camss->v4l2_dev);
|
||||||
err_cleanup:
|
err_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&camss->notifier);
|
v4l2_async_nf_cleanup(&camss->notifier);
|
||||||
err_free:
|
err_free:
|
||||||
kfree(camss);
|
kfree(camss);
|
||||||
|
|
||||||
|
@ -1478,8 +1478,8 @@ static int camss_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct camss *camss = platform_get_drvdata(pdev);
|
struct camss *camss = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&camss->notifier);
|
v4l2_async_nf_unregister(&camss->notifier);
|
||||||
v4l2_async_notifier_cleanup(&camss->notifier);
|
v4l2_async_nf_cleanup(&camss->notifier);
|
||||||
camss_unregister_entities(camss);
|
camss_unregister_entities(camss);
|
||||||
|
|
||||||
if (atomic_read(&camss->ref_count) == 0)
|
if (atomic_read(&camss->ref_count) == 0)
|
||||||
|
|
|
@ -337,9 +337,8 @@ static int rvin_group_parse_of(struct rvin_dev *vin, unsigned int port,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(&vin->group->notifier,
|
asd = v4l2_async_nf_add_fwnode(&vin->group->notifier, fwnode,
|
||||||
fwnode,
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -359,8 +358,8 @@ static void rvin_group_notifier_cleanup(struct rvin_dev *vin)
|
||||||
{
|
{
|
||||||
mutex_lock(&vin->group->lock);
|
mutex_lock(&vin->group->lock);
|
||||||
if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
|
if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
|
||||||
v4l2_async_notifier_unregister(&vin->group->notifier);
|
v4l2_async_nf_unregister(&vin->group->notifier);
|
||||||
v4l2_async_notifier_cleanup(&vin->group->notifier);
|
v4l2_async_nf_cleanup(&vin->group->notifier);
|
||||||
}
|
}
|
||||||
mutex_unlock(&vin->group->lock);
|
mutex_unlock(&vin->group->lock);
|
||||||
}
|
}
|
||||||
|
@ -389,7 +388,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_notifier_init(&vin->group->notifier);
|
v4l2_async_nf_init(&vin->group->notifier);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some subdevices may overlap but the parser function can handle it and
|
* Some subdevices may overlap but the parser function can handle it and
|
||||||
|
@ -413,11 +412,10 @@ static int rvin_group_notifier_init(struct rvin_dev *vin, unsigned int port,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
vin->group->notifier.ops = &rvin_group_notify_ops;
|
vin->group->notifier.ops = &rvin_group_notify_ops;
|
||||||
ret = v4l2_async_notifier_register(&vin->v4l2_dev,
|
ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->group->notifier);
|
||||||
&vin->group->notifier);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
vin_err(vin, "Notifier registration failed\n");
|
vin_err(vin, "Notifier registration failed\n");
|
||||||
v4l2_async_notifier_cleanup(&vin->group->notifier);
|
v4l2_async_nf_cleanup(&vin->group->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,8 +699,8 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(&vin->notifier, fwnode,
|
asd = v4l2_async_nf_add_fwnode(&vin->notifier, fwnode,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -719,15 +717,15 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
|
||||||
|
|
||||||
static void rvin_parallel_cleanup(struct rvin_dev *vin)
|
static void rvin_parallel_cleanup(struct rvin_dev *vin)
|
||||||
{
|
{
|
||||||
v4l2_async_notifier_unregister(&vin->notifier);
|
v4l2_async_nf_unregister(&vin->notifier);
|
||||||
v4l2_async_notifier_cleanup(&vin->notifier);
|
v4l2_async_nf_cleanup(&vin->notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rvin_parallel_init(struct rvin_dev *vin)
|
static int rvin_parallel_init(struct rvin_dev *vin)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&vin->notifier);
|
v4l2_async_nf_init(&vin->notifier);
|
||||||
|
|
||||||
ret = rvin_parallel_parse_of(vin);
|
ret = rvin_parallel_parse_of(vin);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -740,10 +738,10 @@ static int rvin_parallel_init(struct rvin_dev *vin)
|
||||||
to_of_node(vin->parallel.asd->match.fwnode));
|
to_of_node(vin->parallel.asd->match.fwnode));
|
||||||
|
|
||||||
vin->notifier.ops = &rvin_parallel_notify_ops;
|
vin->notifier.ops = &rvin_parallel_notify_ops;
|
||||||
ret = v4l2_async_notifier_register(&vin->v4l2_dev, &vin->notifier);
|
ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
vin_err(vin, "Notifier registration failed\n");
|
vin_err(vin, "Notifier registration failed\n");
|
||||||
v4l2_async_notifier_cleanup(&vin->notifier);
|
v4l2_async_nf_cleanup(&vin->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1026,19 +1026,18 @@ 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_notifier_init(&priv->notifier);
|
v4l2_async_nf_init(&priv->notifier);
|
||||||
priv->notifier.ops = &rcar_csi2_notify_ops;
|
priv->notifier.ops = &rcar_csi2_notify_ops;
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(&priv->notifier, fwnode,
|
asd = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
fwnode_handle_put(fwnode);
|
fwnode_handle_put(fwnode);
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
return PTR_ERR(asd);
|
return PTR_ERR(asd);
|
||||||
|
|
||||||
ret = v4l2_async_subdev_notifier_register(&priv->subdev,
|
ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier);
|
||||||
&priv->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1464,8 +1463,8 @@ static int rcsi2_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
v4l2_async_notifier_unregister(&priv->notifier);
|
v4l2_async_nf_unregister(&priv->notifier);
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1474,8 +1473,8 @@ static int rcsi2_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rcar_csi2 *priv = platform_get_drvdata(pdev);
|
struct rcar_csi2 *priv = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&priv->notifier);
|
v4l2_async_nf_unregister(&priv->notifier);
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
v4l2_async_unregister_subdev(&priv->subdev);
|
v4l2_async_unregister_subdev(&priv->subdev);
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
|
@ -1212,7 +1212,7 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
|
||||||
struct fwnode_handle *fwnode, *ep;
|
struct fwnode_handle *fwnode, *ep;
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
|
||||||
v4l2_async_notifier_init(notifier);
|
v4l2_async_nf_init(notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_next_endpoint(of_fwnode_handle(sdr->dev->of_node),
|
ep = fwnode_graph_get_next_endpoint(of_fwnode_handle(sdr->dev->of_node),
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -1229,8 +1229,8 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(notifier, fwnode,
|
asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
fwnode_handle_put(fwnode);
|
fwnode_handle_put(fwnode);
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
return PTR_ERR(asd);
|
return PTR_ERR(asd);
|
||||||
|
@ -1346,7 +1346,7 @@ static int rcar_drif_sdr_probe(struct rcar_drif_sdr *sdr)
|
||||||
sdr->notifier.ops = &rcar_drif_notify_ops;
|
sdr->notifier.ops = &rcar_drif_notify_ops;
|
||||||
|
|
||||||
/* Register notifier */
|
/* Register notifier */
|
||||||
ret = v4l2_async_notifier_register(&sdr->v4l2_dev, &sdr->notifier);
|
ret = v4l2_async_nf_register(&sdr->v4l2_dev, &sdr->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sdr->dev, "failed: notifier register ret %d\n", ret);
|
dev_err(sdr->dev, "failed: notifier register ret %d\n", ret);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -1355,7 +1355,7 @@ static int rcar_drif_sdr_probe(struct rcar_drif_sdr *sdr)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_cleanup(&sdr->notifier);
|
v4l2_async_nf_cleanup(&sdr->notifier);
|
||||||
error:
|
error:
|
||||||
v4l2_device_unregister(&sdr->v4l2_dev);
|
v4l2_device_unregister(&sdr->v4l2_dev);
|
||||||
|
|
||||||
|
@ -1365,8 +1365,8 @@ static int rcar_drif_sdr_probe(struct rcar_drif_sdr *sdr)
|
||||||
/* V4L2 SDR device remove */
|
/* V4L2 SDR device remove */
|
||||||
static void rcar_drif_sdr_remove(struct rcar_drif_sdr *sdr)
|
static void rcar_drif_sdr_remove(struct rcar_drif_sdr *sdr)
|
||||||
{
|
{
|
||||||
v4l2_async_notifier_unregister(&sdr->notifier);
|
v4l2_async_nf_unregister(&sdr->notifier);
|
||||||
v4l2_async_notifier_cleanup(&sdr->notifier);
|
v4l2_async_nf_cleanup(&sdr->notifier);
|
||||||
v4l2_device_unregister(&sdr->v4l2_dev);
|
v4l2_device_unregister(&sdr->v4l2_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1513,12 +1513,12 @@ static int ceu_parse_platform_data(struct ceu_device *ceudev,
|
||||||
|
|
||||||
/* Setup the ceu subdevice and the async subdevice. */
|
/* Setup the ceu subdevice and the async subdevice. */
|
||||||
async_sd = &pdata->subdevs[i];
|
async_sd = &pdata->subdevs[i];
|
||||||
ceu_sd = v4l2_async_notifier_add_i2c_subdev(&ceudev->notifier,
|
ceu_sd = v4l2_async_nf_add_i2c(&ceudev->notifier,
|
||||||
async_sd->i2c_adapter_id,
|
async_sd->i2c_adapter_id,
|
||||||
async_sd->i2c_address,
|
async_sd->i2c_address,
|
||||||
struct ceu_subdev);
|
struct ceu_subdev);
|
||||||
if (IS_ERR(ceu_sd)) {
|
if (IS_ERR(ceu_sd)) {
|
||||||
v4l2_async_notifier_cleanup(&ceudev->notifier);
|
v4l2_async_nf_cleanup(&ceudev->notifier);
|
||||||
return PTR_ERR(ceu_sd);
|
return PTR_ERR(ceu_sd);
|
||||||
}
|
}
|
||||||
ceu_sd->mbus_flags = async_sd->flags;
|
ceu_sd->mbus_flags = async_sd->flags;
|
||||||
|
@ -1576,9 +1576,9 @@ static int ceu_parse_dt(struct ceu_device *ceudev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup the ceu subdevice and the async subdevice. */
|
/* Setup the ceu subdevice and the async subdevice. */
|
||||||
ceu_sd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
ceu_sd = v4l2_async_nf_add_fwnode_remote(&ceudev->notifier,
|
||||||
&ceudev->notifier, of_fwnode_handle(ep),
|
of_fwnode_handle(ep),
|
||||||
struct ceu_subdev);
|
struct ceu_subdev);
|
||||||
if (IS_ERR(ceu_sd)) {
|
if (IS_ERR(ceu_sd)) {
|
||||||
ret = PTR_ERR(ceu_sd);
|
ret = PTR_ERR(ceu_sd);
|
||||||
goto error_cleanup;
|
goto error_cleanup;
|
||||||
|
@ -1592,7 +1592,7 @@ static int ceu_parse_dt(struct ceu_device *ceudev)
|
||||||
return num_ep;
|
return num_ep;
|
||||||
|
|
||||||
error_cleanup:
|
error_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&ceudev->notifier);
|
v4l2_async_nf_cleanup(&ceudev->notifier);
|
||||||
of_node_put(ep);
|
of_node_put(ep);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1669,7 +1669,7 @@ static int ceu_probe(struct platform_device *pdev)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_pm_disable;
|
goto error_pm_disable;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&ceudev->notifier);
|
v4l2_async_nf_init(&ceudev->notifier);
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
|
if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
|
||||||
ceu_data = of_device_get_match_data(dev);
|
ceu_data = of_device_get_match_data(dev);
|
||||||
|
@ -1691,8 +1691,7 @@ static int ceu_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
ceudev->notifier.v4l2_dev = &ceudev->v4l2_dev;
|
ceudev->notifier.v4l2_dev = &ceudev->v4l2_dev;
|
||||||
ceudev->notifier.ops = &ceu_notify_ops;
|
ceudev->notifier.ops = &ceu_notify_ops;
|
||||||
ret = v4l2_async_notifier_register(&ceudev->v4l2_dev,
|
ret = v4l2_async_nf_register(&ceudev->v4l2_dev, &ceudev->notifier);
|
||||||
&ceudev->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_cleanup;
|
goto error_cleanup;
|
||||||
|
|
||||||
|
@ -1701,7 +1700,7 @@ static int ceu_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_cleanup:
|
error_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&ceudev->notifier);
|
v4l2_async_nf_cleanup(&ceudev->notifier);
|
||||||
error_v4l2_unregister:
|
error_v4l2_unregister:
|
||||||
v4l2_device_unregister(&ceudev->v4l2_dev);
|
v4l2_device_unregister(&ceudev->v4l2_dev);
|
||||||
error_pm_disable:
|
error_pm_disable:
|
||||||
|
@ -1718,9 +1717,9 @@ static int ceu_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
pm_runtime_disable(ceudev->dev);
|
pm_runtime_disable(ceudev->dev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&ceudev->notifier);
|
v4l2_async_nf_unregister(&ceudev->notifier);
|
||||||
|
|
||||||
v4l2_async_notifier_cleanup(&ceudev->notifier);
|
v4l2_async_nf_cleanup(&ceudev->notifier);
|
||||||
|
|
||||||
v4l2_device_unregister(&ceudev->v4l2_dev);
|
v4l2_device_unregister(&ceudev->v4l2_dev);
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,7 @@ static int rkisp1_subdev_notifier(struct rkisp1_device *rkisp1)
|
||||||
unsigned int next_id = 0;
|
unsigned int next_id = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(ntf);
|
v4l2_async_nf_init(ntf);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
struct v4l2_fwnode_endpoint vep = {
|
struct v4l2_fwnode_endpoint vep = {
|
||||||
|
@ -265,8 +265,9 @@ static int rkisp1_subdev_notifier(struct rkisp1_device *rkisp1)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
|
||||||
rk_asd = v4l2_async_notifier_add_fwnode_remote_subdev(ntf, ep,
|
rk_asd = v4l2_async_nf_add_fwnode_remote(ntf, ep,
|
||||||
struct rkisp1_sensor_async);
|
struct
|
||||||
|
rkisp1_sensor_async);
|
||||||
if (IS_ERR(rk_asd)) {
|
if (IS_ERR(rk_asd)) {
|
||||||
ret = PTR_ERR(rk_asd);
|
ret = PTR_ERR(rk_asd);
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
@ -286,16 +287,16 @@ static int rkisp1_subdev_notifier(struct rkisp1_device *rkisp1)
|
||||||
continue;
|
continue;
|
||||||
err_parse:
|
err_parse:
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
v4l2_async_notifier_cleanup(ntf);
|
v4l2_async_nf_cleanup(ntf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (next_id == 0)
|
if (next_id == 0)
|
||||||
dev_dbg(rkisp1->dev, "no remote subdevice found\n");
|
dev_dbg(rkisp1->dev, "no remote subdevice found\n");
|
||||||
ntf->ops = &rkisp1_subdev_notifier_ops;
|
ntf->ops = &rkisp1_subdev_notifier_ops;
|
||||||
ret = v4l2_async_notifier_register(&rkisp1->v4l2_dev, ntf);
|
ret = v4l2_async_nf_register(&rkisp1->v4l2_dev, ntf);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
v4l2_async_notifier_cleanup(ntf);
|
v4l2_async_nf_cleanup(ntf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -542,8 +543,8 @@ static int rkisp1_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rkisp1_device *rkisp1 = platform_get_drvdata(pdev);
|
struct rkisp1_device *rkisp1 = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&rkisp1->notifier);
|
v4l2_async_nf_unregister(&rkisp1->notifier);
|
||||||
v4l2_async_notifier_cleanup(&rkisp1->notifier);
|
v4l2_async_nf_cleanup(&rkisp1->notifier);
|
||||||
|
|
||||||
rkisp1_params_unregister(rkisp1);
|
rkisp1_params_unregister(rkisp1);
|
||||||
rkisp1_stats_unregister(rkisp1);
|
rkisp1_stats_unregister(rkisp1);
|
||||||
|
|
|
@ -1824,11 +1824,11 @@ static int dcmi_graph_init(struct stm32_dcmi *dcmi)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_async_notifier_init(&dcmi->notifier);
|
v4l2_async_nf_init(&dcmi->notifier);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier,
|
||||||
&dcmi->notifier, of_fwnode_handle(ep),
|
of_fwnode_handle(ep),
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
|
|
||||||
of_node_put(ep);
|
of_node_put(ep);
|
||||||
|
|
||||||
|
@ -1839,10 +1839,10 @@ 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_notifier_register(&dcmi->v4l2_dev, &dcmi->notifier);
|
ret = v4l2_async_nf_register(&dcmi->v4l2_dev, &dcmi->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dcmi->dev, "Failed to register notifier\n");
|
dev_err(dcmi->dev, "Failed to register notifier\n");
|
||||||
v4l2_async_notifier_cleanup(&dcmi->notifier);
|
v4l2_async_nf_cleanup(&dcmi->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2060,7 +2060,7 @@ static int dcmi_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_cleanup:
|
err_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&dcmi->notifier);
|
v4l2_async_nf_cleanup(&dcmi->notifier);
|
||||||
err_media_entity_cleanup:
|
err_media_entity_cleanup:
|
||||||
media_entity_cleanup(&dcmi->vdev->entity);
|
media_entity_cleanup(&dcmi->vdev->entity);
|
||||||
err_device_release:
|
err_device_release:
|
||||||
|
@ -2080,8 +2080,8 @@ static int dcmi_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&dcmi->notifier);
|
v4l2_async_nf_unregister(&dcmi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&dcmi->notifier);
|
v4l2_async_nf_cleanup(&dcmi->notifier);
|
||||||
media_entity_cleanup(&dcmi->vdev->entity);
|
media_entity_cleanup(&dcmi->vdev->entity);
|
||||||
v4l2_device_unregister(&dcmi->v4l2_dev);
|
v4l2_device_unregister(&dcmi->v4l2_dev);
|
||||||
media_device_cleanup(&dcmi->mdev);
|
media_device_cleanup(&dcmi->mdev);
|
||||||
|
|
|
@ -122,7 +122,7 @@ static int sun4i_csi_notifier_init(struct sun4i_csi *csi)
|
||||||
struct fwnode_handle *ep;
|
struct fwnode_handle *ep;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&csi->notifier);
|
v4l2_async_nf_init(&csi->notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
|
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
|
@ -135,8 +135,8 @@ static int sun4i_csi_notifier_init(struct sun4i_csi *csi)
|
||||||
|
|
||||||
csi->bus = vep.bus.parallel;
|
csi->bus = vep.bus.parallel;
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(&csi->notifier, ep,
|
asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -244,7 +244,7 @@ static int sun4i_csi_probe(struct platform_device *pdev)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_unregister_media;
|
goto err_unregister_media;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&csi->v4l, &csi->notifier);
|
ret = v4l2_async_nf_register(&csi->v4l, &csi->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(csi->dev, "Couldn't register our notifier.\n");
|
dev_err(csi->dev, "Couldn't register our notifier.\n");
|
||||||
goto err_unregister_media;
|
goto err_unregister_media;
|
||||||
|
@ -268,8 +268,8 @@ static int sun4i_csi_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct sun4i_csi *csi = platform_get_drvdata(pdev);
|
struct sun4i_csi *csi = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&csi->notifier);
|
v4l2_async_nf_unregister(&csi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi->notifier);
|
v4l2_async_nf_cleanup(&csi->notifier);
|
||||||
vb2_video_unregister_device(&csi->vdev);
|
vb2_video_unregister_device(&csi->vdev);
|
||||||
media_device_unregister(&csi->mdev);
|
media_device_unregister(&csi->mdev);
|
||||||
sun4i_csi_dma_unregister(csi);
|
sun4i_csi_dma_unregister(csi);
|
||||||
|
|
|
@ -717,8 +717,8 @@ static int sun6i_csi_fwnode_parse(struct device *dev,
|
||||||
static void sun6i_csi_v4l2_cleanup(struct sun6i_csi *csi)
|
static void sun6i_csi_v4l2_cleanup(struct sun6i_csi *csi)
|
||||||
{
|
{
|
||||||
media_device_unregister(&csi->media_dev);
|
media_device_unregister(&csi->media_dev);
|
||||||
v4l2_async_notifier_unregister(&csi->notifier);
|
v4l2_async_nf_unregister(&csi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi->notifier);
|
v4l2_async_nf_cleanup(&csi->notifier);
|
||||||
sun6i_video_cleanup(&csi->video);
|
sun6i_video_cleanup(&csi->video);
|
||||||
v4l2_device_unregister(&csi->v4l2_dev);
|
v4l2_device_unregister(&csi->v4l2_dev);
|
||||||
v4l2_ctrl_handler_free(&csi->ctrl_handler);
|
v4l2_ctrl_handler_free(&csi->ctrl_handler);
|
||||||
|
@ -737,7 +737,7 @@ static int sun6i_csi_v4l2_init(struct sun6i_csi *csi)
|
||||||
"platform:%s", dev_name(csi->dev));
|
"platform:%s", dev_name(csi->dev));
|
||||||
|
|
||||||
media_device_init(&csi->media_dev);
|
media_device_init(&csi->media_dev);
|
||||||
v4l2_async_notifier_init(&csi->notifier);
|
v4l2_async_nf_init(&csi->notifier);
|
||||||
|
|
||||||
ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 0);
|
ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -759,16 +759,17 @@ static int sun6i_csi_v4l2_init(struct sun6i_csi *csi)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unreg_v4l2;
|
goto unreg_v4l2;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_parse_fwnode_endpoints(csi->dev,
|
ret = v4l2_async_nf_parse_fwnode_endpoints(csi->dev,
|
||||||
&csi->notifier,
|
&csi->notifier,
|
||||||
sizeof(struct v4l2_async_subdev),
|
sizeof(struct
|
||||||
sun6i_csi_fwnode_parse);
|
v4l2_async_subdev),
|
||||||
|
sun6i_csi_fwnode_parse);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto clean_video;
|
goto clean_video;
|
||||||
|
|
||||||
csi->notifier.ops = &sun6i_csi_async_ops;
|
csi->notifier.ops = &sun6i_csi_async_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&csi->v4l2_dev, &csi->notifier);
|
ret = v4l2_async_nf_register(&csi->v4l2_dev, &csi->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(csi->dev, "notifier registration failed\n");
|
dev_err(csi->dev, "notifier registration failed\n");
|
||||||
goto clean_video;
|
goto clean_video;
|
||||||
|
@ -783,7 +784,7 @@ static int sun6i_csi_v4l2_init(struct sun6i_csi *csi)
|
||||||
free_ctrl:
|
free_ctrl:
|
||||||
v4l2_ctrl_handler_free(&csi->ctrl_handler);
|
v4l2_ctrl_handler_free(&csi->ctrl_handler);
|
||||||
clean_media:
|
clean_media:
|
||||||
v4l2_async_notifier_cleanup(&csi->notifier);
|
v4l2_async_nf_cleanup(&csi->notifier);
|
||||||
media_device_cleanup(&csi->media_dev);
|
media_device_cleanup(&csi->media_dev);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -781,7 +781,7 @@ static int cal_async_notifier_register(struct cal_dev *cal)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&cal->notifier);
|
v4l2_async_nf_init(&cal->notifier);
|
||||||
cal->notifier.ops = &cal_async_notifier_ops;
|
cal->notifier.ops = &cal_async_notifier_ops;
|
||||||
|
|
||||||
for (i = 0; i < cal->data->num_csi2_phy; ++i) {
|
for (i = 0; i < cal->data->num_csi2_phy; ++i) {
|
||||||
|
@ -793,9 +793,9 @@ static int cal_async_notifier_register(struct cal_dev *cal)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fwnode = of_fwnode_handle(phy->source_node);
|
fwnode = of_fwnode_handle(phy->source_node);
|
||||||
casd = v4l2_async_notifier_add_fwnode_subdev(&cal->notifier,
|
casd = v4l2_async_nf_add_fwnode(&cal->notifier,
|
||||||
fwnode,
|
fwnode,
|
||||||
struct cal_v4l2_async_subdev);
|
struct cal_v4l2_async_subdev);
|
||||||
if (IS_ERR(casd)) {
|
if (IS_ERR(casd)) {
|
||||||
phy_err(phy, "Failed to add subdev to notifier\n");
|
phy_err(phy, "Failed to add subdev to notifier\n");
|
||||||
ret = PTR_ERR(casd);
|
ret = PTR_ERR(casd);
|
||||||
|
@ -805,7 +805,7 @@ static int cal_async_notifier_register(struct cal_dev *cal)
|
||||||
casd->phy = phy;
|
casd->phy = phy;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&cal->v4l2_dev, &cal->notifier);
|
ret = v4l2_async_nf_register(&cal->v4l2_dev, &cal->notifier);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
cal_err(cal, "Error registering async notifier\n");
|
cal_err(cal, "Error registering async notifier\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -814,14 +814,14 @@ static int cal_async_notifier_register(struct cal_dev *cal)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
v4l2_async_notifier_cleanup(&cal->notifier);
|
v4l2_async_nf_cleanup(&cal->notifier);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cal_async_notifier_unregister(struct cal_dev *cal)
|
static void cal_async_notifier_unregister(struct cal_dev *cal)
|
||||||
{
|
{
|
||||||
v4l2_async_notifier_unregister(&cal->notifier);
|
v4l2_async_nf_unregister(&cal->notifier);
|
||||||
v4l2_async_notifier_cleanup(&cal->notifier);
|
v4l2_async_nf_cleanup(&cal->notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------
|
/* ------------------------------------------------------------------
|
||||||
|
|
|
@ -360,7 +360,7 @@ static int video_mux_async_register(struct video_mux *vmux,
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&vmux->notifier);
|
v4l2_async_nf_init(&vmux->notifier);
|
||||||
|
|
||||||
for (i = 0; i < num_input_pads; i++) {
|
for (i = 0; i < num_input_pads; i++) {
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
@ -380,8 +380,8 @@ static int video_mux_async_register(struct video_mux *vmux,
|
||||||
}
|
}
|
||||||
fwnode_handle_put(remote_ep);
|
fwnode_handle_put(remote_ep);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&vmux->notifier, ep,
|
||||||
&vmux->notifier, ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
|
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
|
|
||||||
|
@ -395,8 +395,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_notifier_register(&vmux->subdev,
|
ret = v4l2_async_subdev_nf_register(&vmux->subdev, &vmux->notifier);
|
||||||
&vmux->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -477,8 +476,8 @@ static int video_mux_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
ret = video_mux_async_register(vmux, num_pads - 1);
|
ret = video_mux_async_register(vmux, num_pads - 1);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
v4l2_async_notifier_unregister(&vmux->notifier);
|
v4l2_async_nf_unregister(&vmux->notifier);
|
||||||
v4l2_async_notifier_cleanup(&vmux->notifier);
|
v4l2_async_nf_cleanup(&vmux->notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -489,8 +488,8 @@ static int video_mux_remove(struct platform_device *pdev)
|
||||||
struct video_mux *vmux = platform_get_drvdata(pdev);
|
struct video_mux *vmux = platform_get_drvdata(pdev);
|
||||||
struct v4l2_subdev *sd = &vmux->subdev;
|
struct v4l2_subdev *sd = &vmux->subdev;
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&vmux->notifier);
|
v4l2_async_nf_unregister(&vmux->notifier);
|
||||||
v4l2_async_notifier_cleanup(&vmux->notifier);
|
v4l2_async_nf_cleanup(&vmux->notifier);
|
||||||
v4l2_async_unregister_subdev(sd);
|
v4l2_async_unregister_subdev(sd);
|
||||||
media_entity_cleanup(&sd->entity);
|
media_entity_cleanup(&sd->entity);
|
||||||
|
|
||||||
|
|
|
@ -382,9 +382,8 @@ static int xvip_graph_parse_one(struct xvip_composite_device *xdev,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
xge = v4l2_async_notifier_add_fwnode_subdev(
|
xge = v4l2_async_nf_add_fwnode(&xdev->notifier, remote,
|
||||||
&xdev->notifier, remote,
|
struct xvip_graph_entity);
|
||||||
struct xvip_graph_entity);
|
|
||||||
fwnode_handle_put(remote);
|
fwnode_handle_put(remote);
|
||||||
if (IS_ERR(xge)) {
|
if (IS_ERR(xge)) {
|
||||||
ret = PTR_ERR(xge);
|
ret = PTR_ERR(xge);
|
||||||
|
@ -395,7 +394,7 @@ static int xvip_graph_parse_one(struct xvip_composite_device *xdev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_notifier_cleanup:
|
err_notifier_cleanup:
|
||||||
v4l2_async_notifier_cleanup(&xdev->notifier);
|
v4l2_async_nf_cleanup(&xdev->notifier);
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +419,7 @@ static int xvip_graph_parse(struct xvip_composite_device *xdev)
|
||||||
entity = to_xvip_entity(asd);
|
entity = to_xvip_entity(asd);
|
||||||
ret = xvip_graph_parse_one(xdev, entity->asd.match.fwnode);
|
ret = xvip_graph_parse_one(xdev, entity->asd.match.fwnode);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
v4l2_async_notifier_cleanup(&xdev->notifier);
|
v4l2_async_nf_cleanup(&xdev->notifier);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -496,8 +495,8 @@ static void xvip_graph_cleanup(struct xvip_composite_device *xdev)
|
||||||
struct xvip_dma *dmap;
|
struct xvip_dma *dmap;
|
||||||
struct xvip_dma *dma;
|
struct xvip_dma *dma;
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&xdev->notifier);
|
v4l2_async_nf_unregister(&xdev->notifier);
|
||||||
v4l2_async_notifier_cleanup(&xdev->notifier);
|
v4l2_async_nf_cleanup(&xdev->notifier);
|
||||||
|
|
||||||
list_for_each_entry_safe(dma, dmap, &xdev->dmas, list) {
|
list_for_each_entry_safe(dma, dmap, &xdev->dmas, list) {
|
||||||
xvip_dma_cleanup(dma);
|
xvip_dma_cleanup(dma);
|
||||||
|
@ -532,7 +531,7 @@ static int xvip_graph_init(struct xvip_composite_device *xdev)
|
||||||
/* Register the subdevices notifier. */
|
/* Register the subdevices notifier. */
|
||||||
xdev->notifier.ops = &xvip_graph_notify_ops;
|
xdev->notifier.ops = &xvip_graph_notify_ops;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_register(&xdev->v4l2_dev, &xdev->notifier);
|
ret = v4l2_async_nf_register(&xdev->v4l2_dev, &xdev->notifier);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(xdev->dev, "notifier registration failed\n");
|
dev_err(xdev->dev, "notifier registration failed\n");
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -596,7 +595,7 @@ static int xvip_composite_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
xdev->dev = &pdev->dev;
|
xdev->dev = &pdev->dev;
|
||||||
INIT_LIST_HEAD(&xdev->dmas);
|
INIT_LIST_HEAD(&xdev->dmas);
|
||||||
v4l2_async_notifier_init(&xdev->notifier);
|
v4l2_async_nf_init(&xdev->notifier);
|
||||||
|
|
||||||
ret = xvip_composite_v4l2_init(xdev);
|
ret = xvip_composite_v4l2_init(xdev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
#include <media/v4l2-fwnode.h>
|
#include <media/v4l2-fwnode.h>
|
||||||
#include <media/v4l2-subdev.h>
|
#include <media/v4l2-subdev.h>
|
||||||
|
|
||||||
static int v4l2_async_notifier_call_bound(struct v4l2_async_notifier *n,
|
static int v4l2_async_nf_call_bound(struct v4l2_async_notifier *n,
|
||||||
struct v4l2_subdev *subdev,
|
struct v4l2_subdev *subdev,
|
||||||
struct v4l2_async_subdev *asd)
|
struct v4l2_async_subdev *asd)
|
||||||
{
|
{
|
||||||
if (!n->ops || !n->ops->bound)
|
if (!n->ops || !n->ops->bound)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -34,9 +34,9 @@ static int v4l2_async_notifier_call_bound(struct v4l2_async_notifier *n,
|
||||||
return n->ops->bound(n, subdev, asd);
|
return n->ops->bound(n, subdev, asd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void v4l2_async_notifier_call_unbind(struct v4l2_async_notifier *n,
|
static void v4l2_async_nf_call_unbind(struct v4l2_async_notifier *n,
|
||||||
struct v4l2_subdev *subdev,
|
struct v4l2_subdev *subdev,
|
||||||
struct v4l2_async_subdev *asd)
|
struct v4l2_async_subdev *asd)
|
||||||
{
|
{
|
||||||
if (!n->ops || !n->ops->unbind)
|
if (!n->ops || !n->ops->unbind)
|
||||||
return;
|
return;
|
||||||
|
@ -44,7 +44,7 @@ static void v4l2_async_notifier_call_unbind(struct v4l2_async_notifier *n,
|
||||||
n->ops->unbind(n, subdev, asd);
|
n->ops->unbind(n, subdev, asd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int v4l2_async_notifier_call_complete(struct v4l2_async_notifier *n)
|
static int v4l2_async_nf_call_complete(struct v4l2_async_notifier *n)
|
||||||
{
|
{
|
||||||
if (!n->ops || !n->ops->complete)
|
if (!n->ops || !n->ops->complete)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -215,7 +215,7 @@ v4l2_async_find_subdev_notifier(struct v4l2_subdev *sd)
|
||||||
|
|
||||||
/* Get v4l2_device related to the notifier if one can be found. */
|
/* Get v4l2_device related to the notifier if one can be found. */
|
||||||
static struct v4l2_device *
|
static struct v4l2_device *
|
||||||
v4l2_async_notifier_find_v4l2_dev(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_find_v4l2_dev(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
while (notifier->parent)
|
while (notifier->parent)
|
||||||
notifier = notifier->parent;
|
notifier = notifier->parent;
|
||||||
|
@ -227,7 +227,7 @@ v4l2_async_notifier_find_v4l2_dev(struct v4l2_async_notifier *notifier)
|
||||||
* Return true if all child sub-device notifiers are complete, false otherwise.
|
* Return true if all child sub-device notifiers are complete, false otherwise.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
v4l2_async_notifier_can_complete(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_can_complete(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd;
|
struct v4l2_subdev *sd;
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ v4l2_async_notifier_can_complete(struct v4l2_async_notifier *notifier)
|
||||||
v4l2_async_find_subdev_notifier(sd);
|
v4l2_async_find_subdev_notifier(sd);
|
||||||
|
|
||||||
if (subdev_notifier &&
|
if (subdev_notifier &&
|
||||||
!v4l2_async_notifier_can_complete(subdev_notifier))
|
!v4l2_async_nf_can_complete(subdev_notifier))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ v4l2_async_notifier_can_complete(struct v4l2_async_notifier *notifier)
|
||||||
* sub-devices have been bound; v4l2_device is also available then.
|
* sub-devices have been bound; v4l2_device is also available then.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
v4l2_async_notifier_try_complete(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_try_complete(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
/* Quick check whether there are still more sub-devices here. */
|
/* Quick check whether there are still more sub-devices here. */
|
||||||
if (!list_empty(¬ifier->waiting))
|
if (!list_empty(¬ifier->waiting))
|
||||||
|
@ -266,14 +266,14 @@ v4l2_async_notifier_try_complete(struct v4l2_async_notifier *notifier)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Is everything ready? */
|
/* Is everything ready? */
|
||||||
if (!v4l2_async_notifier_can_complete(notifier))
|
if (!v4l2_async_nf_can_complete(notifier))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return v4l2_async_notifier_call_complete(notifier);
|
return v4l2_async_nf_call_complete(notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
v4l2_async_notifier_try_all_subdevs(struct v4l2_async_notifier *notifier);
|
v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
|
static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_device *v4l2_dev,
|
struct v4l2_device *v4l2_dev,
|
||||||
|
@ -287,7 +287,7 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_call_bound(notifier, sd, asd);
|
ret = v4l2_async_nf_call_bound(notifier, sd, asd);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
v4l2_device_unregister_subdev(sd);
|
v4l2_device_unregister_subdev(sd);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -315,15 +315,15 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
|
||||||
*/
|
*/
|
||||||
subdev_notifier->parent = notifier;
|
subdev_notifier->parent = notifier;
|
||||||
|
|
||||||
return v4l2_async_notifier_try_all_subdevs(subdev_notifier);
|
return v4l2_async_nf_try_all_subdevs(subdev_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test all async sub-devices in a notifier for a match. */
|
/* Test all async sub-devices in a notifier for a match. */
|
||||||
static int
|
static int
|
||||||
v4l2_async_notifier_try_all_subdevs(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
struct v4l2_device *v4l2_dev =
|
struct v4l2_device *v4l2_dev =
|
||||||
v4l2_async_notifier_find_v4l2_dev(notifier);
|
v4l2_async_nf_find_v4l2_dev(notifier);
|
||||||
struct v4l2_subdev *sd;
|
struct v4l2_subdev *sd;
|
||||||
|
|
||||||
if (!v4l2_dev)
|
if (!v4l2_dev)
|
||||||
|
@ -367,7 +367,7 @@ static void v4l2_async_cleanup(struct v4l2_subdev *sd)
|
||||||
|
|
||||||
/* Unbind all sub-devices in the notifier tree. */
|
/* Unbind all sub-devices in the notifier tree. */
|
||||||
static void
|
static void
|
||||||
v4l2_async_notifier_unbind_all_subdevs(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_unbind_all_subdevs(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd, *tmp;
|
struct v4l2_subdev *sd, *tmp;
|
||||||
|
|
||||||
|
@ -376,9 +376,9 @@ v4l2_async_notifier_unbind_all_subdevs(struct v4l2_async_notifier *notifier)
|
||||||
v4l2_async_find_subdev_notifier(sd);
|
v4l2_async_find_subdev_notifier(sd);
|
||||||
|
|
||||||
if (subdev_notifier)
|
if (subdev_notifier)
|
||||||
v4l2_async_notifier_unbind_all_subdevs(subdev_notifier);
|
v4l2_async_nf_unbind_all_subdevs(subdev_notifier);
|
||||||
|
|
||||||
v4l2_async_notifier_call_unbind(notifier, sd, sd->asd);
|
v4l2_async_nf_call_unbind(notifier, sd, sd->asd);
|
||||||
v4l2_async_cleanup(sd);
|
v4l2_async_cleanup(sd);
|
||||||
|
|
||||||
list_move(&sd->async_list, &subdev_list);
|
list_move(&sd->async_list, &subdev_list);
|
||||||
|
@ -389,8 +389,8 @@ v4l2_async_notifier_unbind_all_subdevs(struct v4l2_async_notifier *notifier)
|
||||||
|
|
||||||
/* See if an async sub-device can be found in a notifier's lists. */
|
/* See if an async sub-device can be found in a notifier's lists. */
|
||||||
static bool
|
static bool
|
||||||
__v4l2_async_notifier_has_async_subdev(struct v4l2_async_notifier *notifier,
|
__v4l2_async_nf_has_async_subdev(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd)
|
struct v4l2_async_subdev *asd)
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd_y;
|
struct v4l2_async_subdev *asd_y;
|
||||||
struct v4l2_subdev *sd;
|
struct v4l2_subdev *sd;
|
||||||
|
@ -416,9 +416,8 @@ __v4l2_async_notifier_has_async_subdev(struct v4l2_async_notifier *notifier,
|
||||||
* If @this_index < 0, search the notifier's entire @asd_list.
|
* If @this_index < 0, search the notifier's entire @asd_list.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
v4l2_async_notifier_has_async_subdev(struct v4l2_async_notifier *notifier,
|
v4l2_async_nf_has_async_subdev(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd,
|
struct v4l2_async_subdev *asd, int this_index)
|
||||||
int this_index)
|
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd_y;
|
struct v4l2_async_subdev *asd_y;
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
@ -435,15 +434,15 @@ v4l2_async_notifier_has_async_subdev(struct v4l2_async_notifier *notifier,
|
||||||
|
|
||||||
/* Check that an asd does not exist in other notifiers. */
|
/* Check that an asd does not exist in other notifiers. */
|
||||||
list_for_each_entry(notifier, ¬ifier_list, list)
|
list_for_each_entry(notifier, ¬ifier_list, list)
|
||||||
if (__v4l2_async_notifier_has_async_subdev(notifier, asd))
|
if (__v4l2_async_nf_has_async_subdev(notifier, asd))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int v4l2_async_notifier_asd_valid(struct v4l2_async_notifier *notifier,
|
static int v4l2_async_nf_asd_valid(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd,
|
struct v4l2_async_subdev *asd,
|
||||||
int this_index)
|
int this_index)
|
||||||
{
|
{
|
||||||
struct device *dev =
|
struct device *dev =
|
||||||
notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL;
|
notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL;
|
||||||
|
@ -454,8 +453,7 @@ static int v4l2_async_notifier_asd_valid(struct v4l2_async_notifier *notifier,
|
||||||
switch (asd->match_type) {
|
switch (asd->match_type) {
|
||||||
case V4L2_ASYNC_MATCH_I2C:
|
case V4L2_ASYNC_MATCH_I2C:
|
||||||
case V4L2_ASYNC_MATCH_FWNODE:
|
case V4L2_ASYNC_MATCH_FWNODE:
|
||||||
if (v4l2_async_notifier_has_async_subdev(notifier, asd,
|
if (v4l2_async_nf_has_async_subdev(notifier, asd, this_index)) {
|
||||||
this_index)) {
|
|
||||||
dev_dbg(dev, "subdev descriptor already listed in this or other notifiers\n");
|
dev_dbg(dev, "subdev descriptor already listed in this or other notifiers\n");
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
|
@ -469,13 +467,13 @@ static int v4l2_async_notifier_asd_valid(struct v4l2_async_notifier *notifier,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void v4l2_async_notifier_init(struct v4l2_async_notifier *notifier)
|
void v4l2_async_nf_init(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
INIT_LIST_HEAD(¬ifier->asd_list);
|
INIT_LIST_HEAD(¬ifier->asd_list);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(v4l2_async_notifier_init);
|
EXPORT_SYMBOL(v4l2_async_nf_init);
|
||||||
|
|
||||||
static int __v4l2_async_notifier_register(struct v4l2_async_notifier *notifier)
|
static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
int ret, i = 0;
|
int ret, i = 0;
|
||||||
|
@ -486,18 +484,18 @@ static int __v4l2_async_notifier_register(struct v4l2_async_notifier *notifier)
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
list_for_each_entry(asd, ¬ifier->asd_list, asd_list) {
|
list_for_each_entry(asd, ¬ifier->asd_list, asd_list) {
|
||||||
ret = v4l2_async_notifier_asd_valid(notifier, asd, i++);
|
ret = v4l2_async_nf_asd_valid(notifier, asd, i++);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
|
|
||||||
list_add_tail(&asd->list, ¬ifier->waiting);
|
list_add_tail(&asd->list, ¬ifier->waiting);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = v4l2_async_notifier_try_all_subdevs(notifier);
|
ret = v4l2_async_nf_try_all_subdevs(notifier);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_unbind;
|
goto err_unbind;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_try_complete(notifier);
|
ret = v4l2_async_nf_try_complete(notifier);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_unbind;
|
goto err_unbind;
|
||||||
|
|
||||||
|
@ -512,7 +510,7 @@ static int __v4l2_async_notifier_register(struct v4l2_async_notifier *notifier)
|
||||||
/*
|
/*
|
||||||
* On failure, unbind all sub-devices registered through this notifier.
|
* On failure, unbind all sub-devices registered through this notifier.
|
||||||
*/
|
*/
|
||||||
v4l2_async_notifier_unbind_all_subdevs(notifier);
|
v4l2_async_nf_unbind_all_subdevs(notifier);
|
||||||
|
|
||||||
err_unlock:
|
err_unlock:
|
||||||
mutex_unlock(&list_lock);
|
mutex_unlock(&list_lock);
|
||||||
|
@ -520,8 +518,8 @@ static int __v4l2_async_notifier_register(struct v4l2_async_notifier *notifier)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
|
int v4l2_async_nf_register(struct v4l2_device *v4l2_dev,
|
||||||
struct v4l2_async_notifier *notifier)
|
struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -530,16 +528,16 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
|
||||||
|
|
||||||
notifier->v4l2_dev = v4l2_dev;
|
notifier->v4l2_dev = v4l2_dev;
|
||||||
|
|
||||||
ret = __v4l2_async_notifier_register(notifier);
|
ret = __v4l2_async_nf_register(notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
notifier->v4l2_dev = NULL;
|
notifier->v4l2_dev = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(v4l2_async_notifier_register);
|
EXPORT_SYMBOL(v4l2_async_nf_register);
|
||||||
|
|
||||||
int v4l2_async_subdev_notifier_register(struct v4l2_subdev *sd,
|
int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd,
|
||||||
struct v4l2_async_notifier *notifier)
|
struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -548,21 +546,21 @@ int v4l2_async_subdev_notifier_register(struct v4l2_subdev *sd,
|
||||||
|
|
||||||
notifier->sd = sd;
|
notifier->sd = sd;
|
||||||
|
|
||||||
ret = __v4l2_async_notifier_register(notifier);
|
ret = __v4l2_async_nf_register(notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
notifier->sd = NULL;
|
notifier->sd = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(v4l2_async_subdev_notifier_register);
|
EXPORT_SYMBOL(v4l2_async_subdev_nf_register);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
|
__v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
if (!notifier || (!notifier->v4l2_dev && !notifier->sd))
|
if (!notifier || (!notifier->v4l2_dev && !notifier->sd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
v4l2_async_notifier_unbind_all_subdevs(notifier);
|
v4l2_async_nf_unbind_all_subdevs(notifier);
|
||||||
|
|
||||||
notifier->sd = NULL;
|
notifier->sd = NULL;
|
||||||
notifier->v4l2_dev = NULL;
|
notifier->v4l2_dev = NULL;
|
||||||
|
@ -570,17 +568,17 @@ __v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
|
||||||
list_del(¬ifier->list);
|
list_del(¬ifier->list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
|
void v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
__v4l2_async_notifier_unregister(notifier);
|
__v4l2_async_nf_unregister(notifier);
|
||||||
|
|
||||||
mutex_unlock(&list_lock);
|
mutex_unlock(&list_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(v4l2_async_notifier_unregister);
|
EXPORT_SYMBOL(v4l2_async_nf_unregister);
|
||||||
|
|
||||||
static void __v4l2_async_notifier_cleanup(struct v4l2_async_notifier *notifier)
|
static void __v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd, *tmp;
|
struct v4l2_async_subdev *asd, *tmp;
|
||||||
|
|
||||||
|
@ -601,24 +599,24 @@ static void __v4l2_async_notifier_cleanup(struct v4l2_async_notifier *notifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void v4l2_async_notifier_cleanup(struct v4l2_async_notifier *notifier)
|
void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
__v4l2_async_notifier_cleanup(notifier);
|
__v4l2_async_nf_cleanup(notifier);
|
||||||
|
|
||||||
mutex_unlock(&list_lock);
|
mutex_unlock(&list_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_async_notifier_cleanup);
|
EXPORT_SYMBOL_GPL(v4l2_async_nf_cleanup);
|
||||||
|
|
||||||
int __v4l2_async_notifier_add_subdev(struct v4l2_async_notifier *notifier,
|
int __v4l2_async_nf_add_subdev(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd)
|
struct v4l2_async_subdev *asd)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
ret = v4l2_async_notifier_asd_valid(notifier, asd, -1);
|
ret = v4l2_async_nf_asd_valid(notifier, asd, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
|
@ -628,12 +626,12 @@ int __v4l2_async_notifier_add_subdev(struct v4l2_async_notifier *notifier,
|
||||||
mutex_unlock(&list_lock);
|
mutex_unlock(&list_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__v4l2_async_notifier_add_subdev);
|
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_subdev);
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
|
__v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
|
||||||
struct fwnode_handle *fwnode,
|
struct fwnode_handle *fwnode,
|
||||||
unsigned int asd_struct_size)
|
unsigned int asd_struct_size)
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -645,7 +643,7 @@ __v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
|
||||||
asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
|
asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
|
||||||
asd->match.fwnode = fwnode_handle_get(fwnode);
|
asd->match.fwnode = fwnode_handle_get(fwnode);
|
||||||
|
|
||||||
ret = __v4l2_async_notifier_add_subdev(notifier, asd);
|
ret = __v4l2_async_nf_add_subdev(notifier, asd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
fwnode_handle_put(fwnode);
|
fwnode_handle_put(fwnode);
|
||||||
kfree(asd);
|
kfree(asd);
|
||||||
|
@ -654,12 +652,12 @@ __v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
|
||||||
|
|
||||||
return asd;
|
return asd;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__v4l2_async_notifier_add_fwnode_subdev);
|
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode);
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif,
|
__v4l2_async_nf_add_fwnode_remote(struct v4l2_async_notifier *notif,
|
||||||
struct fwnode_handle *endpoint,
|
struct fwnode_handle *endpoint,
|
||||||
unsigned int asd_struct_size)
|
unsigned int asd_struct_size)
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
struct fwnode_handle *remote;
|
struct fwnode_handle *remote;
|
||||||
|
@ -668,21 +666,19 @@ __v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif
|
||||||
if (!remote)
|
if (!remote)
|
||||||
return ERR_PTR(-ENOTCONN);
|
return ERR_PTR(-ENOTCONN);
|
||||||
|
|
||||||
asd = __v4l2_async_notifier_add_fwnode_subdev(notif, remote,
|
asd = __v4l2_async_nf_add_fwnode(notif, remote, asd_struct_size);
|
||||||
asd_struct_size);
|
|
||||||
/*
|
/*
|
||||||
* Calling __v4l2_async_notifier_add_fwnode_subdev grabs a refcount,
|
* Calling __v4l2_async_nf_add_fwnode grabs a refcount,
|
||||||
* so drop the one we got in fwnode_graph_get_remote_port_parent.
|
* so drop the one we got in fwnode_graph_get_remote_port_parent.
|
||||||
*/
|
*/
|
||||||
fwnode_handle_put(remote);
|
fwnode_handle_put(remote);
|
||||||
return asd;
|
return asd;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__v4l2_async_notifier_add_fwnode_remote_subdev);
|
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode_remote);
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
|
__v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier, int adapter_id,
|
||||||
int adapter_id, unsigned short address,
|
unsigned short address, unsigned int asd_struct_size)
|
||||||
unsigned int asd_struct_size)
|
|
||||||
{
|
{
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -695,7 +691,7 @@ __v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
|
||||||
asd->match.i2c.adapter_id = adapter_id;
|
asd->match.i2c.adapter_id = adapter_id;
|
||||||
asd->match.i2c.address = address;
|
asd->match.i2c.address = address;
|
||||||
|
|
||||||
ret = __v4l2_async_notifier_add_subdev(notifier, asd);
|
ret = __v4l2_async_nf_add_subdev(notifier, asd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kfree(asd);
|
kfree(asd);
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
|
@ -703,7 +699,7 @@ __v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
|
||||||
|
|
||||||
return asd;
|
return asd;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__v4l2_async_notifier_add_i2c_subdev);
|
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_i2c);
|
||||||
|
|
||||||
int v4l2_async_register_subdev(struct v4l2_subdev *sd)
|
int v4l2_async_register_subdev(struct v4l2_subdev *sd)
|
||||||
{
|
{
|
||||||
|
@ -725,7 +721,7 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
|
||||||
|
|
||||||
list_for_each_entry(notifier, ¬ifier_list, list) {
|
list_for_each_entry(notifier, ¬ifier_list, list) {
|
||||||
struct v4l2_device *v4l2_dev =
|
struct v4l2_device *v4l2_dev =
|
||||||
v4l2_async_notifier_find_v4l2_dev(notifier);
|
v4l2_async_nf_find_v4l2_dev(notifier);
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
|
||||||
if (!v4l2_dev)
|
if (!v4l2_dev)
|
||||||
|
@ -739,7 +735,7 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_unbind;
|
goto err_unbind;
|
||||||
|
|
||||||
ret = v4l2_async_notifier_try_complete(notifier);
|
ret = v4l2_async_nf_try_complete(notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_unbind;
|
goto err_unbind;
|
||||||
|
|
||||||
|
@ -761,10 +757,10 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
|
||||||
*/
|
*/
|
||||||
subdev_notifier = v4l2_async_find_subdev_notifier(sd);
|
subdev_notifier = v4l2_async_find_subdev_notifier(sd);
|
||||||
if (subdev_notifier)
|
if (subdev_notifier)
|
||||||
v4l2_async_notifier_unbind_all_subdevs(subdev_notifier);
|
v4l2_async_nf_unbind_all_subdevs(subdev_notifier);
|
||||||
|
|
||||||
if (sd->asd)
|
if (sd->asd)
|
||||||
v4l2_async_notifier_call_unbind(notifier, sd, sd->asd);
|
v4l2_async_nf_call_unbind(notifier, sd, sd->asd);
|
||||||
v4l2_async_cleanup(sd);
|
v4l2_async_cleanup(sd);
|
||||||
|
|
||||||
mutex_unlock(&list_lock);
|
mutex_unlock(&list_lock);
|
||||||
|
@ -780,8 +776,8 @@ void v4l2_async_unregister_subdev(struct v4l2_subdev *sd)
|
||||||
|
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
__v4l2_async_notifier_unregister(sd->subdev_notifier);
|
__v4l2_async_nf_unregister(sd->subdev_notifier);
|
||||||
__v4l2_async_notifier_cleanup(sd->subdev_notifier);
|
__v4l2_async_nf_cleanup(sd->subdev_notifier);
|
||||||
kfree(sd->subdev_notifier);
|
kfree(sd->subdev_notifier);
|
||||||
sd->subdev_notifier = NULL;
|
sd->subdev_notifier = NULL;
|
||||||
|
|
||||||
|
@ -790,7 +786,7 @@ void v4l2_async_unregister_subdev(struct v4l2_subdev *sd)
|
||||||
|
|
||||||
list_add(&sd->asd->list, ¬ifier->waiting);
|
list_add(&sd->asd->list, ¬ifier->waiting);
|
||||||
|
|
||||||
v4l2_async_notifier_call_unbind(notifier, sd, sd->asd);
|
v4l2_async_nf_call_unbind(notifier, sd, sd->asd);
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_async_cleanup(sd);
|
v4l2_async_cleanup(sd);
|
||||||
|
@ -825,7 +821,7 @@ static void print_waiting_subdev(struct seq_file *s,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
v4l2_async_notifier_name(struct v4l2_async_notifier *notifier)
|
v4l2_async_nf_name(struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
if (notifier->v4l2_dev)
|
if (notifier->v4l2_dev)
|
||||||
return notifier->v4l2_dev->name;
|
return notifier->v4l2_dev->name;
|
||||||
|
@ -843,7 +839,7 @@ static int pending_subdevs_show(struct seq_file *s, void *data)
|
||||||
mutex_lock(&list_lock);
|
mutex_lock(&list_lock);
|
||||||
|
|
||||||
list_for_each_entry(notif, ¬ifier_list, list) {
|
list_for_each_entry(notif, ¬ifier_list, list) {
|
||||||
seq_printf(s, "%s:\n", v4l2_async_notifier_name(notif));
|
seq_printf(s, "%s:\n", v4l2_async_nf_name(notif));
|
||||||
list_for_each_entry(asd, ¬if->waiting, list)
|
list_for_each_entry(asd, ¬if->waiting, list)
|
||||||
print_waiting_subdev(s, asd);
|
print_waiting_subdev(s, asd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -780,11 +780,11 @@ int v4l2_fwnode_device_parse(struct device *dev,
|
||||||
EXPORT_SYMBOL_GPL(v4l2_fwnode_device_parse);
|
EXPORT_SYMBOL_GPL(v4l2_fwnode_device_parse);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
v4l2_async_notifier_fwnode_parse_endpoint(struct device *dev,
|
v4l2_async_nf_fwnode_parse_endpoint(struct device *dev,
|
||||||
struct v4l2_async_notifier *notifier,
|
struct v4l2_async_notifier *notifier,
|
||||||
struct fwnode_handle *endpoint,
|
struct fwnode_handle *endpoint,
|
||||||
unsigned int asd_struct_size,
|
unsigned int asd_struct_size,
|
||||||
parse_endpoint_func parse_endpoint)
|
parse_endpoint_func parse_endpoint)
|
||||||
{
|
{
|
||||||
struct v4l2_fwnode_endpoint vep = { .bus_type = 0 };
|
struct v4l2_fwnode_endpoint vep = { .bus_type = 0 };
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
@ -822,7 +822,7 @@ v4l2_async_notifier_fwnode_parse_endpoint(struct device *dev,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
ret = __v4l2_async_notifier_add_subdev(notifier, asd);
|
ret = __v4l2_async_nf_add_subdev(notifier, asd);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
/* not an error if asd already exists */
|
/* not an error if asd already exists */
|
||||||
if (ret == -EEXIST)
|
if (ret == -EEXIST)
|
||||||
|
@ -840,12 +840,11 @@ v4l2_async_notifier_fwnode_parse_endpoint(struct device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
__v4l2_async_notifier_parse_fwnode_ep(struct device *dev,
|
__v4l2_async_nf_parse_fwnode_ep(struct device *dev,
|
||||||
struct v4l2_async_notifier *notifier,
|
struct v4l2_async_notifier *notifier,
|
||||||
size_t asd_struct_size,
|
size_t asd_struct_size, unsigned int port,
|
||||||
unsigned int port,
|
bool has_port,
|
||||||
bool has_port,
|
parse_endpoint_func parse_endpoint)
|
||||||
parse_endpoint_func parse_endpoint)
|
|
||||||
{
|
{
|
||||||
struct fwnode_handle *fwnode;
|
struct fwnode_handle *fwnode;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -874,11 +873,10 @@ __v4l2_async_notifier_parse_fwnode_ep(struct device *dev,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = v4l2_async_notifier_fwnode_parse_endpoint(dev,
|
ret = v4l2_async_nf_fwnode_parse_endpoint(dev, notifier,
|
||||||
notifier,
|
fwnode,
|
||||||
fwnode,
|
asd_struct_size,
|
||||||
asd_struct_size,
|
parse_endpoint);
|
||||||
parse_endpoint);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -889,16 +887,15 @@ __v4l2_async_notifier_parse_fwnode_ep(struct device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
v4l2_async_notifier_parse_fwnode_endpoints(struct device *dev,
|
v4l2_async_nf_parse_fwnode_endpoints(struct device *dev,
|
||||||
struct v4l2_async_notifier *notifier,
|
struct v4l2_async_notifier *notifier,
|
||||||
size_t asd_struct_size,
|
size_t asd_struct_size,
|
||||||
parse_endpoint_func parse_endpoint)
|
parse_endpoint_func parse_endpoint)
|
||||||
{
|
{
|
||||||
return __v4l2_async_notifier_parse_fwnode_ep(dev, notifier,
|
return __v4l2_async_nf_parse_fwnode_ep(dev, notifier, asd_struct_size,
|
||||||
asd_struct_size, 0,
|
0, false, parse_endpoint);
|
||||||
false, parse_endpoint);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_async_notifier_parse_fwnode_endpoints);
|
EXPORT_SYMBOL_GPL(v4l2_async_nf_parse_fwnode_endpoints);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* v4l2_fwnode_reference_parse - parse references for async sub-devices
|
* v4l2_fwnode_reference_parse - parse references for async sub-devices
|
||||||
|
@ -942,9 +939,8 @@ static int v4l2_fwnode_reference_parse(struct device *dev,
|
||||||
index++) {
|
index++) {
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(notifier,
|
asd = v4l2_async_nf_add_fwnode(notifier, args.fwnode,
|
||||||
args.fwnode,
|
struct v4l2_async_subdev);
|
||||||
struct v4l2_async_subdev);
|
|
||||||
fwnode_handle_put(args.fwnode);
|
fwnode_handle_put(args.fwnode);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
/* not an error if asd already exists */
|
/* not an error if asd already exists */
|
||||||
|
@ -1243,8 +1239,8 @@ v4l2_fwnode_reference_parse_int_props(struct device *dev,
|
||||||
index++) {
|
index++) {
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(notifier, fwnode,
|
asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
fwnode_handle_put(fwnode);
|
fwnode_handle_put(fwnode);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
|
@ -1260,7 +1256,7 @@ v4l2_fwnode_reference_parse_int_props(struct device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_parse_fwnode_sensor - parse common references on
|
* v4l2_async_nf_parse_fwnode_sensor - parse common references on
|
||||||
* sensors for async sub-devices
|
* sensors for async sub-devices
|
||||||
* @dev: the device node the properties of which are parsed for references
|
* @dev: the device node the properties of which are parsed for references
|
||||||
* @notifier: the async notifier where the async subdevs will be added
|
* @notifier: the async notifier where the async subdevs will be added
|
||||||
|
@ -1269,7 +1265,7 @@ v4l2_fwnode_reference_parse_int_props(struct device *dev,
|
||||||
* sensor and set up async sub-devices for them.
|
* sensor and set up async sub-devices for them.
|
||||||
*
|
*
|
||||||
* Any notifier populated using this function must be released with a call to
|
* Any notifier populated using this function must be released with a call to
|
||||||
* v4l2_async_notifier_release() after it has been unregistered and the async
|
* v4l2_async_nf_release() after it has been unregistered and the async
|
||||||
* sub-devices are no longer in use, even in the case the function returned an
|
* sub-devices are no longer in use, even in the case the function returned an
|
||||||
* error.
|
* error.
|
||||||
*
|
*
|
||||||
|
@ -1278,8 +1274,8 @@ v4l2_fwnode_reference_parse_int_props(struct device *dev,
|
||||||
* -EINVAL if property parsing failed
|
* -EINVAL if property parsing failed
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
v4l2_async_notifier_parse_fwnode_sensor(struct device *dev,
|
v4l2_async_nf_parse_fwnode_sensor(struct device *dev,
|
||||||
struct v4l2_async_notifier *notifier)
|
struct v4l2_async_notifier *notifier)
|
||||||
{
|
{
|
||||||
static const char * const led_props[] = { "led" };
|
static const char * const led_props[] = { "led" };
|
||||||
static const struct v4l2_fwnode_int_props props[] = {
|
static const struct v4l2_fwnode_int_props props[] = {
|
||||||
|
@ -1320,13 +1316,13 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
|
||||||
if (!notifier)
|
if (!notifier)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
v4l2_async_notifier_init(notifier);
|
v4l2_async_nf_init(notifier);
|
||||||
|
|
||||||
ret = v4l2_async_notifier_parse_fwnode_sensor(sd->dev, notifier);
|
ret = v4l2_async_nf_parse_fwnode_sensor(sd->dev, notifier);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_cleanup;
|
goto out_cleanup;
|
||||||
|
|
||||||
ret = v4l2_async_subdev_notifier_register(sd, notifier);
|
ret = v4l2_async_subdev_nf_register(sd, notifier);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_cleanup;
|
goto out_cleanup;
|
||||||
|
|
||||||
|
@ -1339,10 +1335,10 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_unregister:
|
out_unregister:
|
||||||
v4l2_async_notifier_unregister(notifier);
|
v4l2_async_nf_unregister(notifier);
|
||||||
|
|
||||||
out_cleanup:
|
out_cleanup:
|
||||||
v4l2_async_notifier_cleanup(notifier);
|
v4l2_async_nf_cleanup(notifier);
|
||||||
kfree(notifier);
|
kfree(notifier);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1924,7 +1924,7 @@ static int imx_csi_async_register(struct csi_priv *priv)
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&priv->notifier);
|
v4l2_async_nf_init(&priv->notifier);
|
||||||
|
|
||||||
/* get this CSI's port id */
|
/* get this CSI's port id */
|
||||||
ret = fwnode_property_read_u32(dev_fwnode(priv->dev), "reg", &port);
|
ret = fwnode_property_read_u32(dev_fwnode(priv->dev), "reg", &port);
|
||||||
|
@ -1935,8 +1935,8 @@ static int imx_csi_async_register(struct csi_priv *priv)
|
||||||
port, 0,
|
port, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
if (ep) {
|
if (ep) {
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep,
|
||||||
&priv->notifier, ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
|
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
|
|
||||||
|
@ -1950,8 +1950,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_notifier_register(&priv->sd,
|
ret = v4l2_async_subdev_nf_register(&priv->sd, &priv->notifier);
|
||||||
&priv->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -2040,8 +2039,8 @@ static int imx_csi_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_unregister(&priv->notifier);
|
v4l2_async_nf_unregister(&priv->notifier);
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
free:
|
free:
|
||||||
v4l2_ctrl_handler_free(&priv->ctrl_hdlr);
|
v4l2_ctrl_handler_free(&priv->ctrl_hdlr);
|
||||||
mutex_destroy(&priv->lock);
|
mutex_destroy(&priv->lock);
|
||||||
|
@ -2055,8 +2054,8 @@ static int imx_csi_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
v4l2_ctrl_handler_free(&priv->ctrl_hdlr);
|
v4l2_ctrl_handler_free(&priv->ctrl_hdlr);
|
||||||
mutex_destroy(&priv->lock);
|
mutex_destroy(&priv->lock);
|
||||||
v4l2_async_notifier_unregister(&priv->notifier);
|
v4l2_async_nf_unregister(&priv->notifier);
|
||||||
v4l2_async_notifier_cleanup(&priv->notifier);
|
v4l2_async_nf_cleanup(&priv->notifier);
|
||||||
v4l2_async_unregister_subdev(sd);
|
v4l2_async_unregister_subdev(sd);
|
||||||
media_entity_cleanup(&sd->entity);
|
media_entity_cleanup(&sd->entity);
|
||||||
|
|
||||||
|
|
|
@ -379,7 +379,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_notifier_init(&imxmd->notifier);
|
v4l2_async_nf_init(&imxmd->notifier);
|
||||||
|
|
||||||
return imxmd;
|
return imxmd;
|
||||||
|
|
||||||
|
@ -403,11 +403,10 @@ int imx_media_dev_notifier_register(struct imx_media_dev *imxmd,
|
||||||
|
|
||||||
/* prepare the async subdev notifier and register it */
|
/* prepare the async subdev notifier and register it */
|
||||||
imxmd->notifier.ops = ops ? ops : &imx_media_notifier_ops;
|
imxmd->notifier.ops = ops ? ops : &imx_media_notifier_ops;
|
||||||
ret = v4l2_async_notifier_register(&imxmd->v4l2_dev,
|
ret = v4l2_async_nf_register(&imxmd->v4l2_dev, &imxmd->notifier);
|
||||||
&imxmd->notifier);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
v4l2_err(&imxmd->v4l2_dev,
|
v4l2_err(&imxmd->v4l2_dev,
|
||||||
"v4l2_async_notifier_register failed with %d\n", ret);
|
"v4l2_async_nf_register failed with %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ static int imx_media_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_cleanup(&imxmd->notifier);
|
v4l2_async_nf_cleanup(&imxmd->notifier);
|
||||||
v4l2_device_unregister(&imxmd->v4l2_dev);
|
v4l2_device_unregister(&imxmd->v4l2_dev);
|
||||||
media_device_cleanup(&imxmd->md);
|
media_device_cleanup(&imxmd->md);
|
||||||
|
|
||||||
|
@ -113,9 +113,9 @@ static int imx_media_remove(struct platform_device *pdev)
|
||||||
imxmd->m2m_vdev = NULL;
|
imxmd->m2m_vdev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&imxmd->notifier);
|
v4l2_async_nf_unregister(&imxmd->notifier);
|
||||||
imx_media_unregister_ipu_internal_subdevs(imxmd);
|
imx_media_unregister_ipu_internal_subdevs(imxmd);
|
||||||
v4l2_async_notifier_cleanup(&imxmd->notifier);
|
v4l2_async_nf_cleanup(&imxmd->notifier);
|
||||||
media_device_unregister(&imxmd->md);
|
media_device_unregister(&imxmd->md);
|
||||||
v4l2_device_unregister(&imxmd->v4l2_dev);
|
v4l2_device_unregister(&imxmd->v4l2_dev);
|
||||||
media_device_cleanup(&imxmd->md);
|
media_device_cleanup(&imxmd->md);
|
||||||
|
|
|
@ -29,9 +29,9 @@ int imx_media_of_add_csi(struct imx_media_dev *imxmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add CSI fwnode to async notifier */
|
/* add CSI fwnode to async notifier */
|
||||||
asd = v4l2_async_notifier_add_fwnode_subdev(&imxmd->notifier,
|
asd = v4l2_async_nf_add_fwnode(&imxmd->notifier,
|
||||||
of_fwnode_handle(csi_np),
|
of_fwnode_handle(csi_np),
|
||||||
struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
if (ret == -EEXIST)
|
if (ret == -EEXIST)
|
||||||
|
|
|
@ -647,7 +647,7 @@ static int csi2_async_register(struct csi2_dev *csi2)
|
||||||
struct fwnode_handle *ep;
|
struct fwnode_handle *ep;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&csi2->notifier);
|
v4l2_async_nf_init(&csi2->notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi2->dev), 0, 0,
|
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi2->dev), 0, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
|
@ -663,8 +663,8 @@ static int csi2_async_register(struct csi2_dev *csi2)
|
||||||
dev_dbg(csi2->dev, "data lanes: %d\n", vep.bus.mipi_csi2.num_data_lanes);
|
dev_dbg(csi2->dev, "data lanes: %d\n", vep.bus.mipi_csi2.num_data_lanes);
|
||||||
dev_dbg(csi2->dev, "flags: 0x%08x\n", vep.bus.mipi_csi2.flags);
|
dev_dbg(csi2->dev, "flags: 0x%08x\n", vep.bus.mipi_csi2.flags);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&csi2->notifier, ep,
|
||||||
&csi2->notifier, ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
|
|
||||||
if (IS_ERR(asd))
|
if (IS_ERR(asd))
|
||||||
|
@ -672,8 +672,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_notifier_register(&csi2->sd,
|
ret = v4l2_async_subdev_nf_register(&csi2->sd, &csi2->notifier);
|
||||||
&csi2->notifier);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -768,8 +767,8 @@ static int csi2_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
clean_notifier:
|
clean_notifier:
|
||||||
v4l2_async_notifier_unregister(&csi2->notifier);
|
v4l2_async_nf_unregister(&csi2->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi2->notifier);
|
v4l2_async_nf_cleanup(&csi2->notifier);
|
||||||
clk_disable_unprepare(csi2->dphy_clk);
|
clk_disable_unprepare(csi2->dphy_clk);
|
||||||
pllref_off:
|
pllref_off:
|
||||||
clk_disable_unprepare(csi2->pllref_clk);
|
clk_disable_unprepare(csi2->pllref_clk);
|
||||||
|
@ -783,8 +782,8 @@ static int csi2_remove(struct platform_device *pdev)
|
||||||
struct v4l2_subdev *sd = platform_get_drvdata(pdev);
|
struct v4l2_subdev *sd = platform_get_drvdata(pdev);
|
||||||
struct csi2_dev *csi2 = sd_to_dev(sd);
|
struct csi2_dev *csi2 = sd_to_dev(sd);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&csi2->notifier);
|
v4l2_async_nf_unregister(&csi2->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi2->notifier);
|
v4l2_async_nf_cleanup(&csi2->notifier);
|
||||||
v4l2_async_unregister_subdev(sd);
|
v4l2_async_unregister_subdev(sd);
|
||||||
clk_disable_unprepare(csi2->dphy_clk);
|
clk_disable_unprepare(csi2->dphy_clk);
|
||||||
clk_disable_unprepare(csi2->pllref_clk);
|
clk_disable_unprepare(csi2->pllref_clk);
|
||||||
|
|
|
@ -1099,13 +1099,13 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
|
||||||
struct fwnode_handle *ep;
|
struct fwnode_handle *ep;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&csi->notifier);
|
v4l2_async_nf_init(&csi->notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
|
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
if (ep) {
|
if (ep) {
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
|
||||||
&csi->notifier, ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
|
|
||||||
fwnode_handle_put(ep);
|
fwnode_handle_put(ep);
|
||||||
|
|
||||||
|
@ -1119,7 +1119,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_subdev_notifier_register(&csi->sd, &csi->notifier);
|
ret = v4l2_async_subdev_nf_register(&csi->sd, &csi->notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -1210,12 +1210,12 @@ static int imx7_csi_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
subdev_notifier_cleanup:
|
subdev_notifier_cleanup:
|
||||||
v4l2_async_notifier_unregister(&csi->notifier);
|
v4l2_async_nf_unregister(&csi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi->notifier);
|
v4l2_async_nf_cleanup(&csi->notifier);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
v4l2_async_notifier_unregister(&imxmd->notifier);
|
v4l2_async_nf_unregister(&imxmd->notifier);
|
||||||
v4l2_async_notifier_cleanup(&imxmd->notifier);
|
v4l2_async_nf_cleanup(&imxmd->notifier);
|
||||||
v4l2_device_unregister(&imxmd->v4l2_dev);
|
v4l2_device_unregister(&imxmd->v4l2_dev);
|
||||||
media_device_unregister(&imxmd->md);
|
media_device_unregister(&imxmd->md);
|
||||||
media_device_cleanup(&imxmd->md);
|
media_device_cleanup(&imxmd->md);
|
||||||
|
@ -1232,15 +1232,15 @@ static int imx7_csi_remove(struct platform_device *pdev)
|
||||||
struct imx7_csi *csi = v4l2_get_subdevdata(sd);
|
struct imx7_csi *csi = v4l2_get_subdevdata(sd);
|
||||||
struct imx_media_dev *imxmd = csi->imxmd;
|
struct imx_media_dev *imxmd = csi->imxmd;
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&imxmd->notifier);
|
v4l2_async_nf_unregister(&imxmd->notifier);
|
||||||
v4l2_async_notifier_cleanup(&imxmd->notifier);
|
v4l2_async_nf_cleanup(&imxmd->notifier);
|
||||||
|
|
||||||
media_device_unregister(&imxmd->md);
|
media_device_unregister(&imxmd->md);
|
||||||
v4l2_device_unregister(&imxmd->v4l2_dev);
|
v4l2_device_unregister(&imxmd->v4l2_dev);
|
||||||
media_device_cleanup(&imxmd->md);
|
media_device_cleanup(&imxmd->md);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&csi->notifier);
|
v4l2_async_nf_unregister(&csi->notifier);
|
||||||
v4l2_async_notifier_cleanup(&csi->notifier);
|
v4l2_async_nf_cleanup(&csi->notifier);
|
||||||
v4l2_async_unregister_subdev(sd);
|
v4l2_async_unregister_subdev(sd);
|
||||||
|
|
||||||
mutex_destroy(&csi->lock);
|
mutex_destroy(&csi->lock);
|
||||||
|
|
|
@ -1162,7 +1162,7 @@ static int mipi_csis_async_register(struct csi_state *state)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&state->notifier);
|
v4l2_async_nf_init(&state->notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
|
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
|
@ -1187,8 +1187,8 @@ static int mipi_csis_async_register(struct csi_state *state)
|
||||||
dev_dbg(state->dev, "data lanes: %d\n", state->bus.num_data_lanes);
|
dev_dbg(state->dev, "data lanes: %d\n", state->bus.num_data_lanes);
|
||||||
dev_dbg(state->dev, "flags: 0x%08x\n", state->bus.flags);
|
dev_dbg(state->dev, "flags: 0x%08x\n", state->bus.flags);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(
|
asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
|
||||||
&state->notifier, ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
@ -1198,7 +1198,7 @@ static int mipi_csis_async_register(struct csi_state *state)
|
||||||
|
|
||||||
state->notifier.ops = &mipi_csis_notify_ops;
|
state->notifier.ops = &mipi_csis_notify_ops;
|
||||||
|
|
||||||
ret = v4l2_async_subdev_notifier_register(&state->sd, &state->notifier);
|
ret = v4l2_async_subdev_nf_register(&state->sd, &state->notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -1429,8 +1429,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
|
||||||
mipi_csis_debugfs_exit(state);
|
mipi_csis_debugfs_exit(state);
|
||||||
cleanup:
|
cleanup:
|
||||||
media_entity_cleanup(&state->sd.entity);
|
media_entity_cleanup(&state->sd.entity);
|
||||||
v4l2_async_notifier_unregister(&state->notifier);
|
v4l2_async_nf_unregister(&state->notifier);
|
||||||
v4l2_async_notifier_cleanup(&state->notifier);
|
v4l2_async_nf_cleanup(&state->notifier);
|
||||||
v4l2_async_unregister_subdev(&state->sd);
|
v4l2_async_unregister_subdev(&state->sd);
|
||||||
disable_clock:
|
disable_clock:
|
||||||
mipi_csis_clk_disable(state);
|
mipi_csis_clk_disable(state);
|
||||||
|
@ -1445,8 +1445,8 @@ static int mipi_csis_remove(struct platform_device *pdev)
|
||||||
struct csi_state *state = mipi_sd_to_csis_state(sd);
|
struct csi_state *state = mipi_sd_to_csis_state(sd);
|
||||||
|
|
||||||
mipi_csis_debugfs_exit(state);
|
mipi_csis_debugfs_exit(state);
|
||||||
v4l2_async_notifier_unregister(&state->notifier);
|
v4l2_async_nf_unregister(&state->notifier);
|
||||||
v4l2_async_notifier_cleanup(&state->notifier);
|
v4l2_async_nf_cleanup(&state->notifier);
|
||||||
v4l2_async_unregister_subdev(&state->sd);
|
v4l2_async_unregister_subdev(&state->sd);
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
|
@ -643,7 +643,7 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
v4l2_async_notifier_init(&state->notifier);
|
v4l2_async_nf_init(&state->notifier);
|
||||||
|
|
||||||
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
|
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
|
||||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||||
|
@ -669,8 +669,8 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
|
||||||
state->bus.num_data_lanes,
|
state->bus.num_data_lanes,
|
||||||
state->bus.flags);
|
state->bus.flags);
|
||||||
|
|
||||||
asd = v4l2_async_notifier_add_fwnode_remote_subdev(&state->notifier,
|
asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
|
||||||
ep, struct v4l2_async_subdev);
|
struct v4l2_async_subdev);
|
||||||
if (IS_ERR(asd)) {
|
if (IS_ERR(asd)) {
|
||||||
ret = PTR_ERR(asd);
|
ret = PTR_ERR(asd);
|
||||||
goto err_parse;
|
goto err_parse;
|
||||||
|
@ -680,7 +680,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_notifier_register(&state->sd, &state->notifier);
|
ret = v4l2_async_subdev_nf_register(&state->sd, &state->notifier);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -937,8 +937,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
|
||||||
imx8mq_mipi_csi_pm_suspend(&pdev->dev, true);
|
imx8mq_mipi_csi_pm_suspend(&pdev->dev, true);
|
||||||
|
|
||||||
media_entity_cleanup(&state->sd.entity);
|
media_entity_cleanup(&state->sd.entity);
|
||||||
v4l2_async_notifier_unregister(&state->notifier);
|
v4l2_async_nf_unregister(&state->notifier);
|
||||||
v4l2_async_notifier_cleanup(&state->notifier);
|
v4l2_async_nf_cleanup(&state->notifier);
|
||||||
v4l2_async_unregister_subdev(&state->sd);
|
v4l2_async_unregister_subdev(&state->sd);
|
||||||
icc:
|
icc:
|
||||||
imx8mq_mipi_csi_release_icc(pdev);
|
imx8mq_mipi_csi_release_icc(pdev);
|
||||||
|
@ -953,8 +953,8 @@ static int imx8mq_mipi_csi_remove(struct platform_device *pdev)
|
||||||
struct v4l2_subdev *sd = platform_get_drvdata(pdev);
|
struct v4l2_subdev *sd = platform_get_drvdata(pdev);
|
||||||
struct csi_state *state = mipi_sd_to_csi2_state(sd);
|
struct csi_state *state = mipi_sd_to_csi2_state(sd);
|
||||||
|
|
||||||
v4l2_async_notifier_unregister(&state->notifier);
|
v4l2_async_nf_unregister(&state->notifier);
|
||||||
v4l2_async_notifier_cleanup(&state->notifier);
|
v4l2_async_nf_cleanup(&state->notifier);
|
||||||
v4l2_async_unregister_subdev(&state->sd);
|
v4l2_async_unregister_subdev(&state->sd);
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
|
@ -1272,7 +1272,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_notifier_init(&chan->notifier);
|
v4l2_async_nf_init(&chan->notifier);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1811,8 +1811,8 @@ static int tegra_vi_graph_parse_one(struct tegra_vi_channel *chan,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tvge = v4l2_async_notifier_add_fwnode_subdev(&chan->notifier, remote,
|
tvge = v4l2_async_nf_add_fwnode(&chan->notifier, remote,
|
||||||
struct tegra_vi_graph_entity);
|
struct tegra_vi_graph_entity);
|
||||||
if (IS_ERR(tvge)) {
|
if (IS_ERR(tvge)) {
|
||||||
ret = PTR_ERR(tvge);
|
ret = PTR_ERR(tvge);
|
||||||
dev_err(vi->dev,
|
dev_err(vi->dev,
|
||||||
|
@ -1834,7 +1834,7 @@ static int tegra_vi_graph_parse_one(struct tegra_vi_channel *chan,
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
dev_err(vi->dev, "failed parsing the graph: %d\n", ret);
|
dev_err(vi->dev, "failed parsing the graph: %d\n", ret);
|
||||||
v4l2_async_notifier_cleanup(&chan->notifier);
|
v4l2_async_nf_cleanup(&chan->notifier);
|
||||||
of_node_put(node);
|
of_node_put(node);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1868,13 +1868,12 @@ static int tegra_vi_graph_init(struct tegra_vi *vi)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
chan->notifier.ops = &tegra_vi_async_ops;
|
chan->notifier.ops = &tegra_vi_async_ops;
|
||||||
ret = v4l2_async_notifier_register(&vid->v4l2_dev,
|
ret = v4l2_async_nf_register(&vid->v4l2_dev, &chan->notifier);
|
||||||
&chan->notifier);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(vi->dev,
|
dev_err(vi->dev,
|
||||||
"failed to register channel %d notifier: %d\n",
|
"failed to register channel %d notifier: %d\n",
|
||||||
chan->portnos[0], ret);
|
chan->portnos[0], ret);
|
||||||
v4l2_async_notifier_cleanup(&chan->notifier);
|
v4l2_async_nf_cleanup(&chan->notifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1887,8 +1886,8 @@ static void tegra_vi_graph_cleanup(struct tegra_vi *vi)
|
||||||
|
|
||||||
list_for_each_entry(chan, &vi->vi_chans, list) {
|
list_for_each_entry(chan, &vi->vi_chans, list) {
|
||||||
vb2_video_unregister_device(&chan->video);
|
vb2_video_unregister_device(&chan->video);
|
||||||
v4l2_async_notifier_unregister(&chan->notifier);
|
v4l2_async_nf_unregister(&chan->notifier);
|
||||||
v4l2_async_notifier_cleanup(&chan->notifier);
|
v4l2_async_nf_cleanup(&chan->notifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,45 +123,45 @@ struct v4l2_async_notifier {
|
||||||
void v4l2_async_debug_init(struct dentry *debugfs_dir);
|
void v4l2_async_debug_init(struct dentry *debugfs_dir);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_init - Initialize a notifier.
|
* v4l2_async_nf_init - Initialize a notifier.
|
||||||
*
|
*
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
*
|
*
|
||||||
* This function initializes the notifier @asd_list. It must be called
|
* This function initializes the notifier @asd_list. It must be called
|
||||||
* before adding a subdevice to a notifier, using one of:
|
* before adding a subdevice to a notifier, using one of:
|
||||||
* v4l2_async_notifier_add_fwnode_remote_subdev(),
|
* v4l2_async_nf_add_fwnode_remote(),
|
||||||
* v4l2_async_notifier_add_fwnode_subdev(),
|
* v4l2_async_nf_add_fwnode(),
|
||||||
* v4l2_async_notifier_add_i2c_subdev(),
|
* v4l2_async_nf_add_i2c(),
|
||||||
* __v4l2_async_notifier_add_subdev() or
|
* __v4l2_async_nf_add_subdev() or
|
||||||
* v4l2_async_notifier_parse_fwnode_endpoints().
|
* v4l2_async_nf_parse_fwnode_endpoints().
|
||||||
*/
|
*/
|
||||||
void v4l2_async_notifier_init(struct v4l2_async_notifier *notifier);
|
void v4l2_async_nf_init(struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __v4l2_async_notifier_add_subdev - Add an async subdev to the
|
* __v4l2_async_nf_add_subdev - Add an async subdev to the
|
||||||
* notifier's master asd list.
|
* notifier's master asd list.
|
||||||
*
|
*
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
* @asd: pointer to &struct v4l2_async_subdev
|
* @asd: pointer to &struct v4l2_async_subdev
|
||||||
*
|
*
|
||||||
* \warning: Drivers should avoid using this function and instead use one of:
|
* \warning: Drivers should avoid using this function and instead use one of:
|
||||||
* v4l2_async_notifier_add_fwnode_subdev(),
|
* v4l2_async_nf_add_fwnode(),
|
||||||
* v4l2_async_notifier_add_fwnode_remote_subdev() or
|
* v4l2_async_nf_add_fwnode_remote() or
|
||||||
* v4l2_async_notifier_add_i2c_subdev().
|
* v4l2_async_nf_add_i2c().
|
||||||
*
|
*
|
||||||
* Call this function before registering a notifier to link the provided @asd to
|
* Call this function before registering a notifier to link the provided @asd to
|
||||||
* the notifiers master @asd_list. The @asd must be allocated with k*alloc() as
|
* the notifiers master @asd_list. The @asd must be allocated with k*alloc() as
|
||||||
* it will be freed by the framework when the notifier is destroyed.
|
* it will be freed by the framework when the notifier is destroyed.
|
||||||
*/
|
*/
|
||||||
int __v4l2_async_notifier_add_subdev(struct v4l2_async_notifier *notifier,
|
int __v4l2_async_nf_add_subdev(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd);
|
struct v4l2_async_subdev *asd);
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
|
__v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
|
||||||
struct fwnode_handle *fwnode,
|
struct fwnode_handle *fwnode,
|
||||||
unsigned int asd_struct_size);
|
unsigned int asd_struct_size);
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_add_fwnode_subdev - Allocate and add a fwnode async
|
* v4l2_async_nf_add_fwnode - Allocate and add a fwnode async
|
||||||
* subdev to the notifier's master asd_list.
|
* subdev to the notifier's master asd_list.
|
||||||
*
|
*
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
|
@ -175,16 +175,15 @@ __v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier,
|
||||||
* notifiers @asd_list. The function also gets a reference of the fwnode which
|
* notifiers @asd_list. The function also gets a reference of the fwnode which
|
||||||
* is released later at notifier cleanup time.
|
* is released later at notifier cleanup time.
|
||||||
*/
|
*/
|
||||||
#define v4l2_async_notifier_add_fwnode_subdev(notifier, fwnode, type) \
|
#define v4l2_async_nf_add_fwnode(notifier, fwnode, type) \
|
||||||
((type *)__v4l2_async_notifier_add_fwnode_subdev(notifier, fwnode, \
|
((type *)__v4l2_async_nf_add_fwnode(notifier, fwnode, sizeof(type)))
|
||||||
sizeof(type)))
|
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif,
|
__v4l2_async_nf_add_fwnode_remote(struct v4l2_async_notifier *notif,
|
||||||
struct fwnode_handle *endpoint,
|
struct fwnode_handle *endpoint,
|
||||||
unsigned int asd_struct_size);
|
unsigned int asd_struct_size);
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_add_fwnode_remote_subdev - Allocate and add a fwnode
|
* v4l2_async_nf_add_fwnode_remote - Allocate and add a fwnode
|
||||||
* remote async subdev to the
|
* remote async subdev to the
|
||||||
* notifier's master asd_list.
|
* notifier's master asd_list.
|
||||||
*
|
*
|
||||||
|
@ -200,20 +199,18 @@ __v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif
|
||||||
* function also gets a reference of the fwnode which is released later at
|
* function also gets a reference of the fwnode which is released later at
|
||||||
* notifier cleanup time.
|
* notifier cleanup time.
|
||||||
*
|
*
|
||||||
* This is just like v4l2_async_notifier_add_fwnode_subdev(), but with the
|
* This is just like v4l2_async_nf_add_fwnode(), but with the
|
||||||
* exception that the fwnode refers to a local endpoint, not the remote one.
|
* exception that the fwnode refers to a local endpoint, not the remote one.
|
||||||
*/
|
*/
|
||||||
#define v4l2_async_notifier_add_fwnode_remote_subdev(notifier, ep, type) \
|
#define v4l2_async_nf_add_fwnode_remote(notifier, ep, type) \
|
||||||
((type *) \
|
((type *)__v4l2_async_nf_add_fwnode_remote(notifier, ep, sizeof(type)))
|
||||||
__v4l2_async_notifier_add_fwnode_remote_subdev(notifier, ep, \
|
|
||||||
sizeof(type)))
|
|
||||||
|
|
||||||
struct v4l2_async_subdev *
|
struct v4l2_async_subdev *
|
||||||
__v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
|
__v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier,
|
||||||
int adapter_id, unsigned short address,
|
int adapter_id, unsigned short address,
|
||||||
unsigned int asd_struct_size);
|
unsigned int asd_struct_size);
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_add_i2c_subdev - Allocate and add an i2c async
|
* v4l2_async_nf_add_i2c - Allocate and add an i2c async
|
||||||
* subdev to the notifier's master asd_list.
|
* subdev to the notifier's master asd_list.
|
||||||
*
|
*
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
|
@ -223,59 +220,59 @@ __v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier,
|
||||||
* v4l2_async_subdev shall be the first member of the driver's async
|
* v4l2_async_subdev shall be the first member of the driver's async
|
||||||
* sub-device struct, i.e. both begin at the same memory address.
|
* sub-device struct, i.e. both begin at the same memory address.
|
||||||
*
|
*
|
||||||
* Same as v4l2_async_notifier_add_fwnode_subdev() but for I2C matched
|
* Same as v4l2_async_nf_add_fwnode() but for I2C matched
|
||||||
* sub-devices.
|
* sub-devices.
|
||||||
*/
|
*/
|
||||||
#define v4l2_async_notifier_add_i2c_subdev(notifier, adapter, address, type) \
|
#define v4l2_async_nf_add_i2c(notifier, adapter, address, type) \
|
||||||
((type *)__v4l2_async_notifier_add_i2c_subdev(notifier, adapter, \
|
((type *)__v4l2_async_nf_add_i2c(notifier, adapter, address, \
|
||||||
address, sizeof(type)))
|
sizeof(type)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_register - registers a subdevice asynchronous notifier
|
* v4l2_async_nf_register - registers a subdevice asynchronous notifier
|
||||||
*
|
*
|
||||||
* @v4l2_dev: pointer to &struct v4l2_device
|
* @v4l2_dev: pointer to &struct v4l2_device
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
*/
|
*/
|
||||||
int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
|
int v4l2_async_nf_register(struct v4l2_device *v4l2_dev,
|
||||||
struct v4l2_async_notifier *notifier);
|
struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_subdev_notifier_register - registers a subdevice asynchronous
|
* v4l2_async_subdev_nf_register - registers a subdevice asynchronous
|
||||||
* notifier for a sub-device
|
* notifier for a sub-device
|
||||||
*
|
*
|
||||||
* @sd: pointer to &struct v4l2_subdev
|
* @sd: pointer to &struct v4l2_subdev
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
*/
|
*/
|
||||||
int v4l2_async_subdev_notifier_register(struct v4l2_subdev *sd,
|
int v4l2_async_subdev_nf_register(struct v4l2_subdev *sd,
|
||||||
struct v4l2_async_notifier *notifier);
|
struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_unregister - unregisters a subdevice
|
* v4l2_async_nf_unregister - unregisters a subdevice
|
||||||
* asynchronous notifier
|
* asynchronous notifier
|
||||||
*
|
*
|
||||||
* @notifier: pointer to &struct v4l2_async_notifier
|
* @notifier: pointer to &struct v4l2_async_notifier
|
||||||
*/
|
*/
|
||||||
void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier);
|
void v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_cleanup - clean up notifier resources
|
* v4l2_async_nf_cleanup - clean up notifier resources
|
||||||
* @notifier: the notifier the resources of which are to be cleaned up
|
* @notifier: the notifier the resources of which are to be cleaned up
|
||||||
*
|
*
|
||||||
* Release memory resources related to a notifier, including the async
|
* Release memory resources related to a notifier, including the async
|
||||||
* sub-devices allocated for the purposes of the notifier but not the notifier
|
* sub-devices allocated for the purposes of the notifier but not the notifier
|
||||||
* itself. The user is responsible for calling this function to clean up the
|
* itself. The user is responsible for calling this function to clean up the
|
||||||
* notifier after calling
|
* notifier after calling
|
||||||
* v4l2_async_notifier_add_fwnode_remote_subdev(),
|
* v4l2_async_nf_add_fwnode_remote(),
|
||||||
* v4l2_async_notifier_add_fwnode_subdev(),
|
* v4l2_async_nf_add_fwnode(),
|
||||||
* v4l2_async_notifier_add_i2c_subdev(),
|
* v4l2_async_nf_add_i2c(),
|
||||||
* __v4l2_async_notifier_add_subdev() or
|
* __v4l2_async_nf_add_subdev() or
|
||||||
* v4l2_async_notifier_parse_fwnode_endpoints().
|
* v4l2_async_nf_parse_fwnode_endpoints().
|
||||||
*
|
*
|
||||||
* There is no harm from calling v4l2_async_notifier_cleanup() in other
|
* There is no harm from calling v4l2_async_nf_cleanup() in other
|
||||||
* cases as long as its memory has been zeroed after it has been
|
* cases as long as its memory has been zeroed after it has been
|
||||||
* allocated.
|
* allocated.
|
||||||
*/
|
*/
|
||||||
void v4l2_async_notifier_cleanup(struct v4l2_async_notifier *notifier);
|
void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_register_subdev - registers a sub-device to the asynchronous
|
* v4l2_async_register_subdev - registers a sub-device to the asynchronous
|
||||||
|
@ -295,7 +292,7 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd);
|
||||||
*
|
*
|
||||||
* This function is just like v4l2_async_register_subdev() with the exception
|
* This function is just like v4l2_async_register_subdev() with the exception
|
||||||
* that calling it will also parse firmware interfaces for remote references
|
* that calling it will also parse firmware interfaces for remote references
|
||||||
* using v4l2_async_notifier_parse_fwnode_sensor() and registers the
|
* using v4l2_async_nf_parse_fwnode_sensor() and registers the
|
||||||
* async sub-devices. The sub-device is similarly unregistered by calling
|
* async sub-devices. The sub-device is similarly unregistered by calling
|
||||||
* v4l2_async_unregister_subdev().
|
* v4l2_async_unregister_subdev().
|
||||||
*
|
*
|
||||||
|
|
|
@ -463,7 +463,7 @@ typedef int (*parse_endpoint_func)(struct device *dev,
|
||||||
struct v4l2_async_subdev *asd);
|
struct v4l2_async_subdev *asd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_async_notifier_parse_fwnode_endpoints - Parse V4L2 fwnode endpoints in a
|
* v4l2_async_nf_parse_fwnode_endpoints - Parse V4L2 fwnode endpoints in a
|
||||||
* device node
|
* device node
|
||||||
* @dev: the device the endpoints of which are to be parsed
|
* @dev: the device the endpoints of which are to be parsed
|
||||||
* @notifier: notifier for @dev
|
* @notifier: notifier for @dev
|
||||||
|
@ -496,7 +496,7 @@ typedef int (*parse_endpoint_func)(struct device *dev,
|
||||||
* to retain that configuration, the user needs to allocate memory for it.
|
* to retain that configuration, the user needs to allocate memory for it.
|
||||||
*
|
*
|
||||||
* Any notifier populated using this function must be released with a call to
|
* Any notifier populated using this function must be released with a call to
|
||||||
* v4l2_async_notifier_cleanup() after it has been unregistered and the async
|
* v4l2_async_nf_cleanup() after it has been unregistered and the async
|
||||||
* sub-devices are no longer in use, even if the function returned an error.
|
* sub-devices are no longer in use, even if the function returned an error.
|
||||||
*
|
*
|
||||||
* Return: %0 on success, including when no async sub-devices are found
|
* Return: %0 on success, including when no async sub-devices are found
|
||||||
|
@ -505,10 +505,10 @@ typedef int (*parse_endpoint_func)(struct device *dev,
|
||||||
* Other error codes as returned by @parse_endpoint
|
* Other error codes as returned by @parse_endpoint
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
v4l2_async_notifier_parse_fwnode_endpoints(struct device *dev,
|
v4l2_async_nf_parse_fwnode_endpoints(struct device *dev,
|
||||||
struct v4l2_async_notifier *notifier,
|
struct v4l2_async_notifier *notifier,
|
||||||
size_t asd_struct_size,
|
size_t asd_struct_size,
|
||||||
parse_endpoint_func parse_endpoint);
|
parse_endpoint_func parse_endpoint);
|
||||||
|
|
||||||
/* Helper macros to access the connector links. */
|
/* Helper macros to access the connector links. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue