Commit 3249ca22 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Felipe Balbi

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: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 48177cd8
...@@ -503,6 +503,9 @@ config USB_LIBCOMPOSITE ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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.
......
...@@ -78,3 +78,4 @@ obj-$(CONFIG_USB_GADGET_TARGET) += tcm_usb_gadget.o ...@@ -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
...@@ -41,7 +41,6 @@ ...@@ -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"
......
...@@ -43,7 +43,6 @@ USB_GADGET_COMPOSITE_OPTIONS(); ...@@ -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"
......
...@@ -13,9 +13,7 @@ ...@@ -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 */
......
...@@ -42,7 +42,6 @@ MODULE_LICENSE("GPL"); ...@@ -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"
......
...@@ -37,7 +37,6 @@ ...@@ -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"
......
...@@ -39,7 +39,6 @@ ...@@ -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();
......
...@@ -26,6 +26,7 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ int gserial_setup(struct usb_gadget *g, unsigned count) ...@@ -1153,6 +1159,7 @@ int gserial_setup(struct usb_gadget *g, unsigned count)
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) ...@@ -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 @@ int gserial_connect(struct gserial *gser, u8 port_num) ...@@ -1292,7 +1300,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
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) ...@@ -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");
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