On Sun, Jan 17, 2021 at 11:44:16PM -0600, Pete Zaitcev wrote: > On Sun, 17 Jan 2021 15:36:39 -0600 > Jeremy Figgins <kernel@xxxxxxxxxxxxxxxxx> wrote: > > > The naming is designed to mirror the existing > > USB_QUIRK_NO_SET_INTF flag, but that flag is > > not sufficient to make these devices work. > > + { 0x0416, 0x5011, USBLP_QUIRK_NO_SET_INTF }, /* Winbond Electronics Corp. Virtual Com Port */ > > Jeremy, thanks for the patch. It looks mostly fine code-wise (quirk is > out of numerical order), but I have a question: did you consider keying > off usblp->dev->quirks instead? > > How about this: > > diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c > index 37062130a03c..0c4a98f00797 100644 > --- a/drivers/usb/class/usblp.c > +++ b/drivers/usb/class/usblp.c > @@ -1315,7 +1315,11 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol) > alts = usblp->protocol[protocol].alt_setting; > if (alts < 0) > return -EINVAL; > - r = usb_set_interface(usblp->dev, usblp->ifnum, alts); > + if (usblp->dev->quirks & USB_QUIRK_NO_SET_INTF) { > + r = 0; > + } else { > + r = usb_set_interface(usblp->dev, usblp->ifnum, alts); > + } > if (r < 0) { > printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n", > alts, usblp->ifnum); Would it be practical simply to skip the usb_set_interface() call whenever alts is 0? After all, devices use altsetting 0 by default; it shouldn't be necessary to tell them to do so. Alan Stern