usb-storage: Modify and export adjust_quirks so that it can be used by uas
authorHans de Goede <hdegoede@redhat.com>
Sat, 16 Nov 2013 11:09:39 +0000 (12:09 +0100)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Tue, 4 Mar 2014 23:38:17 +0000 (15:38 -0800)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/storage/usb.c
drivers/usb/storage/usb.h

index 388f567524d8173ad84ffb7bf1bc68f59170e72f..f1c96261a50196694689688cc041e38ef1c41a87 100644 (file)
@@ -463,14 +463,14 @@ static int associate_dev(struct us_data *us, struct usb_interface *intf)
 #define TOLOWER(x) ((x) | 0x20)
 
 /* Adjust device flags based on the "quirks=" module parameter */
-static void adjust_quirks(struct us_data *us)
+void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
 {
        char *p;
-       u16 vid = le16_to_cpu(us->pusb_dev->descriptor.idVendor);
-       u16 pid = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
+       u16 vid = le16_to_cpu(udev->descriptor.idVendor);
+       u16 pid = le16_to_cpu(udev->descriptor.idProduct);
        unsigned f = 0;
        unsigned int mask = (US_FL_SANE_SENSE | US_FL_BAD_SENSE |
-                       US_FL_FIX_CAPACITY |
+                       US_FL_FIX_CAPACITY | US_FL_IGNORE_UAS |
                        US_FL_CAPACITY_HEURISTICS | US_FL_IGNORE_DEVICE |
                        US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 |
                        US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
@@ -541,14 +541,18 @@ static void adjust_quirks(struct us_data *us)
                case 's':
                        f |= US_FL_SINGLE_LUN;
                        break;
+               case 'u':
+                       f |= US_FL_IGNORE_UAS;
+                       break;
                case 'w':
                        f |= US_FL_NO_WP_DETECT;
                        break;
                /* Ignore unrecognized flag characters */
                }
        }
-       us->fflags = (us->fflags & ~mask) | f;
+       *fflags = (*fflags & ~mask) | f;
 }
+EXPORT_SYMBOL_GPL(usb_stor_adjust_quirks);
 
 /* Get the unusual_devs entries and the string descriptors */
 static int get_device_info(struct us_data *us, const struct usb_device_id *id,
@@ -568,7 +572,7 @@ static int get_device_info(struct us_data *us, const struct usb_device_id *id,
                        idesc->bInterfaceProtocol :
                        unusual_dev->useTransport;
        us->fflags = id->driver_info;
-       adjust_quirks(us);
+       usb_stor_adjust_quirks(us->pusb_dev, &us->fflags);
 
        if (us->fflags & US_FL_IGNORE_DEVICE) {
                dev_info(pdev, "device ignored\n");
index 75f70f04f37b89ba0ee63495298bc995da0024e4..307e339a9478682dc5b2709710bd5209cfef47ca 100644 (file)
@@ -201,4 +201,7 @@ extern int usb_stor_probe1(struct us_data **pus,
 extern int usb_stor_probe2(struct us_data *us);
 extern void usb_stor_disconnect(struct usb_interface *intf);
 
+extern void usb_stor_adjust_quirks(struct usb_device *dev,
+               unsigned long *fflags);
+
 #endif