USB fixes for 3.18-rc4
Here are some USB fixes for 3.18-rc4. Just a bunch of little fixes resolving reported issues and new device ids for existing drivers. Full details are in the shortlog. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlReZzgACgkQMUfUDdst+ylTIgCdG8L088p1OqgEdcL+J0ceYS51 PQAAn3O4t962htLmX0XuQmfMWTyBqn11 =3auS -----END PGP SIGNATURE----- Merge tag 'usb-3.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB fixes from Greg KH: "Here are some USB fixes for 3.18-rc4. Just a bunch of little fixes resolving reported issues and new device ids for existing drivers. Full details are in the shortlog" * tag 'usb-3.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (26 commits) USB: Update default usb-storage delay_use value in kernel-parameters.txt USB: cdc-acm: add quirk for control-line state requests phy: omap-usb2: Enable runtime PM of omap-usb2 phy properly USB: storage: Fix timeout in usb_stor_euscsi_init() and usb_stor_huawei_e220_init() USB: cdc-acm: only raise DTR on transitions from B0 Revert "storage: Replace magic number with define in usb_stor_euscsi_init()" usb: core: notify disconnection when core detects disconnect usb: core: need to call usb_phy_notify_connect after device setup uas: Add US_FL_NO_ATA_1X quirk for 2 more Seagate models xhci: no switching back on non-ULT Haswell USB: quirks: enable device-qualifier quirk for yet another Elan touchscreen USB: quirks: enable device-qualifier quirk for another Elan touchscreen MAINTAINERS: Remove duplicate entry for usbip driver usb: storage: fix build warnings !CONFIG_PM usb: Remove references to non-existent PLAT_S5P symbol uas: Add NO_ATA_1X for VIA VL711 devices xhci: Disable streams on Asmedia 1042 xhci controllers USB: HWA: fix a warning message uas: Add US_FL_NO_ATA_1X quirk for 1 more Seagate model usb-storage: handle a skipped data phase ...
This commit is contained in:
commit
b9427910d2
|
@ -3621,7 +3621,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
|
||||
usb-storage.delay_use=
|
||||
[UMS] The delay in seconds before a new device is
|
||||
scanned for Logical Units (default 5).
|
||||
scanned for Logical Units (default 1).
|
||||
|
||||
usb-storage.quirks=
|
||||
[UMS] A list of quirks entries to supplement or
|
||||
|
|
|
@ -9703,11 +9703,6 @@ S: Maintained
|
|||
F: Documentation/hid/hiddev.txt
|
||||
F: drivers/hid/usbhid/
|
||||
|
||||
USB/IP DRIVERS
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Orphan
|
||||
F: drivers/staging/usbip/
|
||||
|
||||
USB ISP116X DRIVER
|
||||
M: Olav Kongas <ok@artecdesign.ee>
|
||||
L: linux-usb@vger.kernel.org
|
||||
|
|
|
@ -258,14 +258,16 @@ static int omap_usb2_probe(struct platform_device *pdev)
|
|||
otg->phy = &phy->phy;
|
||||
|
||||
platform_set_drvdata(pdev, phy);
|
||||
pm_runtime_enable(phy->dev);
|
||||
|
||||
generic_phy = devm_phy_create(phy->dev, NULL, &ops, NULL);
|
||||
if (IS_ERR(generic_phy))
|
||||
if (IS_ERR(generic_phy)) {
|
||||
pm_runtime_disable(phy->dev);
|
||||
return PTR_ERR(generic_phy);
|
||||
}
|
||||
|
||||
phy_set_drvdata(generic_phy, phy);
|
||||
|
||||
pm_runtime_enable(phy->dev);
|
||||
phy_provider = devm_of_phy_provider_register(phy->dev,
|
||||
of_phy_simple_xlate);
|
||||
if (IS_ERR(phy_provider)) {
|
||||
|
|
|
@ -60,6 +60,9 @@ static struct acm *acm_table[ACM_TTY_MINORS];
|
|||
|
||||
static DEFINE_MUTEX(acm_table_lock);
|
||||
|
||||
static void acm_tty_set_termios(struct tty_struct *tty,
|
||||
struct ktermios *termios_old);
|
||||
|
||||
/*
|
||||
* acm_table accessors
|
||||
*/
|
||||
|
@ -145,8 +148,15 @@ static int acm_ctrl_msg(struct acm *acm, int request, int value,
|
|||
/* devices aren't required to support these requests.
|
||||
* the cdc acm descriptor tells whether they do...
|
||||
*/
|
||||
#define acm_set_control(acm, control) \
|
||||
acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
|
||||
static inline int acm_set_control(struct acm *acm, int control)
|
||||
{
|
||||
if (acm->quirks & QUIRK_CONTROL_LINE_STATE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE,
|
||||
control, NULL, 0);
|
||||
}
|
||||
|
||||
#define acm_set_line(acm, line) \
|
||||
acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
|
||||
#define acm_send_break(acm, ms) \
|
||||
|
@ -554,6 +564,8 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
|
|||
goto error_submit_urb;
|
||||
}
|
||||
|
||||
acm_tty_set_termios(tty, NULL);
|
||||
|
||||
/*
|
||||
* Unthrottle device in case the TTY was closed while throttled.
|
||||
*/
|
||||
|
@ -980,11 +992,12 @@ static void acm_tty_set_termios(struct tty_struct *tty,
|
|||
/* FIXME: Needs to clear unsupported bits in the termios */
|
||||
acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
|
||||
|
||||
if (!newline.dwDTERate) {
|
||||
if (C_BAUD(tty) == B0) {
|
||||
newline.dwDTERate = acm->line.dwDTERate;
|
||||
newctrl &= ~ACM_CTRL_DTR;
|
||||
} else
|
||||
} else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
|
||||
newctrl |= ACM_CTRL_DTR;
|
||||
}
|
||||
|
||||
if (newctrl != acm->ctrlout)
|
||||
acm_set_control(acm, acm->ctrlout = newctrl);
|
||||
|
@ -1314,6 +1327,7 @@ made_compressed_probe:
|
|||
tty_port_init(&acm->port);
|
||||
acm->port.ops = &acm_port_ops;
|
||||
init_usb_anchor(&acm->delayed);
|
||||
acm->quirks = quirks;
|
||||
|
||||
buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
|
||||
if (!buf) {
|
||||
|
@ -1681,6 +1695,9 @@ static const struct usb_device_id acm_ids[] = {
|
|||
{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
|
||||
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
|
||||
},
|
||||
{ USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
|
||||
.driver_info = QUIRK_CONTROL_LINE_STATE, },
|
||||
{ USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
|
||||
{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
|
||||
},
|
||||
/* Motorola H24 HSPA module: */
|
||||
|
|
|
@ -121,6 +121,7 @@ struct acm {
|
|||
unsigned int throttle_req:1; /* throttle requested */
|
||||
u8 bInterval;
|
||||
struct usb_anchor delayed; /* writes queued for a device about to be woken */
|
||||
unsigned long quirks;
|
||||
};
|
||||
|
||||
#define CDC_DATA_INTERFACE_TYPE 0x0a
|
||||
|
@ -132,3 +133,4 @@ struct acm {
|
|||
#define NOT_A_MODEM BIT(3)
|
||||
#define NO_DATA_INTERFACE BIT(4)
|
||||
#define IGNORE_DEVICE BIT(5)
|
||||
#define QUIRK_CONTROL_LINE_STATE BIT(6)
|
||||
|
|
|
@ -2060,6 +2060,8 @@ int usb_alloc_streams(struct usb_interface *interface,
|
|||
return -EINVAL;
|
||||
if (dev->speed != USB_SPEED_SUPER)
|
||||
return -EINVAL;
|
||||
if (dev->state < USB_STATE_CONFIGURED)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < num_eps; i++) {
|
||||
/* Streams only apply to bulk endpoints. */
|
||||
|
|
|
@ -4468,9 +4468,6 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
|
|||
if (retval)
|
||||
goto fail;
|
||||
|
||||
if (hcd->usb_phy && !hdev->parent)
|
||||
usb_phy_notify_connect(hcd->usb_phy, udev->speed);
|
||||
|
||||
/*
|
||||
* Some superspeed devices have finished the link training process
|
||||
* and attached to a superspeed hub port, but the device descriptor
|
||||
|
@ -4627,8 +4624,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
|
|||
|
||||
/* Disconnect any existing devices under this port */
|
||||
if (udev) {
|
||||
if (hcd->usb_phy && !hdev->parent &&
|
||||
!(portstatus & USB_PORT_STAT_CONNECTION))
|
||||
if (hcd->usb_phy && !hdev->parent)
|
||||
usb_phy_notify_disconnect(hcd->usb_phy, udev->speed);
|
||||
usb_disconnect(&port_dev->child);
|
||||
}
|
||||
|
@ -4783,6 +4779,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
|
|||
port_dev->child = NULL;
|
||||
spin_unlock_irq(&device_state_lock);
|
||||
mutex_unlock(&usb_port_peer_mutex);
|
||||
} else {
|
||||
if (hcd->usb_phy && !hdev->parent)
|
||||
usb_phy_notify_connect(hcd->usb_phy,
|
||||
udev->speed);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -97,6 +97,12 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||
{ USB_DEVICE(0x04f3, 0x0089), .driver_info =
|
||||
USB_QUIRK_DEVICE_QUALIFIER },
|
||||
|
||||
{ USB_DEVICE(0x04f3, 0x009b), .driver_info =
|
||||
USB_QUIRK_DEVICE_QUALIFIER },
|
||||
|
||||
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
|
||||
USB_QUIRK_DEVICE_QUALIFIER },
|
||||
|
||||
/* Roland SC-8820 */
|
||||
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
|
|
|
@ -2327,7 +2327,7 @@ irq_retry:
|
|||
|
||||
u32 usb_status = readl(hsotg->regs + GOTGCTL);
|
||||
|
||||
dev_info(hsotg->dev, "%s: USBRst\n", __func__);
|
||||
dev_dbg(hsotg->dev, "%s: USBRst\n", __func__);
|
||||
dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n",
|
||||
readl(hsotg->regs + GNPTXSTS));
|
||||
|
||||
|
|
|
@ -234,7 +234,7 @@ config USB_EHCI_SH
|
|||
|
||||
config USB_EHCI_EXYNOS
|
||||
tristate "EHCI support for Samsung S5P/EXYNOS SoC Series"
|
||||
depends on PLAT_S5P || ARCH_EXYNOS
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS
|
||||
help
|
||||
Enable support for the Samsung Exynos SOC's on-chip EHCI controller.
|
||||
|
||||
|
@ -550,7 +550,7 @@ config USB_OHCI_SH
|
|||
|
||||
config USB_OHCI_EXYNOS
|
||||
tristate "OHCI support for Samsung S5P/EXYNOS SoC Series"
|
||||
depends on PLAT_S5P || ARCH_EXYNOS
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS
|
||||
help
|
||||
Enable support for the Samsung Exynos SOC's on-chip OHCI controller.
|
||||
|
||||
|
|
|
@ -607,7 +607,7 @@ found:
|
|||
wa->wa_descr = wa_descr = (struct usb_wa_descriptor *) hdr;
|
||||
if (le16_to_cpu(wa_descr->bcdWAVersion) > 0x0100)
|
||||
dev_warn(dev, "Wire Adapter v%d.%d newer than groked v1.0\n",
|
||||
le16_to_cpu(wa_descr->bcdWAVersion) & 0xff00 >> 8,
|
||||
(le16_to_cpu(wa_descr->bcdWAVersion) & 0xff00) >> 8,
|
||||
le16_to_cpu(wa_descr->bcdWAVersion) & 0x00ff);
|
||||
result = 0;
|
||||
error:
|
||||
|
|
|
@ -127,20 +127,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|||
xhci->quirks |= XHCI_SPURIOUS_REBOOT;
|
||||
xhci->quirks |= XHCI_AVOID_BEI;
|
||||
}
|
||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||
(pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI ||
|
||||
pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI)) {
|
||||
/* Workaround for occasional spurious wakeups from S5 (or
|
||||
* any other sleep) on Haswell machines with LPT and LPT-LP
|
||||
* with the new Intel BIOS
|
||||
*/
|
||||
/* Limit the quirk to only known vendors, as this triggers
|
||||
* yet another BIOS bug on some other machines
|
||||
* https://bugzilla.kernel.org/show_bug.cgi?id=66171
|
||||
*/
|
||||
if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP)
|
||||
xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
|
||||
}
|
||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||
pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
|
||||
xhci->quirks |= XHCI_SPURIOUS_REBOOT;
|
||||
|
@ -162,6 +148,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|||
pdev->device == 0x3432)
|
||||
xhci->quirks |= XHCI_BROKEN_STREAMS;
|
||||
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||
pdev->device == 0x1042)
|
||||
xhci->quirks |= XHCI_BROKEN_STREAMS;
|
||||
|
||||
if (xhci->quirks & XHCI_RESET_ON_RESUME)
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
|
||||
"QUIRK: Resetting on resume");
|
||||
|
|
|
@ -335,7 +335,8 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
port->interrupt_out_urb->transfer_buffer_length = length;
|
||||
|
||||
priv->cur_pos = priv->cur_pos + length;
|
||||
result = usb_submit_urb(port->interrupt_out_urb, GFP_NOIO);
|
||||
result = usb_submit_urb(port->interrupt_out_urb,
|
||||
GFP_ATOMIC);
|
||||
dev_dbg(&port->dev, "%s - Send write URB returns: %i\n", __func__, result);
|
||||
todo = priv->filled - priv->cur_pos;
|
||||
|
||||
|
@ -350,7 +351,7 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
|
||||
priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
|
||||
result = usb_submit_urb(port->interrupt_in_urb,
|
||||
GFP_NOIO);
|
||||
GFP_ATOMIC);
|
||||
dev_dbg(&port->dev, "%s - Send read URB returns: %i\n", __func__, result);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -215,7 +215,7 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
|
||||
/* The connected devices do not have a bulk write endpoint,
|
||||
* to transmit data to de barcode device the control endpoint is used */
|
||||
dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
|
||||
dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
|
||||
if (!dr) {
|
||||
count = -ENOMEM;
|
||||
goto error_no_dr;
|
||||
|
|
|
@ -52,7 +52,7 @@ int usb_stor_euscsi_init(struct us_data *us)
|
|||
us->iobuf[0] = 0x1;
|
||||
result = usb_stor_control_msg(us, us->send_ctrl_pipe,
|
||||
0x0C, USB_RECIP_INTERFACE | USB_TYPE_VENDOR,
|
||||
0x01, 0x0, us->iobuf, 0x1, USB_CTRL_SET_TIMEOUT);
|
||||
0x01, 0x0, us->iobuf, 0x1, 5 * HZ);
|
||||
usb_stor_dbg(us, "-- result is %d\n", result);
|
||||
|
||||
return 0;
|
||||
|
@ -100,7 +100,7 @@ int usb_stor_huawei_e220_init(struct us_data *us)
|
|||
result = usb_stor_control_msg(us, us->send_ctrl_pipe,
|
||||
USB_REQ_SET_FEATURE,
|
||||
USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
0x01, 0x0, NULL, 0x0, 1000);
|
||||
0x01, 0x0, NULL, 0x0, 1 * HZ);
|
||||
usb_stor_dbg(us, "Huawei mode set result is %d\n", result);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -626,6 +626,7 @@ static int config_autodelink_after_power_on(struct us_data *us)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int config_autodelink_before_power_down(struct us_data *us)
|
||||
{
|
||||
struct rts51x_chip *chip = (struct rts51x_chip *)(us->extra);
|
||||
|
@ -716,6 +717,7 @@ static void fw5895_init(struct us_data *us)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_REALTEK_AUTOPM
|
||||
static void fw5895_set_mmc_wp(struct us_data *us)
|
||||
|
|
|
@ -1118,6 +1118,31 @@ int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
|
|||
*/
|
||||
if (result == USB_STOR_XFER_LONG)
|
||||
fake_sense = 1;
|
||||
|
||||
/*
|
||||
* Sometimes a device will mistakenly skip the data phase
|
||||
* and go directly to the status phase without sending a
|
||||
* zero-length packet. If we get a 13-byte response here,
|
||||
* check whether it really is a CSW.
|
||||
*/
|
||||
if (result == USB_STOR_XFER_SHORT &&
|
||||
srb->sc_data_direction == DMA_FROM_DEVICE &&
|
||||
transfer_length - scsi_get_resid(srb) ==
|
||||
US_BULK_CS_WRAP_LEN) {
|
||||
struct scatterlist *sg = NULL;
|
||||
unsigned int offset = 0;
|
||||
|
||||
if (usb_stor_access_xfer_buf((unsigned char *) bcs,
|
||||
US_BULK_CS_WRAP_LEN, srb, &sg,
|
||||
&offset, FROM_XFER_BUF) ==
|
||||
US_BULK_CS_WRAP_LEN &&
|
||||
bcs->Signature ==
|
||||
cpu_to_le32(US_BULK_CS_SIGN)) {
|
||||
usb_stor_dbg(us, "Device skipped data phase\n");
|
||||
scsi_set_resid(srb, transfer_length);
|
||||
goto skipped_data_phase;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* See flow chart on pg 15 of the Bulk Only Transport spec for
|
||||
|
@ -1153,6 +1178,7 @@ int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
|
|||
if (result != USB_STOR_XFER_GOOD)
|
||||
return USB_STOR_TRANSPORT_ERROR;
|
||||
|
||||
skipped_data_phase:
|
||||
/* check bulk status */
|
||||
residue = le32_to_cpu(bcs->Residue);
|
||||
usb_stor_dbg(us, "Bulk Status S 0x%x T 0x%x R %u Stat 0x%x\n",
|
||||
|
|
|
@ -54,6 +54,20 @@ UNUSUAL_DEV(0x0bc2, 0x3312, 0x0000, 0x9999,
|
|||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
|
||||
UNUSUAL_DEV(0x0bc2, 0x3320, 0x0000, 0x9999,
|
||||
"Seagate",
|
||||
"Expansion Desk",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* Reported-by: Bogdan Mihalcea <bogdan.mihalcea@infim.ro> */
|
||||
UNUSUAL_DEV(0x0bc2, 0xa003, 0x0000, 0x9999,
|
||||
"Seagate",
|
||||
"Backup Plus",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* https://bbs.archlinux.org/viewtopic.php?id=183190 */
|
||||
UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
|
||||
"Seagate",
|
||||
|
@ -61,6 +75,13 @@ UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
|
|||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* https://bbs.archlinux.org/viewtopic.php?id=183190 */
|
||||
UNUSUAL_DEV(0x0bc2, 0xab21, 0x0000, 0x9999,
|
||||
"Seagate",
|
||||
"Backup+ BK",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
||||
/* Reported-by: Claudio Bizzarri <claudio.bizzarri@gmail.com> */
|
||||
UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999,
|
||||
"JMicron",
|
||||
|
@ -75,3 +96,10 @@ UNUSUAL_DEV(0x174c, 0x5106, 0x0000, 0x9999,
|
|||
"ASM1051",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_UAS),
|
||||
|
||||
/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
|
||||
UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
|
||||
"VIA",
|
||||
"VL711",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
|
|
Loading…
Reference in New Issue