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 <[email protected]>
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