Commit c67cc431 authored by Hector Martin's avatar Hector Martin Committed by Paolo Abeni

net: usb: ax88179_178a: Bind only to vendor-specific interface

The Anker PowerExpand USB-C to Gigabit Ethernet adapter uses this
chipset, but exposes CDC Ethernet configurations as well as the
vendor specific one. This driver tries to bind by PID:VID
unconditionally and ends up picking up the CDC configuration, which
is supposed to be handled by the class driver. To make things even
more confusing, it sees both of the CDC class interfaces and tries
to bind twice, resulting in two broken Ethernet devices.

Change all the ID matches to specifically match the vendor-specific
interface. By default the device comes up in CDC mode and is bound by
that driver (which works fine); users may switch it to the vendor
interface using sysfs to set bConfigurationValue, at which point the
device actually goes through a reconnect cycle and comes back as a
vendor specific only device, and then this driver binds and works too.

The affected device uses VID/PID 0b95:1790, but we might as well change
all of them for good measure, since there is no good reason for this
driver to bind to standard CDC Ethernet interfaces.

v3: Added VID/PID info to commit message
Signed-off-by: default avatarHector Martin <marcan@marcan.st>
Link: https://lore.kernel.org/r/20220731072209.45504-1-marcan@marcan.stSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent f56530dc
...@@ -1965,55 +1965,55 @@ static const struct driver_info at_umc2000sp_info = { ...@@ -1965,55 +1965,55 @@ static const struct driver_info at_umc2000sp_info = {
static const struct usb_device_id products[] = { static const struct usb_device_id products[] = {
{ {
/* ASIX AX88179 10/100/1000 */ /* ASIX AX88179 10/100/1000 */
USB_DEVICE(0x0b95, 0x1790), USB_DEVICE_AND_INTERFACE_INFO(0x0b95, 0x1790, 0xff, 0xff, 0),
.driver_info = (unsigned long)&ax88179_info, .driver_info = (unsigned long)&ax88179_info,
}, { }, {
/* ASIX AX88178A 10/100/1000 */ /* ASIX AX88178A 10/100/1000 */
USB_DEVICE(0x0b95, 0x178a), USB_DEVICE_AND_INTERFACE_INFO(0x0b95, 0x178a, 0xff, 0xff, 0),
.driver_info = (unsigned long)&ax88178a_info, .driver_info = (unsigned long)&ax88178a_info,
}, { }, {
/* Cypress GX3 SuperSpeed to Gigabit Ethernet Bridge Controller */ /* Cypress GX3 SuperSpeed to Gigabit Ethernet Bridge Controller */
USB_DEVICE(0x04b4, 0x3610), USB_DEVICE_AND_INTERFACE_INFO(0x04b4, 0x3610, 0xff, 0xff, 0),
.driver_info = (unsigned long)&cypress_GX3_info, .driver_info = (unsigned long)&cypress_GX3_info,
}, { }, {
/* D-Link DUB-1312 USB 3.0 to Gigabit Ethernet Adapter */ /* D-Link DUB-1312 USB 3.0 to Gigabit Ethernet Adapter */
USB_DEVICE(0x2001, 0x4a00), USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x4a00, 0xff, 0xff, 0),
.driver_info = (unsigned long)&dlink_dub1312_info, .driver_info = (unsigned long)&dlink_dub1312_info,
}, { }, {
/* Sitecom USB 3.0 to Gigabit Adapter */ /* Sitecom USB 3.0 to Gigabit Adapter */
USB_DEVICE(0x0df6, 0x0072), USB_DEVICE_AND_INTERFACE_INFO(0x0df6, 0x0072, 0xff, 0xff, 0),
.driver_info = (unsigned long)&sitecom_info, .driver_info = (unsigned long)&sitecom_info,
}, { }, {
/* Samsung USB Ethernet Adapter */ /* Samsung USB Ethernet Adapter */
USB_DEVICE(0x04e8, 0xa100), USB_DEVICE_AND_INTERFACE_INFO(0x04e8, 0xa100, 0xff, 0xff, 0),
.driver_info = (unsigned long)&samsung_info, .driver_info = (unsigned long)&samsung_info,
}, { }, {
/* Lenovo OneLinkDock Gigabit LAN */ /* Lenovo OneLinkDock Gigabit LAN */
USB_DEVICE(0x17ef, 0x304b), USB_DEVICE_AND_INTERFACE_INFO(0x17ef, 0x304b, 0xff, 0xff, 0),
.driver_info = (unsigned long)&lenovo_info, .driver_info = (unsigned long)&lenovo_info,
}, { }, {
/* Belkin B2B128 USB 3.0 Hub + Gigabit Ethernet Adapter */ /* Belkin B2B128 USB 3.0 Hub + Gigabit Ethernet Adapter */
USB_DEVICE(0x050d, 0x0128), USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x0128, 0xff, 0xff, 0),
.driver_info = (unsigned long)&belkin_info, .driver_info = (unsigned long)&belkin_info,
}, { }, {
/* Toshiba USB 3.0 GBit Ethernet Adapter */ /* Toshiba USB 3.0 GBit Ethernet Adapter */
USB_DEVICE(0x0930, 0x0a13), USB_DEVICE_AND_INTERFACE_INFO(0x0930, 0x0a13, 0xff, 0xff, 0),
.driver_info = (unsigned long)&toshiba_info, .driver_info = (unsigned long)&toshiba_info,
}, { }, {
/* Magic Control Technology U3-A9003 USB 3.0 Gigabit Ethernet Adapter */ /* Magic Control Technology U3-A9003 USB 3.0 Gigabit Ethernet Adapter */
USB_DEVICE(0x0711, 0x0179), USB_DEVICE_AND_INTERFACE_INFO(0x0711, 0x0179, 0xff, 0xff, 0),
.driver_info = (unsigned long)&mct_info, .driver_info = (unsigned long)&mct_info,
}, { }, {
/* Allied Telesis AT-UMC2000 USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */ /* Allied Telesis AT-UMC2000 USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */
USB_DEVICE(0x07c9, 0x000e), USB_DEVICE_AND_INTERFACE_INFO(0x07c9, 0x000e, 0xff, 0xff, 0),
.driver_info = (unsigned long)&at_umc2000_info, .driver_info = (unsigned long)&at_umc2000_info,
}, { }, {
/* Allied Telesis AT-UMC200 USB 3.0/USB 3.1 Gen 1 to Fast Ethernet Adapter */ /* Allied Telesis AT-UMC200 USB 3.0/USB 3.1 Gen 1 to Fast Ethernet Adapter */
USB_DEVICE(0x07c9, 0x000f), USB_DEVICE_AND_INTERFACE_INFO(0x07c9, 0x000f, 0xff, 0xff, 0),
.driver_info = (unsigned long)&at_umc200_info, .driver_info = (unsigned long)&at_umc200_info,
}, { }, {
/* Allied Telesis AT-UMC2000/SP USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */ /* Allied Telesis AT-UMC2000/SP USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */
USB_DEVICE(0x07c9, 0x0010), USB_DEVICE_AND_INTERFACE_INFO(0x07c9, 0x0010, 0xff, 0xff, 0),
.driver_info = (unsigned long)&at_umc2000sp_info, .driver_info = (unsigned long)&at_umc2000sp_info,
}, },
{ }, { },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment