#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/rwsem.h>
#include <linux/uaccess.h>
#include <linux/usb.h>
#define DRIVER_VERSION …
#define USBLCD_MINOR …
#define IOCTL_GET_HARD_VERSION …
#define IOCTL_GET_DRV_VERSION …
static const struct usb_device_id id_table[] = …;
MODULE_DEVICE_TABLE(usb, id_table);
struct usb_lcd { … };
#define to_lcd_dev(d) …
#define USB_LCD_CONCURRENT_WRITES …
static struct usb_driver lcd_driver;
static void lcd_delete(struct kref *kref)
{ … }
static int lcd_open(struct inode *inode, struct file *file)
{ … }
static int lcd_release(struct inode *inode, struct file *file)
{ … }
static ssize_t lcd_read(struct file *file, char __user * buffer,
size_t count, loff_t *ppos)
{ … }
static long lcd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{ … }
static void lcd_write_bulk_callback(struct urb *urb)
{ … }
static ssize_t lcd_write(struct file *file, const char __user * user_buffer,
size_t count, loff_t *ppos)
{ … }
static const struct file_operations lcd_fops = …;
static struct usb_class_driver lcd_class = …;
static int lcd_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{ … }
static void lcd_draw_down(struct usb_lcd *dev)
{ … }
static int lcd_suspend(struct usb_interface *intf, pm_message_t message)
{ … }
static int lcd_resume(struct usb_interface *intf)
{ … }
static void lcd_disconnect(struct usb_interface *interface)
{ … }
static struct usb_driver lcd_driver = …;
module_usb_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…);
MODULE_LICENSE(…) …;