lkml.org 
[lkml]   [2011]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[023/272] USB serial: add missing .usb_driver field in serial drivers
    2.6.37-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Alan Stern <stern@rowland.harvard.edu>

    commit 5620b5f7f19e9ee3fcf6ecf493fed7821b7b495b upstream.

    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: Alan Stern <stern@rowland.harvard.edu>
    Reported-by: Dan Williams <dcbw@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/usb/serial/io_tables.h | 1 +
    drivers/usb/serial/iuu_phoenix.c | 1 +
    drivers/usb/serial/keyspan.h | 4 ++++
    drivers/usb/serial/moto_modem.c | 1 +
    drivers/usb/serial/oti6858.c | 1 +
    drivers/usb/serial/qcaux.c | 1 +
    drivers/usb/serial/siemens_mpi.c | 1 +
    drivers/usb/serial/spcp8x5.c | 1 +
    drivers/usb/serial/usb-serial.c | 8 ++++++--
    drivers/usb/serial/usb_debug.c | 1 +
    10 files changed, 18 insertions(+), 2 deletions(-)

    --- a/drivers/usb/serial/io_tables.h
    +++ b/drivers/usb/serial/io_tables.h
    @@ -199,6 +199,7 @@ static struct usb_serial_driver epic_dev
    .name = "epic",
    },
    .description = "EPiC device",
    + .usb_driver = &io_driver,
    .id_table = Epic_port_id_table,
    .num_ports = 1,
    .open = edge_open,
    --- a/drivers/usb/serial/iuu_phoenix.c
    +++ b/drivers/usb/serial/iuu_phoenix.c
    @@ -1275,6 +1275,7 @@ static struct usb_serial_driver iuu_devi
    .name = "iuu_phoenix",
    },
    .id_table = id_table,
    + .usb_driver = &iuu_driver,
    .num_ports = 1,
    .bulk_in_size = 512,
    .bulk_out_size = 512,
    --- a/drivers/usb/serial/keyspan.h
    +++ b/drivers/usb/serial/keyspan.h
    @@ -546,6 +546,7 @@ static struct usb_serial_driver keyspan_
    .name = "keyspan_no_firm",
    },
    .description = "Keyspan - (without firmware)",
    + .usb_driver = &keyspan_driver,
    .id_table = keyspan_pre_ids,
    .num_ports = 1,
    .attach = keyspan_fake_startup,
    @@ -557,6 +558,7 @@ static struct usb_serial_driver keyspan_
    .name = "keyspan_1",
    },
    .description = "Keyspan 1 port adapter",
    + .usb_driver = &keyspan_driver,
    .id_table = keyspan_1port_ids,
    .num_ports = 1,
    .open = keyspan_open,
    @@ -579,6 +581,7 @@ static struct usb_serial_driver keyspan_
    .name = "keyspan_2",
    },
    .description = "Keyspan 2 port adapter",
    + .usb_driver = &keyspan_driver,
    .id_table = keyspan_2port_ids,
    .num_ports = 2,
    .open = keyspan_open,
    @@ -601,6 +604,7 @@ static struct usb_serial_driver keyspan_
    .name = "keyspan_4",
    },
    .description = "Keyspan 4 port adapter",
    + .usb_driver = &keyspan_driver,
    .id_table = keyspan_4port_ids,
    .num_ports = 4,
    .open = keyspan_open,
    --- a/drivers/usb/serial/moto_modem.c
    +++ b/drivers/usb/serial/moto_modem.c
    @@ -44,6 +44,7 @@ static struct usb_serial_driver moto_dev
    .name = "moto-modem",
    },
    .id_table = id_table,
    + .usb_driver = &moto_driver,
    .num_ports = 1,
    };

    --- a/drivers/usb/serial/oti6858.c
    +++ b/drivers/usb/serial/oti6858.c
    @@ -157,6 +157,7 @@ static struct usb_serial_driver oti6858_
    .name = "oti6858",
    },
    .id_table = id_table,
    + .usb_driver = &oti6858_driver,
    .num_ports = 1,
    .open = oti6858_open,
    .close = oti6858_close,
    --- a/drivers/usb/serial/qcaux.c
    +++ b/drivers/usb/serial/qcaux.c
    @@ -86,6 +86,7 @@ static struct usb_serial_driver qcaux_de
    .name = "qcaux",
    },
    .id_table = id_table,
    + .usb_driver = &qcaux_driver,
    .num_ports = 1,
    };

    --- a/drivers/usb/serial/siemens_mpi.c
    +++ b/drivers/usb/serial/siemens_mpi.c
    @@ -42,6 +42,7 @@ static struct usb_serial_driver siemens_
    .name = "siemens_mpi",
    },
    .id_table = id_table,
    + .usb_driver = &siemens_usb_mpi_driver,
    .num_ports = 1,
    };

    --- a/drivers/usb/serial/spcp8x5.c
    +++ b/drivers/usb/serial/spcp8x5.c
    @@ -649,6 +649,7 @@ static struct usb_serial_driver spcp8x5_
    .name = "SPCP8x5",
    },
    .id_table = id_table,
    + .usb_driver = &spcp8x5_driver,
    .num_ports = 1,
    .open = spcp8x5_open,
    .dtr_rts = spcp8x5_dtr_rts,
    --- a/drivers/usb/serial/usb-serial.c
    +++ b/drivers/usb/serial/usb-serial.c
    @@ -1344,11 +1344,15 @@ int usb_serial_register(struct usb_seria
    return -ENODEV;

    fixup_generic(driver);
    - if (driver->usb_driver)
    - driver->usb_driver->supports_autosuspend = 1;

    if (!driver->description)
    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 */
    mutex_lock(&table_lock);
    --- a/drivers/usb/serial/usb_debug.c
    +++ b/drivers/usb/serial/usb_debug.c
    @@ -75,6 +75,7 @@ static struct usb_serial_driver debug_de
    .name = "debug",
    },
    .id_table = id_table,
    + .usb_driver = &debug_driver,
    .num_ports = 1,
    .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE,
    .break_ctl = usb_debug_break_ctl,



    \
     
     \ /
      Last update: 2011-02-16 03:19    [W:4.029 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site