#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/bitops.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/gameport.h>
#include <linux/jiffies.h>
#include <linux/seq_buf.h>
#include <linux/timex.h>
#include <linux/timekeeping.h>
#define DRIVER_DESC …
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…);
MODULE_LICENSE(…) …;
#define ANALOG_PORTS …
static char *js[ANALOG_PORTS];
static unsigned int js_nargs;
static int analog_options[ANALOG_PORTS];
module_param_array_named(…);
MODULE_PARM_DESC(…) …;
#define ANALOG_RUDDER …
#define ANALOG_THROTTLE …
#define ANALOG_AXES_STD …
#define ANALOG_BTNS_STD …
#define ANALOG_BTNS_CHF …
#define ANALOG_HAT1_CHF …
#define ANALOG_HAT2_CHF …
#define ANALOG_HAT_FCS …
#define ANALOG_HATS_ALL …
#define ANALOG_BTN_TL …
#define ANALOG_BTN_TR …
#define ANALOG_BTN_TL2 …
#define ANALOG_BTN_TR2 …
#define ANALOG_BTNS_TLR …
#define ANALOG_BTNS_TLR2 …
#define ANALOG_BTNS_GAMEPAD …
#define ANALOG_HBTN_CHF …
#define ANALOG_ANY_CHF …
#define ANALOG_SAITEK …
#define ANALOG_EXTENSIONS …
#define ANALOG_GAMEPAD …
#define ANALOG_MAX_TIME …
#define ANALOG_LOOP_TIME …
#define ANALOG_SAITEK_DELAY …
#define ANALOG_SAITEK_TIME …
#define ANALOG_AXIS_TIME …
#define ANALOG_INIT_RETRIES …
#define ANALOG_FUZZ_BITS …
#define ANALOG_FUZZ_MAGIC …
#define ANALOG_MAX_NAME_LENGTH …
#define ANALOG_MAX_PHYS_LENGTH …
static short analog_axes[] = …;
static short analog_hats[] = …;
static short analog_pads[] = …;
static short analog_exts[] = …;
static short analog_pad_btn[] = …;
static short analog_joy_btn[] = …;
static unsigned char analog_chf[] = …;
struct analog { … };
struct analog_port { … };
static void analog_decode(struct analog *analog, int *axes, int *initial, int buttons)
{ … }
static int analog_cooked_read(struct analog_port *port)
{ … }
static int analog_button_read(struct analog_port *port, char saitek, char chf)
{ … }
static void analog_poll(struct gameport *gameport)
{ … }
static int analog_open(struct input_dev *dev)
{ … }
static void analog_close(struct input_dev *dev)
{ … }
static void analog_calibrate_timer(struct analog_port *port)
{ … }
static void analog_name(struct analog *analog)
{ … }
static int analog_init_device(struct analog_port *port, struct analog *analog, int index)
{ … }
static int analog_init_masks(struct analog_port *port)
{ … }
static int analog_init_port(struct gameport *gameport, struct gameport_driver *drv, struct analog_port *port)
{ … }
static int analog_connect(struct gameport *gameport, struct gameport_driver *drv)
{ … }
static void analog_disconnect(struct gameport *gameport)
{ … }
struct analog_types { … };
static struct analog_types analog_types[] = …;
static void analog_parse_options(void)
{ … }
static struct gameport_driver analog_drv = …;
static int __init analog_init(void)
{ … }
static void __exit analog_exit(void)
{ … }
module_init(…) …;
module_exit(analog_exit);