ChangeSet 1.872.3.8, 2002/11/19 22:32:33-08:00, greg@kroah.com USB: usb-serial core updates - removed a few #ifdefs in the main code - cleaned up the failure logic in initialization. diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c --- a/drivers/usb/serial/usb-serial.c Wed Nov 20 01:00:52 2002 +++ b/drivers/usb/serial/usb-serial.c Wed Nov 20 01:00:52 2002 @@ -14,6 +14,10 @@ * * See Documentation/usb/usb-serial.txt for more information on using this driver * + * (11/19/2002) gkh + * removed a few #ifdefs for the generic code and cleaned up the failure + * logic in initialization. + * * (10/02/2002) gkh * moved the console code to console.c and out of this file. * @@ -341,7 +345,7 @@ /* * Version Information */ -#define DRIVER_VERSION "v1.6" +#define DRIVER_VERSION "v1.7" #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/" #define DRIVER_DESC "USB Serial Driver core" @@ -382,7 +386,29 @@ {.driver_info = 42}, {} }; -#endif + +static int generic_register (void) +{ + generic_device_ids[0].idVendor = vendor; + generic_device_ids[0].idProduct = product; + generic_device_ids[0].match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT; + + /* register our generic driver with ourselves */ + return usb_serial_register (&generic_device); +} + +static void generic_deregister (void) +{ + /* remove our generic driver */ + usb_serial_deregister (&generic_device); +} + +#else + +static inline int generic_register (void) { return 0; } +static inline void generic_deregister (void) { } + +#endif /* CONFIG_USB_SERIAL_GENERIC */ /* Driver structure we register with the USB core */ static struct usb_driver usb_serial_driver = { @@ -409,7 +435,6 @@ static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */ static LIST_HEAD(usb_serial_driver_list); - struct usb_serial *usb_serial_get_by_minor (unsigned int minor) { return serial_table[minor]; @@ -1574,40 +1599,49 @@ static int __init usb_serial_init(void) { int i; - int result; + int result = 0; /* Initalize our global data */ for (i = 0; i < SERIAL_TTY_MINORS; ++i) { serial_table[i] = NULL; } + /* register the generic driver, if we should */ + result = generic_register(); + if (result < 0) { + err("%s - registering generic driver failed", __FUNCTION__); + goto exit; + } + /* register the tty driver */ serial_tty_driver.init_termios = tty_std_termios; serial_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; - if (tty_register_driver (&serial_tty_driver)) { - err("%s - failed to register tty driver", __FUNCTION__); - return -1; + result = tty_register_driver (&serial_tty_driver); + if (result) { + err("%s - tty_register_driver failed", __FUNCTION__); + goto exit_generic; } /* register the USB driver */ result = usb_register(&usb_serial_driver); if (result < 0) { - tty_unregister_driver(&serial_tty_driver); - err("usb_register failed for the usb-serial driver. Error number %d", result); - return -1; + err("%s - usb_register failed", __FUNCTION__); + goto exit_tty; } -#ifdef CONFIG_USB_SERIAL_GENERIC - generic_device_ids[0].idVendor = vendor; - generic_device_ids[0].idProduct = product; - generic_device_ids[0].match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT; - /* register our generic driver with ourselves */ - usb_serial_register (&generic_device); -#endif - info(DRIVER_DESC " " DRIVER_VERSION); - return 0; + return result; + +exit_tty: + tty_unregister_driver(&serial_tty_driver); + +exit_generic: + generic_deregister(); + +exit: + err ("%s - returning with error %d", __FUNCTION__, result); + return result; } @@ -1615,11 +1649,8 @@ { usb_serial_console_exit(); -#ifdef CONFIG_USB_SERIAL_GENERIC - /* remove our generic driver */ - usb_serial_deregister (&generic_device); -#endif - + generic_deregister(); + usb_deregister(&usb_serial_driver); tty_unregister_driver(&serial_tty_driver); }