Am Montag, den 28.08.2017, 17:08 +0200 schrieb Oliver Neukum: > Am Donnerstag, den 24.08.2017, 14:05 +0200 schrieb Massimo Burcheri: > > > > > > Bus 004 Device 005: ID 174c:5106 ASMedia Technology Inc. ASM1051 SATA 3Gb/s bridge > > Device Descriptor: > > bLength 18 > > bDescriptorType 1 > > bcdUSB 3.00 > > bDeviceClass 0 > > bDeviceSubClass 0 > > bDeviceProtocol 0 > > bMaxPacketSize0 9 > > idVendor 0x174c ASMedia Technology Inc. > > idProduct 0x5106 ASM1051 SATA 3Gb/s bridge > > Good > > > > > bcdDevice 80.00 > > iManufacturer 2 StoreJet Transcend > > iProduct 3 StoreJet Transcend > > iSerial 1 S36VJ9CH307FOO > > bNumConfigurations 1 > > Configuration Descriptor: > > bLength 9 > > bDescriptorType 2 > > wTotalLength 44 > > bNumInterfaces 1 > > bConfigurationValue 1 > > iConfiguration 0 > > bmAttributes 0xc0 > > Self Powered > > MaxPower 0mA > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 0 > > bAlternateSetting 0 > > bNumEndpoints 2 > > bInterfaceClass 8 Mass Storage > > bInterfaceSubClass 6 SCSI > > bInterfaceProtocol 80 Bulk-Only > > iInterface 0 > > This device advertises itself as Bulk-only, not UAS. > > We can try, but I am not confident of the outcome. Is this the full > descriptor? > > Regards > Oliver Sorry, wrong patch. Attached corrected version. Regards Oliver
From 46fba5579a9fcdb3949a557a32e087893346d8bf Mon Sep 17 00:00:00 2001 From: Oliver Neukum <oneukum@xxxxxxxx> Date: Mon, 28 Aug 2017 17:06:58 +0200 Subject: [PATCH] USB: uas: force UAS probing for ASMedia 1153 This forces the device into uas with a sledge hammer. --- drivers/usb/storage/uas-detect.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h index f58caa9e6a27..d2a2da5527d2 100644 --- a/drivers/usb/storage/uas-detect.h +++ b/drivers/usb/storage/uas-detect.h @@ -2,8 +2,14 @@ #include <linux/usb/hcd.h> #include "usb.h" -static int uas_is_interface(struct usb_host_interface *intf) +static int uas_is_interface(struct usb_interface *inf, struct usb_host_interface *intf) { + struct usb_device *udev = interface_to_usbdev(inf); + + if (le16_to_cpu(udev->descriptor.idVendor) == 0x174c && + le16_to_cpu(udev->descriptor.idProduct) == 0x5106) + return 1; + return (intf->desc.bInterfaceClass == USB_CLASS_MASS_STORAGE && intf->desc.bInterfaceSubClass == USB_SC_SCSI && intf->desc.bInterfaceProtocol == USB_PR_UAS); @@ -16,7 +22,7 @@ static int uas_find_uas_alt_setting(struct usb_interface *intf) for (i = 0; i < intf->num_altsetting; i++) { struct usb_host_interface *alt = &intf->altsetting[i]; - if (uas_is_interface(alt)) + if (uas_is_interface(intf, alt)) return alt->desc.bAlternateSetting; } -- 2.12.3