us->subclass = idesc->bInterfaceSubClass;
        us->protocol = idesc->bInterfaceProtocol;
-       us->fflags = USB_US_ORIG_FLAGS(id->driver_info);
+       us->fflags = id->driver_info;
        us->Power_IsResum = false;
 
        if (us->fflags & US_FL_IGNORE_DEVICE)
 
          say 'Y' or 'M' here and the kernel will use the right driver.
 
          If you compile this driver as a module, it will be named uas.
-
-config USB_LIBUSUAL
-       bool "The shared table of common (or usual) storage devices"
-       depends on USB
-       help
-         This module contains a table of common (or usual) devices
-         for usb-storage and ub drivers, and allows to switch binding
-         of these devices without rebuilding modules.
-
-         Typical syntax of /etc/modprobe.d/*conf is:
-
-               options libusual bias="ub"
-
-         If unsure, say N.
 
 
 usb-storage-y := scsiglue.o protocol.o transport.o usb.o
 usb-storage-y += initializers.o sierra_ms.o option_ms.o
-
+usb-storage-y += usual-tables.o
 usb-storage-$(CONFIG_USB_STORAGE_DEBUG) += debug.o
 
-ifeq ($(CONFIG_USB_LIBUSUAL),)
-       usb-storage-y           += usual-tables.o
-else
-       obj-$(CONFIG_USB)       += usb-libusual.o
-       usb-libusual-y          := libusual.o usual-tables.o
-endif
-
 obj-$(CONFIG_USB_STORAGE_ALAUDA)       += ums-alauda.o
 obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o
 obj-$(CONFIG_USB_STORAGE_DATAFAB)      += ums-datafab.o
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id alauda_usb_ids[] = {
 #      include "unusual_alauda.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id cypress_usb_ids[] = {
 #      include "unusual_cypress.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id datafab_usb_ids[] = {
 #      include "unusual_datafab.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-       .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+       .driver_info = (flags)}
 
 static struct usb_device_id ene_ub6250_usb_ids[] = {
 #      include "unusual_ene_ub6250.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id freecom_usb_ids[] = {
 #      include "unusual_freecom.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id isd200_usb_ids[] = {
 #      include "unusual_isd200.h"
 MODULE_DEVICE_TABLE(usb, isd200_usb_ids);
 
 #undef UNUSUAL_DEV
-#undef USUAL_DEV
 
 /*
  * The flags table
 };
 
 #undef UNUSUAL_DEV
-#undef USUAL_DEV
-
 
 /* Timeout defines (in Seconds) */
 
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id jumpshot_usb_ids[] = {
 #      include "unusual_jumpshot.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id karma_usb_ids[] = {
 #      include "unusual_karma.h"
 
+++ /dev/null
-/*
- * libusual
- *
- * The libusual contains the table of devices common for ub and usb-storage.
- */
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-#include <linux/usb_usual.h>
-#include <linux/vmalloc.h>
-#include <linux/kthread.h>
-#include <linux/mutex.h>
-
-/*
- */
-#define USU_MOD_FL_THREAD   1  /* Thread is running */
-#define USU_MOD_FL_PRESENT  2  /* The module is loaded */
-
-struct mod_status {
-       unsigned long fls;
-};
-
-static struct mod_status stat[3];
-static DEFINE_SPINLOCK(usu_lock);
-
-/*
- */
-#define USB_US_DEFAULT_BIAS    USB_US_TYPE_STOR
-static atomic_t usu_bias = ATOMIC_INIT(USB_US_DEFAULT_BIAS);
-
-#define BIAS_NAME_SIZE  (sizeof("usb-storage"))
-static const char *bias_names[3] = { "none", "usb-storage", "ub" };
-
-static DEFINE_MUTEX(usu_probe_mutex);
-static DECLARE_COMPLETION(usu_end_notify);
-static atomic_t total_threads = ATOMIC_INIT(0);
-
-static int usu_probe_thread(void *arg);
-
-/*
- * @type: the module type as an integer
- */
-void usb_usual_set_present(int type)
-{
-       struct mod_status *st;
-       unsigned long flags;
-
-       if (type <= 0 || type >= 3)
-               return;
-       st = &stat[type];
-       spin_lock_irqsave(&usu_lock, flags);
-       st->fls |= USU_MOD_FL_PRESENT;
-       spin_unlock_irqrestore(&usu_lock, flags);
-}
-EXPORT_SYMBOL_GPL(usb_usual_set_present);
-
-void usb_usual_clear_present(int type)
-{
-       struct mod_status *st;
-       unsigned long flags;
-
-       if (type <= 0 || type >= 3)
-               return;
-       st = &stat[type];
-       spin_lock_irqsave(&usu_lock, flags);
-       st->fls &= ~USU_MOD_FL_PRESENT;
-       spin_unlock_irqrestore(&usu_lock, flags);
-}
-EXPORT_SYMBOL_GPL(usb_usual_clear_present);
-
-/*
- * Match the calling driver type against the table.
- * Returns: 0 if the device matches.
- */
-int usb_usual_check_type(const struct usb_device_id *id, int caller_type)
-{
-       int id_type = USB_US_TYPE(id->driver_info);
-
-       if (caller_type <= 0 || caller_type >= 3)
-               return -EINVAL;
-
-       /* Drivers grab fixed assignment devices */
-       if (id_type == caller_type)
-               return 0;
-       /* Drivers grab devices biased to them */
-       if (id_type == USB_US_TYPE_NONE && caller_type == atomic_read(&usu_bias))
-               return 0;
-       return -ENODEV;
-}
-EXPORT_SYMBOL_GPL(usb_usual_check_type);
-
-/*
- */
-static int usu_probe(struct usb_interface *intf,
-                        const struct usb_device_id *id)
-{
-       int rc;
-       unsigned long type;
-       struct task_struct* task;
-       unsigned long flags;
-
-       type = USB_US_TYPE(id->driver_info);
-       if (type == 0)
-               type = atomic_read(&usu_bias);
-
-       spin_lock_irqsave(&usu_lock, flags);
-       if ((stat[type].fls & (USU_MOD_FL_THREAD|USU_MOD_FL_PRESENT)) != 0) {
-               spin_unlock_irqrestore(&usu_lock, flags);
-               return -ENXIO;
-       }
-       stat[type].fls |= USU_MOD_FL_THREAD;
-       spin_unlock_irqrestore(&usu_lock, flags);
-
-       task = kthread_run(usu_probe_thread, (void*)type, "libusual_%ld", type);
-       if (IS_ERR(task)) {
-               rc = PTR_ERR(task);
-               printk(KERN_WARNING "libusual: "
-                   "Unable to start the thread for %s: %d\n",
-                   bias_names[type], rc);
-               spin_lock_irqsave(&usu_lock, flags);
-               stat[type].fls &= ~USU_MOD_FL_THREAD;
-               spin_unlock_irqrestore(&usu_lock, flags);
-               return rc;      /* Not being -ENXIO causes a message printed */
-       }
-       atomic_inc(&total_threads);
-
-       return -ENXIO;
-}
-
-static void usu_disconnect(struct usb_interface *intf)
-{
-       ;       /* We should not be here. */
-}
-
-static struct usb_driver usu_driver = {
-       .name =         "libusual",
-       .probe =        usu_probe,
-       .disconnect =   usu_disconnect,
-       .id_table =     usb_storage_usb_ids,
-};
-
-/*
- * A whole new thread for a purpose of request_module seems quite stupid.
- * The request_module forks once inside again. However, if we attempt
- * to load a storage module from our own modprobe thread, that module
- * references our symbols, which cannot be resolved until our module is
- * initialized. I wish there was a way to wait for the end of initialization.
- * The module notifier reports MODULE_STATE_COMING only.
- * So, we wait until module->init ends as the next best thing.
- */
-static int usu_probe_thread(void *arg)
-{
-       int type = (unsigned long) arg;
-       struct mod_status *st = &stat[type];
-       int rc;
-       unsigned long flags;
-
-       mutex_lock(&usu_probe_mutex);
-       rc = request_module(bias_names[type]);
-       spin_lock_irqsave(&usu_lock, flags);
-       if (rc == 0 && (st->fls & USU_MOD_FL_PRESENT) == 0) {
-               /*
-                * This should not happen, but let us keep tabs on it.
-                */
-               printk(KERN_NOTICE "libusual: "
-                   "modprobe for %s succeeded, but module is not present\n",
-                   bias_names[type]);
-       }
-       st->fls &= ~USU_MOD_FL_THREAD;
-       spin_unlock_irqrestore(&usu_lock, flags);
-       mutex_unlock(&usu_probe_mutex);
-
-       complete_and_exit(&usu_end_notify, 0);
-}
-
-/*
- */
-static int __init usb_usual_init(void)
-{
-       int rc;
-
-       mutex_lock(&usu_probe_mutex);
-       rc = usb_register(&usu_driver);
-       mutex_unlock(&usu_probe_mutex);
-       return rc;
-}
-
-static void __exit usb_usual_exit(void)
-{
-       /*
-        * We do not check for any drivers present, because
-        * they keep us pinned with symbol references.
-        */
-
-       usb_deregister(&usu_driver);
-
-       while (atomic_read(&total_threads) > 0) {
-               wait_for_completion(&usu_end_notify);
-               atomic_dec(&total_threads);
-       }
-}
-
-/*
- * Validate and accept the bias parameter.
- */
-static int usu_set_bias(const char *bias_s, struct kernel_param *kp)
-{
-       int i;
-       int len;
-       int bias_n = 0;
-
-       len = strlen(bias_s);
-       if (len == 0)
-               return -EDOM;
-       if (bias_s[len-1] == '\n')
-               --len;
-
-       for (i = 1; i < 3; i++) {
-               if (strncmp(bias_s, bias_names[i], len) == 0) {
-                       bias_n = i;
-                       break;
-               }
-       }
-       if (bias_n == 0)
-               return -EINVAL;
-
-       atomic_set(&usu_bias, bias_n);
-       return 0;
-}
-
-static int usu_get_bias(char *buffer, struct kernel_param *kp)
-{
-       return strlen(strcpy(buffer, bias_names[atomic_read(&usu_bias)]));
-}
-
-module_init(usb_usual_init);
-module_exit(usb_usual_exit);
-
-module_param_call(bias, usu_set_bias, usu_get_bias, NULL, S_IRUGO|S_IWUSR);
-__MODULE_PARM_TYPE(bias, "string");
-MODULE_PARM_DESC(bias, "Bias to usb-storage or ub");
-
-MODULE_LICENSE("GPL");
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id onetouch_usb_ids[] = {
 #      include "unusual_onetouch.h"
 
                    initFunction, flags) \
 {\
        USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-       .driver_info = (flags)|(USB_US_TYPE_STOR<<24)\
+       .driver_info = (flags) \
 }
 
 static const struct usb_device_id realtek_cr_ids[] = {
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id sddr09_usb_ids[] = {
 #      include "unusual_sddr09.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id sddr55_usb_ids[] = {
 #      include "unusual_sddr55.h"
 
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+  .driver_info = (flags) }
 
 static struct usb_device_id usbat_usb_ids[] = {
 #      include "unusual_usbat.h"
 
                USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ),
 
 /* Control/Bulk transport for all SubClass values */
-USUAL_DEV(USB_SC_RBC, USB_PR_CB, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8020, USB_PR_CB, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_QIC, USB_PR_CB, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_UFI, USB_PR_CB, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8070, USB_PR_CB, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_SCSI, USB_PR_CB, USB_US_TYPE_STOR),
+USUAL_DEV(USB_SC_RBC, USB_PR_CB),
+USUAL_DEV(USB_SC_8020, USB_PR_CB),
+USUAL_DEV(USB_SC_QIC, USB_PR_CB),
+USUAL_DEV(USB_SC_UFI, USB_PR_CB),
+USUAL_DEV(USB_SC_8070, USB_PR_CB),
+USUAL_DEV(USB_SC_SCSI, USB_PR_CB),
 
 /* Control/Bulk/Interrupt transport for all SubClass values */
-USUAL_DEV(USB_SC_RBC, USB_PR_CBI, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8020, USB_PR_CBI, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_QIC, USB_PR_CBI, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_UFI, USB_PR_CBI, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8070, USB_PR_CBI, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_SCSI, USB_PR_CBI, USB_US_TYPE_STOR),
+USUAL_DEV(USB_SC_RBC, USB_PR_CBI),
+USUAL_DEV(USB_SC_8020, USB_PR_CBI),
+USUAL_DEV(USB_SC_QIC, USB_PR_CBI),
+USUAL_DEV(USB_SC_UFI, USB_PR_CBI),
+USUAL_DEV(USB_SC_8070, USB_PR_CBI),
+USUAL_DEV(USB_SC_SCSI, USB_PR_CBI),
 
 /* Bulk-only transport for all SubClass values */
-USUAL_DEV(USB_SC_RBC, USB_PR_BULK, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8020, USB_PR_BULK, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_QIC, USB_PR_BULK, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_UFI, USB_PR_BULK, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_8070, USB_PR_BULK, USB_US_TYPE_STOR),
-USUAL_DEV(USB_SC_SCSI, USB_PR_BULK, 0),
+USUAL_DEV(USB_SC_RBC, USB_PR_BULK),
+USUAL_DEV(USB_SC_8020, USB_PR_BULK),
+USUAL_DEV(USB_SC_QIC, USB_PR_BULK),
+USUAL_DEV(USB_SC_UFI, USB_PR_BULK),
+USUAL_DEV(USB_SC_8070, USB_PR_BULK),
+USUAL_DEV(USB_SC_SCSI, USB_PR_BULK),
 
 
 #define COMPLIANT_DEV  UNUSUAL_DEV
 
-#define USUAL_DEV(use_protocol, use_transport, use_type) \
+#define USUAL_DEV(use_protocol, use_transport) \
 { \
        .useProtocol = use_protocol,    \
        .useTransport = use_transport,  \
 };
 
 static struct us_unusual_dev for_dynamic_ids =
-               USUAL_DEV(USB_SC_SCSI, USB_PR_BULK, 0);
+               USUAL_DEV(USB_SC_SCSI, USB_PR_BULK);
 
 #undef UNUSUAL_DEV
 #undef COMPLIANT_DEV
        us->protocol = (unusual_dev->useTransport == USB_PR_DEVICE) ?
                        idesc->bInterfaceProtocol :
                        unusual_dev->useTransport;
-       us->fflags = USB_US_ORIG_FLAGS(id->driver_info);
+       us->fflags = id->driver_info;
        adjust_quirks(us);
 
        if (us->fflags & US_FL_IGNORE_DEVICE) {
        int size;
 
        /*
-        * If libusual is configured, let it decide whether a standard
-        * device should be handled by usb-storage or by ub.
         * If the device isn't standard (is handled by a subdriver
         * module) then don't accept it.
         */
-       if (usb_usual_check_type(id, USB_US_TYPE_STOR) ||
-                       usb_usual_ignore_device(intf))
+       if (usb_usual_ignore_device(intf))
                return -ENXIO;
 
        /*
 
        /* register the driver, return usb_register return code if error */
        retval = usb_register(&usb_storage_driver);
-       if (retval == 0) {
+       if (retval == 0)
                pr_info("USB Mass Storage support registered.\n");
-               usb_usual_set_present(USB_US_TYPE_STOR);
-       }
        return retval;
 }
 
         */
        US_DEBUGP("-- calling usb_deregister()\n");
        usb_deregister(&usb_storage_driver) ;
-
-       usb_usual_clear_present(USB_US_TYPE_STOR);
 }
 
 module_init(usb_stor_init);
 
 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
                    vendorName, productName, useProtocol, useTransport, \
                    initFunction, flags) \
-{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
-  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
-
-#define COMPLIANT_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
-                   vendorName, productName, useProtocol, useTransport, \
-                   initFunction, flags) \
 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
   .driver_info = (flags) }
 
-#define USUAL_DEV(useProto, useTrans, useType) \
-{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans), \
-  .driver_info = ((useType)<<24) }
+#define COMPLIANT_DEV  UNUSUAL_DEV
+
+#define USUAL_DEV(useProto, useTrans) \
+{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans) }
 
 struct usb_device_id usb_storage_usb_ids[] = {
 #      include "unusual_devs.h"
        { }             /* Terminating entry */
 };
-EXPORT_SYMBOL_GPL(usb_storage_usb_ids);
-
 MODULE_DEVICE_TABLE(usb, usb_storage_usb_ids);
 
 #undef UNUSUAL_DEV
 #undef COMPLIANT_DEV
 #undef USUAL_DEV
 
-
 /*
  * The table of devices to ignore
  */
 
 #undef UNUSUAL_DEV
 
-
 /* Return an error if a device is in the ignore_ids list */
 int usb_usual_ignore_device(struct usb_interface *intf)
 {
        }
        return 0;
 }
-EXPORT_SYMBOL_GPL(usb_usual_ignore_device);
 
 enum { US_DO_ALL_FLAGS };
 #undef US_FLAG
 
-/*
- * The bias field for libusual and friends.
- */
-#define USB_US_TYPE_NONE   0
-#define USB_US_TYPE_STOR   1           /* usb-storage */
-#define USB_US_TYPE_UB     2           /* ub */
-
-#define USB_US_TYPE(flags)             (((flags) >> 24) & 0xFF)
-#define USB_US_ORIG_FLAGS(flags)       ((flags) & 0x00FFFFFF)
-
 #include <linux/usb/storage.h>
 
-/*
- */
 extern int usb_usual_ignore_device(struct usb_interface *intf);
 extern struct usb_device_id usb_storage_usb_ids[];
 
-#ifdef CONFIG_USB_LIBUSUAL
-
-extern void usb_usual_set_present(int type);
-extern void usb_usual_clear_present(int type);
-extern int usb_usual_check_type(const struct usb_device_id *, int type);
-#else
-
-#define usb_usual_set_present(t)       do { } while(0)
-#define usb_usual_clear_present(t)     do { } while(0)
-#define usb_usual_check_type(id, t)    (0)
-#endif /* CONFIG_USB_LIBUSUAL */
-
 #endif /* __LINUX_USB_USUAL_H */