depends on GPIOLIB && VIDEO_V4L2 && I2C
        select MEDIA_CONTROLLER
        select VIDEO_V4L2_SUBDEV_API
+       select V4L2_ASYNC
        help
          Support for the Analog Devices ADV7180 video decoder.
 
 config VIDEO_ADV7343
        tristate "ADV7343 video encoder"
        depends on I2C
+       select V4L2_ASYNC
        help
          Support for Analog Devices I2C bus based ADV7343 encoder.
 
        tristate "Maxim 2175 RF to Bits tuner"
        depends on VIDEO_V4L2 && MEDIA_SDR_SUPPORT && I2C
        select REGMAP_I2C
+       select V4L2_ASYNC
        help
          Support for Maxim 2175 tuner. It is an advanced analog/digital
          radio receiver with RF-to-Bits front-end designed for SDR solutions.
 config VIDEO_THS7303
        tristate "THS7303/53 Video Amplifier"
        depends on VIDEO_V4L2 && I2C
+       select V4L2_ASYNC
        help
          Support for TI THS7303/53 video amplifier
 
        tristate "AD5820 lens voice coil support"
        depends on GPIOLIB && I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
+       select V4L2_ASYNC
        help
          This is a driver for the AD5820 camera lens voice coil.
          It is used for example in Nokia N900 (RX-51).
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
        select VIDEO_V4L2_SUBDEV_API
+       select V4L2_ASYNC
        help
          This is a driver for the AK7375 camera lens voice coil.
          AK7375 is a 12 bit DAC with 120mA output current sink
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
        select VIDEO_V4L2_SUBDEV_API
+       select V4L2_ASYNC
        help
          This is a driver for the DW9714 camera lens voice coil.
          DW9714 is a 10 bit DAC with 120mA output current sink
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
        select VIDEO_V4L2_SUBDEV_API
+       select V4L2_ASYNC
        help
          This is a driver for the DW9807 camera lens voice coil.
          DW9807 is a 10 bit DAC with 100mA output current sink
        tristate "ADP1653 flash support"
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
+       select V4L2_ASYNC
        help
          This is a driver for the ADP1653 flash controller. It is used for
          example in Nokia N900.
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
        select REGMAP_I2C
+       select V4L2_ASYNC
        help
          This is a driver for the lm3560 dual flash controllers. It controls
          flash, torch LEDs.
        depends on I2C && VIDEO_V4L2
        select MEDIA_CONTROLLER
        select REGMAP_I2C
+       select V4L2_ASYNC
        help
          This is a driver for the lm3646 dual flash controllers. It controls
          flash, torch LEDs.
 
        tristate "V4L2 flash API for LED flash class devices"
        depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
        depends on LEDS_CLASS_FLASH
+       select V4L2_ASYNC
        help
          Say Y here to enable V4L2 flash API support for LED flash
          class drivers.
 
 config V4L2_FWNODE
        tristate
+       select V4L2_ASYNC
+
+config V4L2_ASYNC
+       tristate
 
 # Used by drivers that need Videobuf modules
 config VIDEOBUF_GEN
 
 tuner-objs     :=      tuner-core.o
 
 videodev-objs  :=      v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-fh.o \
-                       v4l2-event.o v4l2-subdev.o v4l2-async.o v4l2-common.o \
+                       v4l2-event.o v4l2-subdev.o v4l2-common.o \
                        v4l2-ctrls-core.o v4l2-ctrls-api.o \
                        v4l2-ctrls-request.o v4l2-ctrls-defs.o
 videodev-$(CONFIG_COMPAT) += v4l2-compat-ioctl32.o
 videodev-$(CONFIG_SPI) += v4l2-spi.o
 videodev-$(CONFIG_VIDEO_V4L2_I2C) += v4l2-i2c.o
 
-obj-$(CONFIG_V4L2_FWNODE) += v4l2-fwnode.o
 obj-$(CONFIG_VIDEO_V4L2) += videodev.o
+obj-$(CONFIG_V4L2_FWNODE) += v4l2-fwnode.o
+obj-$(CONFIG_V4L2_ASYNC) += v4l2-async.o
 obj-$(CONFIG_VIDEO_V4L2) += v4l2-dv-timings.o
 
 obj-$(CONFIG_VIDEO_TUNER) += tuner.o
 
 }
 DEFINE_SHOW_ATTRIBUTE(pending_subdevs);
 
-void v4l2_async_debug_init(struct dentry *debugfs_dir)
+static struct dentry *v4l2_async_debugfs_dir;
+
+static int __init v4l2_async_init(void)
 {
-       debugfs_create_file("pending_async_subdevices", 0444, debugfs_dir, NULL,
+       v4l2_async_debugfs_dir = debugfs_create_dir("v4l2-async", NULL);
+       debugfs_create_file("pending_async_subdevices", 0444,
+                           v4l2_async_debugfs_dir, NULL,
                            &pending_subdevs_fops);
+
+       return 0;
+}
+
+static void __exit v4l2_async_exit(void)
+{
+       debugfs_remove_recursive(v4l2_async_debugfs_dir);
 }
+
+subsys_initcall(v4l2_async_init);
+module_exit(v4l2_async_exit);
+
+MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>");
+MODULE_AUTHOR("Sakari Ailus <sakari.ailus@linux.intel.com>");
+MODULE_AUTHOR("Ezequiel Garcia <ezequiel@collabora.com>");
+MODULE_LICENSE("GPL");
 
                       __func__, ##arg);                                \
 } while (0)
 
-static struct dentry *v4l2_debugfs_dir;
-
 /*
  *     sysfs stuff
  */
                return -EIO;
        }
 
-       v4l2_debugfs_dir = debugfs_create_dir("video4linux", NULL);
-       v4l2_async_debug_init(v4l2_debugfs_dir);
        return 0;
 }
 
 {
        dev_t dev = MKDEV(VIDEO_MAJOR, 0);
 
-       debugfs_remove_recursive(v4l2_debugfs_dir);
        class_unregister(&video_class);
        unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
 }