struct usb_serial_endpoints *epds)
{
/*
- * some devices have 3 endpoints, the 3rd of which
- * must be ignored as it would make the core
- * create a second port which oopses when used
+ * Some of the devices in ipaq_id_table[] are composite, and we
+ * shouldn't bind to all the interfaces. This test will rule out
+ * some obviously invalid possibilities.
*/
- int ipaq_num_ports = 1;
-
- dev_dbg(&serial->dev->dev, "%s - numberofendpoints: %d\n", __func__,
- (int)serial->interface->cur_altsetting->desc.bNumEndpoints);
+ if (epds->num_bulk_in == 0 || epds->num_bulk_out == 0)
+ return -ENODEV;
/*
- * a few devices have 4 endpoints, seemingly Yakuma devices,
- * and we need the second pair, so let them have 2 ports
- *
- * TODO: can we drop port 1 ?
+ * A few devices have four endpoints, seemingly Yakuma devices, and
+ * we need the second pair.
*/
- if (serial->interface->cur_altsetting->desc.bNumEndpoints > 3) {
- ipaq_num_ports = 2;
+ if (epds->num_bulk_in > 1 && epds->num_bulk_out > 1) {
+ epds->bulk_in[0] = epds->bulk_in[1];
+ epds->bulk_out[0] = epds->bulk_out[1];
}
/*
- * Some of the devices in ipaq_id_table[] are composite, and we
- * shouldn't bind to all the interfaces. This test will rule out
- * some obviously invalid possibilities.
+ * Other devices have 3 endpoints, but we only use the first bulk in
+ * and out endpoints.
*/
- if (epds->num_bulk_in < ipaq_num_ports ||
- epds->num_bulk_out < ipaq_num_ports) {
- return -ENODEV;
- }
+ epds->num_bulk_in = 1;
+ epds->num_bulk_out = 1;
- return ipaq_num_ports;
+ return 1;
}
-
static int ipaq_startup(struct usb_serial *serial)
{
if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
return -ENODEV;
}
- dev_dbg(&serial->dev->dev,
- "%s - iPAQ module configured for %d ports\n", __func__,
- serial->num_ports);
-
return usb_reset_configuration(serial->dev);
}