ChangeSet 1.1123.18.19, 2003/08/14 15:51:32-07:00, [EMAIL PROTECTED]

USB: handle overloading of usb-serial functions in a much cleaner manner.


 drivers/usb/serial/usb-serial.c |   66 ++++++++++++++++++++--------------------
 1 files changed, 33 insertions(+), 33 deletions(-)


diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
--- a/drivers/usb/serial/usb-serial.c   Fri Aug 15 10:44:42 2003
+++ b/drivers/usb/serial/usb-serial.c   Fri Aug 15 10:44:42 2003
@@ -482,10 +482,7 @@
        if (port->open_count == 1) {
                /* only call the device specific open if this 
                 * is the first time the port is opened */
-               if (serial->type->open)
-                       retval = serial->type->open(port, filp);
-               else
-                       retval = usb_serial_generic_open(port, filp);
+               retval = serial->type->open(port, filp);
                if (retval) {
                        port->open_count = 0;
                        module_put(serial->type->owner);
@@ -507,10 +504,7 @@
        if (port->open_count <= 0) {
                /* only call the device specific close if this 
                 * port is being closed by the last owner */
-               if (port->serial->type->close)
-                       port->serial->type->close(port, filp);
-               else
-                       usb_serial_generic_close(port, filp);
+               port->serial->type->close(port, filp);
                port->open_count = 0;
        }
 
@@ -552,11 +546,8 @@
                goto exit;
        }
 
-       /* pass on to the driver specific version of this function if it is available 
*/
-       if (serial->type->write)
-               retval = serial->type->write(port, from_user, buf, count);
-       else
-               retval = usb_serial_generic_write(port, from_user, buf, count);
+       /* pass on to the driver specific version of this function */
+       retval = serial->type->write(port, from_user, buf, count);
 
 exit:
        return retval;
@@ -578,11 +569,8 @@
                goto exit;
        }
 
-       /* pass on to the driver specific version of this function if it is available 
*/
-       if (serial->type->write_room)
-               retval = serial->type->write_room(port);
-       else
-               retval = usb_serial_generic_write_room(port);
+       /* pass on to the driver specific version of this function */
+       retval = serial->type->write_room(port);
 
 exit:
        return retval;
@@ -604,11 +592,8 @@
                goto exit;
        }
 
-       /* pass on to the driver specific version of this function if it is available 
*/
-       if (serial->type->chars_in_buffer)
-               retval = serial->type->chars_in_buffer(port);
-       else
-               retval = usb_serial_generic_chars_in_buffer(port);
+       /* pass on to the driver specific version of this function */
+       retval = serial->type->chars_in_buffer(port);
 
 exit:
        return retval;
@@ -736,10 +721,7 @@
 {
        dbg ("%s", __FUNCTION__);
 
-       if (serial->type->shutdown)
-               serial->type->shutdown(serial);
-       else
-               usb_serial_generic_shutdown(serial);
+       serial->type->shutdown(serial);
 }
 
 static int serial_read_proc (char *page, char **start, off_t off, int count, int 
*eof, void *data)
@@ -1186,9 +1168,7 @@
                                   usb_rcvbulkpipe (dev,
                                                    endpoint->bEndpointAddress),
                                   port->bulk_in_buffer, buffer_size,
-                                  ((serial->type->read_bulk_callback) ? 
-                                    serial->type->read_bulk_callback : 
-                                    usb_serial_generic_read_bulk_callback),
+                                  serial->type->read_bulk_callback,
                                   port);
        }
 
@@ -1212,9 +1192,7 @@
                                   usb_sndbulkpipe (dev,
                                                    endpoint->bEndpointAddress),
                                   port->bulk_out_buffer, buffer_size, 
-                                  ((serial->type->write_bulk_callback) ? 
-                                    serial->type->write_bulk_callback : 
-                                    usb_serial_generic_write_bulk_callback),
+                                  serial->type->write_bulk_callback,
                                   port);
        }
 
@@ -1429,10 +1407,32 @@
 module_init(usb_serial_init);
 module_exit(usb_serial_exit);
 
+#define set_to_generic_if_null(type, function)                         \
+       do {                                                            \
+               if (!type->function) {                                  \
+                       type->function = usb_serial_generic_##function; \
+                       dbg("Had to override the " #function            \
+                                " usb serial operation with the generic one.");\
+                       }                                               \
+       } while (0)
+
+static void fixup_generic(struct usb_serial_device_type *device)
+{
+       set_to_generic_if_null(device, open);
+       set_to_generic_if_null(device, write);
+       set_to_generic_if_null(device, close);
+       set_to_generic_if_null(device, write_room);
+       set_to_generic_if_null(device, chars_in_buffer);
+       set_to_generic_if_null(device, read_bulk_callback);
+       set_to_generic_if_null(device, write_bulk_callback);
+       set_to_generic_if_null(device, shutdown);
+}
 
 int usb_serial_register(struct usb_serial_device_type *new_device)
 {
        int retval;
+
+       fixup_generic(new_device);
 
        /* Add this device to our list of devices */
        list_add(&new_device->driver_list, &usb_serial_driver_list);



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to