Skip to content

Commit

Permalink
uas: Allow uas_use_uas_driver to return usb-storage flags
Browse files Browse the repository at this point in the history
uas_use_uas_driver may set some US_FL_foo flags during detection, currently
these are stored in a local variable and then throw away, but these may be
of interest to the caller, so add an extra parameter to (optionally) return
the detected flags, and use this in the uas driver.

Cc: stable@vger.kernel.org # 3.16
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
jwrdegoede authored and gregkh committed Apr 28, 2015
1 parent b787f68 commit a5011d4
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
6 changes: 5 additions & 1 deletion drivers/usb/storage/uas-detect.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ static int uas_find_endpoints(struct usb_host_interface *alt,
}

static int uas_use_uas_driver(struct usb_interface *intf,
const struct usb_device_id *id)
const struct usb_device_id *id,
unsigned long *flags_ret)
{
struct usb_host_endpoint *eps[4] = { };
struct usb_device *udev = interface_to_usbdev(intf);
Expand Down Expand Up @@ -132,5 +133,8 @@ static int uas_use_uas_driver(struct usb_interface *intf,
return 0;
}

if (flags_ret)
*flags_ret = flags;

return 1;
}
6 changes: 3 additions & 3 deletions drivers/usb/storage/uas.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,8 +887,9 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
struct Scsi_Host *shost = NULL;
struct uas_dev_info *devinfo;
struct usb_device *udev = interface_to_usbdev(intf);
unsigned long dev_flags;

if (!uas_use_uas_driver(intf, id))
if (!uas_use_uas_driver(intf, id, &dev_flags))
return -ENODEV;

if (uas_switch_interface(udev, intf))
Expand All @@ -910,8 +911,7 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
devinfo->udev = udev;
devinfo->resetting = 0;
devinfo->shutdown = 0;
devinfo->flags = id->driver_info;
usb_stor_adjust_quirks(udev, &devinfo->flags);
devinfo->flags = dev_flags;
init_usb_anchor(&devinfo->cmd_urbs);
init_usb_anchor(&devinfo->sense_urbs);
init_usb_anchor(&devinfo->data_urbs);
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/storage/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1080,7 +1080,7 @@ static int storage_probe(struct usb_interface *intf,

/* If uas is enabled and this device can do uas then ignore it. */
#if IS_ENABLED(CONFIG_USB_UAS)
if (uas_use_uas_driver(intf, id))
if (uas_use_uas_driver(intf, id, NULL))
return -ENXIO;
#endif

Expand Down

0 comments on commit a5011d4

Please sign in to comment.