/*event handler for events sent _to_ the device, like EV_LED or EV_SND.
The device is expected to carry out the requested action (turn on a LED, play sound, etc.)
The callis protected by event_lock and must not sleep */
int(* event)(struct input_dev *dev, unsigned int type, unsigned int code,int value);
/*input handle that currently has the device grabbed (via EVIOCGRAB ioctl).
When a handle grabs a device it becomes sole recipient for all input events coming from the device */
struct input_handle * grab;
/*this spinlock isis taken when input core receives and processes a new event for the device (in input_event). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock.*/
spinlock_t event_lock;
struct mutex mutex;//serializes calls to open, close and flush methods
/*stores number of users (input handlers) that opened this device. It is used by input_open_device and input_close_device to make sure that dev->open is only called when the first user opens device and dev->close is called when the very last user closes the device */
unsigned int users;
int going_away;//marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.
struct device dev;//driver model's view of this device
struct list_head h_list;//list of input handles associated with the device. When accessing the list dev->mutex must be held
struct list_head node;//used to place the device onto input_dev_list