USB: serial: mxuport: register two ports for unknown devices
authorJohan Hovold <johan@kernel.org>
Thu, 16 Mar 2017 16:13:54 +0000 (17:13 +0100)
committerJohan Hovold <johan@kernel.org>
Tue, 28 Mar 2017 09:14:12 +0000 (11:14 +0200)
Print a message and register two ports for interfaces for which we do
not know how many ports there are instead of binding, allocating
resources, but not register any ports.

This provides a hint that anyone adding a dynamic device id must also
provide a reference id (driver info) from which the port count can be
retrieved, for example:

echo <vid> <pid> 0 0x110A 0x1410 > new_id

Signed-off-by: Johan Hovold <johan@kernel.org>
drivers/usb/serial/mxuport.c

index bf543e6c05ea30036f084df635cd3fcc75e37f23..3355737cbfd19b1fb1be682a3448c0d1957a288d 100644 (file)
@@ -950,17 +950,23 @@ static int mxuport_calc_num_ports(struct usb_serial *serial,
                                        struct usb_serial_endpoints *epds)
 {
        unsigned long features = (unsigned long)usb_get_serial_data(serial);
+       int num_ports;
+
+       if (features & MX_UPORT_2_PORT) {
+               num_ports = 2;
+       } else if (features & MX_UPORT_4_PORT) {
+               num_ports = 4;
+       } else if (features & MX_UPORT_8_PORT) {
+               num_ports = 8;
+       } else if (features & MX_UPORT_16_PORT) {
+               num_ports = 16;
+       } else {
+               dev_warn(&serial->interface->dev,
+                               "unknown device, assuming two ports\n");
+               num_ports = 2;
+       }
 
-       if (features & MX_UPORT_2_PORT)
-               return 2;
-       if (features & MX_UPORT_4_PORT)
-               return 4;
-       if (features & MX_UPORT_8_PORT)
-               return 8;
-       if (features & MX_UPORT_16_PORT)
-               return 16;
-
-       return 0;
+       return num_ports;
 }
 
 /* Get the version of the firmware currently running. */
@@ -1367,7 +1373,6 @@ static struct usb_serial_driver mxuport_device = {
        },
        .description            = "MOXA UPort",
        .id_table               = mxuport_idtable,
-       .num_ports              = 0,
        .probe                  = mxuport_probe,
        .port_probe             = mxuport_port_probe,
        .attach                 = mxuport_attach,