media: v4l: async: Rename v4l2_async_subdev as v4l2_async_connection

Rename v4l2_async_subdev as v4l2_async_connection, in order to
differentiate between the sub-devices and their connections: one
sub-device can have many connections but the V4L2 async framework has so
far allowed just a single one. Connections in this context will later
translate into either MC ancillary or data links.

This patch prepares changing that relation by changing existing users of
v4l2_async_subdev to switch to v4l2_async_connection. Async sub-devices
themselves will not be needed anymore

Additionally, __v4l2_async_nf_add_subdev() has been renamed
__v4l2_async_nf_add_connection().

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp
Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x
Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
Sakari Ailus
2023-02-16 14:54:53 +01:00
committed by Mauro Carvalho Chehab
parent 1029939b37
commit adb2dcd5f2
70 changed files with 368 additions and 361 deletions

View File

@@ -206,60 +206,67 @@ of an unregister notifier, it must be cleaned up by calling
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_nf_init`. Second, 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 that the bridge drivers can then begin to form a list of async connection descriptors
bridge device needs for its operation. :c:func:`v4l2_async_nf_add_fwnode`, that the bridge device needs for its
operation. :c:func:`v4l2_async_nf_add_fwnode`,
:c:func:`v4l2_async_nf_add_fwnode_remote` and :c:func:`v4l2_async_nf_add_i2c` :c:func:`v4l2_async_nf_add_fwnode_remote` and :c:func:`v4l2_async_nf_add_i2c`
are available for that purpose.
Async connection descriptors describe connections to external sub-devices the
drivers for which are not yet probed. Based on an async connection, a media data
or ancillary link may be created when the related sub-device becomes
available. There may be one or more async connections to a given sub-device but
this is not known at the time of adding the connections to the notifier. Async
connections are bound as matching async sub-devices are found, one by one.
Asynchronous sub-device registration helper for camera sensor drivers Asynchronous sub-device registration helper for camera sensor drivers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:c:func:`v4l2_async_register_subdev_sensor` is a helper function for sensor :c:func:`v4l2_async_register_subdev_sensor` is a helper function for sensor
drivers registering their own async sub-device, but it also registers a notifier drivers registering their own async connection, but it also registers a notifier
and further registers async sub-devices for lens and flash devices found in and further registers async connections for lens and flash devices found in
firmware. The notifier for the sub-device is unregistered and cleaned up with firmware. The notifier for the sub-device is unregistered and cleaned up with
the async sub-device, using :c:func:`v4l2_async_unregister_subdev`. the async sub-device, using :c:func:`v4l2_async_unregister_subdev`.
Asynchronous sub-device notifier example Asynchronous sub-device notifier example
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These functions allocate an async sub-device descriptor which is of type struct These functions allocate an async connection descriptor which is of type struct
:c:type:`v4l2_async_subdev` embedded in a driver-specific struct. The &struct :c:type:`v4l2_async_connection` embedded in a driver-specific struct. The &struct
:c:type:`v4l2_async_subdev` shall be the first member of this struct: :c:type:`v4l2_async_connection` shall be the first member of this struct:
.. code-block:: c .. code-block:: c
struct my_async_subdev { struct my_async_connection {
struct v4l2_async_subdev asd; struct v4l2_async_connection asc;
... ...
}; };
struct my_async_subdev *my_asd; struct my_async_connection *my_asc;
struct fwnode_handle *ep; struct fwnode_handle *ep;
... ...
my_asd = v4l2_async_nf_add_fwnode_remote(&notifier, ep, my_asc = v4l2_async_nf_add_fwnode_remote(&notifier, ep,
struct my_async_subdev); struct my_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);
if (IS_ERR(my_asd)) if (IS_ERR(my_asc))
return PTR_ERR(my_asd); return PTR_ERR(my_asc);
Asynchronous sub-device notifier callbacks Asynchronous sub-device notifier callbacks
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The V4L2 core will then use these descriptors to match asynchronously The V4L2 core will then use these connection descriptors to match asynchronously
registered subdevices to them. If a match is detected the ``.bound()`` registered subdevices to them. If a match is detected the ``.bound()`` notifier
notifier callback is called. After all subdevices have been located the callback is called. After all connections have been bound the .complete()
.complete() callback is called. When a subdevice is removed from the callback is called. When a connection is removed from the system the
system the .unbind() method is called. All three callbacks are optional. ``.unbind()`` method is called. All three callbacks are optional.
Drivers can store any type of custom data in their driver-specific Drivers can store any type of custom data in their driver-specific
:c:type:`v4l2_async_subdev` wrapper. If any of that data requires special :c:type:`v4l2_async_connection` wrapper. If any of that data requires special
handling when the structure is freed, drivers must implement the ``.destroy()`` handling when the structure is freed, drivers must implement the ``.destroy()``
notifier callback. The framework will call it right before freeing the notifier callback. The framework will call it right before freeing the
:c:type:`v4l2_async_subdev`. :c:type:`v4l2_async_connection`.
Calling subdev operations Calling subdev operations
~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -518,7 +518,7 @@ static const struct media_entity_operations ub913_entity_ops = {
static int ub913_notify_bound(struct v4l2_async_notifier *notifier, static int ub913_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *source_subdev, struct v4l2_subdev *source_subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct ub913_data *priv = sd_to_ub913(notifier->sd); struct ub913_data *priv = sd_to_ub913(notifier->sd);
struct device *dev = &priv->client->dev; struct device *dev = &priv->client->dev;
@@ -557,7 +557,7 @@ static const struct v4l2_async_notifier_operations ub913_notify_ops = {
static int ub913_v4l2_notifier_register(struct ub913_data *priv) static int ub913_v4l2_notifier_register(struct ub913_data *priv)
{ {
struct device *dev = &priv->client->dev; struct device *dev = &priv->client->dev;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep_fwnode; struct fwnode_handle *ep_fwnode;
int ret; int ret;
@@ -571,7 +571,7 @@ static int ub913_v4l2_notifier_register(struct ub913_data *priv)
v4l2_async_nf_init(&priv->notifier); v4l2_async_nf_init(&priv->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode, asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep_fwnode); fwnode_handle_put(ep_fwnode);

View File

@@ -723,7 +723,7 @@ static const struct media_entity_operations ub953_entity_ops = {
static int ub953_notify_bound(struct v4l2_async_notifier *notifier, static int ub953_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *source_subdev, struct v4l2_subdev *source_subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct ub953_data *priv = sd_to_ub953(notifier->sd); struct ub953_data *priv = sd_to_ub953(notifier->sd);
struct device *dev = &priv->client->dev; struct device *dev = &priv->client->dev;
@@ -762,7 +762,7 @@ static const struct v4l2_async_notifier_operations ub953_notify_ops = {
static int ub953_v4l2_notifier_register(struct ub953_data *priv) static int ub953_v4l2_notifier_register(struct ub953_data *priv)
{ {
struct device *dev = &priv->client->dev; struct device *dev = &priv->client->dev;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep_fwnode; struct fwnode_handle *ep_fwnode;
int ret; int ret;
@@ -776,7 +776,7 @@ static int ub953_v4l2_notifier_register(struct ub953_data *priv)
v4l2_async_nf_init(&priv->notifier); v4l2_async_nf_init(&priv->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode, asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep_fwnode); fwnode_handle_put(ep_fwnode);

View File

@@ -471,11 +471,11 @@ struct ub960_rxport {
}; };
struct ub960_asd { struct ub960_asd {
struct v4l2_async_subdev base; struct v4l2_async_connection base;
struct ub960_rxport *rxport; struct ub960_rxport *rxport;
}; };
static inline struct ub960_asd *to_ub960_asd(struct v4l2_async_subdev *asd) static inline struct ub960_asd *to_ub960_asd(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct ub960_asd, base); return container_of(asd, struct ub960_asd, base);
} }
@@ -3538,7 +3538,7 @@ err_free_rxports:
static int ub960_notify_bound(struct v4l2_async_notifier *notifier, static int ub960_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct ub960_data *priv = sd_to_ub960(notifier->sd); struct ub960_data *priv = sd_to_ub960(notifier->sd);
struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport; struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport;
@@ -3581,7 +3581,7 @@ static int ub960_notify_bound(struct v4l2_async_notifier *notifier,
static void ub960_notify_unbind(struct v4l2_async_notifier *notifier, static void ub960_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport; struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport;

View File

@@ -161,11 +161,12 @@ struct max9286_source {
}; };
struct max9286_asd { struct max9286_asd {
struct v4l2_async_subdev base; struct v4l2_async_connection base;
struct max9286_source *source; struct max9286_source *source;
}; };
static inline struct max9286_asd *to_max9286_asd(struct v4l2_async_subdev *asd) static inline struct max9286_asd *
to_max9286_asd(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct max9286_asd, base); return container_of(asd, struct max9286_asd, base);
} }
@@ -659,7 +660,7 @@ static int max9286_set_pixelrate(struct max9286_priv *priv)
static int max9286_notify_bound(struct v4l2_async_notifier *notifier, static int max9286_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct max9286_priv *priv = sd_to_max9286(notifier->sd); struct max9286_priv *priv = sd_to_max9286(notifier->sd);
struct max9286_source *source = to_max9286_asd(asd)->source; struct max9286_source *source = to_max9286_asd(asd)->source;
@@ -721,7 +722,7 @@ static int max9286_notify_bound(struct v4l2_async_notifier *notifier,
static void max9286_notify_unbind(struct v4l2_async_notifier *notifier, static void max9286_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct max9286_priv *priv = sd_to_max9286(notifier->sd); struct max9286_priv *priv = sd_to_max9286(notifier->sd);
struct max9286_source *source = to_max9286_asd(asd)->source; struct max9286_source *source = to_max9286_asd(asd)->source;

View File

@@ -829,7 +829,7 @@ static const struct media_entity_operations mipid02_subdev_entity_ops = {
static int mipid02_async_bound(struct v4l2_async_notifier *notifier, static int mipid02_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *s_subdev, struct v4l2_subdev *s_subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd); struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd);
struct i2c_client *client = bridge->i2c_client; struct i2c_client *client = bridge->i2c_client;
@@ -863,7 +863,7 @@ static int mipid02_async_bound(struct v4l2_async_notifier *notifier,
static void mipid02_async_unbind(struct v4l2_async_notifier *notifier, static void mipid02_async_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *s_subdev, struct v4l2_subdev *s_subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd); struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd);
@@ -879,7 +879,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
{ {
struct v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY }; struct v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY };
struct i2c_client *client = bridge->i2c_client; struct i2c_client *client = bridge->i2c_client;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *ep_node; struct device_node *ep_node;
int ret; int ret;
@@ -914,7 +914,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
v4l2_async_nf_init(&bridge->notifier); v4l2_async_nf_init(&bridge->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier, asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
of_fwnode_handle(ep_node), of_fwnode_handle(ep_node),
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(ep_node); of_node_put(ep_node);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {

View File

@@ -1426,7 +1426,7 @@ static int tc358746_init_controls(struct tc358746 *tc358746)
static int tc358746_notify_bound(struct v4l2_async_notifier *notifier, static int tc358746_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct tc358746 *tc358746 = struct tc358746 *tc358746 =
container_of(notifier, struct tc358746, notifier); container_of(notifier, struct tc358746, notifier);
@@ -1445,7 +1445,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_PARALLEL, .bus_type = V4L2_MBUS_PARALLEL,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
int err; int err;
@@ -1462,7 +1462,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
v4l2_async_nf_init(&tc358746->notifier); v4l2_async_nf_init(&tc358746->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {

View File

@@ -1372,7 +1372,7 @@ static const struct v4l2_subdev_ops cio2_subdev_ops = {
/******* V4L2 sub-device asynchronous registration callbacks***********/ /******* V4L2 sub-device asynchronous registration callbacks***********/
struct sensor_async_subdev { struct sensor_async_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
struct csi2_bus_info csi2; struct csi2_bus_info csi2;
}; };
@@ -1382,7 +1382,7 @@ struct sensor_async_subdev {
/* The .bound() notifier callback when a match is found */ /* The .bound() notifier callback when a match is found */
static int cio2_notifier_bound(struct v4l2_async_notifier *notifier, static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct cio2_device *cio2 = to_cio2_device(notifier); struct cio2_device *cio2 = to_cio2_device(notifier);
struct sensor_async_subdev *s_asd = to_sensor_asd(asd); struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
@@ -1403,7 +1403,7 @@ static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
/* The .unbind callback */ /* The .unbind callback */
static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier, static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct cio2_device *cio2 = to_cio2_device(notifier); struct cio2_device *cio2 = to_cio2_device(notifier);
struct sensor_async_subdev *s_asd = to_sensor_asd(asd); struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
@@ -1417,11 +1417,11 @@ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
struct cio2_device *cio2 = to_cio2_device(notifier); struct cio2_device *cio2 = to_cio2_device(notifier);
struct device *dev = &cio2->pci_dev->dev; struct device *dev = &cio2->pci_dev->dev;
struct sensor_async_subdev *s_asd; struct sensor_async_subdev *s_asd;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct cio2_queue *q; struct cio2_queue *q;
int ret; int ret;
list_for_each_entry(asd, &cio2->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &cio2->notifier.asc_list, asc_entry) {
s_asd = to_sensor_asd(asd); s_asd = to_sensor_asd(asd);
q = &cio2->queue[s_asd->csi2.port]; q = &cio2->queue[s_asd->csi2.port];

View File

@@ -1120,7 +1120,7 @@ static int isi_graph_notify_complete(struct v4l2_async_notifier *notifier)
static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier, static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct atmel_isi *isi = notifier_to_isi(notifier); struct atmel_isi *isi = notifier_to_isi(notifier);
@@ -1132,7 +1132,7 @@ static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
static int isi_graph_notify_bound(struct v4l2_async_notifier *notifier, static int isi_graph_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct atmel_isi *isi = notifier_to_isi(notifier); struct atmel_isi *isi = notifier_to_isi(notifier);
@@ -1151,7 +1151,7 @@ static const struct v4l2_async_notifier_operations isi_graph_notify_ops = {
static int isi_graph_init(struct atmel_isi *isi) static int isi_graph_init(struct atmel_isi *isi)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *ep; struct device_node *ep;
int ret; int ret;
@@ -1163,7 +1163,7 @@ static int isi_graph_init(struct atmel_isi *isi)
asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier, asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
of_fwnode_handle(ep), of_fwnode_handle(ep),
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(ep); of_node_put(ep);
if (IS_ERR(asd)) if (IS_ERR(asd))

View File

@@ -313,7 +313,7 @@ static const struct v4l2_subdev_ops csi2rx_subdev_ops = {
static int csi2rx_async_bound(struct v4l2_async_notifier *notifier, static int csi2rx_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *s_subdev, struct v4l2_subdev *s_subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct v4l2_subdev *subdev = notifier->sd; struct v4l2_subdev *subdev = notifier->sd;
struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev); struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
@@ -440,7 +440,7 @@ static int csi2rx_get_resources(struct csi2rx_priv *csi2rx,
static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx) static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
{ {
struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 }; struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *fwh; struct fwnode_handle *fwh;
struct device_node *ep; struct device_node *ep;
int ret; int ret;
@@ -477,7 +477,7 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
v4l2_async_nf_init(&csi2rx->notifier); v4l2_async_nf_init(&csi2rx->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh, asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(ep); of_node_put(ep);
if (IS_ERR(asd)) if (IS_ERR(asd))
return PTR_ERR(asd); return PTR_ERR(asd);

View File

@@ -2044,7 +2044,7 @@ static const struct video_device pxa_camera_videodev_template = {
static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier, static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
int err; int err;
struct v4l2_device *v4l2_dev = notifier->v4l2_dev; struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
@@ -2123,7 +2123,7 @@ out:
static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier, static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(notifier->v4l2_dev); struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(notifier->v4l2_dev);
@@ -2197,7 +2197,7 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
struct pxa_camera_dev *pcdev) struct pxa_camera_dev *pcdev)
{ {
u32 mclk_rate; u32 mclk_rate;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
struct v4l2_fwnode_endpoint ep = { .bus_type = 0 }; struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
int err = of_property_read_u32(np, "clock-frequency", int err = of_property_read_u32(np, "clock-frequency",
@@ -2252,7 +2252,7 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier, asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier,
of_fwnode_handle(np), of_fwnode_handle(np),
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) if (IS_ERR(asd))
err = PTR_ERR(asd); err = PTR_ERR(asd);
out: out:
@@ -2299,14 +2299,14 @@ static int pxa_camera_probe(struct platform_device *pdev)
pcdev->res = res; pcdev->res = res;
pcdev->pdata = pdev->dev.platform_data; pcdev->pdata = pdev->dev.platform_data;
if (pcdev->pdata) { if (pcdev->pdata) {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
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_nf_add_i2c(&pcdev->notifier, asd = v4l2_async_nf_add_i2c(&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_connection);
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) {

View File

@@ -478,7 +478,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
int ret; int ret;
struct cafe_camera *cam; struct cafe_camera *cam;
struct mcam_camera *mcam; struct mcam_camera *mcam;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct i2c_client *i2c_dev; struct i2c_client *i2c_dev;
/* /*
@@ -540,7 +540,8 @@ static int cafe_pci_probe(struct pci_dev *pdev,
asd = v4l2_async_nf_add_i2c(&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, struct v4l2_async_subdev); ov7670_info.addr,
struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto out_smbus_shutdown; goto out_smbus_shutdown;

View File

@@ -1756,7 +1756,7 @@ EXPORT_SYMBOL_GPL(mccic_irq);
*/ */
static int mccic_notify_bound(struct v4l2_async_notifier *notifier, static int mccic_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd) struct v4l2_subdev *subdev, struct v4l2_async_connection *asd)
{ {
struct mcam_camera *cam = notifier_to_mcam(notifier); struct mcam_camera *cam = notifier_to_mcam(notifier);
int ret; int ret;
@@ -1801,7 +1801,7 @@ out:
} }
static void mccic_notify_unbind(struct v4l2_async_notifier *notifier, static void mccic_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd) struct v4l2_subdev *subdev, struct v4l2_async_connection *asd)
{ {
struct mcam_camera *cam = notifier_to_mcam(notifier); struct mcam_camera *cam = notifier_to_mcam(notifier);

View File

@@ -180,7 +180,7 @@ static int mmpcam_probe(struct platform_device *pdev)
struct resource *res; struct resource *res;
struct fwnode_handle *ep; struct fwnode_handle *ep;
struct mmp_camera_platform_data *pdata; struct mmp_camera_platform_data *pdata;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret; int ret;
cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL); cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL);
@@ -241,7 +241,7 @@ static int mmpcam_probe(struct platform_device *pdev)
v4l2_async_nf_init(&mcam->notifier); v4l2_async_nf_init(&mcam->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);

View File

@@ -476,7 +476,7 @@ static const struct v4l2_subdev_ops csi2dc_subdev_ops = {
static int csi2dc_async_bound(struct v4l2_async_notifier *notifier, static int csi2dc_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct csi2dc_device *csi2dc = container_of(notifier, struct csi2dc_device *csi2dc = container_of(notifier,
struct csi2dc_device, notifier); struct csi2dc_device, notifier);
@@ -520,14 +520,14 @@ static const struct v4l2_async_notifier_operations csi2dc_async_ops = {
static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc, static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc,
struct fwnode_handle *input_fwnode) struct fwnode_handle *input_fwnode)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret = 0; int ret = 0;
v4l2_async_nf_init(&csi2dc->notifier); v4l2_async_nf_init(&csi2dc->notifier);
asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier, asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier,
input_fwnode, input_fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(input_fwnode); fwnode_handle_put(input_fwnode);

View File

@@ -1712,7 +1712,7 @@ static int isc_ctrl_init(struct isc_device *isc)
static int isc_async_bound(struct v4l2_async_notifier *notifier, static int isc_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct isc_device *isc = container_of(notifier->v4l2_dev, struct isc_device *isc = container_of(notifier->v4l2_dev,
struct isc_device, v4l2_dev); struct isc_device, v4l2_dev);
@@ -1741,7 +1741,7 @@ static int isc_async_bound(struct v4l2_async_notifier *notifier,
static void isc_async_unbind(struct v4l2_async_notifier *notifier, static void isc_async_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct isc_device *isc = container_of(notifier->v4l2_dev, struct isc_device *isc = container_of(notifier->v4l2_dev,
struct isc_device, v4l2_dev); struct isc_device, v4l2_dev);

View File

@@ -44,7 +44,7 @@ struct isc_buffer {
struct isc_subdev_entity { struct isc_subdev_entity {
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *epn; struct device_node *epn;
struct v4l2_async_notifier notifier; struct v4l2_async_notifier notifier;

View File

@@ -523,7 +523,7 @@ static int microchip_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_connection *asd;
struct fwnode_handle *fwnode = struct fwnode_handle *fwnode =
of_fwnode_handle(subdev_entity->epn); of_fwnode_handle(subdev_entity->epn);
@@ -531,7 +531,7 @@ static int microchip_isc_probe(struct platform_device *pdev)
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
fwnode, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(subdev_entity->epn); of_node_put(subdev_entity->epn);
subdev_entity->epn = NULL; subdev_entity->epn = NULL;

View File

@@ -513,7 +513,7 @@ 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_connection *asd;
struct fwnode_handle *fwnode = struct fwnode_handle *fwnode =
of_fwnode_handle(subdev_entity->epn); of_fwnode_handle(subdev_entity->epn);
@@ -521,7 +521,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
fwnode, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(subdev_entity->epn); of_node_put(subdev_entity->epn);
subdev_entity->epn = NULL; subdev_entity->epn = NULL;

View File

@@ -1229,7 +1229,7 @@ mipi_notifier_to_csis_state(struct v4l2_async_notifier *n)
static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier, static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct mipi_csis_device *csis = mipi_notifier_to_csis_state(notifier); struct mipi_csis_device *csis = mipi_notifier_to_csis_state(notifier);
struct media_pad *sink = &csis->sd.entity.pads[CSIS_PAD_SINK]; struct media_pad *sink = &csis->sd.entity.pads[CSIS_PAD_SINK];
@@ -1246,7 +1246,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_CSI2_DPHY, .bus_type = V4L2_MBUS_CSI2_DPHY,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
unsigned int i; unsigned int i;
int ret; int ret;
@@ -1277,7 +1277,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
dev_dbg(csis->dev, "flags: 0x%08x\n", csis->bus.flags); dev_dbg(csis->dev, "flags: 0x%08x\n", csis->bus.flags);
asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto err_parse; goto err_parse;

View File

@@ -2032,7 +2032,7 @@ static const struct media_entity_operations imx7_csi_entity_ops = {
static int imx7_csi_notify_bound(struct v4l2_async_notifier *notifier, static int imx7_csi_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct imx7_csi *csi = imx7_csi_notifier_to_dev(notifier); struct imx7_csi *csi = imx7_csi_notifier_to_dev(notifier);
struct media_pad *sink = &csi->sd.entity.pads[IMX7_CSI_PAD_SINK]; struct media_pad *sink = &csi->sd.entity.pads[IMX7_CSI_PAD_SINK];
@@ -2057,7 +2057,7 @@ static const struct v4l2_async_notifier_operations imx7_csi_notify_ops = {
static int imx7_csi_async_register(struct imx7_csi *csi) static int imx7_csi_async_register(struct imx7_csi *csi)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
int ret; int ret;
@@ -2072,7 +2072,7 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
} }
asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);

View File

@@ -30,12 +30,12 @@
*/ */
struct mxc_isi_async_subdev { struct mxc_isi_async_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
unsigned int port; unsigned int port;
}; };
static inline struct mxc_isi_async_subdev * static inline struct mxc_isi_async_subdev *
asd_to_mxc_isi_async_subdev(struct v4l2_async_subdev *asd) asd_to_mxc_isi_async_subdev(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct mxc_isi_async_subdev, asd); return container_of(asd, struct mxc_isi_async_subdev, asd);
}; };
@@ -48,12 +48,12 @@ notifier_to_mxc_isi_dev(struct v4l2_async_notifier *n)
static int mxc_isi_async_notifier_bound(struct v4l2_async_notifier *notifier, static int mxc_isi_async_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
const unsigned int link_flags = MEDIA_LNK_FL_IMMUTABLE const unsigned int link_flags = MEDIA_LNK_FL_IMMUTABLE
| MEDIA_LNK_FL_ENABLED; | MEDIA_LNK_FL_ENABLED;
struct mxc_isi_dev *isi = notifier_to_mxc_isi_dev(notifier); struct mxc_isi_dev *isi = notifier_to_mxc_isi_dev(notifier);
struct mxc_isi_async_subdev *masd = asd_to_mxc_isi_async_subdev(asd); struct mxc_isi_async_subdev *masd = asd_to_mxc_isi_async_subdev(asc);
struct media_pad *pad = &isi->crossbar.pads[masd->port]; struct media_pad *pad = &isi->crossbar.pads[masd->port];
struct device_link *link; struct device_link *link;

View File

@@ -567,7 +567,7 @@ mipi_notifier_to_csi2_state(struct v4l2_async_notifier *n)
static int imx8mq_mipi_csi_notify_bound(struct v4l2_async_notifier *notifier, static int imx8mq_mipi_csi_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct csi_state *state = mipi_notifier_to_csi2_state(notifier); struct csi_state *state = mipi_notifier_to_csi2_state(notifier);
struct media_pad *sink = &state->sd.entity.pads[MIPI_CSI2_PAD_SINK]; struct media_pad *sink = &state->sd.entity.pads[MIPI_CSI2_PAD_SINK];
@@ -587,7 +587,7 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_CSI2_DPHY, .bus_type = V4L2_MBUS_CSI2_DPHY,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
unsigned int i; unsigned int i;
int ret; int ret;
@@ -619,7 +619,7 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
state->bus.flags); state->bus.flags);
asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto err_parse; goto err_parse;

View File

@@ -1383,7 +1383,7 @@ static void camss_unregister_entities(struct camss *camss)
static int camss_subdev_notifier_bound(struct v4l2_async_notifier *async, static int camss_subdev_notifier_bound(struct v4l2_async_notifier *async,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct camss *camss = container_of(async, struct camss, notifier); struct camss *camss = container_of(async, struct camss, notifier);
struct camss_async_subdev *csd = struct camss_async_subdev *csd =

View File

@@ -113,7 +113,7 @@ struct camss_camera_interface {
}; };
struct camss_async_subdev { struct camss_async_subdev {
struct v4l2_async_subdev asd; /* must be first */ struct v4l2_async_connection asd; /* must be first */
struct camss_camera_interface interface; struct camss_camera_interface interface;
}; };

View File

@@ -326,7 +326,7 @@ static const struct v4l2_subdev_ops rcar_isp_subdev_ops = {
static int risp_notify_bound(struct v4l2_async_notifier *notifier, static int risp_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rcar_isp *isp = notifier_to_isp(notifier); struct rcar_isp *isp = notifier_to_isp(notifier);
int pad; int pad;
@@ -350,7 +350,7 @@ static int risp_notify_bound(struct v4l2_async_notifier *notifier,
static void risp_notify_unbind(struct v4l2_async_notifier *notifier, static void risp_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rcar_isp *isp = notifier_to_isp(notifier); struct rcar_isp *isp = notifier_to_isp(notifier);
@@ -366,7 +366,7 @@ static const struct v4l2_async_notifier_operations risp_notify_ops = {
static int risp_parse_dt(struct rcar_isp *isp) static int risp_parse_dt(struct rcar_isp *isp)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
struct fwnode_handle *ep; struct fwnode_handle *ep;
unsigned int id; unsigned int id;
@@ -396,7 +396,7 @@ static int risp_parse_dt(struct rcar_isp *isp)
isp->notifier.ops = &risp_notify_ops; isp->notifier.ops = &risp_notify_ops;
asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode, asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
if (IS_ERR(asd)) if (IS_ERR(asd))
return PTR_ERR(asd); return PTR_ERR(asd);

View File

@@ -251,7 +251,7 @@ static int rvin_group_notify_complete(struct v4l2_async_notifier *notifier)
static void rvin_group_notify_unbind(struct v4l2_async_notifier *notifier, static void rvin_group_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev); struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev);
unsigned int i; unsigned int i;
@@ -263,7 +263,7 @@ static void rvin_group_notify_unbind(struct v4l2_async_notifier *notifier,
mutex_lock(&vin->group->lock); mutex_lock(&vin->group->lock);
for (i = 0; i < RVIN_CSI_MAX; i++) { for (i = 0; i < RVIN_CSI_MAX; i++) {
if (vin->group->remotes[i].asd != asd) if (vin->group->remotes[i].asc != asc)
continue; continue;
vin->group->remotes[i].subdev = NULL; vin->group->remotes[i].subdev = NULL;
vin_dbg(vin, "Unbind %s from slot %u\n", subdev->name, i); vin_dbg(vin, "Unbind %s from slot %u\n", subdev->name, i);
@@ -277,7 +277,7 @@ static void rvin_group_notify_unbind(struct v4l2_async_notifier *notifier,
static int rvin_group_notify_bound(struct v4l2_async_notifier *notifier, static int rvin_group_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev); struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev);
unsigned int i; unsigned int i;
@@ -285,7 +285,7 @@ static int rvin_group_notify_bound(struct v4l2_async_notifier *notifier,
mutex_lock(&vin->group->lock); mutex_lock(&vin->group->lock);
for (i = 0; i < RVIN_CSI_MAX; i++) { for (i = 0; i < RVIN_CSI_MAX; i++) {
if (vin->group->remotes[i].asd != asd) if (vin->group->remotes[i].asc != asc)
continue; continue;
vin->group->remotes[i].subdev = subdev; vin->group->remotes[i].subdev = subdev;
vin_dbg(vin, "Bound %s to slot %u\n", subdev->name, i); vin_dbg(vin, "Bound %s to slot %u\n", subdev->name, i);
@@ -310,7 +310,7 @@ static int rvin_group_parse_of(struct rvin_dev *vin, unsigned int port,
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_CSI2_DPHY, .bus_type = V4L2_MBUS_CSI2_DPHY,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
int ret; int ret;
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), port, id, 0); ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), port, id, 0);
@@ -326,14 +326,14 @@ static int rvin_group_parse_of(struct rvin_dev *vin, unsigned int port,
goto out; goto out;
} }
asd = v4l2_async_nf_add_fwnode(&vin->group->notifier, fwnode, asc = v4l2_async_nf_add_fwnode(&vin->group->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asc)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asc);
goto out; goto out;
} }
vin->group->remotes[vep.base.id].asd = asd; vin->group->remotes[vep.base.id].asc = asc;
vin_dbg(vin, "Add group OF device %pOF to slot %u\n", vin_dbg(vin, "Add group OF device %pOF to slot %u\n",
to_of_node(fwnode), vep.base.id); to_of_node(fwnode), vep.base.id);
@@ -386,7 +386,7 @@ static int rvin_group_notifier_init(struct rvin_dev *vin, unsigned int port,
continue; continue;
for (id = 0; id < max_id; id++) { for (id = 0; id < max_id; id++) {
if (vin->group->remotes[id].asd) if (vin->group->remotes[id].asc)
continue; continue;
ret = rvin_group_parse_of(vin->group->vin[i], port, id); ret = rvin_group_parse_of(vin->group->vin[i], port, id);
@@ -395,7 +395,7 @@ static int rvin_group_notifier_init(struct rvin_dev *vin, unsigned int port,
} }
} }
if (list_empty(&vin->group->notifier.asd_list)) if (list_empty(&vin->group->notifier.asc_list))
return 0; return 0;
vin->group->notifier.ops = &rvin_group_notify_ops; vin->group->notifier.ops = &rvin_group_notify_ops;
@@ -610,7 +610,7 @@ static int rvin_parallel_notify_complete(struct v4l2_async_notifier *notifier)
static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier, static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev); struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev);
@@ -623,7 +623,7 @@ static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier,
static int rvin_parallel_notify_bound(struct v4l2_async_notifier *notifier, static int rvin_parallel_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev); struct rvin_dev *vin = v4l2_dev_to_vin(notifier->v4l2_dev);
int ret; int ret;
@@ -655,7 +655,7 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_UNKNOWN, .bus_type = V4L2_MBUS_UNKNOWN,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
int ret; int ret;
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), 0, 0, 0); ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), 0, 0, 0);
@@ -686,14 +686,14 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
goto out; goto out;
} }
asd = v4l2_async_nf_add_fwnode(&vin->notifier, fwnode, asc = v4l2_async_nf_add_fwnode(&vin->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asc)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asc);
goto out; goto out;
} }
vin->parallel.asd = asd; vin->parallel.asc = asc;
vin_dbg(vin, "Add parallel OF device %pOF\n", to_of_node(fwnode)); vin_dbg(vin, "Add parallel OF device %pOF\n", to_of_node(fwnode));
out: out:
@@ -718,11 +718,11 @@ static int rvin_parallel_init(struct rvin_dev *vin)
if (ret) if (ret)
return ret; return ret;
if (!vin->parallel.asd) if (!vin->parallel.asc)
return -ENODEV; return -ENODEV;
vin_dbg(vin, "Found parallel subdevice %pOF\n", vin_dbg(vin, "Found parallel subdevice %pOF\n",
to_of_node(vin->parallel.asd->match.fwnode)); to_of_node(vin->parallel.asc->match.fwnode));
vin->notifier.ops = &rvin_parallel_notify_ops; vin->notifier.ops = &rvin_parallel_notify_ops;
ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier); ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier);

View File

@@ -988,12 +988,12 @@ static irqreturn_t rcsi2_irq_thread(int irq, void *data)
static int rcsi2_notify_bound(struct v4l2_async_notifier *notifier, static int rcsi2_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rcar_csi2 *priv = notifier_to_csi2(notifier); struct rcar_csi2 *priv = notifier_to_csi2(notifier);
int pad; int pad;
pad = media_entity_get_fwnode_pad(&subdev->entity, asd->match.fwnode, pad = media_entity_get_fwnode_pad(&subdev->entity, asc->match.fwnode,
MEDIA_PAD_FL_SOURCE); MEDIA_PAD_FL_SOURCE);
if (pad < 0) { if (pad < 0) {
dev_err(priv->dev, "Failed to find pad for %s\n", subdev->name); dev_err(priv->dev, "Failed to find pad for %s\n", subdev->name);
@@ -1013,7 +1013,7 @@ static int rcsi2_notify_bound(struct v4l2_async_notifier *notifier,
static void rcsi2_notify_unbind(struct v4l2_async_notifier *notifier, static void rcsi2_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rcar_csi2 *priv = notifier_to_csi2(notifier); struct rcar_csi2 *priv = notifier_to_csi2(notifier);
@@ -1090,7 +1090,7 @@ static int rcsi2_parse_v4l2(struct rcar_csi2 *priv,
static int rcsi2_parse_dt(struct rcar_csi2 *priv) static int rcsi2_parse_dt(struct rcar_csi2 *priv)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
struct fwnode_handle *ep; struct fwnode_handle *ep;
struct v4l2_fwnode_endpoint v4l2_ep = { struct v4l2_fwnode_endpoint v4l2_ep = {
@@ -1125,11 +1125,11 @@ static int rcsi2_parse_dt(struct rcar_csi2 *priv)
v4l2_async_nf_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_nf_add_fwnode(&priv->notifier, fwnode, asc = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
if (IS_ERR(asd)) if (IS_ERR(asc))
return PTR_ERR(asd); return PTR_ERR(asc);
ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier); ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier);
if (ret) if (ret)

View File

@@ -106,7 +106,7 @@ struct rvin_video_format {
/** /**
* struct rvin_parallel_entity - Parallel video input endpoint descriptor * struct rvin_parallel_entity - Parallel video input endpoint descriptor
* @asd: sub-device descriptor for async framework * @asc: async connection descriptor for async framework
* @subdev: subdevice matched using async framework * @subdev: subdevice matched using async framework
* @mbus_type: media bus type * @mbus_type: media bus type
* @bus: media bus parallel configuration * @bus: media bus parallel configuration
@@ -115,7 +115,7 @@ struct rvin_video_format {
* *
*/ */
struct rvin_parallel_entity { struct rvin_parallel_entity {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
enum v4l2_mbus_type mbus_type; enum v4l2_mbus_type mbus_type;
@@ -272,10 +272,10 @@ struct rvin_dev {
* *
* @lock: protects the count, notifier, vin and csi members * @lock: protects the count, notifier, vin and csi members
* @count: number of enabled VIN instances found in DT * @count: number of enabled VIN instances found in DT
* @notifier: group notifier for CSI-2 async subdevices * @notifier: group notifier for CSI-2 async connections
* @vin: VIN instances which are part of the group * @vin: VIN instances which are part of the group
* @link_setup: Callback to create all links for the media graph * @link_setup: Callback to create all links for the media graph
* @remotes: array of pairs of fwnode and subdev pointers * @remotes: array of pairs of async connection and subdev pointers
* to all remote subdevices. * to all remote subdevices.
*/ */
struct rvin_group { struct rvin_group {
@@ -291,7 +291,7 @@ struct rvin_group {
int (*link_setup)(struct rvin_dev *vin); int (*link_setup)(struct rvin_dev *vin);
struct { struct {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
} remotes[RVIN_REMOTES_MAX]; } remotes[RVIN_REMOTES_MAX];
}; };

View File

@@ -1098,7 +1098,7 @@ static void rcar_drif_sdr_unregister(struct rcar_drif_sdr *sdr)
/* Sub-device bound callback */ /* Sub-device bound callback */
static int rcar_drif_notify_bound(struct v4l2_async_notifier *notifier, static int rcar_drif_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rcar_drif_sdr *sdr = struct rcar_drif_sdr *sdr =
container_of(notifier, struct rcar_drif_sdr, notifier); container_of(notifier, struct rcar_drif_sdr, notifier);
@@ -1113,7 +1113,7 @@ static int rcar_drif_notify_bound(struct v4l2_async_notifier *notifier,
/* Sub-device unbind callback */ /* Sub-device unbind callback */
static void rcar_drif_notify_unbind(struct v4l2_async_notifier *notifier, static void rcar_drif_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rcar_drif_sdr *sdr = struct rcar_drif_sdr *sdr =
container_of(notifier, struct rcar_drif_sdr, notifier); container_of(notifier, struct rcar_drif_sdr, notifier);
@@ -1206,7 +1206,7 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
{ {
struct v4l2_async_notifier *notifier = &sdr->notifier; struct v4l2_async_notifier *notifier = &sdr->notifier;
struct fwnode_handle *fwnode, *ep; struct fwnode_handle *fwnode, *ep;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
v4l2_async_nf_init(notifier); v4l2_async_nf_init(notifier);
@@ -1226,7 +1226,7 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
} }
asd = v4l2_async_nf_add_fwnode(notifier, fwnode, asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
if (IS_ERR(asd)) if (IS_ERR(asd))
return PTR_ERR(asd); return PTR_ERR(asd);

View File

@@ -151,7 +151,7 @@ static inline struct ceu_buffer *vb2_to_ceu(struct vb2_v4l2_buffer *vbuf)
* ceu_subdev - Wraps v4l2 sub-device and provides async subdevice. * ceu_subdev - Wraps v4l2 sub-device and provides async subdevice.
*/ */
struct ceu_subdev { struct ceu_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
struct v4l2_subdev *v4l2_sd; struct v4l2_subdev *v4l2_sd;
/* per-subdevice mbus configuration options */ /* per-subdevice mbus configuration options */
@@ -159,7 +159,7 @@ struct ceu_subdev {
struct ceu_mbus_fmt mbus_fmt; struct ceu_mbus_fmt mbus_fmt;
}; };
static struct ceu_subdev *to_ceu_subdev(struct v4l2_async_subdev *asd) static struct ceu_subdev *to_ceu_subdev(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct ceu_subdev, asd); return container_of(asd, struct ceu_subdev, asd);
} }
@@ -1374,7 +1374,7 @@ static void ceu_vdev_release(struct video_device *vdev)
static int ceu_notify_bound(struct v4l2_async_notifier *notifier, static int ceu_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *v4l2_sd, struct v4l2_subdev *v4l2_sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct v4l2_device *v4l2_dev = notifier->v4l2_dev; struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
struct ceu_device *ceudev = v4l2_to_ceu(v4l2_dev); struct ceu_device *ceudev = v4l2_to_ceu(v4l2_dev);

View File

@@ -92,7 +92,7 @@ static int rzg2l_cru_group_notify_complete(struct v4l2_async_notifier *notifier)
static void rzg2l_cru_group_notify_unbind(struct v4l2_async_notifier *notifier, static void rzg2l_cru_group_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rzg2l_cru_dev *cru = notifier_to_cru(notifier); struct rzg2l_cru_dev *cru = notifier_to_cru(notifier);
@@ -110,7 +110,7 @@ static void rzg2l_cru_group_notify_unbind(struct v4l2_async_notifier *notifier,
static int rzg2l_cru_group_notify_bound(struct v4l2_async_notifier *notifier, static int rzg2l_cru_group_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rzg2l_cru_dev *cru = notifier_to_cru(notifier); struct rzg2l_cru_dev *cru = notifier_to_cru(notifier);
@@ -138,7 +138,7 @@ static int rzg2l_cru_mc_parse_of(struct rzg2l_cru_dev *cru)
.bus_type = V4L2_MBUS_CSI2_DPHY, .bus_type = V4L2_MBUS_CSI2_DPHY,
}; };
struct fwnode_handle *ep, *fwnode; struct fwnode_handle *ep, *fwnode;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret; int ret;
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(cru->dev), 1, 0, 0); ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(cru->dev), 1, 0, 0);
@@ -162,7 +162,7 @@ static int rzg2l_cru_mc_parse_of(struct rzg2l_cru_dev *cru)
} }
asd = v4l2_async_nf_add_fwnode(&cru->notifier, fwnode, asd = v4l2_async_nf_add_fwnode(&cru->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto out; goto out;
@@ -190,7 +190,7 @@ static int rzg2l_cru_mc_parse_of_graph(struct rzg2l_cru_dev *cru)
cru->notifier.ops = &rzg2l_cru_async_ops; cru->notifier.ops = &rzg2l_cru_async_ops;
if (list_empty(&cru->notifier.asd_list)) if (list_empty(&cru->notifier.asc_list))
return 0; return 0;
ret = v4l2_async_nf_register(&cru->v4l2_dev, &cru->notifier); ret = v4l2_async_nf_register(&cru->v4l2_dev, &cru->notifier);

View File

@@ -45,7 +45,7 @@ enum rzg2l_cru_dma_state {
}; };
struct rzg2l_cru_csi { struct rzg2l_cru_csi {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
u32 channel; u32 channel;
}; };

View File

@@ -599,7 +599,7 @@ static const struct v4l2_subdev_ops rzg2l_csi2_subdev_ops = {
static int rzg2l_csi2_notify_bound(struct v4l2_async_notifier *notifier, static int rzg2l_csi2_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier); struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier);
@@ -615,7 +615,7 @@ static int rzg2l_csi2_notify_bound(struct v4l2_async_notifier *notifier,
static void rzg2l_csi2_notify_unbind(struct v4l2_async_notifier *notifier, static void rzg2l_csi2_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier); struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier);
@@ -646,7 +646,7 @@ static int rzg2l_csi2_parse_dt(struct rzg2l_csi2 *csi2)
struct v4l2_fwnode_endpoint v4l2_ep = { struct v4l2_fwnode_endpoint v4l2_ep = {
.bus_type = V4L2_MBUS_CSI2_DPHY .bus_type = V4L2_MBUS_CSI2_DPHY
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
struct fwnode_handle *ep; struct fwnode_handle *ep;
int ret; int ret;
@@ -677,7 +677,7 @@ static int rzg2l_csi2_parse_dt(struct rzg2l_csi2 *csi2)
csi2->notifier.ops = &rzg2l_csi2_notify_ops; csi2->notifier.ops = &rzg2l_csi2_notify_ops;
asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode, asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
if (IS_ERR(asd)) if (IS_ERR(asd))
return PTR_ERR(asd); return PTR_ERR(asd);

View File

@@ -148,7 +148,7 @@ struct rkisp1_info {
* @port: port number (0: MIPI, 1: Parallel) * @port: port number (0: MIPI, 1: Parallel)
*/ */
struct rkisp1_sensor_async { struct rkisp1_sensor_async {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
unsigned int index; unsigned int index;
struct fwnode_handle *source_ep; struct fwnode_handle *source_ep;
unsigned int lanes; unsigned int lanes;

View File

@@ -122,12 +122,12 @@ struct rkisp1_isr_data {
static int rkisp1_subdev_notifier_bound(struct v4l2_async_notifier *notifier, static int rkisp1_subdev_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct rkisp1_device *rkisp1 = struct rkisp1_device *rkisp1 =
container_of(notifier, struct rkisp1_device, notifier); container_of(notifier, struct rkisp1_device, notifier);
struct rkisp1_sensor_async *s_asd = struct rkisp1_sensor_async *s_asd =
container_of(asd, struct rkisp1_sensor_async, asd); container_of(asc, struct rkisp1_sensor_async, asd);
int source_pad; int source_pad;
int ret; int ret;
@@ -165,10 +165,10 @@ static int rkisp1_subdev_notifier_complete(struct v4l2_async_notifier *notifier)
return v4l2_device_register_subdev_nodes(&rkisp1->v4l2_dev); return v4l2_device_register_subdev_nodes(&rkisp1->v4l2_dev);
} }
static void rkisp1_subdev_notifier_destroy(struct v4l2_async_subdev *asd) static void rkisp1_subdev_notifier_destroy(struct v4l2_async_connection *asc)
{ {
struct rkisp1_sensor_async *rk_asd = struct rkisp1_sensor_async *rk_asd =
container_of(asd, struct rkisp1_sensor_async, asd); container_of(asc, struct rkisp1_sensor_async, asd);
fwnode_handle_put(rk_asd->source_ep); fwnode_handle_put(rk_asd->source_ep);
} }

View File

@@ -400,7 +400,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
int index = fmd->num_sensors; int index = fmd->num_sensors;
struct fimc_source_info *pd = &fmd->sensor[index].pdata; struct fimc_source_info *pd = &fmd->sensor[index].pdata;
struct device_node *rem, *np; struct device_node *rem, *np;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 }; struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
int ret; int ret;
@@ -465,7 +465,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
asd = v4l2_async_nf_add_fwnode_remote(&fmd->subdev_notifier, asd = v4l2_async_nf_add_fwnode_remote(&fmd->subdev_notifier,
of_fwnode_handle(ep), of_fwnode_handle(ep),
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(ep); of_node_put(ep);
@@ -1371,7 +1371,7 @@ err:
static int subdev_notifier_bound(struct v4l2_async_notifier *notifier, static int subdev_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct fimc_md *fmd = notifier_to_fimc_md(notifier); struct fimc_md *fmd = notifier_to_fimc_md(notifier);
struct fimc_sensor_info *si = NULL; struct fimc_sensor_info *si = NULL;

View File

@@ -82,7 +82,7 @@ struct fimc_camclk_info {
*/ */
struct fimc_sensor_info { struct fimc_sensor_info {
struct fimc_source_info pdata; struct fimc_source_info pdata;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
struct fimc_dev *host; struct fimc_dev *host;
}; };

View File

@@ -1837,7 +1837,7 @@ static int dcmi_graph_notify_complete(struct v4l2_async_notifier *notifier)
static void dcmi_graph_notify_unbind(struct v4l2_async_notifier *notifier, static void dcmi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier); struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
@@ -1849,7 +1849,7 @@ static void dcmi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
static int dcmi_graph_notify_bound(struct v4l2_async_notifier *notifier, static int dcmi_graph_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier); struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
unsigned int ret; unsigned int ret;
@@ -1887,7 +1887,7 @@ static const struct v4l2_async_notifier_operations dcmi_graph_notify_ops = {
static int dcmi_graph_init(struct stm32_dcmi *dcmi) static int dcmi_graph_init(struct stm32_dcmi *dcmi)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *ep; struct device_node *ep;
int ret; int ret;
@@ -1901,7 +1901,7 @@ static int dcmi_graph_init(struct stm32_dcmi *dcmi)
asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier, asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier,
of_fwnode_handle(ep), of_fwnode_handle(ep),
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(ep); of_node_put(ep);

View File

@@ -41,7 +41,7 @@ static const struct media_entity_operations sun4i_csi_video_entity_ops = {
static int sun4i_csi_notify_bound(struct v4l2_async_notifier *notifier, static int sun4i_csi_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct sun4i_csi *csi = container_of(notifier, struct sun4i_csi, struct sun4i_csi *csi = container_of(notifier, struct sun4i_csi,
notifier); notifier);
@@ -117,7 +117,7 @@ static int sun4i_csi_notifier_init(struct sun4i_csi *csi)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_PARALLEL, .bus_type = V4L2_MBUS_PARALLEL,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
int ret; int ret;
@@ -135,7 +135,7 @@ static int sun4i_csi_notifier_init(struct sun4i_csi *csi)
csi->bus = vep.bus.parallel; csi->bus = vep.bus.parallel;
asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto out; goto out;

View File

@@ -642,7 +642,7 @@ static int sun6i_csi_bridge_link(struct sun6i_csi_device *csi_dev,
static int static int
sun6i_csi_bridge_notifier_bound(struct v4l2_async_notifier *notifier, sun6i_csi_bridge_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *remote_subdev, struct v4l2_subdev *remote_subdev,
struct v4l2_async_subdev *async_subdev) struct v4l2_async_connection *async_subdev)
{ {
struct sun6i_csi_device *csi_dev = struct sun6i_csi_device *csi_dev =
container_of(notifier, struct sun6i_csi_device, container_of(notifier, struct sun6i_csi_device,

View File

@@ -34,7 +34,7 @@ struct sun6i_csi_bridge_source {
}; };
struct sun6i_csi_bridge_async_subdev { struct sun6i_csi_bridge_async_subdev {
struct v4l2_async_subdev async_subdev; struct v4l2_async_connection async_subdev;
struct sun6i_csi_bridge_source *source; struct sun6i_csi_bridge_source *source;
}; };

View File

@@ -407,7 +407,7 @@ static const struct media_entity_operations sun6i_mipi_csi2_entity_ops = {
static int static int
sun6i_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier, sun6i_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *remote_subdev, struct v4l2_subdev *remote_subdev,
struct v4l2_async_subdev *async_subdev) struct v4l2_async_connection *async_subdev)
{ {
struct v4l2_subdev *subdev = notifier->sd; struct v4l2_subdev *subdev = notifier->sd;
struct sun6i_mipi_csi2_device *csi2_dev = struct sun6i_mipi_csi2_device *csi2_dev =
@@ -461,7 +461,7 @@ sun6i_mipi_csi2_bridge_source_setup(struct sun6i_mipi_csi2_device *csi2_dev)
{ {
struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier; struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier;
struct v4l2_fwnode_endpoint *endpoint = &csi2_dev->bridge.endpoint; struct v4l2_fwnode_endpoint *endpoint = &csi2_dev->bridge.endpoint;
struct v4l2_async_subdev *subdev_async; struct v4l2_async_connection *subdev_async;
struct fwnode_handle *handle; struct fwnode_handle *handle;
struct device *dev = csi2_dev->dev; struct device *dev = csi2_dev->dev;
int ret; int ret;
@@ -479,7 +479,7 @@ sun6i_mipi_csi2_bridge_source_setup(struct sun6i_mipi_csi2_device *csi2_dev)
subdev_async = subdev_async =
v4l2_async_nf_add_fwnode_remote(notifier, handle, v4l2_async_nf_add_fwnode_remote(notifier, handle,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(subdev_async)) if (IS_ERR(subdev_async))
ret = PTR_ERR(subdev_async); ret = PTR_ERR(subdev_async);

View File

@@ -444,7 +444,7 @@ static const struct media_entity_operations sun8i_a83t_mipi_csi2_entity_ops = {
static int static int
sun8i_a83t_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier, sun8i_a83t_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *remote_subdev, struct v4l2_subdev *remote_subdev,
struct v4l2_async_subdev *async_subdev) struct v4l2_async_connection *async_subdev)
{ {
struct v4l2_subdev *subdev = notifier->sd; struct v4l2_subdev *subdev = notifier->sd;
struct sun8i_a83t_mipi_csi2_device *csi2_dev = struct sun8i_a83t_mipi_csi2_device *csi2_dev =
@@ -498,7 +498,7 @@ sun8i_a83t_mipi_csi2_bridge_source_setup(struct sun8i_a83t_mipi_csi2_device *csi
{ {
struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier; struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier;
struct v4l2_fwnode_endpoint *endpoint = &csi2_dev->bridge.endpoint; struct v4l2_fwnode_endpoint *endpoint = &csi2_dev->bridge.endpoint;
struct v4l2_async_subdev *subdev_async; struct v4l2_async_connection *subdev_async;
struct fwnode_handle *handle; struct fwnode_handle *handle;
struct device *dev = csi2_dev->dev; struct device *dev = csi2_dev->dev;
int ret; int ret;
@@ -516,7 +516,7 @@ sun8i_a83t_mipi_csi2_bridge_source_setup(struct sun8i_a83t_mipi_csi2_device *csi
subdev_async = subdev_async =
v4l2_async_nf_add_fwnode_remote(notifier, handle, v4l2_async_nf_add_fwnode_remote(notifier, handle,
struct v4l2_async_subdev); struct v4l2_async_connection);
if (IS_ERR(subdev_async)) if (IS_ERR(subdev_async))
ret = PTR_ERR(subdev_async); ret = PTR_ERR(subdev_async);

View File

@@ -2144,7 +2144,7 @@ static const struct v4l2_ioctl_ops vpfe_ioctl_ops = {
static int static int
vpfe_async_bound(struct v4l2_async_notifier *notifier, vpfe_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct vpfe_device *vpfe = container_of(notifier->v4l2_dev, struct vpfe_device *vpfe = container_of(notifier->v4l2_dev,
struct vpfe_device, v4l2_dev); struct vpfe_device, v4l2_dev);
@@ -2370,8 +2370,7 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpfe->notifier, pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpfe->notifier,
of_fwnode_handle(rem), of_fwnode_handle(rem),
struct struct v4l2_async_connection);
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;

View File

@@ -84,7 +84,7 @@ struct vpfe_config {
/* information about each subdev */ /* information about each subdev */
struct vpfe_subdev_info sub_devs[VPFE_MAX_SUBDEV]; struct vpfe_subdev_info sub_devs[VPFE_MAX_SUBDEV];
/* Flat array, arranged in groups */ /* Flat array, arranged in groups */
struct v4l2_async_subdev *asd[VPFE_MAX_SUBDEV]; struct v4l2_async_connection *asd[VPFE_MAX_SUBDEV];
}; };
struct vpfe_cap_buffer { struct vpfe_cap_buffer {

View File

@@ -774,19 +774,19 @@ static irqreturn_t cal_irq(int irq_cal, void *data)
*/ */
struct cal_v4l2_async_subdev { struct cal_v4l2_async_subdev {
struct v4l2_async_subdev asd; /* Must be first */ struct v4l2_async_connection asd; /* Must be first */
struct cal_camerarx *phy; struct cal_camerarx *phy;
}; };
static inline struct cal_v4l2_async_subdev * static inline struct cal_v4l2_async_subdev *
to_cal_asd(struct v4l2_async_subdev *asd) to_cal_asd(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct cal_v4l2_async_subdev, asd); return container_of(asd, struct cal_v4l2_async_subdev, asd);
} }
static int cal_async_notifier_bound(struct v4l2_async_notifier *notifier, static int cal_async_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct cal_camerarx *phy = to_cal_asd(asd)->phy; struct cal_camerarx *phy = to_cal_asd(asd)->phy;
int pad; int pad;

View File

@@ -1363,12 +1363,12 @@ static inline void free_vpif_objs(void)
static int vpif_async_bound(struct v4l2_async_notifier *notifier, static int vpif_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
int i; int i;
for (i = 0; i < vpif_obj.config->asd_sizes[0]; i++) { for (i = 0; i < vpif_obj.config->asd_sizes[0]; i++) {
struct v4l2_async_subdev *_asd = vpif_obj.config->asd[i]; struct v4l2_async_connection *_asd = vpif_obj.config->asd[i];
const struct fwnode_handle *fwnode = _asd->match.fwnode; const struct fwnode_handle *fwnode = _asd->match.fwnode;
if (fwnode == subdev->fwnode) { if (fwnode == subdev->fwnode) {
@@ -1570,8 +1570,7 @@ vpif_capture_get_pdata(struct platform_device *pdev)
pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpif_obj.notifier, pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpif_obj.notifier,
of_fwnode_handle(rem), of_fwnode_handle(rem),
struct struct v4l2_async_connection);
v4l2_async_subdev);
if (IS_ERR(pdata->asd[i])) if (IS_ERR(pdata->asd[i]))
goto err_cleanup; goto err_cleanup;

View File

@@ -2024,12 +2024,12 @@ enum isp_of_phy {
static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async, static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct isp_device *isp = container_of(async, struct isp_device, struct isp_device *isp = container_of(async, struct isp_device,
notifier); notifier);
struct isp_bus_cfg *bus_cfg = struct isp_bus_cfg *bus_cfg =
&container_of(asd, struct isp_async_subdev, asd)->bus; &container_of(asc, struct isp_async_subdev, asd)->bus;
int ret; int ret;
mutex_lock(&isp->media_dev.graph_mutex); mutex_lock(&isp->media_dev.graph_mutex);

View File

@@ -220,7 +220,7 @@ struct isp_device {
}; };
struct isp_async_subdev { struct isp_async_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
struct isp_bus_cfg bus; struct isp_bus_cfg bus;
}; };

View File

@@ -314,7 +314,7 @@ static const struct v4l2_subdev_ops video_mux_subdev_ops = {
static int video_mux_notify_bound(struct v4l2_async_notifier *notifier, static int video_mux_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct video_mux *vmux = notifier_to_video_mux(notifier); struct video_mux *vmux = notifier_to_video_mux(notifier);
@@ -334,7 +334,7 @@ static int video_mux_async_register(struct video_mux *vmux,
v4l2_async_nf_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_connection *asd;
struct fwnode_handle *ep, *remote_ep; struct fwnode_handle *ep, *remote_ep;
ep = fwnode_graph_get_endpoint_by_id( ep = fwnode_graph_get_endpoint_by_id(
@@ -352,7 +352,7 @@ static int video_mux_async_register(struct video_mux *vmux,
fwnode_handle_put(remote_ep); fwnode_handle_put(remote_ep);
asd = v4l2_async_nf_add_fwnode_remote(&vmux->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&vmux->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);

View File

@@ -34,13 +34,13 @@
* @subdev: V4L2 subdev * @subdev: V4L2 subdev
*/ */
struct xvip_graph_entity { struct xvip_graph_entity {
struct v4l2_async_subdev asd; /* must be first */ struct v4l2_async_connection asd; /* must be first */
struct media_entity *entity; struct media_entity *entity;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
}; };
static inline struct xvip_graph_entity * static inline struct xvip_graph_entity *
to_xvip_entity(struct v4l2_async_subdev *asd) to_xvip_entity(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct xvip_graph_entity, asd); return container_of(asd, struct xvip_graph_entity, asd);
} }
@@ -54,9 +54,9 @@ xvip_graph_find_entity(struct xvip_composite_device *xdev,
const struct fwnode_handle *fwnode) const struct fwnode_handle *fwnode)
{ {
struct xvip_graph_entity *entity; struct xvip_graph_entity *entity;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
list_for_each_entry(asd, &xdev->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &xdev->notifier.asc_list, asc_entry) {
entity = to_xvip_entity(asd); entity = to_xvip_entity(asd);
if (entity->asd.match.fwnode == fwnode) if (entity->asd.match.fwnode == fwnode)
return entity; return entity;
@@ -285,13 +285,13 @@ static int xvip_graph_notify_complete(struct v4l2_async_notifier *notifier)
struct xvip_composite_device *xdev = struct xvip_composite_device *xdev =
container_of(notifier, struct xvip_composite_device, notifier); container_of(notifier, struct xvip_composite_device, notifier);
struct xvip_graph_entity *entity; struct xvip_graph_entity *entity;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret; int ret;
dev_dbg(xdev->dev, "notify complete, all subdevs registered\n"); dev_dbg(xdev->dev, "notify complete, all subdevs registered\n");
/* Create links for every entity. */ /* Create links for every entity. */
list_for_each_entry(asd, &xdev->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &xdev->notifier.asc_list, asc_entry) {
entity = to_xvip_entity(asd); entity = to_xvip_entity(asd);
ret = xvip_graph_build_one(xdev, entity); ret = xvip_graph_build_one(xdev, entity);
if (ret < 0) if (ret < 0)
@@ -312,9 +312,9 @@ static int xvip_graph_notify_complete(struct v4l2_async_notifier *notifier)
static int xvip_graph_notify_bound(struct v4l2_async_notifier *notifier, static int xvip_graph_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct xvip_graph_entity *entity = to_xvip_entity(asd); struct xvip_graph_entity *entity = to_xvip_entity(asc);
entity->entity = &subdev->entity; entity->entity = &subdev->entity;
entity->subdev = subdev; entity->subdev = subdev;
@@ -380,7 +380,7 @@ err_notifier_cleanup:
static int xvip_graph_parse(struct xvip_composite_device *xdev) static int xvip_graph_parse(struct xvip_composite_device *xdev)
{ {
struct xvip_graph_entity *entity; struct xvip_graph_entity *entity;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret; int ret;
/* /*
@@ -393,7 +393,7 @@ static int xvip_graph_parse(struct xvip_composite_device *xdev)
if (ret < 0) if (ret < 0)
return 0; return 0;
list_for_each_entry(asd, &xdev->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &xdev->notifier.asc_list, asc_entry) {
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) {
@@ -501,7 +501,7 @@ static int xvip_graph_init(struct xvip_composite_device *xdev)
goto done; goto done;
} }
if (list_empty(&xdev->notifier.asd_list)) { if (list_empty(&xdev->notifier.asc_list)) {
dev_err(xdev->dev, "no subdev found in graph\n"); dev_err(xdev->dev, "no subdev found in graph\n");
ret = -ENOENT; ret = -ENOENT;
goto done; goto done;

View File

@@ -28,22 +28,22 @@
static int v4l2_async_nf_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_connection *asc)
{ {
if (!n->ops || !n->ops->bound) if (!n->ops || !n->ops->bound)
return 0; return 0;
return n->ops->bound(n, subdev, asd); return n->ops->bound(n, subdev, asc);
} }
static void v4l2_async_nf_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_connection *asc)
{ {
if (!n->ops || !n->ops->unbind) if (!n->ops || !n->ops->unbind)
return; return;
n->ops->unbind(n, subdev, asd); n->ops->unbind(n, subdev, asc);
} }
static int v4l2_async_nf_call_complete(struct v4l2_async_notifier *n) static int v4l2_async_nf_call_complete(struct v4l2_async_notifier *n)
@@ -55,12 +55,12 @@ static int v4l2_async_nf_call_complete(struct v4l2_async_notifier *n)
} }
static void v4l2_async_nf_call_destroy(struct v4l2_async_notifier *n, static void v4l2_async_nf_call_destroy(struct v4l2_async_notifier *n,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
if (!n->ops || !n->ops->destroy) if (!n->ops || !n->ops->destroy)
return; return;
n->ops->destroy(asd); n->ops->destroy(asc);
} }
static bool match_i2c(struct v4l2_async_notifier *notifier, static bool match_i2c(struct v4l2_async_notifier *notifier,
@@ -151,18 +151,18 @@ static LIST_HEAD(subdev_list);
static LIST_HEAD(notifier_list); static LIST_HEAD(notifier_list);
static DEFINE_MUTEX(list_lock); static DEFINE_MUTEX(list_lock);
static struct v4l2_async_subdev * static struct v4l2_async_connection *
v4l2_async_find_match(struct v4l2_async_notifier *notifier, v4l2_async_find_match(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd) struct v4l2_subdev *sd)
{ {
bool (*match)(struct v4l2_async_notifier *notifier, bool (*match)(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_match_desc *match); struct v4l2_async_match_desc *match);
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
list_for_each_entry(asd, &notifier->waiting_list, waiting_entry) { list_for_each_entry(asc, &notifier->waiting_list, waiting_entry) {
/* bus_type has been verified valid before */ /* bus_type has been verified valid before */
switch (asd->match.type) { switch (asc->match.type) {
case V4L2_ASYNC_MATCH_TYPE_I2C: case V4L2_ASYNC_MATCH_TYPE_I2C:
match = match_i2c; match = match_i2c;
break; break;
@@ -176,8 +176,8 @@ v4l2_async_find_match(struct v4l2_async_notifier *notifier,
} }
/* match cannot be NULL here */ /* match cannot be NULL here */
if (match(notifier, sd, &asd->match)) if (match(notifier, sd, &asc->match))
return asd; return asc;
} }
return NULL; return NULL;
@@ -310,7 +310,7 @@ static int v4l2_async_create_ancillary_links(struct v4l2_async_notifier *n,
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,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asc)
{ {
struct v4l2_async_notifier *subdev_notifier; struct v4l2_async_notifier *subdev_notifier;
int ret; int ret;
@@ -319,7 +319,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_nf_call_bound(notifier, sd, asd); ret = v4l2_async_nf_call_bound(notifier, sd, asc);
if (ret < 0) { if (ret < 0) {
v4l2_device_unregister_subdev(sd); v4l2_device_unregister_subdev(sd);
return ret; return ret;
@@ -333,13 +333,13 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
*/ */
ret = v4l2_async_create_ancillary_links(notifier, sd); ret = v4l2_async_create_ancillary_links(notifier, sd);
if (ret) { if (ret) {
v4l2_async_nf_call_unbind(notifier, sd, asd); v4l2_async_nf_call_unbind(notifier, sd, asc);
v4l2_device_unregister_subdev(sd); v4l2_device_unregister_subdev(sd);
return ret; return ret;
} }
list_del(&asd->waiting_entry); list_del(&asc->waiting_entry);
sd->asd = asd; sd->asd = asc;
sd->notifier = notifier; sd->notifier = notifier;
/* Move from the global subdevice list to notifier's done */ /* Move from the global subdevice list to notifier's done */
@@ -380,17 +380,17 @@ v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier)
again: again:
list_for_each_entry(sd, &subdev_list, async_list) { list_for_each_entry(sd, &subdev_list, async_list) {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
int ret; int ret;
asd = v4l2_async_find_match(notifier, sd); asc = v4l2_async_find_match(notifier, sd);
if (!asd) if (!asc)
continue; continue;
dev_dbg(notifier_dev(notifier), dev_dbg(notifier_dev(notifier),
"v4l2-async: match found, subdev %s\n", sd->name); "v4l2-async: match found, subdev %s\n", sd->name);
ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd); ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asc);
if (ret < 0) if (ret < 0)
return ret; return ret;
@@ -448,11 +448,11 @@ static bool
v4l2_async_nf_has_async_match_entry(struct v4l2_async_notifier *notifier, v4l2_async_nf_has_async_match_entry(struct v4l2_async_notifier *notifier,
struct v4l2_async_match_desc *match) struct v4l2_async_match_desc *match)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
list_for_each_entry(asd, &notifier->waiting_list, waiting_entry) list_for_each_entry(asc, &notifier->waiting_list, waiting_entry)
if (v4l2_async_match_equal(&asd->match, match)) if (v4l2_async_match_equal(&asc->match, match))
return true; return true;
list_for_each_entry(sd, &notifier->done_list, async_list) { list_for_each_entry(sd, &notifier->done_list, async_list) {
@@ -477,19 +477,19 @@ v4l2_async_nf_has_async_match(struct v4l2_async_notifier *notifier,
struct v4l2_async_match_desc *match, struct v4l2_async_match_desc *match,
bool skip_self) bool skip_self)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
lockdep_assert_held(&list_lock); lockdep_assert_held(&list_lock);
/* Check that an asd is not being added more than once. */ /* Check that an asd is not being added more than once. */
list_for_each_entry(asd, &notifier->asd_list, asd_entry) { list_for_each_entry(asc, &notifier->asc_list, asc_entry) {
if (skip_self && &asd->match == match) if (skip_self && &asc->match == match)
continue; continue;
if (v4l2_async_match_equal(&asd->match, match)) if (v4l2_async_match_equal(&asc->match, match))
return true; return true;
} }
/* Check that an asd does not exist in other notifiers. */ /* Check that an asc does not exist in other notifiers. */
list_for_each_entry(notifier, &notifier_list, notifier_entry) list_for_each_entry(notifier, &notifier_list, notifier_entry)
if (v4l2_async_nf_has_async_match_entry(notifier, match)) if (v4l2_async_nf_has_async_match_entry(notifier, match))
return true; return true;
@@ -523,13 +523,13 @@ static int v4l2_async_nf_match_valid(struct v4l2_async_notifier *notifier,
void v4l2_async_nf_init(struct v4l2_async_notifier *notifier) void v4l2_async_nf_init(struct v4l2_async_notifier *notifier)
{ {
INIT_LIST_HEAD(&notifier->asd_list); INIT_LIST_HEAD(&notifier->asc_list);
} }
EXPORT_SYMBOL(v4l2_async_nf_init); EXPORT_SYMBOL(v4l2_async_nf_init);
static int __v4l2_async_nf_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_connection *asc;
int ret; int ret;
INIT_LIST_HEAD(&notifier->waiting_list); INIT_LIST_HEAD(&notifier->waiting_list);
@@ -537,12 +537,12 @@ static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
mutex_lock(&list_lock); mutex_lock(&list_lock);
list_for_each_entry(asd, &notifier->asd_list, asd_entry) { list_for_each_entry(asc, &notifier->asc_list, asc_entry) {
ret = v4l2_async_nf_match_valid(notifier, &asd->match, true); ret = v4l2_async_nf_match_valid(notifier, &asc->match, true);
if (ret) if (ret)
goto err_unlock; goto err_unlock;
list_add_tail(&asd->waiting_entry, &notifier->waiting_list); list_add_tail(&asc->waiting_entry, &notifier->waiting_list);
} }
ret = v4l2_async_nf_try_all_subdevs(notifier); ret = v4l2_async_nf_try_all_subdevs(notifier);
@@ -634,23 +634,23 @@ EXPORT_SYMBOL(v4l2_async_nf_unregister);
static void __v4l2_async_nf_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_connection *asc, *tmp;
if (!notifier || !notifier->asd_list.next) if (!notifier || !notifier->asc_list.next)
return; return;
list_for_each_entry_safe(asd, tmp, &notifier->asd_list, asd_entry) { list_for_each_entry_safe(asc, tmp, &notifier->asc_list, asc_entry) {
switch (asd->match.type) { switch (asc->match.type) {
case V4L2_ASYNC_MATCH_TYPE_FWNODE: case V4L2_ASYNC_MATCH_TYPE_FWNODE:
fwnode_handle_put(asd->match.fwnode); fwnode_handle_put(asc->match.fwnode);
break; break;
default: default:
break; break;
} }
list_del(&asd->asd_entry); list_del(&asc->asc_entry);
v4l2_async_nf_call_destroy(notifier, asd); v4l2_async_nf_call_destroy(notifier, asc);
kfree(asd); kfree(asc);
} }
} }
@@ -664,95 +664,94 @@ void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
} }
EXPORT_SYMBOL_GPL(v4l2_async_nf_cleanup); EXPORT_SYMBOL_GPL(v4l2_async_nf_cleanup);
static int __v4l2_async_nf_add_connection(struct v4l2_async_notifier *notifier,
static int __v4l2_async_nf_add_subdev(struct v4l2_async_notifier *notifier, struct v4l2_async_connection *asc)
struct v4l2_async_subdev *asd)
{ {
int ret; int ret;
mutex_lock(&list_lock); mutex_lock(&list_lock);
ret = v4l2_async_nf_match_valid(notifier, &asd->match, false); ret = v4l2_async_nf_match_valid(notifier, &asc->match, false);
if (ret) if (ret)
goto unlock; goto unlock;
list_add_tail(&asd->asd_entry, &notifier->asd_list); list_add_tail(&asc->asc_entry, &notifier->asc_list);
unlock: unlock:
mutex_unlock(&list_lock); mutex_unlock(&list_lock);
return ret; return ret;
} }
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_fwnode(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 asc_struct_size)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
int ret; int ret;
asd = kzalloc(asd_struct_size, GFP_KERNEL); asc = kzalloc(asc_struct_size, GFP_KERNEL);
if (!asd) if (!asc)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
asd->match.type = V4L2_ASYNC_MATCH_TYPE_FWNODE; asc->match.type = V4L2_ASYNC_MATCH_TYPE_FWNODE;
asd->match.fwnode = fwnode_handle_get(fwnode); asc->match.fwnode = fwnode_handle_get(fwnode);
ret = __v4l2_async_nf_add_subdev(notifier, asd); ret = __v4l2_async_nf_add_connection(notifier, asc);
if (ret) { if (ret) {
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
kfree(asd); kfree(asc);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
return asd; return asc;
} }
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode); EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode);
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_fwnode_remote(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 asc_struct_size)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
struct fwnode_handle *remote; struct fwnode_handle *remote;
remote = fwnode_graph_get_remote_endpoint(endpoint); remote = fwnode_graph_get_remote_endpoint(endpoint);
if (!remote) if (!remote)
return ERR_PTR(-ENOTCONN); return ERR_PTR(-ENOTCONN);
asd = __v4l2_async_nf_add_fwnode(notif, remote, asd_struct_size); asc = __v4l2_async_nf_add_fwnode(notif, remote, asc_struct_size);
/* /*
* Calling __v4l2_async_nf_add_fwnode 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 asc;
} }
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode_remote); EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_fwnode_remote);
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier, int adapter_id, __v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier, int adapter_id,
unsigned short address, unsigned int asd_struct_size) unsigned short address, unsigned int asc_struct_size)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
int ret; int ret;
asd = kzalloc(asd_struct_size, GFP_KERNEL); asc = kzalloc(asc_struct_size, GFP_KERNEL);
if (!asd) if (!asc)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
asd->match.type = V4L2_ASYNC_MATCH_TYPE_I2C; asc->match.type = V4L2_ASYNC_MATCH_TYPE_I2C;
asd->match.i2c.adapter_id = adapter_id; asc->match.i2c.adapter_id = adapter_id;
asd->match.i2c.address = address; asc->match.i2c.address = address;
ret = __v4l2_async_nf_add_subdev(notifier, asd); ret = __v4l2_async_nf_add_connection(notifier, asc);
if (ret) { if (ret) {
kfree(asd); kfree(asc);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
return asd; return asc;
} }
EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_i2c); EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_i2c);
@@ -784,16 +783,16 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
list_for_each_entry(notifier, &notifier_list, notifier_entry) { list_for_each_entry(notifier, &notifier_list, notifier_entry) {
struct v4l2_device *v4l2_dev = struct v4l2_device *v4l2_dev =
v4l2_async_nf_find_v4l2_dev(notifier); v4l2_async_nf_find_v4l2_dev(notifier);
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
if (!v4l2_dev) if (!v4l2_dev)
continue; continue;
asd = v4l2_async_find_match(notifier, sd); asc = v4l2_async_find_match(notifier, sd);
if (!asd) if (!asc)
continue; continue;
ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd); ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asc);
if (ret) if (ret)
goto err_unbind; goto err_unbind;
@@ -898,14 +897,14 @@ v4l2_async_nf_name(struct v4l2_async_notifier *notifier)
static int pending_subdevs_show(struct seq_file *s, void *data) static int pending_subdevs_show(struct seq_file *s, void *data)
{ {
struct v4l2_async_notifier *notif; struct v4l2_async_notifier *notif;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asc;
mutex_lock(&list_lock); mutex_lock(&list_lock);
list_for_each_entry(notif, &notifier_list, notifier_entry) { list_for_each_entry(notif, &notifier_list, notifier_entry) {
seq_printf(s, "%s:\n", v4l2_async_nf_name(notif)); seq_printf(s, "%s:\n", v4l2_async_nf_name(notif));
list_for_each_entry(asd, &notif->waiting_list, waiting_entry) list_for_each_entry(asc, &notif->waiting_list, waiting_entry)
print_waiting_match(s, &asd->match); print_waiting_match(s, &asc->match);
} }
mutex_unlock(&list_lock); mutex_unlock(&list_lock);

View File

@@ -831,10 +831,10 @@ static int v4l2_fwnode_reference_parse(struct device *dev,
!(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop, !(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop,
NULL, 0, index, &args)); NULL, 0, index, &args));
index++) { index++) {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
asd = v4l2_async_nf_add_fwnode(notifier, args.fwnode, asd = v4l2_async_nf_add_fwnode(notifier, args.fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
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 */
@@ -1136,10 +1136,10 @@ v4l2_fwnode_reference_parse_int_props(struct device *dev,
props, props,
nprops))); nprops)));
index++) { index++) {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
asd = v4l2_async_nf_add_fwnode(notifier, fwnode, asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(fwnode); fwnode_handle_put(fwnode);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);

View File

@@ -767,7 +767,7 @@ err_free_bridge:
/******* V4L2 sub-device asynchronous registration callbacks***********/ /******* V4L2 sub-device asynchronous registration callbacks***********/
struct sensor_async_subdev { struct sensor_async_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
int port; int port;
}; };
@@ -777,7 +777,7 @@ struct sensor_async_subdev {
/* .bound() notifier callback when a match is found */ /* .bound() notifier callback when a match is found */
static int atomisp_notifier_bound(struct v4l2_async_notifier *notifier, static int atomisp_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct atomisp_device *isp = notifier_to_atomisp(notifier); struct atomisp_device *isp = notifier_to_atomisp(notifier);
struct sensor_async_subdev *s_asd = to_sensor_asd(asd); struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
@@ -799,7 +799,7 @@ static int atomisp_notifier_bound(struct v4l2_async_notifier *notifier,
/* The .unbind callback */ /* The .unbind callback */
static void atomisp_notifier_unbind(struct v4l2_async_notifier *notifier, static void atomisp_notifier_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct atomisp_device *isp = notifier_to_atomisp(notifier); struct atomisp_device *isp = notifier_to_atomisp(notifier);
struct sensor_async_subdev *s_asd = to_sensor_asd(asd); struct sensor_async_subdev *s_asd = to_sensor_asd(asd);

View File

@@ -1727,7 +1727,7 @@ static int isc_ctrl_init(struct isc_device *isc)
static int isc_async_bound(struct v4l2_async_notifier *notifier, static int isc_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct isc_device *isc = container_of(notifier->v4l2_dev, struct isc_device *isc = container_of(notifier->v4l2_dev,
struct isc_device, v4l2_dev); struct isc_device, v4l2_dev);
@@ -1746,7 +1746,7 @@ static int isc_async_bound(struct v4l2_async_notifier *notifier,
static void isc_async_unbind(struct v4l2_async_notifier *notifier, static void isc_async_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct isc_device *isc = container_of(notifier->v4l2_dev, struct isc_device *isc = container_of(notifier->v4l2_dev,
struct isc_device, v4l2_dev); struct isc_device, v4l2_dev);

View File

@@ -44,7 +44,7 @@ struct isc_buffer {
struct isc_subdev_entity { struct isc_subdev_entity {
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct device_node *epn; struct device_node *epn;
struct v4l2_async_notifier notifier; struct v4l2_async_notifier notifier;

View File

@@ -503,7 +503,7 @@ 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_connection *asd;
struct fwnode_handle *fwnode = struct fwnode_handle *fwnode =
of_fwnode_handle(subdev_entity->epn); of_fwnode_handle(subdev_entity->epn);
@@ -511,7 +511,7 @@ static int atmel_isc_probe(struct platform_device *pdev)
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
fwnode, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(subdev_entity->epn); of_node_put(subdev_entity->epn);
subdev_entity->epn = NULL; subdev_entity->epn = NULL;

View File

@@ -493,7 +493,7 @@ 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_connection *asd;
struct fwnode_handle *fwnode = struct fwnode_handle *fwnode =
of_fwnode_handle(subdev_entity->epn); of_fwnode_handle(subdev_entity->epn);
@@ -501,7 +501,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier, asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
fwnode, fwnode,
struct v4l2_async_subdev); struct v4l2_async_connection);
of_node_put(subdev_entity->epn); of_node_put(subdev_entity->epn);
subdev_entity->epn = NULL; subdev_entity->epn = NULL;

View File

@@ -1892,7 +1892,7 @@ static const struct v4l2_subdev_internal_ops csi_internal_ops = {
static int imx_csi_notify_bound(struct v4l2_async_notifier *notifier, static int imx_csi_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct csi_priv *priv = notifier_to_dev(notifier); struct csi_priv *priv = notifier_to_dev(notifier);
struct media_pad *sink = &priv->sd.entity.pads[CSI_SINK_PAD]; struct media_pad *sink = &priv->sd.entity.pads[CSI_SINK_PAD];
@@ -1913,7 +1913,7 @@ static const struct v4l2_async_notifier_operations csi_notify_ops = {
static int imx_csi_async_register(struct csi_priv *priv) static int imx_csi_async_register(struct csi_priv *priv)
{ {
struct v4l2_async_subdev *asd = NULL; struct v4l2_async_connection *asd = NULL;
struct fwnode_handle *ep; struct fwnode_handle *ep;
unsigned int port; unsigned int port;
int ret; int ret;
@@ -1930,7 +1930,7 @@ static int imx_csi_async_register(struct csi_priv *priv)
FWNODE_GRAPH_ENDPOINT_NEXT); FWNODE_GRAPH_ENDPOINT_NEXT);
if (ep) { if (ep) {
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);

View File

@@ -384,7 +384,7 @@ int imx_media_dev_notifier_register(struct imx_media_dev *imxmd,
int ret; int ret;
/* no subdevs? just bail */ /* no subdevs? just bail */
if (list_empty(&imxmd->notifier.asd_list)) { if (list_empty(&imxmd->notifier.asc_list)) {
v4l2_err(&imxmd->v4l2_dev, "no subdevs\n"); v4l2_err(&imxmd->v4l2_dev, "no subdevs\n");
return -ENODEV; return -ENODEV;
} }

View File

@@ -20,7 +20,7 @@ static inline struct imx_media_dev *notifier2dev(struct v4l2_async_notifier *n)
/* async subdev bound notifier */ /* async subdev bound notifier */
static int imx_media_subdev_bound(struct v4l2_async_notifier *notifier, static int imx_media_subdev_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct imx_media_dev *imxmd = notifier2dev(notifier); struct imx_media_dev *imxmd = notifier2dev(notifier);
int ret; int ret;

View File

@@ -19,7 +19,7 @@
static int imx_media_of_add_csi(struct imx_media_dev *imxmd, static int imx_media_of_add_csi(struct imx_media_dev *imxmd,
struct device_node *csi_np) struct device_node *csi_np)
{ {
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
int ret = 0; int ret = 0;
if (!of_device_is_available(csi_np)) { if (!of_device_is_available(csi_np)) {
@@ -31,7 +31,7 @@ static 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_nf_add_fwnode(&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_connection);
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
if (ret == -EEXIST) if (ret == -EEXIST)

View File

@@ -636,7 +636,7 @@ static const struct v4l2_subdev_internal_ops csi2_internal_ops = {
static int csi2_notify_bound(struct v4l2_async_notifier *notifier, static int csi2_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct csi2_dev *csi2 = notifier_to_dev(notifier); struct csi2_dev *csi2 = notifier_to_dev(notifier);
struct media_pad *sink = &csi2->sd.entity.pads[CSI2_SINK_PAD]; struct media_pad *sink = &csi2->sd.entity.pads[CSI2_SINK_PAD];
@@ -659,7 +659,7 @@ static int csi2_notify_bound(struct v4l2_async_notifier *notifier,
static void csi2_notify_unbind(struct v4l2_async_notifier *notifier, static void csi2_notify_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd, struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct csi2_dev *csi2 = notifier_to_dev(notifier); struct csi2_dev *csi2 = notifier_to_dev(notifier);
@@ -676,7 +676,7 @@ static int csi2_async_register(struct csi2_dev *csi2)
struct v4l2_fwnode_endpoint vep = { struct v4l2_fwnode_endpoint vep = {
.bus_type = V4L2_MBUS_CSI2_DPHY, .bus_type = V4L2_MBUS_CSI2_DPHY,
}; };
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct fwnode_handle *ep; struct fwnode_handle *ep;
int ret; int ret;
@@ -697,7 +697,7 @@ static int csi2_async_register(struct csi2_dev *csi2)
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_nf_add_fwnode_remote(&csi2->notifier, ep, asd = v4l2_async_nf_add_fwnode_remote(&csi2->notifier, ep,
struct v4l2_async_subdev); struct v4l2_async_connection);
fwnode_handle_put(ep); fwnode_handle_put(ep);
if (IS_ERR(asd)) if (IS_ERR(asd))

View File

@@ -395,7 +395,7 @@ static int sun6i_isp_proc_link(struct sun6i_isp_device *isp_dev,
static int sun6i_isp_proc_notifier_bound(struct v4l2_async_notifier *notifier, static int sun6i_isp_proc_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *remote_subdev, struct v4l2_subdev *remote_subdev,
struct v4l2_async_subdev *async_subdev) struct v4l2_async_connection *async_subdev)
{ {
struct sun6i_isp_device *isp_dev = struct sun6i_isp_device *isp_dev =
container_of(notifier, struct sun6i_isp_device, proc.notifier); container_of(notifier, struct sun6i_isp_device, proc.notifier);

View File

@@ -34,7 +34,7 @@ struct sun6i_isp_proc_source {
}; };
struct sun6i_isp_proc_async_subdev { struct sun6i_isp_proc_async_subdev {
struct v4l2_async_subdev async_subdev; struct v4l2_async_connection async_subdev;
struct sun6i_isp_proc_source *source; struct sun6i_isp_proc_source *source;
}; };

View File

@@ -40,7 +40,7 @@
* @subdev: V4L2 subdev * @subdev: V4L2 subdev
*/ */
struct tegra_vi_graph_entity { struct tegra_vi_graph_entity {
struct v4l2_async_subdev asd; struct v4l2_async_connection asd;
struct media_entity *entity; struct media_entity *entity;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
}; };
@@ -58,7 +58,7 @@ to_tegra_channel_buffer(struct vb2_v4l2_buffer *vb)
} }
static inline struct tegra_vi_graph_entity * static inline struct tegra_vi_graph_entity *
to_tegra_vi_graph_entity(struct v4l2_async_subdev *asd) to_tegra_vi_graph_entity(struct v4l2_async_connection *asd)
{ {
return container_of(asd, struct tegra_vi_graph_entity, asd); return container_of(asd, struct tegra_vi_graph_entity, asd);
} }
@@ -1462,9 +1462,9 @@ tegra_vi_graph_find_entity(struct tegra_vi_channel *chan,
const struct fwnode_handle *fwnode) const struct fwnode_handle *fwnode)
{ {
struct tegra_vi_graph_entity *entity; struct tegra_vi_graph_entity *entity;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
list_for_each_entry(asd, &chan->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &chan->notifier.asc_list, asc_entry) {
entity = to_tegra_vi_graph_entity(asd); entity = to_tegra_vi_graph_entity(asd);
if (entity->asd.match.fwnode == fwnode) if (entity->asd.match.fwnode == fwnode)
return entity; return entity;
@@ -1578,7 +1578,7 @@ create_link:
static int tegra_vi_graph_notify_complete(struct v4l2_async_notifier *notifier) static int tegra_vi_graph_notify_complete(struct v4l2_async_notifier *notifier)
{ {
struct tegra_vi_graph_entity *entity; struct tegra_vi_graph_entity *entity;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
struct tegra_vi_channel *chan; struct tegra_vi_channel *chan;
struct tegra_vi *vi; struct tegra_vi *vi;
@@ -1608,7 +1608,7 @@ static int tegra_vi_graph_notify_complete(struct v4l2_async_notifier *notifier)
} }
/* create links between the entities */ /* create links between the entities */
list_for_each_entry(asd, &chan->notifier.asd_list, asd_entry) { list_for_each_entry(asd, &chan->notifier.asc_list, asc_entry) {
entity = to_tegra_vi_graph_entity(asd); entity = to_tegra_vi_graph_entity(asd);
ret = tegra_vi_graph_build(chan, entity); ret = tegra_vi_graph_build(chan, entity);
if (ret < 0) if (ret < 0)
@@ -1651,7 +1651,7 @@ unregister_video:
static int tegra_vi_graph_notify_bound(struct v4l2_async_notifier *notifier, static int tegra_vi_graph_notify_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_connection *asd)
{ {
struct tegra_vi_graph_entity *entity; struct tegra_vi_graph_entity *entity;
struct tegra_vi *vi; struct tegra_vi *vi;
@@ -1775,7 +1775,7 @@ static int tegra_vi_graph_init(struct tegra_vi *vi)
ret = tegra_vi_graph_parse_one(chan, remote); ret = tegra_vi_graph_parse_one(chan, remote);
fwnode_handle_put(remote); fwnode_handle_put(remote);
if (ret < 0 || list_empty(&chan->notifier.asd_list)) if (ret < 0 || list_empty(&chan->notifier.asc_list))
continue; continue;
chan->notifier.ops = &tegra_vi_async_ops; chan->notifier.ops = &tegra_vi_async_ops;

View File

@@ -72,7 +72,7 @@ struct vpif_capture_config {
int i2c_adapter_id; int i2c_adapter_id;
const char *card_name; const char *card_name;
struct v4l2_async_subdev *asd[VPIF_CAPTURE_MAX_CHANNELS]; struct v4l2_async_connection *asd[VPIF_CAPTURE_MAX_CHANNELS];
int asd_sizes[VPIF_CAPTURE_MAX_CHANNELS]; int asd_sizes[VPIF_CAPTURE_MAX_CHANNELS];
}; };
#endif /* _VPIF_TYPES_H */ #endif /* _VPIF_TYPES_H */

View File

@@ -25,7 +25,7 @@ struct v4l2_async_notifier;
* @V4L2_ASYNC_MATCH_TYPE_I2C: Match will check for I2C adapter ID and address * @V4L2_ASYNC_MATCH_TYPE_I2C: Match will check for I2C adapter ID and address
* @V4L2_ASYNC_MATCH_TYPE_FWNODE: Match will use firmware node * @V4L2_ASYNC_MATCH_TYPE_FWNODE: Match will use firmware node
* *
* This enum is used by the asynchronous sub-device logic to define the * This enum is used by the asynchronous connection logic to define the
* algorithm that will be used to match an asynchronous device. * algorithm that will be used to match an asynchronous device.
*/ */
enum v4l2_async_match_type { enum v4l2_async_match_type {
@@ -34,7 +34,7 @@ enum v4l2_async_match_type {
}; };
/** /**
* struct v4l2_async_match_desc - async sub-device match information * struct v4l2_async_match_desc - async connection match information
* *
* @type: type of match that will be used * @type: type of match that will be used
* @fwnode: pointer to &struct fwnode_handle to be matched. * @fwnode: pointer to &struct fwnode_handle to be matched.
@@ -62,21 +62,21 @@ struct v4l2_async_match_desc {
}; };
/** /**
* struct v4l2_async_subdev - sub-device descriptor, as known to a bridge * struct v4l2_async_connection - connection descriptor, as known to a bridge
* *
* @match: struct of match type and per-bus type matching data sets * @match: struct of match type and per-bus type matching data sets
* @asd_entry: used to add struct v4l2_async_subdev objects to the * @asc_entry: used to add struct v4l2_async_connection objects to the
* master notifier @asd_list * master notifier @asc_list
* @waiting_entry: used to link struct v4l2_async_subdev objects, waiting to be * @waiting_entry: used to link struct v4l2_async_connection objects, waiting to
* probed, to a notifier->waiting_list list * be probed, to a notifier->waiting_list list
* *
* When this struct is used as a member in a driver specific struct, * When this struct is used as a member in a driver specific struct,
* the driver specific struct shall contain the &struct * the driver specific struct shall contain the &struct
* v4l2_async_subdev as its first member. * v4l2_async_connection as its first member.
*/ */
struct v4l2_async_subdev { struct v4l2_async_connection {
struct v4l2_async_match_desc match; struct v4l2_async_match_desc match;
struct list_head asd_entry; struct list_head asc_entry;
struct list_head waiting_entry; struct list_head waiting_entry;
}; };
@@ -86,17 +86,17 @@ struct v4l2_async_subdev {
* @complete: All subdevices have been probed successfully. The complete * @complete: All subdevices have been probed successfully. The complete
* callback is only executed for the root notifier. * callback is only executed for the root notifier.
* @unbind: a subdevice is leaving * @unbind: a subdevice is leaving
* @destroy: the asd is about to be freed * @destroy: the asc is about to be freed
*/ */
struct v4l2_async_notifier_operations { struct v4l2_async_notifier_operations {
int (*bound)(struct v4l2_async_notifier *notifier, int (*bound)(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd); struct v4l2_async_connection *asc);
int (*complete)(struct v4l2_async_notifier *notifier); int (*complete)(struct v4l2_async_notifier *notifier);
void (*unbind)(struct v4l2_async_notifier *notifier, void (*unbind)(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd); struct v4l2_async_connection *asc);
void (*destroy)(struct v4l2_async_subdev *asd); void (*destroy)(struct v4l2_async_connection *asc);
}; };
/** /**
@@ -106,8 +106,9 @@ struct v4l2_async_notifier_operations {
* @v4l2_dev: v4l2_device of the root notifier, NULL otherwise * @v4l2_dev: v4l2_device of the root notifier, NULL otherwise
* @sd: sub-device that registered the notifier, NULL otherwise * @sd: sub-device that registered the notifier, NULL otherwise
* @parent: parent notifier * @parent: parent notifier
* @asd_list: master list of struct v4l2_async_subdev * @asc_list: master list of struct v4l2_async_connection
* @waiting_list: list of struct v4l2_async_subdev, waiting for their drivers * @waiting_list: list of struct v4l2_async_connection, waiting for their
* drivers
* @done_list: list of struct v4l2_subdev, already probed * @done_list: list of struct v4l2_subdev, already probed
* @notifier_entry: member in a global list of notifiers * @notifier_entry: member in a global list of notifiers
*/ */
@@ -116,7 +117,7 @@ struct v4l2_async_notifier {
struct v4l2_device *v4l2_dev; struct v4l2_device *v4l2_dev;
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
struct v4l2_async_notifier *parent; struct v4l2_async_notifier *parent;
struct list_head asd_list; struct list_head asc_list;
struct list_head waiting_list; struct list_head waiting_list;
struct list_head done_list; struct list_head done_list;
struct list_head notifier_entry; struct list_head notifier_entry;
@@ -134,53 +135,53 @@ void v4l2_async_debug_init(struct dentry *debugfs_dir);
* *
* @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 @asc_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_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or * v4l2_async_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or
* v4l2_async_nf_add_i2c(). * v4l2_async_nf_add_i2c().
*/ */
void v4l2_async_nf_init(struct v4l2_async_notifier *notifier); void v4l2_async_nf_init(struct v4l2_async_notifier *notifier);
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_fwnode(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 asc_struct_size);
/** /**
* v4l2_async_nf_add_fwnode - 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 asc_list.
* *
* @notifier: pointer to &struct v4l2_async_notifier * @notifier: pointer to &struct v4l2_async_notifier
* @fwnode: fwnode handle of the sub-device to be matched, pointer to * @fwnode: fwnode handle of the sub-device to be matched, pointer to
* &struct fwnode_handle * &struct fwnode_handle
* @type: Type of the driver's async sub-device struct. The &struct * @type: Type of the driver's async sub-device or connection struct. The
* v4l2_async_subdev shall be the first member of the driver's async * &struct v4l2_async_connection shall be the first member of the
* sub-device struct, i.e. both begin at the same memory address. * driver's async struct, i.e. both begin at the same memory address.
* *
* Allocate a fwnode-matched asd of size asd_struct_size, and add it to the * Allocate a fwnode-matched asc of size asc_struct_size, and add it to the
* notifiers @asd_list. The function also gets a reference of the fwnode which * notifiers @asc_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_nf_add_fwnode(notifier, fwnode, type) \ #define v4l2_async_nf_add_fwnode(notifier, fwnode, type) \
((type *)__v4l2_async_nf_add_fwnode(notifier, fwnode, sizeof(type))) ((type *)__v4l2_async_nf_add_fwnode(notifier, fwnode, sizeof(type)))
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_fwnode_remote(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 asc_struct_size);
/** /**
* v4l2_async_nf_add_fwnode_remote - 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 asc_list.
* *
* @notifier: pointer to &struct v4l2_async_notifier * @notifier: pointer to &struct v4l2_async_notifier
* @ep: local endpoint pointing to the remote sub-device to be matched, * @ep: local endpoint pointing to the remote connection to be matched,
* pointer to &struct fwnode_handle * pointer to &struct fwnode_handle
* @type: Type of the driver's async sub-device struct. The &struct * @type: Type of the driver's async connection struct. The &struct
* v4l2_async_subdev shall be the first member of the driver's async * v4l2_async_connection shall be the first member of the driver's async
* sub-device struct, i.e. both begin at the same memory address. * connection struct, i.e. both begin at the same memory address.
* *
* Gets the remote endpoint of a given local endpoint, set it up for fwnode * Gets the remote endpoint of a given local endpoint, set it up for fwnode
* matching and adds the async sub-device to the notifier's @asd_list. The * matching and adds the async connection to the notifier's @asc_list. The
* 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.
* *
@@ -190,23 +191,23 @@ __v4l2_async_nf_add_fwnode_remote(struct v4l2_async_notifier *notif,
#define v4l2_async_nf_add_fwnode_remote(notifier, ep, type) \ #define v4l2_async_nf_add_fwnode_remote(notifier, ep, type) \
((type *)__v4l2_async_nf_add_fwnode_remote(notifier, ep, sizeof(type))) ((type *)__v4l2_async_nf_add_fwnode_remote(notifier, ep, sizeof(type)))
struct v4l2_async_subdev * struct v4l2_async_connection *
__v4l2_async_nf_add_i2c(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 asc_struct_size);
/** /**
* v4l2_async_nf_add_i2c - 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 asc_list.
* *
* @notifier: pointer to &struct v4l2_async_notifier * @notifier: pointer to &struct v4l2_async_notifier
* @adapter: I2C adapter ID to be matched * @adapter: I2C adapter ID to be matched
* @address: I2C address of sub-device to be matched * @address: I2C address of connection to be matched
* @type: Type of the driver's async sub-device struct. The &struct * @type: Type of the driver's async connection struct. The &struct
* v4l2_async_subdev shall be the first member of the driver's async * v4l2_async_connection shall be the first member of the driver's async
* sub-device struct, i.e. both begin at the same memory address. * connection struct, i.e. both begin at the same memory address.
* *
* Same as v4l2_async_nf_add_fwnode() but for I2C matched * Same as v4l2_async_nf_add_fwnode() but for I2C matched
* sub-devices. * connections.
*/ */
#define v4l2_async_nf_add_i2c(notifier, adapter, address, type) \ #define v4l2_async_nf_add_i2c(notifier, adapter, address, type) \
((type *)__v4l2_async_nf_add_i2c(notifier, adapter, address, \ ((type *)__v4l2_async_nf_add_i2c(notifier, adapter, address, \
@@ -244,7 +245,7 @@ void v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier);
* @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 * connections 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 v4l2_async_nf_add_fwnode_remote(), * notifier after calling v4l2_async_nf_add_fwnode_remote(),
* v4l2_async_nf_add_fwnode() or v4l2_async_nf_add_i2c(). * v4l2_async_nf_add_fwnode() or v4l2_async_nf_add_i2c().

View File

@@ -1022,7 +1022,7 @@ struct v4l2_subdev_platform_data {
* either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL). * either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).
* @async_list: Links this subdev to a global subdev_list or * @async_list: Links this subdev to a global subdev_list or
* @notifier->done_list list. * @notifier->done_list list.
* @asd: Pointer to respective &struct v4l2_async_subdev. * @asd: Pointer to respective &struct v4l2_async_connection.
* @notifier: Pointer to the managing notifier. * @notifier: Pointer to the managing notifier.
* @subdev_notifier: A sub-device notifier implicitly registered for the sub- * @subdev_notifier: A sub-device notifier implicitly registered for the sub-
* device using v4l2_async_register_subdev_sensor(). * device using v4l2_async_register_subdev_sensor().
@@ -1065,7 +1065,7 @@ struct v4l2_subdev {
struct device *dev; struct device *dev;
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
struct list_head async_list; struct list_head async_list;
struct v4l2_async_subdev *asd; struct v4l2_async_connection *asd;
struct v4l2_async_notifier *notifier; struct v4l2_async_notifier *notifier;
struct v4l2_async_notifier *subdev_notifier; struct v4l2_async_notifier *subdev_notifier;
struct v4l2_subdev_platform_data *pdata; struct v4l2_subdev_platform_data *pdata;