Introduction to the Linux kernel input subsystem – its data structures and APIs
The main data structures and APIs of this subsystem can be found in the include/linux/input.h files. The following line is required in any input device driver:
#include <linux/input.h>
Whatever type of input device it is, whatever type of event it sends, an input device is represented in the kernel as an instance of the struct input_dev:
struct input_dev {
  const char *name;
  const char *phys;
  unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
  unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
  unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
  unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
  unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
  unsigned int repeat_key;
  int rep[REP_CNT];
  struct input_absinfo *absinfo;
  unsigned long key[BITS_TO_LONGS(KEY_CNT)];
  int (*open...