dbg ("%s - %s", __FUNCTION__, serial->type->name); 
dbg("%s - %s", __FUNCTION__, serial->type->description); 
static void destroy_serial(struct kref *kref){	struct usb_serial *serial;	struct usb_serial_port *port;	int i;	serial = to_usb_serial(kref);	dbg ("%s - %s", __FUNCTION__, serial->type->name);	serial->type->shutdown(serial);	/* return the minor range that this device had */	return_serial(serial);	for (i = 0; i < serial->num_ports; ++i)		serial->port[i]->open_count = 0;	/* the ports are cleaned up and released in port_release() */	for (i = 0; i < serial->num_ports; ++i)		if (serial->port[i]->dev.parent != NULL) {			device_unregister(&serial->port[i]->dev);			serial->port[i] = NULL;		}	/* If this is a "fake" port, we have to clean it up here, as it will	 * not get cleaned up in port_release() as it was never registered with	 * the driver core */	if (serial->num_ports < serial->num_port_pointers) {		for (i = serial->num_ports; i < serial->num_port_pointers; ++i) {			port = serial->port[i];			if (!port)				continue;			usb_kill_urb(port->read_urb);			usb_free_urb(port->read_urb);			usb_kill_urb(port->write_urb);			usb_free_urb(port->write_urb);			usb_kill_urb(port->interrupt_in_urb);			usb_free_urb(port->interrupt_in_urb);			usb_kill_urb(port->interrupt_out_urb);			usb_free_urb(port->interrupt_out_urb);			kfree(port->bulk_in_buffer);			kfree(port->bulk_out_buffer);			kfree(port->interrupt_in_buffer);			kfree(port->interrupt_out_buffer);		}	}	usb_put_dev(serial->dev);	/* free up any memory that we allocated */	kfree (serial);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/269bda1c123c7caf88e1deb2264f9086f0344192/usb-serial.c/clean/drivers/usb/serial/usb-serial.c