* S390_AP_IOMMU
    * VFIO
    * VFIO_MDEV
-   * VFIO_MDEV_DEVICE
    * KVM
 
    If using make menuconfig select the following to build the vfio_ap module::
 
 config VFIO_AP
        def_tristate n
        prompt "VFIO support for AP devices"
-       depends on S390_AP_IOMMU && VFIO_MDEV_DEVICE && KVM
+       depends on S390_AP_IOMMU && VFIO_MDEV && KVM
        depends on ZCRYPT
        help
                This driver grants access to Adjunct Processor (AP) devices
 
        tristate "Enable KVM/VFIO support for Intel GVT-g"
        depends on DRM_I915_GVT
        depends on KVM
-       depends on VFIO_MDEV && VFIO_MDEV_DEVICE
+       depends on VFIO_MDEV
        default n
        help
          Choose this option if you want to enable KVMGT support for
 
          See Documentation/driver-api/vfio-mediated-device.rst for more details.
 
          If you don't know what do here, say N.
-
-config VFIO_MDEV_DEVICE
-       tristate "VFIO driver for Mediated devices"
-       depends on VFIO && VFIO_MDEV
-       default n
-       help
-         VFIO based driver for Mediated devices.
 
 # SPDX-License-Identifier: GPL-2.0-only
 
-mdev-y := mdev_core.o mdev_sysfs.o mdev_driver.o
+mdev-y := mdev_core.o mdev_sysfs.o mdev_driver.o vfio_mdev.o
 
 obj-$(CONFIG_VFIO_MDEV) += mdev.o
-obj-$(CONFIG_VFIO_MDEV_DEVICE) += vfio_mdev.o
 
 
 static int __init mdev_init(void)
 {
-       return mdev_bus_register();
+       int rc;
+
+       rc = mdev_bus_register();
+       if (rc)
+               return rc;
+       rc = mdev_register_driver(&vfio_mdev_driver);
+       if (rc)
+               goto err_bus;
+       return 0;
+err_bus:
+       mdev_bus_unregister();
+       return rc;
 }
 
 static void __exit mdev_exit(void)
 {
+       mdev_unregister_driver(&vfio_mdev_driver);
+
        if (mdev_bus_compat_class)
                class_compat_unregister(mdev_bus_compat_class);
 
 MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
-MODULE_SOFTDEP("post: vfio_mdev");
 
 #define to_mdev_type(_kobj)            \
        container_of(_kobj, struct mdev_type, kobj)
 
+extern struct mdev_driver vfio_mdev_driver;
+
 int  parent_create_sysfs_files(struct mdev_parent *parent);
 void parent_remove_sysfs_files(struct mdev_parent *parent);
 
 
 
 #include "mdev_private.h"
 
-#define DRIVER_VERSION  "0.1"
-#define DRIVER_AUTHOR   "NVIDIA Corporation"
-#define DRIVER_DESC     "VFIO based driver for Mediated device"
-
 static int vfio_mdev_open(struct vfio_device *core_vdev)
 {
        struct mdev_device *mdev = to_mdev_device(core_vdev->dev);
        kfree(vdev);
 }
 
-static struct mdev_driver vfio_mdev_driver = {
+struct mdev_driver vfio_mdev_driver = {
        .driver = {
                .name = "vfio_mdev",
                .owner = THIS_MODULE,
        .probe  = vfio_mdev_probe,
        .remove = vfio_mdev_remove,
 };
-
-static int __init vfio_mdev_init(void)
-{
-       return mdev_register_driver(&vfio_mdev_driver);
-}
-
-static void __exit vfio_mdev_exit(void)
-{
-       mdev_unregister_driver(&vfio_mdev_driver);
-}
-
-module_init(vfio_mdev_init)
-module_exit(vfio_mdev_exit)
-
-MODULE_VERSION(DRIVER_VERSION);
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR(DRIVER_AUTHOR);
-MODULE_DESCRIPTION(DRIVER_DESC);
 
 
 config SAMPLE_VFIO_MDEV_MTTY
        tristate "Build VFIO mtty example mediated device sample code -- loadable modules only"
-       depends on VFIO_MDEV_DEVICE && m
+       depends on VFIO_MDEV && m
        help
          Build a virtual tty sample driver for use as a VFIO
          mediated device
 
 config SAMPLE_VFIO_MDEV_MDPY
        tristate "Build VFIO mdpy example mediated device sample code -- loadable modules only"
-       depends on VFIO_MDEV_DEVICE && m
+       depends on VFIO_MDEV && m
        help
          Build a virtual display sample driver for use as a VFIO
          mediated device.  It is a simple framebuffer and supports
 
 config SAMPLE_VFIO_MDEV_MBOCHS
        tristate "Build VFIO mdpy example mediated device sample code -- loadable modules only"
-       depends on VFIO_MDEV_DEVICE && m
+       depends on VFIO_MDEV && m
        select DMA_SHARED_BUFFER
        help
          Build a virtual display sample driver for use as a VFIO