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,
-bridge drivers can then begin to form a list of subdevice descriptors that the
-bridge device needs for its operation. :c:func:`v4l2_async_nf_add_fwnode`,
+bridge drivers can then begin to form a list of async connection descriptors
+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`
-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
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 :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
-and further registers async sub-devices for lens and flash devices found in
+drivers registering their own async connection, but it also registers a notifier
+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
 the async sub-device, using :c:func:`v4l2_async_unregister_subdev`.
 
 Asynchronous sub-device notifier example
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-These functions allocate an async sub-device descriptor which is of type struct
-:c:type:`v4l2_async_subdev` embedded in a driver-specific struct. The &struct
-:c:type:`v4l2_async_subdev` shall be the first member of this struct:
+These functions allocate an async connection descriptor which is of type struct
+:c:type:`v4l2_async_connection` embedded in a driver-specific struct. The &struct
+:c:type:`v4l2_async_connection` shall be the first member of this struct:
 
 .. code-block:: c
 
-       struct my_async_subdev {
-               struct v4l2_async_subdev asd;
+       struct my_async_connection {
+               struct v4l2_async_connection asc;
                ...
        };
 
-       struct my_async_subdev *my_asd;
+       struct my_async_connection *my_asc;
        struct fwnode_handle *ep;
 
        ...
 
-       my_asd = v4l2_async_nf_add_fwnode_remote(¬ifier, ep,
-                                                struct my_async_subdev);
+       my_asc = v4l2_async_nf_add_fwnode_remote(¬ifier, ep,
+                                                struct my_async_connection);
        fwnode_handle_put(ep);
 
-       if (IS_ERR(my_asd))
-               return PTR_ERR(my_asd);
+       if (IS_ERR(my_asc))
+               return PTR_ERR(my_asc);
 
 Asynchronous sub-device notifier callbacks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-The V4L2 core will then use these descriptors to match asynchronously
-registered subdevices to them. If a match is detected the ``.bound()``
-notifier callback is called. After all subdevices have been located the
-.complete() callback is called. When a subdevice is removed from the
-system the .unbind() method is called. All three callbacks are optional.
+The V4L2 core will then use these connection descriptors to match asynchronously
+registered subdevices to them. If a match is detected the ``.bound()`` notifier
+callback is called. After all connections have been bound the .complete()
+callback is called. When a connection is removed from the system the
+``.unbind()`` method is called. All three callbacks are optional.
 
 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()``
 notifier callback. The framework will call it right before freeing the
-:c:type:`v4l2_async_subdev`.
+:c:type:`v4l2_async_connection`.
 
 Calling subdev operations
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 static int ub913_notify_bound(struct v4l2_async_notifier *notifier,
                              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 device *dev = &priv->client->dev;
 static int ub913_v4l2_notifier_register(struct ub913_data *priv)
 {
        struct device *dev = &priv->client->dev;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep_fwnode;
        int ret;
 
        v4l2_async_nf_init(&priv->notifier);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        fwnode_handle_put(ep_fwnode);
 
 
 
 static int ub953_notify_bound(struct v4l2_async_notifier *notifier,
                              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 device *dev = &priv->client->dev;
 static int ub953_v4l2_notifier_register(struct ub953_data *priv)
 {
        struct device *dev = &priv->client->dev;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep_fwnode;
        int ret;
 
        v4l2_async_nf_init(&priv->notifier);
 
        asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        fwnode_handle_put(ep_fwnode);
 
 
 };
 
 struct ub960_asd {
-       struct v4l2_async_subdev base;
+       struct v4l2_async_connection base;
        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);
 }
 
 static int ub960_notify_bound(struct v4l2_async_notifier *notifier,
                              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_rxport *rxport = to_ub960_asd(asd)->rxport;
 
 static void ub960_notify_unbind(struct v4l2_async_notifier *notifier,
                                struct v4l2_subdev *subdev,
-                               struct v4l2_async_subdev *asd)
+                               struct v4l2_async_connection *asd)
 {
        struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport;
 
 
 };
 
 struct max9286_asd {
-       struct v4l2_async_subdev base;
+       struct v4l2_async_connection base;
        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);
 }
 
 static int max9286_notify_bound(struct v4l2_async_notifier *notifier,
                                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_source *source = to_max9286_asd(asd)->source;
 
 static void max9286_notify_unbind(struct v4l2_async_notifier *notifier,
                                  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_source *source = to_max9286_asd(asd)->source;
 
 
 static int mipid02_async_bound(struct v4l2_async_notifier *notifier,
                               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 i2c_client *client = bridge->i2c_client;
 
 static void mipid02_async_unbind(struct v4l2_async_notifier *notifier,
                                 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 v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY };
        struct i2c_client *client = bridge->i2c_client;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct device_node *ep_node;
        int ret;
 
        v4l2_async_nf_init(&bridge->notifier);
        asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
                                              of_fwnode_handle(ep_node),
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        of_node_put(ep_node);
 
        if (IS_ERR(asd)) {
 
 
 static int tc358746_notify_bound(struct v4l2_async_notifier *notifier,
                                 struct v4l2_subdev *sd,
-                                struct v4l2_async_subdev *asd)
+                                struct v4l2_async_connection *asd)
 {
        struct tc358746 *tc358746 =
                container_of(notifier, struct tc358746, notifier);
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_PARALLEL,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        int err;
 
 
        v4l2_async_nf_init(&tc358746->notifier);
        asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        fwnode_handle_put(ep);
 
        if (IS_ERR(asd)) {
 
 /******* V4L2 sub-device asynchronous registration callbacks***********/
 
 struct sensor_async_subdev {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        struct csi2_bus_info csi2;
 };
 
 /* The .bound() notifier callback when a match is found */
 static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
                               struct v4l2_subdev *sd,
-                              struct v4l2_async_subdev *asd)
+                              struct v4l2_async_connection *asd)
 {
        struct cio2_device *cio2 = to_cio2_device(notifier);
        struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
 /* The .unbind callback */
 static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier,
                                 struct v4l2_subdev *sd,
-                                struct v4l2_async_subdev *asd)
+                                struct v4l2_async_connection *asd)
 {
        struct cio2_device *cio2 = to_cio2_device(notifier);
        struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
        struct cio2_device *cio2 = to_cio2_device(notifier);
        struct device *dev = &cio2->pci_dev->dev;
        struct sensor_async_subdev *s_asd;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct cio2_queue *q;
        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);
                q = &cio2->queue[s_asd->csi2.port];
 
 
 
 static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
                                     struct v4l2_subdev *sd,
-                                    struct v4l2_async_subdev *asd)
+                                    struct v4l2_async_connection *asd)
 {
        struct atmel_isi *isi = notifier_to_isi(notifier);
 
 
 static int isi_graph_notify_bound(struct v4l2_async_notifier *notifier,
                                   struct v4l2_subdev *subdev,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asd)
 {
        struct atmel_isi *isi = notifier_to_isi(notifier);
 
 
 static int isi_graph_init(struct atmel_isi *isi)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct device_node *ep;
        int ret;
 
 
        asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
                                              of_fwnode_handle(ep),
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        of_node_put(ep);
 
        if (IS_ERR(asd))
 
 
 static int csi2rx_async_bound(struct v4l2_async_notifier *notifier,
                              struct v4l2_subdev *s_subdev,
-                             struct v4l2_async_subdev *asd)
+                             struct v4l2_async_connection *asd)
 {
        struct v4l2_subdev *subdev = notifier->sd;
        struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
 static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
 {
        struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *fwh;
        struct device_node *ep;
        int ret;
        v4l2_async_nf_init(&csi2rx->notifier);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        of_node_put(ep);
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
 
 static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
                     struct v4l2_subdev *subdev,
-                    struct v4l2_async_subdev *asd)
+                    struct v4l2_async_connection *asd)
 {
        int err;
        struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
 
 static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier,
                     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)
 {
        u32 mclk_rate;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct device_node *np = dev->of_node;
        struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
        int err = of_property_read_u32(np, "clock-frequency",
 
        asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier,
                                              of_fwnode_handle(np),
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        if (IS_ERR(asd))
                err = PTR_ERR(asd);
 out:
        pcdev->res = res;
        pcdev->pdata = pdev->dev.platform_data;
        if (pcdev->pdata) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
 
                pcdev->platform_flags = pcdev->pdata->flags;
                pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
                asd = v4l2_async_nf_add_i2c(&pcdev->notifier,
                                            pcdev->pdata->sensor_i2c_adapter_id,
                                            pcdev->pdata->sensor_i2c_address,
-                                           struct v4l2_async_subdev);
+                                           struct v4l2_async_connection);
                if (IS_ERR(asd))
                        err = PTR_ERR(asd);
        } else if (pdev->dev.of_node) {
 
        int ret;
        struct cafe_camera *cam;
        struct mcam_camera *mcam;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct i2c_client *i2c_dev;
 
        /*
 
        asd = v4l2_async_nf_add_i2c(&mcam->notifier,
                                    i2c_adapter_id(cam->i2c_adapter),
-                                   ov7670_info.addr, struct v4l2_async_subdev);
+                                   ov7670_info.addr,
+                                   struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto out_smbus_shutdown;
 
  */
 
 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);
        int ret;
 }
 
 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 resource *res;
        struct fwnode_handle *ep;
        struct mmp_camera_platform_data *pdata;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret;
 
        cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL);
        v4l2_async_nf_init(&mcam->notifier);
 
        asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        fwnode_handle_put(ep);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
 
 
 static int csi2dc_async_bound(struct v4l2_async_notifier *notifier,
                              struct v4l2_subdev *subdev,
-                             struct v4l2_async_subdev *asd)
+                             struct v4l2_async_connection *asd)
 {
        struct csi2dc_device *csi2dc = container_of(notifier,
                                                struct csi2dc_device, notifier);
 static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc,
                                   struct fwnode_handle *input_fwnode)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret = 0;
 
        v4l2_async_nf_init(&csi2dc->notifier);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier,
                                              input_fwnode,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        fwnode_handle_put(input_fwnode);
 
 
 
 static int isc_async_bound(struct v4l2_async_notifier *notifier,
                           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, v4l2_dev);
 
 static void isc_async_unbind(struct v4l2_async_notifier *notifier,
                             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, v4l2_dev);
 
 
 struct isc_subdev_entity {
        struct v4l2_subdev              *sd;
-       struct v4l2_async_subdev        *asd;
+       struct v4l2_async_connection    *asd;
        struct device_node              *epn;
        struct v4l2_async_notifier      notifier;
 
 
        }
 
        list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                of_node_put(subdev_entity->epn);
                subdev_entity->epn = NULL;
 
        }
 
        list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                of_node_put(subdev_entity->epn);
                subdev_entity->epn = NULL;
 
 
 static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier,
                                  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 media_pad *sink = &csis->sd.entity.pads[CSIS_PAD_SINK];
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_CSI2_DPHY,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        unsigned int i;
        int ret;
        dev_dbg(csis->dev, "flags: 0x%08x\n", csis->bus.flags);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto err_parse;
 
 
 static int imx7_csi_notify_bound(struct v4l2_async_notifier *notifier,
                                 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 media_pad *sink = &csi->sd.entity.pads[IMX7_CSI_PAD_SINK];
 
 static int imx7_csi_async_register(struct imx7_csi *csi)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        int ret;
 
        }
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        fwnode_handle_put(ep);
 
 
  */
 
 struct mxc_isi_async_subdev {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        unsigned int port;
 };
 
 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);
 };
 
 static int mxc_isi_async_notifier_bound(struct v4l2_async_notifier *notifier,
                                        struct v4l2_subdev *sd,
-                                       struct v4l2_async_subdev *asd)
+                                       struct v4l2_async_connection *asc)
 {
        const unsigned int link_flags = MEDIA_LNK_FL_IMMUTABLE
                                      | MEDIA_LNK_FL_ENABLED;
        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 device_link *link;
 
 
 
 static int imx8mq_mipi_csi_notify_bound(struct v4l2_async_notifier *notifier,
                                        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 media_pad *sink = &state->sd.entity.pads[MIPI_CSI2_PAD_SINK];
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_CSI2_DPHY,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        unsigned int i;
        int ret;
                state->bus.flags);
 
        asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto err_parse;
 
 
 static int camss_subdev_notifier_bound(struct v4l2_async_notifier *async,
                                       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_async_subdev *csd =
 
 };
 
 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;
 };
 
 
 
 static int risp_notify_bound(struct v4l2_async_notifier *notifier,
                             struct v4l2_subdev *subdev,
-                            struct v4l2_async_subdev *asd)
+                            struct v4l2_async_connection *asd)
 {
        struct rcar_isp *isp = notifier_to_isp(notifier);
        int pad;
 
 static void risp_notify_unbind(struct v4l2_async_notifier *notifier,
                               struct v4l2_subdev *subdev,
-                              struct v4l2_async_subdev *asd)
+                              struct v4l2_async_connection *asd)
 {
        struct rcar_isp *isp = notifier_to_isp(notifier);
 
 
 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 *ep;
        unsigned int id;
        isp->notifier.ops = &risp_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&isp->notifier, fwnode,
-                                      struct v4l2_async_subdev);
+                                      struct v4l2_async_connection);
        fwnode_handle_put(fwnode);
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
 
 static void rvin_group_notify_unbind(struct v4l2_async_notifier *notifier,
                                     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);
        unsigned int i;
        mutex_lock(&vin->group->lock);
 
        for (i = 0; i < RVIN_CSI_MAX; i++) {
-               if (vin->group->remotes[i].asd != asd)
+               if (vin->group->remotes[i].asc != asc)
                        continue;
                vin->group->remotes[i].subdev = NULL;
                vin_dbg(vin, "Unbind %s from slot %u\n", subdev->name, i);
 
 static int rvin_group_notify_bound(struct v4l2_async_notifier *notifier,
                                   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);
        unsigned int i;
        mutex_lock(&vin->group->lock);
 
        for (i = 0; i < RVIN_CSI_MAX; i++) {
-               if (vin->group->remotes[i].asd != asd)
+               if (vin->group->remotes[i].asc != asc)
                        continue;
                vin->group->remotes[i].subdev = subdev;
                vin_dbg(vin, "Bound %s to slot %u\n", subdev->name, i);
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_CSI2_DPHY,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
        int ret;
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), port, id, 0);
                goto out;
        }
 
-       asd = v4l2_async_nf_add_fwnode(&vin->group->notifier, fwnode,
-                                      struct v4l2_async_subdev);
-       if (IS_ERR(asd)) {
-               ret = PTR_ERR(asd);
+       asc = v4l2_async_nf_add_fwnode(&vin->group->notifier, fwnode,
+                                      struct v4l2_async_connection);
+       if (IS_ERR(asc)) {
+               ret = PTR_ERR(asc);
                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",
                to_of_node(fwnode), vep.base.id);
                        continue;
 
                for (id = 0; id < max_id; id++) {
-                       if (vin->group->remotes[id].asd)
+                       if (vin->group->remotes[id].asc)
                                continue;
 
                        ret = rvin_group_parse_of(vin->group->vin[i], port, id);
                }
        }
 
-       if (list_empty(&vin->group->notifier.asd_list))
+       if (list_empty(&vin->group->notifier.asc_list))
                return 0;
 
        vin->group->notifier.ops = &rvin_group_notify_ops;
 
 static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier,
                                        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);
 
 
 static int rvin_parallel_notify_bound(struct v4l2_async_notifier *notifier,
                                      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);
        int ret;
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_UNKNOWN,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
        int ret;
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(vin->dev), 0, 0, 0);
                goto out;
        }
 
-       asd = v4l2_async_nf_add_fwnode(&vin->notifier, fwnode,
-                                      struct v4l2_async_subdev);
-       if (IS_ERR(asd)) {
-               ret = PTR_ERR(asd);
+       asc = v4l2_async_nf_add_fwnode(&vin->notifier, fwnode,
+                                      struct v4l2_async_connection);
+       if (IS_ERR(asc)) {
+               ret = PTR_ERR(asc);
                goto out;
        }
 
-       vin->parallel.asd = asd;
+       vin->parallel.asc = asc;
 
        vin_dbg(vin, "Add parallel OF device %pOF\n", to_of_node(fwnode));
 out:
        if (ret)
                return ret;
 
-       if (!vin->parallel.asd)
+       if (!vin->parallel.asc)
                return -ENODEV;
 
        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;
        ret = v4l2_async_nf_register(&vin->v4l2_dev, &vin->notifier);
 
 
 static int rcsi2_notify_bound(struct v4l2_async_notifier *notifier,
                              struct v4l2_subdev *subdev,
-                             struct v4l2_async_subdev *asd)
+                             struct v4l2_async_connection *asc)
 {
        struct rcar_csi2 *priv = notifier_to_csi2(notifier);
        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);
        if (pad < 0) {
                dev_err(priv->dev, "Failed to find pad for %s\n", subdev->name);
 
 static void rcsi2_notify_unbind(struct v4l2_async_notifier *notifier,
                                struct v4l2_subdev *subdev,
-                               struct v4l2_async_subdev *asd)
+                               struct v4l2_async_connection *asc)
 {
        struct rcar_csi2 *priv = notifier_to_csi2(notifier);
 
 
 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 *ep;
        struct v4l2_fwnode_endpoint v4l2_ep = {
        v4l2_async_nf_init(&priv->notifier);
        priv->notifier.ops = &rcar_csi2_notify_ops;
 
-       asd = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
-                                      struct v4l2_async_subdev);
+       asc = v4l2_async_nf_add_fwnode(&priv->notifier, fwnode,
+                                      struct v4l2_async_connection);
        fwnode_handle_put(fwnode);
-       if (IS_ERR(asd))
-               return PTR_ERR(asd);
+       if (IS_ERR(asc))
+               return PTR_ERR(asc);
 
        ret = v4l2_async_subdev_nf_register(&priv->subdev, &priv->notifier);
        if (ret)
 
 
 /**
  * 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
  * @mbus_type: media bus type
  * @bus:       media bus parallel configuration
  *
  */
 struct rvin_parallel_entity {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
        struct v4l2_subdev *subdev;
 
        enum v4l2_mbus_type mbus_type;
  *
  * @lock:              protects the count, notifier, vin and csi members
  * @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
  * @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.
  */
 struct rvin_group {
        int (*link_setup)(struct rvin_dev *vin);
 
        struct {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asc;
                struct v4l2_subdev *subdev;
        } remotes[RVIN_REMOTES_MAX];
 };
 
 /* Sub-device bound callback */
 static int rcar_drif_notify_bound(struct v4l2_async_notifier *notifier,
                                   struct v4l2_subdev *subdev,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asd)
 {
        struct rcar_drif_sdr *sdr =
                container_of(notifier, struct rcar_drif_sdr, notifier);
 /* Sub-device unbind callback */
 static void rcar_drif_notify_unbind(struct v4l2_async_notifier *notifier,
                                   struct v4l2_subdev *subdev,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asd)
 {
        struct rcar_drif_sdr *sdr =
                container_of(notifier, struct rcar_drif_sdr, notifier);
 {
        struct v4l2_async_notifier *notifier = &sdr->notifier;
        struct fwnode_handle *fwnode, *ep;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
 
        v4l2_async_nf_init(notifier);
 
        }
 
        asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
-                                      struct v4l2_async_subdev);
+                                      struct v4l2_async_connection);
        fwnode_handle_put(fwnode);
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
  * ceu_subdev - Wraps v4l2 sub-device and provides async subdevice.
  */
 struct ceu_subdev {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        struct v4l2_subdev *v4l2_sd;
 
        /* per-subdevice mbus configuration options */
        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);
 }
 
 static int ceu_notify_bound(struct v4l2_async_notifier *notifier,
                            struct v4l2_subdev *v4l2_sd,
-                           struct v4l2_async_subdev *asd)
+                           struct v4l2_async_connection *asd)
 {
        struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
        struct ceu_device *ceudev = v4l2_to_ceu(v4l2_dev);
 
 
 static void rzg2l_cru_group_notify_unbind(struct v4l2_async_notifier *notifier,
                                          struct v4l2_subdev *subdev,
-                                         struct v4l2_async_subdev *asd)
+                                         struct v4l2_async_connection *asd)
 {
        struct rzg2l_cru_dev *cru = notifier_to_cru(notifier);
 
 
 static int rzg2l_cru_group_notify_bound(struct v4l2_async_notifier *notifier,
                                        struct v4l2_subdev *subdev,
-                                       struct v4l2_async_subdev *asd)
+                                       struct v4l2_async_connection *asd)
 {
        struct rzg2l_cru_dev *cru = notifier_to_cru(notifier);
 
                .bus_type = V4L2_MBUS_CSI2_DPHY,
        };
        struct fwnode_handle *ep, *fwnode;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret;
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(cru->dev), 1, 0, 0);
        }
 
        asd = v4l2_async_nf_add_fwnode(&cru->notifier, fwnode,
-                                      struct v4l2_async_subdev);
+                                      struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto out;
 
        cru->notifier.ops = &rzg2l_cru_async_ops;
 
-       if (list_empty(&cru->notifier.asd_list))
+       if (list_empty(&cru->notifier.asc_list))
                return 0;
 
        ret = v4l2_async_nf_register(&cru->v4l2_dev, &cru->notifier);
 
 };
 
 struct rzg2l_cru_csi {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct v4l2_subdev *subdev;
        u32 channel;
 };
 
 
 static int rzg2l_csi2_notify_bound(struct v4l2_async_notifier *notifier,
                                   struct v4l2_subdev *subdev,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asd)
 {
        struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier);
 
 
 static void rzg2l_csi2_notify_unbind(struct v4l2_async_notifier *notifier,
                                     struct v4l2_subdev *subdev,
-                                    struct v4l2_async_subdev *asd)
+                                    struct v4l2_async_connection *asd)
 {
        struct rzg2l_csi2 *csi2 = notifier_to_csi2(notifier);
 
        struct v4l2_fwnode_endpoint v4l2_ep = {
                .bus_type = V4L2_MBUS_CSI2_DPHY
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *fwnode;
        struct fwnode_handle *ep;
        int ret;
        csi2->notifier.ops = &rzg2l_csi2_notify_ops;
 
        asd = v4l2_async_nf_add_fwnode(&csi2->notifier, fwnode,
-                                      struct v4l2_async_subdev);
+                                      struct v4l2_async_connection);
        fwnode_handle_put(fwnode);
        if (IS_ERR(asd))
                return PTR_ERR(asd);
 
  * @port:              port number (0: MIPI, 1: Parallel)
  */
 struct rkisp1_sensor_async {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        unsigned int index;
        struct fwnode_handle *source_ep;
        unsigned int lanes;
 
 
 static int rkisp1_subdev_notifier_bound(struct v4l2_async_notifier *notifier,
                                        struct v4l2_subdev *sd,
-                                       struct v4l2_async_subdev *asd)
+                                       struct v4l2_async_connection *asc)
 {
        struct rkisp1_device *rkisp1 =
                container_of(notifier, struct rkisp1_device, notifier);
        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 ret;
 
        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 =
-               container_of(asd, struct rkisp1_sensor_async, asd);
+               container_of(asc, struct rkisp1_sensor_async, asd);
 
        fwnode_handle_put(rk_asd->source_ep);
 }
 
        int index = fmd->num_sensors;
        struct fimc_source_info *pd = &fmd->sensor[index].pdata;
        struct device_node *rem, *np;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
        int ret;
 
 
        asd = v4l2_async_nf_add_fwnode_remote(&fmd->subdev_notifier,
                                              of_fwnode_handle(ep),
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        of_node_put(ep);
 
 
 static int subdev_notifier_bound(struct v4l2_async_notifier *notifier,
                                 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_sensor_info *si = NULL;
 
  */
 struct fimc_sensor_info {
        struct fimc_source_info pdata;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct v4l2_subdev *subdev;
        struct fimc_dev *host;
 };
 
 
 static void dcmi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
                                     struct v4l2_subdev *sd,
-                                    struct v4l2_async_subdev *asd)
+                                    struct v4l2_async_connection *asd)
 {
        struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
 
 
 static int dcmi_graph_notify_bound(struct v4l2_async_notifier *notifier,
                                   struct v4l2_subdev *subdev,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asd)
 {
        struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
        unsigned int ret;
 
 static int dcmi_graph_init(struct stm32_dcmi *dcmi)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct device_node *ep;
        int ret;
 
 
        asd = v4l2_async_nf_add_fwnode_remote(&dcmi->notifier,
                                              of_fwnode_handle(ep),
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
 
        of_node_put(ep);
 
 
 
 static int sun4i_csi_notify_bound(struct v4l2_async_notifier *notifier,
                                  struct v4l2_subdev *subdev,
-                                 struct v4l2_async_subdev *asd)
+                                 struct v4l2_async_connection *asd)
 {
        struct sun4i_csi *csi = container_of(notifier, struct sun4i_csi,
                                             notifier);
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_PARALLEL,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        int ret;
 
        csi->bus = vep.bus.parallel;
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                goto out;
 
 static int
 sun6i_csi_bridge_notifier_bound(struct v4l2_async_notifier *notifier,
                                struct v4l2_subdev *remote_subdev,
-                               struct v4l2_async_subdev *async_subdev)
+                               struct v4l2_async_connection *async_subdev)
 {
        struct sun6i_csi_device *csi_dev =
                container_of(notifier, struct sun6i_csi_device,
 
 };
 
 struct sun6i_csi_bridge_async_subdev {
-       struct v4l2_async_subdev        async_subdev;
+       struct v4l2_async_connection    async_subdev;
        struct sun6i_csi_bridge_source  *source;
 };
 
 
 static int
 sun6i_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier,
                               struct v4l2_subdev *remote_subdev,
-                              struct v4l2_async_subdev *async_subdev)
+                              struct v4l2_async_connection *async_subdev)
 {
        struct v4l2_subdev *subdev = notifier->sd;
        struct sun6i_mipi_csi2_device *csi2_dev =
 {
        struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier;
        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 device *dev = csi2_dev->dev;
        int ret;
 
        subdev_async =
                v4l2_async_nf_add_fwnode_remote(notifier, handle,
-                                               struct v4l2_async_subdev);
+                                               struct v4l2_async_connection);
        if (IS_ERR(subdev_async))
                ret = PTR_ERR(subdev_async);
 
 
 static int
 sun8i_a83t_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier,
                                    struct v4l2_subdev *remote_subdev,
-                                   struct v4l2_async_subdev *async_subdev)
+                                   struct v4l2_async_connection *async_subdev)
 {
        struct v4l2_subdev *subdev = notifier->sd;
        struct sun8i_a83t_mipi_csi2_device *csi2_dev =
 {
        struct v4l2_async_notifier *notifier = &csi2_dev->bridge.notifier;
        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 device *dev = csi2_dev->dev;
        int ret;
 
        subdev_async =
                v4l2_async_nf_add_fwnode_remote(notifier, handle,
-                                               struct v4l2_async_subdev);
+                                               struct v4l2_async_connection);
        if (IS_ERR(subdev_async))
                ret = PTR_ERR(subdev_async);
 
 
 static int
 vpfe_async_bound(struct v4l2_async_notifier *notifier,
                 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, v4l2_dev);
 
                pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpfe->notifier,
                                                         of_fwnode_handle(rem),
-                                                        struct
-                                                        v4l2_async_subdev);
+                                                        struct v4l2_async_connection);
                of_node_put(rem);
                if (IS_ERR(pdata->asd[i]))
                        goto cleanup;
 
        /* information about each subdev */
        struct vpfe_subdev_info sub_devs[VPFE_MAX_SUBDEV];
        /* 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 cal_v4l2_async_subdev {
-       struct v4l2_async_subdev asd; /* Must be first */
+       struct v4l2_async_connection asd; /* Must be first */
        struct cal_camerarx *phy;
 };
 
 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);
 }
 
 static int cal_async_notifier_bound(struct v4l2_async_notifier *notifier,
                                    struct v4l2_subdev *subdev,
-                                   struct v4l2_async_subdev *asd)
+                                   struct v4l2_async_connection *asd)
 {
        struct cal_camerarx *phy = to_cal_asd(asd)->phy;
        int pad;
 
 
 static int vpif_async_bound(struct v4l2_async_notifier *notifier,
                            struct v4l2_subdev *subdev,
-                           struct v4l2_async_subdev *asd)
+                           struct v4l2_async_connection *asd)
 {
        int 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;
 
                if (fwnode == subdev->fwnode) {
 
                pdata->asd[i] = v4l2_async_nf_add_fwnode(&vpif_obj.notifier,
                                                         of_fwnode_handle(rem),
-                                                        struct
-                                                        v4l2_async_subdev);
+                                                        struct v4l2_async_connection);
                if (IS_ERR(pdata->asd[i]))
                        goto err_cleanup;
 
 
 
 static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
                                     struct v4l2_subdev *sd,
-                                    struct v4l2_async_subdev *asd)
+                                    struct v4l2_async_connection *asc)
 {
        struct isp_device *isp = container_of(async, struct isp_device,
                                              notifier);
        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;
 
        mutex_lock(&isp->media_dev.graph_mutex);
 
 };
 
 struct isp_async_subdev {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        struct isp_bus_cfg bus;
 };
 
 
 
 static int video_mux_notify_bound(struct v4l2_async_notifier *notifier,
                                  struct v4l2_subdev *sd,
-                                 struct v4l2_async_subdev *asd)
+                                 struct v4l2_async_connection *asd)
 {
        struct video_mux *vmux = notifier_to_video_mux(notifier);
 
        v4l2_async_nf_init(&vmux->notifier);
 
        for (i = 0; i < num_input_pads; i++) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
                struct fwnode_handle *ep, *remote_ep;
 
                ep = fwnode_graph_get_endpoint_by_id(
                fwnode_handle_put(remote_ep);
 
                asd = v4l2_async_nf_add_fwnode_remote(&vmux->notifier, ep,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                fwnode_handle_put(ep);
 
 
  * @subdev: V4L2 subdev
  */
 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 v4l2_subdev *subdev;
 };
 
 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);
 }
                       const struct fwnode_handle *fwnode)
 {
        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);
                if (entity->asd.match.fwnode == fwnode)
                        return entity;
        struct xvip_composite_device *xdev =
                container_of(notifier, struct xvip_composite_device, notifier);
        struct xvip_graph_entity *entity;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret;
 
        dev_dbg(xdev->dev, "notify complete, all subdevs registered\n");
 
        /* 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);
                ret = xvip_graph_build_one(xdev, entity);
                if (ret < 0)
 
 static int xvip_graph_notify_bound(struct v4l2_async_notifier *notifier,
                                   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->subdev = subdev;
 static int xvip_graph_parse(struct xvip_composite_device *xdev)
 {
        struct xvip_graph_entity *entity;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret;
 
        /*
        if (ret < 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);
                ret = xvip_graph_parse_one(xdev, entity->asd.match.fwnode);
                if (ret < 0) {
                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");
                ret = -ENOENT;
                goto done;
 
 
 static int v4l2_async_nf_call_bound(struct v4l2_async_notifier *n,
                                    struct v4l2_subdev *subdev,
-                                   struct v4l2_async_subdev *asd)
+                                   struct v4l2_async_connection *asc)
 {
        if (!n->ops || !n->ops->bound)
                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,
                                      struct v4l2_subdev *subdev,
-                                     struct v4l2_async_subdev *asd)
+                                     struct v4l2_async_connection *asc)
 {
        if (!n->ops || !n->ops->unbind)
                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 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)
                return;
 
-       n->ops->destroy(asd);
+       n->ops->destroy(asc);
 }
 
 static bool match_i2c(struct v4l2_async_notifier *notifier,
 static LIST_HEAD(notifier_list);
 static DEFINE_MUTEX(list_lock);
 
-static struct v4l2_async_subdev *
+static struct v4l2_async_connection *
 v4l2_async_find_match(struct v4l2_async_notifier *notifier,
                      struct v4l2_subdev *sd)
 {
        bool (*match)(struct v4l2_async_notifier *notifier,
                      struct v4l2_subdev *sd,
                      struct v4l2_async_match_desc *match);
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
 
-       list_for_each_entry(asd, ¬ifier->waiting_list, waiting_entry) {
+       list_for_each_entry(asc, ¬ifier->waiting_list, waiting_entry) {
                /* bus_type has been verified valid before */
-               switch (asd->match.type) {
+               switch (asc->match.type) {
                case V4L2_ASYNC_MATCH_TYPE_I2C:
                        match = match_i2c;
                        break;
                }
 
                /* match cannot be NULL here */
-               if (match(notifier, sd, &asd->match))
-                       return asd;
+               if (match(notifier, sd, &asc->match))
+                       return asc;
        }
 
        return NULL;
 static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier,
                                   struct v4l2_device *v4l2_dev,
                                   struct v4l2_subdev *sd,
-                                  struct v4l2_async_subdev *asd)
+                                  struct v4l2_async_connection *asc)
 {
        struct v4l2_async_notifier *subdev_notifier;
        int ret;
        if (ret < 0)
                return ret;
 
-       ret = v4l2_async_nf_call_bound(notifier, sd, asd);
+       ret = v4l2_async_nf_call_bound(notifier, sd, asc);
        if (ret < 0) {
                v4l2_device_unregister_subdev(sd);
                return ret;
         */
        ret = v4l2_async_create_ancillary_links(notifier, sd);
        if (ret) {
-               v4l2_async_nf_call_unbind(notifier, sd, asd);
+               v4l2_async_nf_call_unbind(notifier, sd, asc);
                v4l2_device_unregister_subdev(sd);
                return ret;
        }
 
-       list_del(&asd->waiting_entry);
-       sd->asd = asd;
+       list_del(&asc->waiting_entry);
+       sd->asd = asc;
        sd->notifier = notifier;
 
        /* Move from the global subdevice list to notifier's done */
 
 again:
        list_for_each_entry(sd, &subdev_list, async_list) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asc;
                int ret;
 
-               asd = v4l2_async_find_match(notifier, sd);
-               if (!asd)
+               asc = v4l2_async_find_match(notifier, sd);
+               if (!asc)
                        continue;
 
                dev_dbg(notifier_dev(notifier),
                        "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)
                        return ret;
 
 v4l2_async_nf_has_async_match_entry(struct v4l2_async_notifier *notifier,
                                    struct v4l2_async_match_desc *match)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
        struct v4l2_subdev *sd;
 
-       list_for_each_entry(asd, ¬ifier->waiting_list, waiting_entry)
-               if (v4l2_async_match_equal(&asd->match, match))
+       list_for_each_entry(asc, ¬ifier->waiting_list, waiting_entry)
+               if (v4l2_async_match_equal(&asc->match, match))
                        return true;
 
        list_for_each_entry(sd, ¬ifier->done_list, async_list) {
                              struct v4l2_async_match_desc *match,
                              bool skip_self)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
 
        lockdep_assert_held(&list_lock);
 
        /* Check that an asd is not being added more than once. */
-       list_for_each_entry(asd, ¬ifier->asd_list, asd_entry) {
-               if (skip_self && &asd->match == match)
+       list_for_each_entry(asc, ¬ifier->asc_list, asc_entry) {
+               if (skip_self && &asc->match == match)
                        continue;
-               if (v4l2_async_match_equal(&asd->match, match))
+               if (v4l2_async_match_equal(&asc->match, match))
                        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, ¬ifier_list, notifier_entry)
                if (v4l2_async_nf_has_async_match_entry(notifier, match))
                        return true;
 
 void v4l2_async_nf_init(struct v4l2_async_notifier *notifier)
 {
-       INIT_LIST_HEAD(¬ifier->asd_list);
+       INIT_LIST_HEAD(¬ifier->asc_list);
 }
 EXPORT_SYMBOL(v4l2_async_nf_init);
 
 static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
        int ret;
 
        INIT_LIST_HEAD(¬ifier->waiting_list);
 
        mutex_lock(&list_lock);
 
-       list_for_each_entry(asd, ¬ifier->asd_list, asd_entry) {
-               ret = v4l2_async_nf_match_valid(notifier, &asd->match, true);
+       list_for_each_entry(asc, ¬ifier->asc_list, asc_entry) {
+               ret = v4l2_async_nf_match_valid(notifier, &asc->match, true);
                if (ret)
                        goto err_unlock;
 
-               list_add_tail(&asd->waiting_entry, ¬ifier->waiting_list);
+               list_add_tail(&asc->waiting_entry, ¬ifier->waiting_list);
        }
 
        ret = v4l2_async_nf_try_all_subdevs(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;
 
-       list_for_each_entry_safe(asd, tmp, ¬ifier->asd_list, asd_entry) {
-               switch (asd->match.type) {
+       list_for_each_entry_safe(asc, tmp, ¬ifier->asc_list, asc_entry) {
+               switch (asc->match.type) {
                case V4L2_ASYNC_MATCH_TYPE_FWNODE:
-                       fwnode_handle_put(asd->match.fwnode);
+                       fwnode_handle_put(asc->match.fwnode);
                        break;
                default:
                        break;
                }
 
-               list_del(&asd->asd_entry);
-               v4l2_async_nf_call_destroy(notifier, asd);
-               kfree(asd);
+               list_del(&asc->asc_entry);
+               v4l2_async_nf_call_destroy(notifier, asc);
+               kfree(asc);
        }
 }
 
 }
 EXPORT_SYMBOL_GPL(v4l2_async_nf_cleanup);
 
-
-static int __v4l2_async_nf_add_subdev(struct v4l2_async_notifier *notifier,
-                                     struct v4l2_async_subdev *asd)
+static int __v4l2_async_nf_add_connection(struct v4l2_async_notifier *notifier,
+                                         struct v4l2_async_connection *asc)
 {
        int ret;
 
        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)
                goto unlock;
 
-       list_add_tail(&asd->asd_entry, ¬ifier->asd_list);
+       list_add_tail(&asc->asc_entry, ¬ifier->asc_list);
 
 unlock:
        mutex_unlock(&list_lock);
        return ret;
 }
 
-struct v4l2_async_subdev *
+struct v4l2_async_connection *
 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
                           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;
 
-       asd = kzalloc(asd_struct_size, GFP_KERNEL);
-       if (!asd)
+       asc = kzalloc(asc_struct_size, GFP_KERNEL);
+       if (!asc)
                return ERR_PTR(-ENOMEM);
 
-       asd->match.type = V4L2_ASYNC_MATCH_TYPE_FWNODE;
-       asd->match.fwnode = fwnode_handle_get(fwnode);
+       asc->match.type = V4L2_ASYNC_MATCH_TYPE_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) {
                fwnode_handle_put(fwnode);
-               kfree(asd);
+               kfree(asc);
                return ERR_PTR(ret);
        }
 
-       return asd;
+       return asc;
 }
 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,
                                  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;
 
        remote = fwnode_graph_get_remote_endpoint(endpoint);
        if (!remote)
                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,
         * so drop the one we got in fwnode_graph_get_remote_port_parent.
         */
        fwnode_handle_put(remote);
-       return asd;
+       return asc;
 }
 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,
-                       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;
 
-       asd = kzalloc(asd_struct_size, GFP_KERNEL);
-       if (!asd)
+       asc = kzalloc(asc_struct_size, GFP_KERNEL);
+       if (!asc)
                return ERR_PTR(-ENOMEM);
 
-       asd->match.type = V4L2_ASYNC_MATCH_TYPE_I2C;
-       asd->match.i2c.adapter_id = adapter_id;
-       asd->match.i2c.address = address;
+       asc->match.type = V4L2_ASYNC_MATCH_TYPE_I2C;
+       asc->match.i2c.adapter_id = adapter_id;
+       asc->match.i2c.address = address;
 
-       ret = __v4l2_async_nf_add_subdev(notifier, asd);
+       ret = __v4l2_async_nf_add_connection(notifier, asc);
        if (ret) {
-               kfree(asd);
+               kfree(asc);
                return ERR_PTR(ret);
        }
 
-       return asd;
+       return asc;
 }
 EXPORT_SYMBOL_GPL(__v4l2_async_nf_add_i2c);
 
        list_for_each_entry(notifier, ¬ifier_list, notifier_entry) {
                struct v4l2_device *v4l2_dev =
                        v4l2_async_nf_find_v4l2_dev(notifier);
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asc;
 
                if (!v4l2_dev)
                        continue;
 
-               asd = v4l2_async_find_match(notifier, sd);
-               if (!asd)
+               asc = v4l2_async_find_match(notifier, sd);
+               if (!asc)
                        continue;
 
-               ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd);
+               ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asc);
                if (ret)
                        goto err_unbind;
 
 static int pending_subdevs_show(struct seq_file *s, void *data)
 {
        struct v4l2_async_notifier *notif;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asc;
 
        mutex_lock(&list_lock);
 
        list_for_each_entry(notif, ¬ifier_list, notifier_entry) {
                seq_printf(s, "%s:\n", v4l2_async_nf_name(notif));
-               list_for_each_entry(asd, ¬if->waiting_list, waiting_entry)
-                       print_waiting_match(s, &asd->match);
+               list_for_each_entry(asc, ¬if->waiting_list, waiting_entry)
+                       print_waiting_match(s, &asc->match);
        }
 
        mutex_unlock(&list_lock);
 
             !(ret = fwnode_property_get_reference_args(dev_fwnode(dev), prop,
                                                        NULL, 0, index, &args));
             index++) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
 
                asd = v4l2_async_nf_add_fwnode(notifier, args.fwnode,
-                                              struct v4l2_async_subdev);
+                                              struct v4l2_async_connection);
                fwnode_handle_put(args.fwnode);
                if (IS_ERR(asd)) {
                        /* not an error if asd already exists */
                                                                  props,
                                                                  nprops)));
             index++) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
 
                asd = v4l2_async_nf_add_fwnode(notifier, fwnode,
-                                              struct v4l2_async_subdev);
+                                              struct v4l2_async_connection);
                fwnode_handle_put(fwnode);
                if (IS_ERR(asd)) {
                        ret = PTR_ERR(asd);
 
 /******* V4L2 sub-device asynchronous registration callbacks***********/
 
 struct sensor_async_subdev {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        int port;
 };
 
 /* .bound() notifier callback when a match is found */
 static int atomisp_notifier_bound(struct v4l2_async_notifier *notifier,
                                  struct v4l2_subdev *sd,
-                                 struct v4l2_async_subdev *asd)
+                                 struct v4l2_async_connection *asd)
 {
        struct atomisp_device *isp = notifier_to_atomisp(notifier);
        struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
 /* The .unbind callback */
 static void atomisp_notifier_unbind(struct v4l2_async_notifier *notifier,
                                    struct v4l2_subdev *sd,
-                                   struct v4l2_async_subdev *asd)
+                                   struct v4l2_async_connection *asd)
 {
        struct atomisp_device *isp = notifier_to_atomisp(notifier);
        struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
 
 
 static int isc_async_bound(struct v4l2_async_notifier *notifier,
                            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, v4l2_dev);
 
 static void isc_async_unbind(struct v4l2_async_notifier *notifier,
                              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, v4l2_dev);
 
 
 struct isc_subdev_entity {
        struct v4l2_subdev              *sd;
-       struct v4l2_async_subdev        *asd;
+       struct v4l2_async_connection    *asd;
        struct device_node              *epn;
        struct v4l2_async_notifier      notifier;
 
 
        }
 
        list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                of_node_put(subdev_entity->epn);
                subdev_entity->epn = NULL;
 
        }
 
        list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
-               struct v4l2_async_subdev *asd;
+               struct v4l2_async_connection *asd;
                struct fwnode_handle *fwnode =
                        of_fwnode_handle(subdev_entity->epn);
 
 
                asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
                                                      fwnode,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                of_node_put(subdev_entity->epn);
                subdev_entity->epn = NULL;
 
 
 static int imx_csi_notify_bound(struct v4l2_async_notifier *notifier,
                                struct v4l2_subdev *sd,
-                               struct v4l2_async_subdev *asd)
+                               struct v4l2_async_connection *asd)
 {
        struct csi_priv *priv = notifier_to_dev(notifier);
        struct media_pad *sink = &priv->sd.entity.pads[CSI_SINK_PAD];
 
 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;
        unsigned int port;
        int ret;
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
        if (ep) {
                asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep,
-                                                     struct v4l2_async_subdev);
+                                                     struct v4l2_async_connection);
 
                fwnode_handle_put(ep);
 
 
        int ret;
 
        /* 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");
                return -ENODEV;
        }
 
 /* async subdev bound notifier */
 static int imx_media_subdev_bound(struct v4l2_async_notifier *notifier,
                                  struct v4l2_subdev *sd,
-                                 struct v4l2_async_subdev *asd)
+                                 struct v4l2_async_connection *asd)
 {
        struct imx_media_dev *imxmd = notifier2dev(notifier);
        int ret;
 
 static int imx_media_of_add_csi(struct imx_media_dev *imxmd,
                                struct device_node *csi_np)
 {
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        int ret = 0;
 
        if (!of_device_is_available(csi_np)) {
        /* add CSI fwnode to async notifier */
        asd = v4l2_async_nf_add_fwnode(&imxmd->notifier,
                                       of_fwnode_handle(csi_np),
-                                      struct v4l2_async_subdev);
+                                      struct v4l2_async_connection);
        if (IS_ERR(asd)) {
                ret = PTR_ERR(asd);
                if (ret == -EEXIST)
 
 
 static int csi2_notify_bound(struct v4l2_async_notifier *notifier,
                             struct v4l2_subdev *sd,
-                            struct v4l2_async_subdev *asd)
+                            struct v4l2_async_connection *asd)
 {
        struct csi2_dev *csi2 = notifier_to_dev(notifier);
        struct media_pad *sink = &csi2->sd.entity.pads[CSI2_SINK_PAD];
 
 static void csi2_notify_unbind(struct v4l2_async_notifier *notifier,
                               struct v4l2_subdev *sd,
-                              struct v4l2_async_subdev *asd)
+                              struct v4l2_async_connection *asd)
 {
        struct csi2_dev *csi2 = notifier_to_dev(notifier);
 
        struct v4l2_fwnode_endpoint vep = {
                .bus_type = V4L2_MBUS_CSI2_DPHY,
        };
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct fwnode_handle *ep;
        int ret;
 
        dev_dbg(csi2->dev, "flags: 0x%08x\n", vep.bus.mipi_csi2.flags);
 
        asd = v4l2_async_nf_add_fwnode_remote(&csi2->notifier, ep,
-                                             struct v4l2_async_subdev);
+                                             struct v4l2_async_connection);
        fwnode_handle_put(ep);
 
        if (IS_ERR(asd))
 
 
 static int sun6i_isp_proc_notifier_bound(struct v4l2_async_notifier *notifier,
                                         struct v4l2_subdev *remote_subdev,
-                                        struct v4l2_async_subdev *async_subdev)
+                                        struct v4l2_async_connection *async_subdev)
 {
        struct sun6i_isp_device *isp_dev =
                container_of(notifier, struct sun6i_isp_device, proc.notifier);
 
 };
 
 struct sun6i_isp_proc_async_subdev {
-       struct v4l2_async_subdev        async_subdev;
+       struct v4l2_async_connection    async_subdev;
        struct sun6i_isp_proc_source    *source;
 };
 
 
  * @subdev: V4L2 subdev
  */
 struct tegra_vi_graph_entity {
-       struct v4l2_async_subdev asd;
+       struct v4l2_async_connection asd;
        struct media_entity *entity;
        struct v4l2_subdev *subdev;
 };
 }
 
 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);
 }
                           const struct fwnode_handle *fwnode)
 {
        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);
                if (entity->asd.match.fwnode == fwnode)
                        return entity;
 static int tegra_vi_graph_notify_complete(struct v4l2_async_notifier *notifier)
 {
        struct tegra_vi_graph_entity *entity;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct v4l2_subdev *subdev;
        struct tegra_vi_channel *chan;
        struct tegra_vi *vi;
        }
 
        /* 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);
                ret = tegra_vi_graph_build(chan, entity);
                if (ret < 0)
 
 static int tegra_vi_graph_notify_bound(struct v4l2_async_notifier *notifier,
                                       struct v4l2_subdev *subdev,
-                                      struct v4l2_async_subdev *asd)
+                                      struct v4l2_async_connection *asd)
 {
        struct tegra_vi_graph_entity *entity;
        struct tegra_vi *vi;
 
                ret = tegra_vi_graph_parse_one(chan, remote);
                fwnode_handle_put(remote);
-               if (ret < 0 || list_empty(&chan->notifier.asd_list))
+               if (ret < 0 || list_empty(&chan->notifier.asc_list))
                        continue;
 
                chan->notifier.ops = &tegra_vi_async_ops;
 
        int i2c_adapter_id;
        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];
 };
 #endif /* _VPIF_TYPES_H */
 
  * @V4L2_ASYNC_MATCH_TYPE_I2C: Match will check for I2C adapter ID and address
  * @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.
  */
 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
  * @fwnode:    pointer to &struct fwnode_handle to be matched.
 };
 
 /**
- * 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
- * @asd_entry: used to add struct v4l2_async_subdev objects to the
- *             master notifier @asd_list
- * @waiting_entry: used to link struct v4l2_async_subdev objects, waiting to be
- *             probed, to a notifier->waiting_list list
+ * @asc_entry: used to add struct v4l2_async_connection objects to the
+ *             master notifier @asc_list
+ * @waiting_entry: used to link struct v4l2_async_connection objects, waiting to
+ *             be probed, to a notifier->waiting_list list
  *
  * When this struct is used as a member in a driver specific 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 list_head asd_entry;
+       struct list_head asc_entry;
        struct list_head waiting_entry;
 };
 
  * @complete:  All subdevices have been probed successfully. The complete
  *             callback is only executed for the root notifier.
  * @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 {
        int (*bound)(struct v4l2_async_notifier *notifier,
                     struct v4l2_subdev *subdev,
-                    struct v4l2_async_subdev *asd);
+                    struct v4l2_async_connection *asc);
        int (*complete)(struct v4l2_async_notifier *notifier);
        void (*unbind)(struct v4l2_async_notifier *notifier,
                       struct v4l2_subdev *subdev,
-                      struct v4l2_async_subdev *asd);
-       void (*destroy)(struct v4l2_async_subdev *asd);
+                      struct v4l2_async_connection *asc);
+       void (*destroy)(struct v4l2_async_connection *asc);
 };
 
 /**
  * @v4l2_dev:  v4l2_device of the root notifier, NULL otherwise
  * @sd:                sub-device that registered the notifier, NULL otherwise
  * @parent:    parent notifier
- * @asd_list:  master list of struct v4l2_async_subdev
- * @waiting_list: list of struct v4l2_async_subdev, waiting for their drivers
+ * @asc_list:  master list of struct v4l2_async_connection
+ * @waiting_list: list of struct v4l2_async_connection, waiting for their
+ *               drivers
  * @done_list: list of struct v4l2_subdev, already probed
  * @notifier_entry: member in a global list of notifiers
  */
        struct v4l2_device *v4l2_dev;
        struct v4l2_subdev *sd;
        struct v4l2_async_notifier *parent;
-       struct list_head asd_list;
+       struct list_head asc_list;
        struct list_head waiting_list;
        struct list_head done_list;
        struct list_head notifier_entry;
  *
  * @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:
  * v4l2_async_nf_add_fwnode_remote(), v4l2_async_nf_add_fwnode() or
  * v4l2_async_nf_add_i2c().
  */
 void v4l2_async_nf_init(struct v4l2_async_notifier *notifier);
 
-struct v4l2_async_subdev *
+struct v4l2_async_connection *
 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
                           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
- *                             subdev to the notifier's master asd_list.
+ *                             subdev to the notifier's master asc_list.
  *
  * @notifier: pointer to &struct v4l2_async_notifier
  * @fwnode: fwnode handle of the sub-device to be matched, pointer to
  *         &struct fwnode_handle
- * @type: Type of the driver's async sub-device struct. The &struct
- *       v4l2_async_subdev shall be the first member of the driver's async
- *       sub-device struct, i.e. both begin at the same memory address.
+ * @type: Type of the driver's async sub-device or connection struct. The
+ *       &struct v4l2_async_connection shall be the first member of the
+ *       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
- * notifiers @asd_list. The function also gets a reference of the fwnode which
+ * Allocate a fwnode-matched asc of size asc_struct_size, and add it to the
+ * notifiers @asc_list. The function also gets a reference of the fwnode which
  * is released later at notifier cleanup time.
  */
 #define v4l2_async_nf_add_fwnode(notifier, fwnode, 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,
                                  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
  *                                               remote async subdev to the
- *                                               notifier's master asd_list.
+ *                                               notifier's master asc_list.
  *
  * @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
- * @type: Type of the driver's async sub-device struct. The &struct
- *       v4l2_async_subdev shall be the first member of the driver's async
- *       sub-device struct, i.e. both begin at the same memory address.
+ * @type: Type of the driver's async connection struct. The &struct
+ *       v4l2_async_connection shall be the first member of the driver's async
+ *       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
- * 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
  * notifier cleanup time.
  *
 #define v4l2_async_nf_add_fwnode_remote(notifier, ep, 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,
                        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
- *                             subdev to the notifier's master asd_list.
+ *                             subdev to the notifier's master asc_list.
  *
  * @notifier: pointer to &struct v4l2_async_notifier
  * @adapter: I2C adapter ID to be matched
- * @address: I2C address of sub-device to be matched
- * @type: Type of the driver's async sub-device struct. The &struct
- *       v4l2_async_subdev shall be the first member of the driver's async
- *       sub-device struct, i.e. both begin at the same memory address.
+ * @address: I2C address of connection to be matched
+ * @type: Type of the driver's async connection struct. The &struct
+ *       v4l2_async_connection shall be the first member of the driver's async
+ *       connection struct, i.e. both begin at the same memory address.
  *
  * Same as v4l2_async_nf_add_fwnode() but for I2C matched
- * sub-devices.
+ * connections.
  */
 #define v4l2_async_nf_add_i2c(notifier, adapter, address, type) \
        ((type *)__v4l2_async_nf_add_i2c(notifier, adapter, address, \
  * @notifier: the notifier the resources of which are to be cleaned up
  *
  * 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
  * notifier after calling v4l2_async_nf_add_fwnode_remote(),
  * v4l2_async_nf_add_fwnode() or v4l2_async_nf_add_i2c().
 
  *         either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).
  * @async_list: Links this subdev to a global subdev_list or
  *             @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.
  * @subdev_notifier: A sub-device notifier implicitly registered for the sub-
  *                  device using v4l2_async_register_subdev_sensor().
        struct device *dev;
        struct fwnode_handle *fwnode;
        struct list_head async_list;
-       struct v4l2_async_subdev *asd;
+       struct v4l2_async_connection *asd;
        struct v4l2_async_notifier *notifier;
        struct v4l2_async_notifier *subdev_notifier;
        struct v4l2_subdev_platform_data *pdata;