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