Commit 5620b5f7 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

USB serial: add missing .usb_driver field in serial drivers

This patch (as1443) fixes a bug found in many of the USB serial
drivers: They don't set the .usb_driver field in their
usb_serial_driver structure.  This field is needed for assigning
dynamic IDs for device matching.

In addition, starting with the 2.6.37 kernel, the .usb_driver field is
needed for proper autosuspend operation.  Without it, attempts to open
the device file will fail.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Reported-by: default avatarDan Williams <dcbw@redhat.com>
CC: <stable@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent cc604ddd
...@@ -199,6 +199,7 @@ static struct usb_serial_driver epic_device = { ...@@ -199,6 +199,7 @@ static struct usb_serial_driver epic_device = {
.name = "epic", .name = "epic",
}, },
.description = "EPiC device", .description = "EPiC device",
.usb_driver = &io_driver,
.id_table = Epic_port_id_table, .id_table = Epic_port_id_table,
.num_ports = 1, .num_ports = 1,
.open = edge_open, .open = edge_open,
......
...@@ -1275,6 +1275,7 @@ static struct usb_serial_driver iuu_device = { ...@@ -1275,6 +1275,7 @@ static struct usb_serial_driver iuu_device = {
.name = "iuu_phoenix", .name = "iuu_phoenix",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &iuu_driver,
.num_ports = 1, .num_ports = 1,
.bulk_in_size = 512, .bulk_in_size = 512,
.bulk_out_size = 512, .bulk_out_size = 512,
......
...@@ -546,6 +546,7 @@ static struct usb_serial_driver keyspan_pre_device = { ...@@ -546,6 +546,7 @@ static struct usb_serial_driver keyspan_pre_device = {
.name = "keyspan_no_firm", .name = "keyspan_no_firm",
}, },
.description = "Keyspan - (without firmware)", .description = "Keyspan - (without firmware)",
.usb_driver = &keyspan_driver,
.id_table = keyspan_pre_ids, .id_table = keyspan_pre_ids,
.num_ports = 1, .num_ports = 1,
.attach = keyspan_fake_startup, .attach = keyspan_fake_startup,
...@@ -557,6 +558,7 @@ static struct usb_serial_driver keyspan_1port_device = { ...@@ -557,6 +558,7 @@ static struct usb_serial_driver keyspan_1port_device = {
.name = "keyspan_1", .name = "keyspan_1",
}, },
.description = "Keyspan 1 port adapter", .description = "Keyspan 1 port adapter",
.usb_driver = &keyspan_driver,
.id_table = keyspan_1port_ids, .id_table = keyspan_1port_ids,
.num_ports = 1, .num_ports = 1,
.open = keyspan_open, .open = keyspan_open,
...@@ -579,6 +581,7 @@ static struct usb_serial_driver keyspan_2port_device = { ...@@ -579,6 +581,7 @@ static struct usb_serial_driver keyspan_2port_device = {
.name = "keyspan_2", .name = "keyspan_2",
}, },
.description = "Keyspan 2 port adapter", .description = "Keyspan 2 port adapter",
.usb_driver = &keyspan_driver,
.id_table = keyspan_2port_ids, .id_table = keyspan_2port_ids,
.num_ports = 2, .num_ports = 2,
.open = keyspan_open, .open = keyspan_open,
...@@ -601,6 +604,7 @@ static struct usb_serial_driver keyspan_4port_device = { ...@@ -601,6 +604,7 @@ static struct usb_serial_driver keyspan_4port_device = {
.name = "keyspan_4", .name = "keyspan_4",
}, },
.description = "Keyspan 4 port adapter", .description = "Keyspan 4 port adapter",
.usb_driver = &keyspan_driver,
.id_table = keyspan_4port_ids, .id_table = keyspan_4port_ids,
.num_ports = 4, .num_ports = 4,
.open = keyspan_open, .open = keyspan_open,
......
...@@ -44,6 +44,7 @@ static struct usb_serial_driver moto_device = { ...@@ -44,6 +44,7 @@ static struct usb_serial_driver moto_device = {
.name = "moto-modem", .name = "moto-modem",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &moto_driver,
.num_ports = 1, .num_ports = 1,
}; };
......
...@@ -157,6 +157,7 @@ static struct usb_serial_driver oti6858_device = { ...@@ -157,6 +157,7 @@ static struct usb_serial_driver oti6858_device = {
.name = "oti6858", .name = "oti6858",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &oti6858_driver,
.num_ports = 1, .num_ports = 1,
.open = oti6858_open, .open = oti6858_open,
.close = oti6858_close, .close = oti6858_close,
......
...@@ -86,6 +86,7 @@ static struct usb_serial_driver qcaux_device = { ...@@ -86,6 +86,7 @@ static struct usb_serial_driver qcaux_device = {
.name = "qcaux", .name = "qcaux",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &qcaux_driver,
.num_ports = 1, .num_ports = 1,
}; };
......
...@@ -42,6 +42,7 @@ static struct usb_serial_driver siemens_usb_mpi_device = { ...@@ -42,6 +42,7 @@ static struct usb_serial_driver siemens_usb_mpi_device = {
.name = "siemens_mpi", .name = "siemens_mpi",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &siemens_usb_mpi_driver,
.num_ports = 1, .num_ports = 1,
}; };
......
...@@ -645,6 +645,7 @@ static struct usb_serial_driver spcp8x5_device = { ...@@ -645,6 +645,7 @@ static struct usb_serial_driver spcp8x5_device = {
.name = "SPCP8x5", .name = "SPCP8x5",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &spcp8x5_driver,
.num_ports = 1, .num_ports = 1,
.open = spcp8x5_open, .open = spcp8x5_open,
.dtr_rts = spcp8x5_dtr_rts, .dtr_rts = spcp8x5_dtr_rts,
......
...@@ -1344,11 +1344,15 @@ int usb_serial_register(struct usb_serial_driver *driver) ...@@ -1344,11 +1344,15 @@ int usb_serial_register(struct usb_serial_driver *driver)
return -ENODEV; return -ENODEV;
fixup_generic(driver); fixup_generic(driver);
if (driver->usb_driver)
driver->usb_driver->supports_autosuspend = 1;
if (!driver->description) if (!driver->description)
driver->description = driver->driver.name; driver->description = driver->driver.name;
if (!driver->usb_driver) {
WARN(1, "Serial driver %s has no usb_driver\n",
driver->description);
return -EINVAL;
}
driver->usb_driver->supports_autosuspend = 1;
/* Add this device to our list of devices */ /* Add this device to our list of devices */
mutex_lock(&table_lock); mutex_lock(&table_lock);
......
...@@ -75,6 +75,7 @@ static struct usb_serial_driver debug_device = { ...@@ -75,6 +75,7 @@ static struct usb_serial_driver debug_device = {
.name = "debug", .name = "debug",
}, },
.id_table = id_table, .id_table = id_table,
.usb_driver = &debug_driver,
.num_ports = 1, .num_ports = 1,
.bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE, .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE,
.break_ctl = usb_debug_break_ctl, .break_ctl = usb_debug_break_ctl,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment