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