X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fusb%2Fserial%2Fgeneric.c;h=196fea084f2197d26355ba9daa6d7ac536b79901;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=37a53a16e942bd61761bc33323d54ea819d5ebe3;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index 37a53a16e..196fea084 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c @@ -19,16 +19,10 @@ #include #include #include - -#ifdef CONFIG_USB_SERIAL_DEBUG - static int debug = 1; -#else - static int debug; -#endif - #include "usb-serial.h" - +static int debug; + #ifdef CONFIG_USB_SERIAL_GENERIC static __u16 vendor = 0x05f9; static __u16 product = 0xffff; @@ -53,6 +47,32 @@ struct usb_serial_device_type usb_serial_generic_device = { .num_ports = 1, .shutdown = usb_serial_generic_shutdown, }; + +/* we want to look at all devices, as the vendor/product id can change + * depending on the command line argument */ +static struct usb_device_id generic_serial_ids[] = { + {.driver_info = 42}, + {} +}; + +static int generic_probe(struct usb_interface *interface, + const struct usb_device_id *id) +{ + const struct usb_device_id *id_pattern; + + id_pattern = usb_match_id(interface, generic_device_ids); + if (id_pattern != NULL) + return usb_serial_probe(interface, id); + return -ENODEV; +} + +static struct usb_driver generic_driver = { + .owner = THIS_MODULE, + .name = "usbserial_generic", + .probe = generic_probe, + .disconnect = usb_serial_disconnect, + .id_table = generic_serial_ids, +}; #endif int usb_serial_generic_register (int _debug) @@ -67,6 +87,12 @@ int usb_serial_generic_register (int _debug) /* register our generic driver with ourselves */ retval = usb_serial_register (&usb_serial_generic_device); + if (retval) + goto exit; + retval = usb_register(&generic_driver); + if (retval) + usb_serial_deregister(&usb_serial_generic_device); +exit: #endif return retval; } @@ -75,6 +101,7 @@ void usb_serial_generic_deregister (void) { #ifdef CONFIG_USB_SERIAL_GENERIC /* remove our generic driver */ + usb_deregister(&generic_driver); usb_serial_deregister (&usb_serial_generic_device); #endif } @@ -136,6 +163,7 @@ int usb_serial_generic_write (struct usb_serial_port *port, int from_user, const { struct usb_serial *serial = port->serial; int result; + unsigned char *data; dbg("%s - port %d", __FUNCTION__, port->number); @@ -160,8 +188,8 @@ int usb_serial_generic_write (struct usb_serial_port *port, int from_user, const else { memcpy (port->write_urb->transfer_buffer, buf, count); } - - usb_serial_debug_data (__FILE__, __FUNCTION__, count, port->write_urb->transfer_buffer); + data = port->write_urb->transfer_buffer; + usb_serial_debug_data(debug, &port->dev, __FUNCTION__, count, data); /* set up our urb */ usb_fill_bulk_urb (port->write_urb, serial->dev, @@ -234,7 +262,7 @@ void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *reg return; } - usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); + usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data); tty = port->tty; if (tty && urb->actual_length) {