# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.486 -> 1.487 # drivers/usb/serial/visor.c 1.33 -> 1.34 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/06/14 greg@kroah.com 1.487 # USB visor driver: changes due to core api changes # # - added calc_num_ports() ability to determine the number of actual # ports the device has on the fly. This should help out with some # of the Palm and Sony devices. # -------------------------------------------- # diff -Nru a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c --- a/drivers/usb/serial/visor.c Fri Jun 14 14:15:25 2002 +++ b/drivers/usb/serial/visor.c Fri Jun 14 14:15:25 2002 @@ -168,7 +168,8 @@ static int visor_chars_in_buffer (struct usb_serial_port *port); static void visor_throttle (struct usb_serial_port *port); static void visor_unthrottle (struct usb_serial_port *port); -static int visor_startup (struct usb_serial *serial); +static int visor_probe (struct usb_serial *serial); +static int visor_calc_num_ports(struct usb_serial *serial); static void visor_shutdown (struct usb_serial *serial); static int visor_ioctl (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg); static void visor_set_termios (struct usb_serial_port *port, struct termios *old_termios); @@ -228,7 +229,8 @@ close: visor_close, throttle: visor_throttle, unthrottle: visor_unthrottle, - startup: visor_startup, + probe: visor_probe, + calc_num_ports: visor_calc_num_ports, shutdown: visor_shutdown, ioctl: visor_ioctl, set_termios: visor_set_termios, @@ -252,7 +254,7 @@ close: visor_close, throttle: visor_throttle, unthrottle: visor_unthrottle, - startup: clie_3_5_startup, + attach: clie_3_5_startup, ioctl: visor_ioctl, set_termios: visor_set_termios, write: visor_write, @@ -531,11 +533,11 @@ err(__FUNCTION__ " - failed submitting read urb, error %d", result); } - -static int visor_startup (struct usb_serial *serial) +static int visor_probe (struct usb_serial *serial) { int response; int i; + int num_ports; unsigned char *transfer_buffer = kmalloc (256, GFP_KERNEL); if (!transfer_buffer) { @@ -558,8 +560,9 @@ char *string; le16_to_cpus(&connection_info->num_ports); + num_ports = connection_info->num_ports; info("%s: Number of ports: %d", serial->type->name, connection_info->num_ports); - for (i = 0; i < connection_info->num_ports; ++i) { + for (i = 0; i < num_ports; ++i) { switch (connection_info->connections[i].port_function_id) { case VISOR_FUNCTION_GENERIC: string = "Generic"; @@ -580,7 +583,10 @@ string = "unknown"; break; } - info("%s: port %d, is for %s use and is bound to ttyUSB%d", serial->type->name, connection_info->connections[i].port, string, serial->minor + i); + info("%s: port %d, is for %s use", serial->type->name, + connection_info->connections[i].port, string); + /* save off our num_ports info so that we can use it in the calc_num_ports call */ + serial->private = (void *)num_ports; } } @@ -619,6 +625,17 @@ /* continue on with initialization */ return 0; +} + +static int visor_calc_num_ports (struct usb_serial *serial) +{ + int num_ports = 0; + + if (serial->private) { + num_ports = (int)serial->private; + serial->private = NULL; + } + return num_ports; } static int clie_3_5_startup (struct usb_serial *serial)