static DEFINE_MUTEX(list_lock);
 
 static struct v4l2_async_subdev *v4l2_async_belongs(struct v4l2_async_notifier *notifier,
-                                                   struct v4l2_async_subdev_list *asdl)
+                                                   struct v4l2_subdev *sd)
 {
-       struct v4l2_subdev *sd = v4l2_async_to_subdev(asdl);
        struct v4l2_async_subdev *asd;
-       bool (*match)(struct device *,
-                     struct v4l2_async_subdev *);
+       bool (*match)(struct device *, struct v4l2_async_subdev *);
 
        list_for_each_entry(asd, ¬ifier->waiting, list) {
                /* bus_type has been verified valid before */
 }
 
 static int v4l2_async_test_notify(struct v4l2_async_notifier *notifier,
-                                 struct v4l2_async_subdev_list *asdl,
+                                 struct v4l2_subdev *sd,
                                  struct v4l2_async_subdev *asd)
 {
-       struct v4l2_subdev *sd = v4l2_async_to_subdev(asdl);
        int ret;
 
        /* Remove from the waiting list */
        list_del(&asd->list);
-       asdl->asd = asd;
-       asdl->notifier = notifier;
+       sd->asd = asd;
+       sd->notifier = notifier;
 
        if (notifier->bound) {
                ret = notifier->bound(notifier, sd, asd);
                        return ret;
        }
        /* Move from the global subdevice list to notifier's done */
-       list_move(&asdl->list, ¬ifier->done);
+       list_move(&sd->async_list, ¬ifier->done);
 
        ret = v4l2_device_register_subdev(notifier->v4l2_dev, sd);
        if (ret < 0) {
        return 0;
 }
 
-static void v4l2_async_cleanup(struct v4l2_async_subdev_list *asdl)
+static void v4l2_async_cleanup(struct v4l2_subdev *sd)
 {
-       struct v4l2_subdev *sd = v4l2_async_to_subdev(asdl);
-
        v4l2_device_unregister_subdev(sd);
-       /* Subdevice driver will reprobe and put asdl back onto the list */
-       list_del_init(&asdl->list);
-       asdl->asd = NULL;
+       /* Subdevice driver will reprobe and put the subdev back onto the list */
+       list_del_init(&sd->async_list);
+       sd->asd = NULL;
        sd->dev = NULL;
 }
 
 int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
                                 struct v4l2_async_notifier *notifier)
 {
-       struct v4l2_async_subdev_list *asdl, *tmp;
+       struct v4l2_subdev *sd, *tmp;
        struct v4l2_async_subdev *asd;
        int i;
 
        /* Keep also completed notifiers on the list */
        list_add(¬ifier->list, ¬ifier_list);
 
-       list_for_each_entry_safe(asdl, tmp, &subdev_list, list) {
+       list_for_each_entry_safe(sd, tmp, &subdev_list, async_list) {
                int ret;
 
-               asd = v4l2_async_belongs(notifier, asdl);
+               asd = v4l2_async_belongs(notifier, sd);
                if (!asd)
                        continue;
 
-               ret = v4l2_async_test_notify(notifier, asdl, asd);
+               ret = v4l2_async_test_notify(notifier, sd, asd);
                if (ret < 0) {
                        mutex_unlock(&list_lock);
                        return ret;
 
 void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
 {
-       struct v4l2_async_subdev_list *asdl, *tmp;
+       struct v4l2_subdev *sd, *tmp;
        unsigned int notif_n_subdev = notifier->num_subdevs;
        unsigned int n_subdev = min(notif_n_subdev, V4L2_MAX_SUBDEVS);
        struct device *dev[n_subdev];
 
        list_del(¬ifier->list);
 
-       list_for_each_entry_safe(asdl, tmp, ¬ifier->done, list) {
-               struct v4l2_subdev *sd = v4l2_async_to_subdev(asdl);
-
+       list_for_each_entry_safe(sd, tmp, ¬ifier->done, list) {
                dev[i] = get_device(sd->dev);
 
-               v4l2_async_cleanup(asdl);
+               v4l2_async_cleanup(sd);
 
                /* If we handled USB devices, we'd have to lock the parent too */
                device_release_driver(dev[i++]);
 
                if (notifier->unbind)
-                       notifier->unbind(notifier, sd, sd->asdl.asd);
+                       notifier->unbind(notifier, sd, sd->asd);
        }
 
        mutex_unlock(&list_lock);
 
 int v4l2_async_register_subdev(struct v4l2_subdev *sd)
 {
-       struct v4l2_async_subdev_list *asdl = &sd->asdl;
        struct v4l2_async_notifier *notifier;
 
        mutex_lock(&list_lock);
 
-       INIT_LIST_HEAD(&asdl->list);
+       INIT_LIST_HEAD(&sd->async_list);
 
        list_for_each_entry(notifier, ¬ifier_list, list) {
-               struct v4l2_async_subdev *asd = v4l2_async_belongs(notifier, asdl);
+               struct v4l2_async_subdev *asd = v4l2_async_belongs(notifier, sd);
                if (asd) {
-                       int ret = v4l2_async_test_notify(notifier, asdl, asd);
+                       int ret = v4l2_async_test_notify(notifier, sd, asd);
                        mutex_unlock(&list_lock);
                        return ret;
                }
        }
 
        /* None matched, wait for hot-plugging */
-       list_add(&asdl->list, &subdev_list);
+       list_add(&sd->async_list, &subdev_list);
 
        mutex_unlock(&list_lock);
 
 
 void v4l2_async_unregister_subdev(struct v4l2_subdev *sd)
 {
-       struct v4l2_async_subdev_list *asdl = &sd->asdl;
-       struct v4l2_async_notifier *notifier = asdl->notifier;
+       struct v4l2_async_notifier *notifier = sd->notifier;
 
-       if (!asdl->asd) {
-               if (!list_empty(&asdl->list))
-                       v4l2_async_cleanup(asdl);
+       if (!sd->asd) {
+               if (!list_empty(&sd->async_list))
+                       v4l2_async_cleanup(sd);
                return;
        }
 
        mutex_lock(&list_lock);
 
-       list_add(&asdl->asd->list, ¬ifier->waiting);
+       list_add(&sd->asd->list, ¬ifier->waiting);
 
-       v4l2_async_cleanup(asdl);
+       v4l2_async_cleanup(sd);
 
        if (notifier->unbind)
-               notifier->unbind(notifier, sd, sd->asdl.asd);
+               notifier->unbind(notifier, sd, sd->asd);
 
        mutex_unlock(&list_lock);
 }