#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/uaccess.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
#define ZYXEL_VENDOR_ID …
#define ZYXEL_OMNINET_ID …
#define ZYXEL_OMNI_56K_PLUS_ID …
#define BT_IGNITIONPRO_ID …
static void omninet_process_read_urb(struct urb *urb);
static int omninet_prepare_write_buffer(struct usb_serial_port *port,
void *buf, size_t count);
static int omninet_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds);
static int omninet_port_probe(struct usb_serial_port *port);
static void omninet_port_remove(struct usb_serial_port *port);
static const struct usb_device_id id_table[] = …;
MODULE_DEVICE_TABLE(usb, id_table);
static struct usb_serial_driver zyxel_omninet_device = …;
static struct usb_serial_driver * const serial_drivers[] = …;
struct omninet_header { … };
struct omninet_data { … };
static int omninet_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds)
{ … }
static int omninet_port_probe(struct usb_serial_port *port)
{ … }
static void omninet_port_remove(struct usb_serial_port *port)
{ … }
#define OMNINET_HEADERLEN …
#define OMNINET_BULKOUTSIZE …
#define OMNINET_PAYLOADSIZE …
static void omninet_process_read_urb(struct urb *urb)
{ … }
static int omninet_prepare_write_buffer(struct usb_serial_port *port,
void *buf, size_t count)
{ … }
module_usb_serial_driver(…);
MODULE_AUTHOR(…);
MODULE_DESCRIPTION(…);
MODULE_LICENSE(…) …;