On Mon, 2 May 2022 20:06:44 +0900 Hector Martin wrote: > The Anker PowerExpand USB-C to Gigabit Ethernet adapter uses this > chipset, but exposes CDC Ethernet configurations as well as the > vendor specific one. And we have reasons to believe all dongle vendors may have a similar problem? > This driver ends up binding first to both CDC > interfaces, tries to instantiate two Ethernet interfaces talking to > the same device, and the result is a nice fireworks show. > > 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. > > v2: Fixed interface protocol match, commit message. > > Signed-off-by: Hector Martin <marcan@xxxxxxxxx> > --- > drivers/net/usb/ax88179_178a.c | 26 +++++++++++++------------- > 1 file changed, 13 insertions(+), 13 deletions(-) > > diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c > index e2fa56b92685..7c7c2f31d9f1 100644 > --- a/drivers/net/usb/ax88179_178a.c > +++ b/drivers/net/usb/ax88179_178a.c > @@ -1914,55 +1914,55 @@ static const struct driver_info at_umc2000sp_info = { > static const struct usb_device_id products[] = { > { > /* 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, > }, Should we use USB_CLASS_VENDOR_SPEC and USB_SUBCLASS_VENDOR_SPEC ? Maybe define a local macro wrapper for USB_DEVICE_AND.. which will fill those in to avoid long lines?