From: Luiz Fernando N. Capitulino <[EMAIL PROTECTED]>

Moves the driver's num_ports call code to its new function, this makes
usb_serial_probe() simpler.

Signed-off-by: Luiz Fernando N. Capitulino <[EMAIL PROTECTED]>

---

 drivers/usb/serial/usb-serial.c |   40 ++++++++++++++++++++++++++++-----------
 1 files changed, 29 insertions(+), 11 deletions(-)

f4157a3381af66eefe1ba3892a2fee4eb36f36c6
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index b43f30d..f682874 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -649,6 +649,26 @@ static int driver_probe(struct usb_seria
        return ret;
 }
 
+static int driver_num_ports(struct usb_serial *serial,
+                           struct usb_interface *interface)
+{
+       int nr_ports;
+
+       dbg("%s", __FUNCTION__);
+
+       if (!serial->type->calc_num_ports)
+               return 0;
+
+       if (!try_module_get(serial->type->driver.owner)) {
+               dev_err(&interface->dev, "module get failed, exiting\n");
+               return -EIO;
+       }
+
+       nr_ports = serial->type->calc_num_ports(serial);
+       module_put(serial->type->driver.owner);
+       return nr_ports;
+}
+
 int usb_serial_probe(struct usb_interface *interface,
                               const struct usb_device_id *id)
 {
@@ -780,18 +800,16 @@ #ifdef CONFIG_USB_SERIAL_GENERIC
                }
        }
 #endif
+
        if (!num_ports) {
-               /* if this device type has a calc_num_ports function, call it */
-               if (type->calc_num_ports) {
-                       if (!try_module_get(type->driver.owner)) {
-                               dev_err(&interface->dev, "module get failed, 
exiting\n");
-                               kfree (serial);
-                               return -EIO;
-                       }
-                       num_ports = type->calc_num_ports (serial);
-                       module_put(type->driver.owner);
-               }
-               if (!num_ports)
+               num_ports = driver_num_ports(serial, interface);
+               if (num_ports < 0) {
+                       dev_err(&interface->dev,
+                               "%s - driver_num_ports() failed\n",
+                               __FUNCTION__);
+                       kfree(serial);
+                       return num_ports;
+               } else if (!num_ports)
                        num_ports = type->num_ports;
        }
 
-- 
1.3.3



_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to