Skip to content

Commit

Permalink
USB: serial: rework usb_serial_register/deregister_drivers()
Browse files Browse the repository at this point in the history
This reworks the usb_serial_register_drivers() and
usb_serial_deregister_drivers() to not need a pointer to a struct
usb_driver anymore.  The usb_driver structure is now created dynamically
and registered and unregistered as needed.

This saves lines of code in each usb-serial driver.  All in-kernel users
of these functions were also fixed up at this time.  The pl2303 driver
was tested that everything worked properly.

Thanks for the idea to do this from Alan Stern.

Cc: Adhir Ramjiawan <adhirramjiawan0@gmail.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Al Borchers <alborchers@steinerpoint.com>
Cc: Aleksey Babahin <tamerlan311@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrew Worsley <amworsley@gmail.com>
Cc: Bart Hartgers <bart.hartgers@gmail.com>
Cc: Bill Pemberton <wfp5p@virginia.edu>
Cc: Dan Carpenter <error27@gmail.com>
Cc: Dan Williams <dcbw@redhat.com>
Cc: Donald Lee <donald@asix.com.tw>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Felipe Balbi <balbi@ti.com>
Cc: Gary Brubaker <xavyer@ix.netcom.com>
Cc: Jesper Juhl <jj@chaosbits.net>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Johan Hovold <jhovold@gmail.com>
Cc: Julia Lawall <julia@diku.dk>
Cc: Kautuk Consul <consul.kautuk@gmail.com>
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Cc: Lonnie Mendez <dignome@gmail.com>
Cc: Matthias Bruestle and Harald Welte <support@reiner-sct.com>
Cc: Matthias Urlichs <smurf@smurf.noris.de>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: Michal Sroczynski <msroczyn@gmail.com>
Cc: "Michał Wróbel" <michal.wrobel@flytronic.pl>
Cc: Oliver Neukum <oliver@neukum.name>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: Peter Berger <pberger@brimson.com>
Cc: Preston Fick <preston.fick@silabs.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Rigbert Hamisch <rigbert@gmx.de>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Simon Arlott <simon@fire.lp0.eu>
Cc: Support Department <support@connecttech.com>
Cc: Thomas Tuttle <ttuttle@chromium.org>
Cc: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Cc: Wang YanQing <Udknight@gmail.com>
Cc: William Greathouse <wgreathouse@smva.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Greg Kroah-Hartman committed May 8, 2012
1 parent d56ba32 commit 68e2411
Show file tree
Hide file tree
Showing 56 changed files with 120 additions and 400 deletions.
15 changes: 4 additions & 11 deletions drivers/staging/quatech_usb2/quatech_usb2.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ static bool debug;
#define FOURTHCHAR ((unsigned char *)(urb->transfer_buffer))[i + 3]
#define FIFTHCHAR ((unsigned char *)(urb->transfer_buffer))[i + 4]

static const struct usb_device_id quausb2_id_table[] = {
static const struct usb_device_id id_table[] = {
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU2_100)},
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_100)},
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_400)},
Expand All @@ -126,14 +126,7 @@ static const struct usb_device_id quausb2_id_table[] = {
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_400)},
{} /* Terminating entry */
};

MODULE_DEVICE_TABLE(usb, quausb2_id_table);

/* custom structures we need go here */
static struct usb_driver quausb2_usb_driver = {
.name = "quatech-usb2-serial",
.id_table = quausb2_id_table,
};
MODULE_DEVICE_TABLE(usb, id_table);

/**
* quatech2_port: Structure in which to keep all the messy stuff that this
Expand Down Expand Up @@ -1922,7 +1915,7 @@ static struct usb_serial_driver quatech2_device = {
.name = "quatech_usb2",
},
.description = DRIVER_DESC,
.id_table = quausb2_id_table,
.id_table = id_table,
.num_ports = 8,
.open = qt2_open,
.close = qt2_close,
Expand All @@ -1947,7 +1940,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&quatech2_device, NULL
};

module_usb_serial_driver(quausb2_usb_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
14 changes: 4 additions & 10 deletions drivers/staging/serqt_usb2/serqt_usb2.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ static bool debug;
#define MODEM_CTRL 0x40
#define RS232_MODE 0x00

static const struct usb_device_id serqt_id_table[] = {
static const struct usb_device_id id_table[] = {
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU200)},
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU100)},
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU200)},
Expand All @@ -152,8 +152,7 @@ static const struct usb_device_id serqt_id_table[] = {
{USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU100_2)},
{} /* Terminating entry */
};

MODULE_DEVICE_TABLE(usb, serqt_id_table);
MODULE_DEVICE_TABLE(usb, id_table);

struct qt_get_device_data {
__u8 porta;
Expand Down Expand Up @@ -195,11 +194,6 @@ struct quatech_port {
char closePending;
};

static struct usb_driver serqt_usb_driver = {
.name = "quatech-usb-serial",
.id_table = serqt_id_table,
};

static int port_paranoia_check(struct usb_serial_port *port,
const char *function)
{
Expand Down Expand Up @@ -1544,7 +1538,7 @@ static struct usb_serial_driver quatech_device = {
.name = "serqt",
},
.description = DRIVER_DESC,
.id_table = serqt_id_table,
.id_table = id_table,
.num_ports = 8,
.open = qt_open,
.close = qt_close,
Expand All @@ -1567,7 +1561,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&quatech_device, NULL
};

module_usb_serial_driver(serqt_usb_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/aircable.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,6 @@ static void aircable_process_read_urb(struct urb *urb)
tty_kref_put(tty);
}

static struct usb_driver aircable_driver = {
.name = "aircable",
.id_table = id_table,
};

static struct usb_serial_driver aircable_device = {
.driver = {
.owner = THIS_MODULE,
Expand All @@ -194,7 +189,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&aircable_device, NULL
};

module_usb_serial_driver(aircable_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/ark3116.c
Original file line number Diff line number Diff line change
Expand Up @@ -714,11 +714,6 @@ static void ark3116_process_read_urb(struct urb *urb)
tty_kref_put(tty);
}

static struct usb_driver ark3116_driver = {
.name = "ark3116",
.id_table = id_table,
};

static struct usb_serial_driver ark3116_device = {
.driver = {
.owner = THIS_MODULE,
Expand All @@ -745,7 +740,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&ark3116_device, NULL
};

module_usb_serial_driver(ark3116_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_LICENSE("GPL");

Expand Down
13 changes: 4 additions & 9 deletions drivers/usb/serial/belkin_sa.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ static int belkin_sa_tiocmset(struct tty_struct *tty,
unsigned int set, unsigned int clear);


static const struct usb_device_id id_table_combined[] = {
static const struct usb_device_id id_table[] = {
{ USB_DEVICE(BELKIN_SA_VID, BELKIN_SA_PID) },
{ USB_DEVICE(BELKIN_OLD_VID, BELKIN_OLD_PID) },
{ USB_DEVICE(PERACOM_VID, PERACOM_PID) },
Expand All @@ -71,12 +71,7 @@ static const struct usb_device_id id_table_combined[] = {
{ USB_DEVICE(BELKIN_DOCKSTATION_VID, BELKIN_DOCKSTATION_PID) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, id_table_combined);

static struct usb_driver belkin_driver = {
.name = "belkin",
.id_table = id_table_combined,
};
MODULE_DEVICE_TABLE(usb, id_table);

/* All of the device info needed for the serial converters */
static struct usb_serial_driver belkin_device = {
Expand All @@ -85,7 +80,7 @@ static struct usb_serial_driver belkin_device = {
.name = "belkin",
},
.description = "Belkin / Peracom / GoHubs USB Serial Adapter",
.id_table = id_table_combined,
.id_table = id_table,
.num_ports = 1,
.open = belkin_sa_open,
.close = belkin_sa_close,
Expand Down Expand Up @@ -513,7 +508,7 @@ static int belkin_sa_tiocmset(struct tty_struct *tty,
return retval;
}

module_usb_serial_driver(belkin_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/ch341.c
Original file line number Diff line number Diff line change
Expand Up @@ -589,11 +589,6 @@ static int ch341_resume(struct usb_serial *serial)
return 0;
}

static struct usb_driver ch341_driver = {
.name = "ch341",
.id_table = id_table,
};

static struct usb_serial_driver ch341_device = {
.driver = {
.owner = THIS_MODULE,
Expand All @@ -619,7 +614,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&ch341_device, NULL
};

module_usb_serial_driver(ch341_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_LICENSE("GPL");

Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/cp210x.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,6 @@ struct cp210x_port_private {
__u8 bInterfaceNumber;
};

static struct usb_driver cp210x_driver = {
.name = "cp210x",
.id_table = id_table,
};

static struct usb_serial_driver cp210x_device = {
.driver = {
.owner = THIS_MODULE,
Expand Down Expand Up @@ -880,7 +875,7 @@ static void cp210x_release(struct usb_serial *serial)
}
}

module_usb_serial_driver(cp210x_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_VERSION(DRIVER_VERSION);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/cyberjack.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,6 @@ static const struct usb_device_id id_table[] = {

MODULE_DEVICE_TABLE(usb, id_table);

static struct usb_driver cyberjack_driver = {
.name = "cyberjack",
.id_table = id_table,
};

static struct usb_serial_driver cyberjack_device = {
.driver = {
.owner = THIS_MODULE,
Expand Down Expand Up @@ -455,7 +450,7 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
usb_serial_port_softint(port);
}

module_usb_serial_driver(cyberjack_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/cypress_m8.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,6 @@ static const struct usb_device_id id_table_combined[] = {

MODULE_DEVICE_TABLE(usb, id_table_combined);

static struct usb_driver cypress_driver = {
.name = "cypress",
.id_table = id_table_combined,
};

enum packet_format {
packet_format_1, /* b0:status, b1:payload count */
packet_format_2 /* b0[7:3]:status, b0[2:0]:payload count */
Expand Down Expand Up @@ -1308,7 +1303,7 @@ static void cypress_write_int_callback(struct urb *urb)
cypress_send(port);
}

module_usb_serial_driver(cypress_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table_combined);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
8 changes: 1 addition & 7 deletions drivers/usb/serial/digi_acceleport.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,12 +271,6 @@ static const struct usb_device_id id_table_4[] = {

MODULE_DEVICE_TABLE(usb, id_table_combined);

static struct usb_driver digi_driver = {
.name = "digi_acceleport",
.id_table = id_table_combined,
};


/* device info needed for the Digi serial converter */

static struct usb_serial_driver digi_acceleport_2_device = {
Expand Down Expand Up @@ -1553,7 +1547,7 @@ static int digi_read_oob_callback(struct urb *urb)

}

module_usb_serial_driver(digi_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table_combined);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/empeg.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,6 @@ static const struct usb_device_id id_table[] = {

MODULE_DEVICE_TABLE(usb, id_table);

static struct usb_driver empeg_driver = {
.name = "empeg",
.id_table = id_table,
};

static struct usb_serial_driver empeg_device = {
.driver = {
.owner = THIS_MODULE,
Expand Down Expand Up @@ -134,7 +129,7 @@ static void empeg_init_termios(struct tty_struct *tty)
tty_encode_baud_rate(tty, 115200, 115200);
}

module_usb_serial_driver(empeg_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
Expand Down
8 changes: 1 addition & 7 deletions drivers/usb/serial/f81232.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,18 +350,12 @@ static void f81232_release(struct usb_serial *serial)
}
}

static struct usb_driver f81232_driver = {
.name = "f81232",
.id_table = id_table,
};

static struct usb_serial_driver f81232_device = {
.driver = {
.owner = THIS_MODULE,
.name = "f81232",
},
.id_table = id_table,
.usb_driver = &f81232_driver,
.num_ports = 1,
.bulk_in_size = 256,
.bulk_out_size = 256,
Expand All @@ -385,7 +379,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
NULL,
};

module_usb_serial_driver(f81232_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_DESCRIPTION("Fintek F81232 USB to serial adaptor driver");
MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@linuxfoundation.org");
Expand Down
9 changes: 2 additions & 7 deletions drivers/usb/serial/ftdi_sio.c
Original file line number Diff line number Diff line change
Expand Up @@ -862,11 +862,6 @@ static struct usb_device_id id_table_combined [] = {

MODULE_DEVICE_TABLE(usb, id_table_combined);

static struct usb_driver ftdi_driver = {
.name = "ftdi_sio",
.id_table = id_table_combined,
};

static const char *ftdi_chip_name[] = {
[SIO] = "SIO", /* the serial part of FT8U100AX */
[FT8U232AM] = "FT8U232AM",
Expand Down Expand Up @@ -2413,7 +2408,7 @@ static int __init ftdi_init(void)
id_table_combined[i].idVendor = vendor;
id_table_combined[i].idProduct = product;
}
retval = usb_serial_register_drivers(&ftdi_driver, serial_drivers);
retval = usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, id_table_combined);
if (retval == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
Expand All @@ -2422,7 +2417,7 @@ static int __init ftdi_init(void)

static void __exit ftdi_exit(void)
{
usb_serial_deregister_drivers(&ftdi_driver, serial_drivers);
usb_serial_deregister_drivers(serial_drivers);
}


Expand Down
7 changes: 1 addition & 6 deletions drivers/usb/serial/funsoft.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,6 @@ static const struct usb_device_id id_table[] = {
};
MODULE_DEVICE_TABLE(usb, id_table);

static struct usb_driver funsoft_driver = {
.name = "funsoft",
.id_table = id_table,
};

static struct usb_serial_driver funsoft_device = {
.driver = {
.owner = THIS_MODULE,
Expand All @@ -42,7 +37,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
&funsoft_device, NULL
};

module_usb_serial_driver(funsoft_driver, serial_drivers);
module_usb_serial_driver(serial_drivers, id_table);

MODULE_LICENSE("GPL");

Expand Down
Loading

0 comments on commit 68e2411

Please sign in to comment.