ChangeSet 1.870, 2002/12/12 11:58:03-08:00, [EMAIL PROTECTED]

[PATCH] USB: Moved usb-serial bus specific code to a separate file.



diff -Nru a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile
--- a/drivers/usb/serial/Makefile       Fri Dec 13 17:19:04 2002
+++ b/drivers/usb/serial/Makefile       Fri Dec 13 17:19:04 2002
@@ -33,7 +33,7 @@
 # Objects that export symbols.
 export-objs    := usb-serial.o ezusb.o
 
-usbserial-objs := usb-serial.o generic.o $(usbserial-obj-y)
+usbserial-objs := usb-serial.o generic.o bus.o $(usbserial-obj-y)
 
 include $(TOPDIR)/Rules.make
 
diff -Nru a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
--- /dev/null   Wed Dec 31 16:00:00 1969
+++ b/drivers/usb/serial/bus.c  Fri Dec 13 17:19:04 2002
@@ -0,0 +1,138 @@
+/*
+ * USB Serial Converter Bus specific functions
+ *
+ * Copyright (C) 2002 Greg Kroah-Hartman ([EMAIL PROTECTED])
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License version
+ *     2 as published by the Free Software Foundation.
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/tty.h>
+#include <linux/module.h>
+#include <linux/usb.h>
+
+#ifdef CONFIG_USB_SERIAL_DEBUG
+       static int debug = 1;
+#else
+       static int debug;
+#endif
+
+#include "usb-serial.h"
+
+
+static int usb_serial_device_match (struct device *dev, struct device_driver *drv)
+{
+       struct usb_serial_device_type *driver;
+       const struct usb_serial_port *port;
+
+       /*
+        * drivers are already assigned to ports in serial_probe so it's
+        * a simple check here.
+        */
+       port = to_usb_serial_port(dev);
+       if (!port)
+               return 0;
+
+       driver = to_usb_serial_driver(drv);
+
+       if (driver == port->serial->type)
+               return 1;
+
+       return 0;
+}
+
+struct bus_type usb_serial_bus_type = {
+       .name =         "usb-serial",
+       .match =        usb_serial_device_match,
+};
+
+static int usb_serial_device_probe (struct device *dev)
+{
+       struct usb_serial_device_type *driver;
+       struct usb_serial_port *port;
+       int retval = 0;
+       int minor;
+
+       port = to_usb_serial_port(dev);
+       if (!port) {
+               retval = -ENODEV;
+               goto exit;
+       }
+
+       driver = port->serial->type;
+       if (driver->port_probe) {
+               if (!try_module_get(driver->owner)) {
+                       err ("module get failed, exiting");
+                       retval = -EIO;
+                       goto exit;
+               }
+               retval = driver->port_probe (port);
+               module_put(driver->owner);
+               if (retval)
+                       goto exit;
+       }
+
+       minor = port->number;
+
+       tty_register_devfs (&usb_serial_tty_driver, 0, minor);
+       info("%s converter now attached to ttyUSB%d (or usb/tts/%d for devfs)",
+            driver->name, minor, minor);
+
+exit:
+       return retval;
+}
+
+static int usb_serial_device_remove (struct device *dev)
+{
+       struct usb_serial_device_type *driver;
+       struct usb_serial_port *port;
+       int retval = 0;
+       int minor;
+
+       port = to_usb_serial_port(dev);
+       if (!port) {
+               return -ENODEV;
+       }
+
+       driver = port->serial->type;
+       if (driver->port_remove) {
+               if (!try_module_get(driver->owner)) {
+                       err ("module get failed, exiting");
+                       retval = -EIO;
+                       goto exit;
+               }
+               retval = driver->port_remove (port);
+               module_put(driver->owner);
+       }
+exit:
+       minor = port->number;
+       tty_unregister_devfs (&usb_serial_tty_driver, minor);
+       info("%s converter now disconnected from ttyUSB%d",
+            driver->name, minor);
+
+       return retval;
+}
+
+int usb_serial_bus_register(struct usb_serial_device_type *device)
+{
+       int retval;
+
+       device->driver.name = (char *)device->name;
+       device->driver.bus = &usb_serial_bus_type;
+       device->driver.probe = usb_serial_device_probe;
+       device->driver.remove = usb_serial_device_remove;
+
+       retval = driver_register(&device->driver);
+
+       return retval;
+}
+
+void usb_serial_bus_deregister(struct usb_serial_device_type *device)
+{
+       driver_unregister (&device->driver);
+}
+
diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
--- a/drivers/usb/serial/usb-serial.c   Fri Dec 13 17:19:04 2002
+++ b/drivers/usb/serial/usb-serial.c   Fri Dec 13 17:19:04 2002
@@ -382,38 +382,12 @@
 */
 
 static int                     serial_refcount;
-static struct tty_driver       serial_tty_driver;
 static struct tty_struct *     serial_tty[SERIAL_TTY_MINORS];
 static struct termios *                serial_termios[SERIAL_TTY_MINORS];
 static struct termios *                serial_termios_locked[SERIAL_TTY_MINORS];
 static struct usb_serial       *serial_table[SERIAL_TTY_MINORS];       /* initially 
all NULL */
 static LIST_HEAD(usb_serial_driver_list);
 
-static int usb_serial_device_match (struct device *dev, struct device_driver *drv)
-{
-       struct usb_serial_device_type *driver;
-       const struct usb_serial_port *port;
-
-       /* 
-        * drivers are already assigned to ports in serial_probe so it's
-        * a simple check here.
-        */
-       port = to_usb_serial_port(dev);
-       if (!port)
-               return 0;
-
-       driver = to_usb_serial_driver(drv);
-
-       if (driver == port->serial->type)
-               return 1;
-
-       return 0;
-}
-
-static struct bus_type usb_serial_bus_type = {
-       .name =         "usb-serial",
-       .match =        usb_serial_device_match,
-};
 
 struct usb_serial *usb_serial_get_by_minor (unsigned int minor)
 {
@@ -1283,7 +1257,7 @@
 }
 
 
-static struct tty_driver serial_tty_driver = {
+struct tty_driver usb_serial_tty_driver = {
        .magic =                TTY_DRIVER_MAGIC,
        .driver_name =          "usb-serial",
 #ifndef CONFIG_DEVFS_FS
@@ -1337,9 +1311,9 @@
        }
 
        /* register the tty driver */
-       serial_tty_driver.init_termios          = tty_std_termios;
-       serial_tty_driver.init_termios.c_cflag  = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
-       result = tty_register_driver (&serial_tty_driver);
+       usb_serial_tty_driver.init_termios = tty_std_termios;
+       usb_serial_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | 
+CLOCAL;
+       result = tty_register_driver (&usb_serial_tty_driver);
        if (result) {
                err("%s - tty_register_driver failed", __FUNCTION__);
                goto exit_generic;
@@ -1357,7 +1331,7 @@
        return result;
 
 exit_tty:
-       tty_unregister_driver(&serial_tty_driver);
+       tty_unregister_driver(&usb_serial_tty_driver);
 
 exit_generic:
        usb_serial_generic_deregister();
@@ -1375,7 +1349,7 @@
        usb_serial_generic_deregister();
 
        usb_deregister(&usb_serial_driver);
-       tty_unregister_driver(&serial_tty_driver);
+       tty_unregister_driver(&usb_serial_tty_driver);
        bus_unregister(&usb_serial_bus_type);
 }
 
@@ -1383,72 +1357,6 @@
 module_init(usb_serial_init);
 module_exit(usb_serial_exit);
 
-static int usb_serial_device_probe (struct device *dev)
-{
-       struct usb_serial_device_type *driver;
-       struct usb_serial_port *port;
-       int retval = 0;
-       int minor;
-
-       port = to_usb_serial_port(dev);
-       if (!port) {
-               retval = -ENODEV;
-               goto exit;
-       }
-
-       driver = port->serial->type;
-       if (driver->port_probe) {
-               if (!try_module_get(driver->owner)) {
-                       err ("module get failed, exiting");
-                       retval = -EIO;
-                       goto exit;
-               }
-               retval = driver->port_probe (port);
-               module_put(driver->owner);
-               if (retval)
-                       goto exit;
-       }
-
-       minor = port->number;
-
-       tty_register_devfs (&serial_tty_driver, 0, minor);
-       info("%s converter now attached to ttyUSB%d (or usb/tts/%d for devfs)",
-            driver->name, minor, minor);
-
-exit:
-       return retval;
-}
-
-static int usb_serial_device_remove (struct device *dev)
-{
-       struct usb_serial_device_type *driver;
-       struct usb_serial_port *port;
-       int retval = 0;
-       int minor;
-
-       port = to_usb_serial_port(dev);
-       if (!port) {
-               return -ENODEV;
-       }
-
-       driver = port->serial->type;
-       if (driver->port_remove) {
-               if (!try_module_get(driver->owner)) {
-                       err ("module get failed, exiting");
-                       retval = -EIO;
-                       goto exit;
-               }
-               retval = driver->port_remove (port);
-               module_put(driver->owner);
-       }
-exit:
-       minor = port->number;
-       tty_unregister_devfs (&serial_tty_driver, minor);
-       info("%s converter now disconnected from ttyUSB%d",
-            driver->name, minor);
-
-       return retval;
-}
 
 int usb_serial_register(struct usb_serial_device_type *new_device)
 {
@@ -1457,20 +1365,17 @@
        /* Add this device to our list of devices */
        list_add(&new_device->driver_list, &usb_serial_driver_list);
 
-       new_device->driver.name = (char *)new_device->name;
-       new_device->driver.bus = &usb_serial_bus_type;
-       new_device->driver.probe = usb_serial_device_probe;
-       new_device->driver.remove = usb_serial_device_remove;
-
-       retval = driver_register(&new_device->driver);
-
-       if (!retval) {
-               info("USB Serial support registered for %s",
-                       new_device->name);
-       } else {
-               err("problem %d when registering driver %s",
-                       retval, new_device->name);
-       }
+       retval =  usb_serial_bus_register (new_device);
+
+       if (retval)
+               goto error;
+
+       info("USB Serial support registered for %s", new_device->name);
+
+       return retval;
+error:
+       err("problem %d when registering driver %s", retval, new_device->name);
+       list_del(&new_device->driver_list);
 
        return retval;
 }
@@ -1493,6 +1398,7 @@
        }
 
        list_del(&device->driver_list);
+       usb_serial_bus_deregister (device);
 }
 
 
diff -Nru a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h
--- a/drivers/usb/serial/usb-serial.h   Fri Dec 13 17:19:04 2002
+++ b/drivers/usb/serial/usb-serial.h   Fri Dec 13 17:19:04 2002
@@ -269,7 +269,12 @@
 extern int usb_serial_generic_register (int debug);
 extern void usb_serial_generic_deregister (void);
 
+extern int usb_serial_bus_register (struct usb_serial_device_type *device);
+extern void usb_serial_bus_deregister (struct usb_serial_device_type *device);
+
 extern struct usb_serial_device_type usb_serial_generic_device;
+extern struct bus_type usb_serial_bus_type;
+extern struct tty_driver usb_serial_tty_driver;
 
 /* Inline functions to check the sanity of a pointer that is passed to us */
 static inline int serial_paranoia_check (struct usb_serial *serial, const char 
*function)


-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility 
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to