[PATCH] USB: fix usb-serial generic initialization

At module load time, if a generic device is found, the tty information
for the device is not set up properly (as the tty structures aren't initialized
yet.) This can cause big problems for things like udev. This patch fixes this.

Thanks to Kay Sievers for the original patch for this problem.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

+10 -10
+10 -10
drivers/usb/serial/usb-serial.c
··· 1297 goto exit_bus; 1298 } 1299 1300 - /* register the generic driver, if we should */ 1301 - result = usb_serial_generic_register(debug); 1302 - if (result < 0) { 1303 - err("%s - registering generic driver failed", __FUNCTION__); 1304 - goto exit_generic; 1305 - } 1306 - 1307 usb_serial_tty_driver->owner = THIS_MODULE; 1308 usb_serial_tty_driver->driver_name = "usbserial"; 1309 usb_serial_tty_driver->devfs_name = "usb/tts/"; ··· 1322 goto exit_tty; 1323 } 1324 1325 info(DRIVER_DESC " " DRIVER_VERSION); 1326 1327 return result; 1328 1329 exit_tty: 1330 tty_unregister_driver(usb_serial_tty_driver); 1331 1332 exit_reg_driver: 1333 - usb_serial_generic_deregister(); 1334 - 1335 - exit_generic: 1336 bus_unregister(&usb_serial_bus_type); 1337 1338 exit_bus:
··· 1297 goto exit_bus; 1298 } 1299 1300 usb_serial_tty_driver->owner = THIS_MODULE; 1301 usb_serial_tty_driver->driver_name = "usbserial"; 1302 usb_serial_tty_driver->devfs_name = "usb/tts/"; ··· 1329 goto exit_tty; 1330 } 1331 1332 + /* register the generic driver, if we should */ 1333 + result = usb_serial_generic_register(debug); 1334 + if (result < 0) { 1335 + err("%s - registering generic driver failed", __FUNCTION__); 1336 + goto exit_generic; 1337 + } 1338 + 1339 info(DRIVER_DESC " " DRIVER_VERSION); 1340 1341 return result; 1342 + 1343 + exit_generic: 1344 + usb_deregister(&usb_serial_driver); 1345 1346 exit_tty: 1347 tty_unregister_driver(usb_serial_tty_driver); 1348 1349 exit_reg_driver: 1350 bus_unregister(&usb_serial_bus_type); 1351 1352 exit_bus: