···4242 const struct usb_device_id *id);4343static int visor_calc_num_ports(struct usb_serial *serial,4444 struct usb_serial_endpoints *epds);4545+static int clie_5_calc_num_ports(struct usb_serial *serial,4646+ struct usb_serial_endpoints *epds);4547static void visor_read_int_callback(struct urb *urb);4648static int clie_3_5_startup(struct usb_serial *serial);4749static int treo_attach(struct usb_serial *serial);4848-static int clie_5_attach(struct usb_serial *serial);4950static int palm_os_3_probe(struct usb_serial *serial,5051 const struct usb_device_id *id);5152static int palm_os_4_probe(struct usb_serial *serial,···191190 .description = "Sony Clie 5.0",192191 .id_table = clie_id_5_table,193192 .num_ports = 2,193193+ .num_bulk_out = 2,194194 .bulk_out_size = 256,195195 .open = visor_open,196196 .close = visor_close,197197 .throttle = usb_serial_generic_throttle,198198 .unthrottle = usb_serial_generic_unthrottle,199199- .attach = clie_5_attach,200199 .probe = visor_probe,200200+ .calc_num_ports = clie_5_calc_num_ports,201201 .read_int_callback = visor_read_int_callback,202202};203203···479477 return num_ports;480478}481479480480+static int clie_5_calc_num_ports(struct usb_serial *serial,481481+ struct usb_serial_endpoints *epds)482482+{483483+ /*484484+ * TH55 registers 2 ports.485485+ * Communication in from the UX50/TH55 uses the first bulk-in486486+ * endpoint, while communication out to the UX50/TH55 uses the second487487+ * bulk-out endpoint.488488+ */489489+490490+ /*491491+ * FIXME: Should we swap the descriptors instead of using the same492492+ * bulk-out endpoint for both ports?493493+ */494494+ epds->bulk_out[0] = epds->bulk_out[1];495495+496496+ return serial->type->num_ports;497497+}498498+482499static int clie_3_5_startup(struct usb_serial *serial)483500{484501 struct device *dev = &serial->dev->dev;···605584 COPY_PORT(serial->port[0], serial->port[1]);606585 COPY_PORT(serial->port[1], swap_port);607586 kfree(swap_port);608608-609609- return 0;610610-}611611-612612-static int clie_5_attach(struct usb_serial *serial)613613-{614614- struct usb_serial_port *port;615615- unsigned int pipe;616616- int j;617617-618618- /* TH55 registers 2 ports.619619- Communication in from the UX50/TH55 uses bulk_in_endpointAddress620620- from port 0. Communication out to the UX50/TH55 uses621621- bulk_out_endpointAddress from port 1622622-623623- Lets do a quick and dirty mapping624624- */625625-626626- /* some sanity check */627627- if (serial->num_bulk_out < 2) {628628- dev_err(&serial->interface->dev, "missing bulk out endpoints\n");629629- return -ENODEV;630630- }631631-632632- /* port 0 now uses the modified endpoint Address */633633- port = serial->port[0];634634- port->bulk_out_endpointAddress =635635- serial->port[1]->bulk_out_endpointAddress;636636-637637- pipe = usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress);638638- for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j)639639- port->write_urbs[j]->pipe = pipe;640587641588 return 0;642589}