As I understand it, gregkh rewrote Qualcomm's GPLed QCSerial2k driver to produce qcserial.c. Since Qualcomm just released Gobi 3000 drivers under the GPL, I've been working on hacking qcserial.c to support Gobi 3000 as well as 2000. However, I don't understand the reasoning for one of the changes in the rewrite. In QCProbe, the QCSerial2k driver has: if (nNumInterfaces == 1) { // QDL mode? if (nInterfaceNum == 1) { DBG( "QDL port found\n" ); nRetval = usb_set_interface( pSerial->dev, nInterfaceNum, 0 ); if (nRetval < 0) { DBG( "Could not set interface, error %d\n", nRetval ); } } else { DBG( "Incorrect QDL interface number\n" ); } } The rewrite has: case 1: /* QDL mode */ /* Gobi 2000 has a single altsetting, older ones have two */ if (serial->interface->num_altsetting == 2) intf = &serial->interface->altsetting[1]; else if (serial->interface->num_altsetting > 2) break; if (intf->desc.bNumEndpoints == 2 && usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) && usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) { dbg("QDL port found"); if (serial->interface->num_altsetting == 1) return 0; retval = usb_set_interface(serial->dev, ifnum, 1); if (retval < 0) { dev_err(&serial->dev->dev, "Could not set interface, error %d\n", retval); retval = -ENODEV; kfree(data); } return retval; } break; I don't understand why we need the extra test against bNumEndpoints and usb_endpoint_is_bulk_{in,out} here. Can anyone shed any light? -- Elly -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html