On Fri, Sep 27, 2024 at 03:44:04PM +0200, Fabio Luongo wrote: > JULABO PRESTO chillers on Windows use the usbser.sys driver > for communication, so the same functionality should be achievable > on Linux using the cdc_acm driver. > > However, cdc_acm does not accomodate the quirkness of these devices, > as they fail normal probing ("Zero length descriptor references"), > but they also feature a single USB interface instead of two. > > This patch extends the effect of the `NO_UNION_NORMAL` quirk > to cover the features of JULABO PRESTO devices. > > Signed-off-by: Fabio Luongo <f.langufo.l@xxxxxxxxx> > --- > drivers/usb/class/cdc-acm.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c > index 605fea461102..d77c84c6e878 100644 > --- a/drivers/usb/class/cdc-acm.c > +++ b/drivers/usb/class/cdc-acm.c > @@ -1210,6 +1210,8 @@ static int acm_probe(struct usb_interface *intf, > if (quirks == NO_UNION_NORMAL) { > data_interface = usb_ifnum_to_if(usb_dev, 1); > control_interface = usb_ifnum_to_if(usb_dev, 0); > + if (!data_interface) > + data_interface = control_interface; That feels wrong, how can we send data out both for different things? > /* we would crash */ > if (!data_interface || !control_interface) > return -ENODEV; > @@ -1284,6 +1286,8 @@ static int acm_probe(struct usb_interface *intf, > if (data_intf_num != call_intf_num) > dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n"); > > +skip_normal_probe: > + > if (control_interface == data_interface) { > /* some broken devices designed for windows work this way */ > dev_warn(&intf->dev,"Control and data interfaces are not separated!\n"); > @@ -1303,8 +1307,6 @@ static int acm_probe(struct usb_interface *intf, > goto made_compressed_probe; > } > > -skip_normal_probe: Why the movement of the goto tag? thanks, greg k-h