#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/module.h>
#include <linux/usb.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/moduleparam.h>
#include <linux/spinlock.h>
#include <linux/uaccess.h>
#include <linux/usb/serial.h>
#define DRIVER_DESC …
#define FOCUS_VENDOR_ID …
#define FOCUS_PRODUCT_ID_BI …
#define FOCUS_PRODUCT_ID_UNI …
#define METROUSB_SET_REQUEST_TYPE …
#define METROUSB_SET_MODEM_CTRL_REQUEST …
#define METROUSB_SET_BREAK_REQUEST …
#define METROUSB_MCR_NONE …
#define METROUSB_MCR_RTS …
#define METROUSB_MCR_DTR …
#define WDR_TIMEOUT …
struct metrousb_private { … };
static const struct usb_device_id id_table[] = …;
MODULE_DEVICE_TABLE(usb, id_table);
#define UNI_CMD_OPEN …
#define UNI_CMD_CLOSE …
static int metrousb_is_unidirectional_mode(struct usb_serial *serial)
{ … }
static int metrousb_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds)
{ … }
static int metrousb_send_unidirectional_cmd(u8 cmd, struct usb_serial_port *port)
{ … }
static void metrousb_read_int_callback(struct urb *urb)
{ … }
static void metrousb_cleanup(struct usb_serial_port *port)
{ … }
static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
{ … }
static int metrousb_set_modem_ctrl(struct usb_serial *serial, unsigned int control_state)
{ … }
static int metrousb_port_probe(struct usb_serial_port *port)
{ … }
static void metrousb_port_remove(struct usb_serial_port *port)
{ … }
static void metrousb_throttle(struct tty_struct *tty)
{ … }
static int metrousb_tiocmget(struct tty_struct *tty)
{ … }
static int metrousb_tiocmset(struct tty_struct *tty,
unsigned int set, unsigned int clear)
{ … }
static void metrousb_unthrottle(struct tty_struct *tty)
{ … }
static struct usb_serial_driver metrousb_device = …;
static struct usb_serial_driver * const serial_drivers[] = …;
module_usb_serial_driver(…);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…);