@@ -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;
/* 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:
-
/*workaround for switched interfaces */
if (data_interface->cur_altsetting->desc.bInterfaceClass != USB_CLASS_CDC_DATA) {
if (control_interface->cur_altsetting->desc.bInterfaceClass == USB_CLASS_CDC_DATA) {
@@ -1787,6 +1789,9 @@ static const struct usb_device_id acm_ids[] = {
{ USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
},
+ { USB_DEVICE(0x233c, 0x7633), /* JULABO PRESTO */
+ .driver_info = NO_UNION_NORMAL,
+ },
{ USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
.driver_info = QUIRK_CONTROL_LINE_STATE, },
{ USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
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@gmail.com> --- drivers/usb/class/cdc-acm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)