usb: gadget: u_serial: convert into a module

Every user of u_serial has now to select the U_SERIAL symbol instead of
including the file.
There is one limition with this: ports and and gs_tty_driver are global
variables in u_serial. Since all users share them, there can be only one
user loaded at a time i.e. either g_serial or g_nokia.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Sebastian Andrzej Siewior 2012-12-23 21:10:04 +01:00 committed by Felipe Balbi
parent 48177cd837
commit 3249ca22c0
9 changed files with 23 additions and 9 deletions

View File

@ -503,6 +503,9 @@ config USB_LIBCOMPOSITE
config USB_F_SS_LB config USB_F_SS_LB
tristate tristate
config USB_U_SERIAL
tristate
choice choice
tristate "USB Gadget Drivers" tristate "USB Gadget Drivers"
default USB_ETH default USB_ETH
@ -754,6 +757,7 @@ config USB_GADGET_TARGET
config USB_G_SERIAL config USB_G_SERIAL
tristate "Serial Gadget (with CDC ACM and CDC OBEX support)" tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
select USB_U_SERIAL
select USB_LIBCOMPOSITE select USB_LIBCOMPOSITE
help help
The Serial Gadget talks to the Linux-USB generic serial driver. The Serial Gadget talks to the Linux-USB generic serial driver.
@ -807,6 +811,7 @@ config USB_CDC_COMPOSITE
tristate "CDC Composite Device (Ethernet and ACM)" tristate "CDC Composite Device (Ethernet and ACM)"
depends on NET depends on NET
select USB_LIBCOMPOSITE select USB_LIBCOMPOSITE
select USB_U_SERIAL
help help
This driver provides two functions in one configuration: This driver provides two functions in one configuration:
a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link. a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
@ -822,6 +827,7 @@ config USB_G_NOKIA
tristate "Nokia composite gadget" tristate "Nokia composite gadget"
depends on PHONET depends on PHONET
select USB_LIBCOMPOSITE select USB_LIBCOMPOSITE
select USB_U_SERIAL
help help
The Nokia composite gadget provides support for acm, obex The Nokia composite gadget provides support for acm, obex
and phonet in only one composite gadget driver. and phonet in only one composite gadget driver.
@ -833,6 +839,7 @@ config USB_G_ACM_MS
tristate "CDC Composite Device (ACM and mass storage)" tristate "CDC Composite Device (ACM and mass storage)"
depends on BLOCK depends on BLOCK
select USB_LIBCOMPOSITE select USB_LIBCOMPOSITE
select USB_U_SERIAL
help help
This driver provides two functions in one configuration: This driver provides two functions in one configuration:
a mass storage, and a CDC ACM (serial port) link. a mass storage, and a CDC ACM (serial port) link.
@ -845,6 +852,7 @@ config USB_G_MULTI
depends on BLOCK && NET depends on BLOCK && NET
select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
select USB_LIBCOMPOSITE select USB_LIBCOMPOSITE
select USB_U_SERIAL
help help
The Multifunction Composite Gadget provides Ethernet (RNDIS The Multifunction Composite Gadget provides Ethernet (RNDIS
and/or CDC Ethernet), mass storage and ACM serial link and/or CDC Ethernet), mass storage and ACM serial link
@ -920,6 +928,7 @@ config USB_G_DBGP_PRINTK
config USB_G_DBGP_SERIAL config USB_G_DBGP_SERIAL
depends on USB_G_DBGP depends on USB_G_DBGP
select USB_U_SERIAL
bool "serial" bool "serial"
help help
Userland can interact using /dev/ttyGSxxx. Userland can interact using /dev/ttyGSxxx.

View File

@ -78,3 +78,4 @@ obj-$(CONFIG_USB_GADGET_TARGET) += tcm_usb_gadget.o
# USB Functions # USB Functions
f_ss_lb-y := f_loopback.o f_sourcesink.o f_ss_lb-y := f_loopback.o f_sourcesink.o
obj-$(CONFIG_USB_F_SS_LB) += f_ss_lb.o obj-$(CONFIG_USB_F_SS_LB) += f_ss_lb.o
obj-$(CONFIG_USB_U_SERIAL) += u_serial.o

View File

@ -41,7 +41,6 @@
* a "gcc --combine ... part1.c part2.c part3.c ... " build would. * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
*/ */
#include "u_serial.c"
#include "f_acm.c" #include "f_acm.c"
#include "f_mass_storage.c" #include "f_mass_storage.c"

View File

@ -43,7 +43,6 @@ USB_GADGET_COMPOSITE_OPTIONS();
* a "gcc --combine ... part1.c part2.c part3.c ... " build would. * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
*/ */
#include "u_serial.c"
#include "f_acm.c" #include "f_acm.c"
#include "f_ecm.c" #include "f_ecm.c"
#include "u_ether.c" #include "u_ether.c"

View File

@ -13,9 +13,7 @@
#include <linux/usb/ch9.h> #include <linux/usb/ch9.h>
#include <linux/usb/gadget.h> #include <linux/usb/gadget.h>
#ifdef CONFIG_USB_G_DBGP_SERIAL #include "u_serial.h"
#include "u_serial.c"
#endif
#define DRIVER_VENDOR_ID 0x0525 /* NetChip */ #define DRIVER_VENDOR_ID 0x0525 /* NetChip */
#define DRIVER_PRODUCT_ID 0xc0de /* undefined */ #define DRIVER_PRODUCT_ID 0xc0de /* undefined */

View File

@ -42,7 +42,6 @@ MODULE_LICENSE("GPL");
*/ */
#include "f_mass_storage.c" #include "f_mass_storage.c"
#include "u_serial.c"
#include "f_acm.c" #include "f_acm.c"
#include "f_ecm.c" #include "f_ecm.c"

View File

@ -37,7 +37,6 @@
* the runtime footprint, and giving us at least some parts of what * the runtime footprint, and giving us at least some parts of what
* a "gcc --combine ... part1.c part2.c part3.c ... " build would. * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
*/ */
#include "u_serial.c"
#include "f_acm.c" #include "f_acm.c"
#include "f_ecm.c" #include "f_ecm.c"
#include "f_obex.c" #include "f_obex.c"

View File

@ -39,7 +39,6 @@
#include "f_acm.c" #include "f_acm.c"
#include "f_obex.c" #include "f_obex.c"
#include "f_serial.c" #include "f_serial.c"
#include "u_serial.c"
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS(); USB_GADGET_COMPOSITE_OPTIONS();

View File

@ -26,6 +26,7 @@
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/module.h>
#include "u_serial.h" #include "u_serial.h"
@ -309,6 +310,7 @@ gs_alloc_req(struct usb_ep *ep, unsigned len, gfp_t kmalloc_flags)
return req; return req;
} }
EXPORT_SYMBOL_GPL(gs_alloc_req);
/* /*
* gs_free_req * gs_free_req
@ -320,6 +322,7 @@ void gs_free_req(struct usb_ep *ep, struct usb_request *req)
kfree(req->buf); kfree(req->buf);
usb_ep_free_request(ep, req); usb_ep_free_request(ep, req);
} }
EXPORT_SYMBOL_GPL(gs_free_req);
/* /*
* gs_send_packet * gs_send_packet
@ -1081,6 +1084,9 @@ int gserial_setup(struct usb_gadget *g, unsigned count)
if (count == 0 || count > N_PORTS) if (count == 0 || count > N_PORTS)
return -EINVAL; return -EINVAL;
if (gs_tty_driver)
return -EBUSY;
gs_tty_driver = alloc_tty_driver(count); gs_tty_driver = alloc_tty_driver(count);
if (!gs_tty_driver) if (!gs_tty_driver)
return -ENOMEM; return -ENOMEM;
@ -1153,6 +1159,7 @@ fail:
gs_tty_driver = NULL; gs_tty_driver = NULL;
return status; return status;
} }
EXPORT_SYMBOL_GPL(gserial_setup);
static int gs_closed(struct gs_port *port) static int gs_closed(struct gs_port *port)
{ {
@ -1213,6 +1220,7 @@ void gserial_cleanup(void)
pr_debug("%s: cleaned up ttyGS* support\n", __func__); pr_debug("%s: cleaned up ttyGS* support\n", __func__);
} }
EXPORT_SYMBOL_GPL(gserial_cleanup);
/** /**
* gserial_connect - notify TTY I/O glue that USB link is active * gserial_connect - notify TTY I/O glue that USB link is active
@ -1292,7 +1300,7 @@ fail_out:
gser->in->driver_data = NULL; gser->in->driver_data = NULL;
return status; return status;
} }
EXPORT_SYMBOL_GPL(gserial_connect);
/** /**
* gserial_disconnect - notify TTY I/O glue that USB link is inactive * gserial_disconnect - notify TTY I/O glue that USB link is inactive
* @gser: the function, on which gserial_connect() was called * @gser: the function, on which gserial_connect() was called
@ -1347,3 +1355,6 @@ void gserial_disconnect(struct gserial *gser)
spin_unlock_irqrestore(&port->port_lock, flags); spin_unlock_irqrestore(&port->port_lock, flags);
} }
EXPORT_SYMBOL_GPL(gserial_disconnect);
MODULE_LICENSE("GPL");