On Thu, 2015-04-16 at 14:17 +0200, Hans de Goede wrote:
> 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.
>
> Signed-off-by: Hans de Goede <[email protected]>
Patched (all 3 of them) and compile tested on the current Fedora kernel
(3.19.3-200),
device is accessible and functioning without a kernel parameter
Steve
> ---
> drivers/usb/storage/uas-detect.h | 6 +++++-
> drivers/usb/storage/uas.c | 6 +++---
> drivers/usb/storage/usb.c | 2 +-
> 3 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/usb/storage/uas-detect.h
> b/drivers/usb/storage/uas-detect.h
> index 9893d69..63ae161 100644
> --- a/drivers/usb/storage/uas-detect.h
> +++ b/drivers/usb/storage/uas-detect.h
> @@ -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);
> @@ -132,5 +133,8 @@ static int uas_use_uas_driver(struct usb_interface *intf,
> return 0;
> }
>
> + if (flags_ret)
> + *flags_ret = flags;
> +
> return 1;
> }
> diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
> index 6cdabdc..c6109c1 100644
> --- a/drivers/usb/storage/uas.c
> +++ b/drivers/usb/storage/uas.c
> @@ -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))
> @@ -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);
> diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
> index 5600c33..db6f6b5 100644
> --- a/drivers/usb/storage/usb.c
> +++ b/drivers/usb/storage/usb.c
> @@ -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
>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html