---
name: "struct_input_dev"
section: "9"
platform: "linux"
package: "linux-manual-3.16"
version: "3.16.56-1+deb8u1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/struct_input_dev"
---

# struct\_input\_dev(9)

represents an input device

## NAME

struct\_input\_dev - represents an input device

## SYNOPSIS

```
struct input_dev {
  const char * name;
  const char * phys;
  const char * uniq;
  struct input_id id;
  unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];
  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 long ledbit[BITS_TO_LONGS(LED_CNT)];
  unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
  unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
  unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
  unsigned int hint_events_per_packet;
  unsigned int keycodemax;
  unsigned int keycodesize;
  void * keycode;
  int (* setkeycode) (struct input_dev *dev,const struct input_keymap_entry *ke,unsigned int *old_keycode);
  int (* getkeycode) (struct input_dev *dev,struct input_keymap_entry *ke);
  struct ff_device * ff;
  unsigned int repeat_key;
  struct timer_list timer;
  int rep[REP_CNT];
  struct input_mt * mt;
  struct input_absinfo * absinfo;
  unsigned long key[BITS_TO_LONGS(KEY_CNT)];
  unsigned long led[BITS_TO_LONGS(LED_CNT)];
  unsigned long snd[BITS_TO_LONGS(SND_CNT)];
  unsigned long sw[BITS_TO_LONGS(SW_CNT)];
  int (* open) (struct input_dev *dev);
  void (* close) (struct input_dev *dev);
  int (* flush) (struct input_dev *dev, struct file *file);
  int (* event) (struct input_dev *dev, unsigned int type, unsigned int code, int value);
  struct input_handle __rcu * grab;
  spinlock_t event_lock;
  struct mutex mutex;
  unsigned int users;
  bool going_away;
  struct device dev;
  struct list_head h_list;
  struct list_head node;
  unsigned int num_vals;
  unsigned int max_vals;
  struct input_value * vals;
  bool devres_managed;
};
```

## MEMBERS

name

name of the device

phys

physical path to the device in the system hierarchy

uniq

unique identification code for the device (if device has it)

id

id of the device (struct input\_id)

propbit\[BITS\_TO\_LONGS(INPUT\_PROP\_CNT)\]

bitmap of device properties and quirks

evbit\[BITS\_TO\_LONGS(EV\_CNT)\]

bitmap of types of events supported by the device (EV\_KEY, EV\_REL, etc.)

keybit\[BITS\_TO\_LONGS(KEY\_CNT)\]

bitmap of keys/buttons this device has

relbit\[BITS\_TO\_LONGS(REL\_CNT)\]

bitmap of relative axes for the device

absbit\[BITS\_TO\_LONGS(ABS\_CNT)\]

bitmap of absolute axes for the device

mscbit\[BITS\_TO\_LONGS(MSC\_CNT)\]

bitmap of miscellaneous events supported by the device

ledbit\[BITS\_TO\_LONGS(LED\_CNT)\]

bitmap of leds present on the device

sndbit\[BITS\_TO\_LONGS(SND\_CNT)\]

bitmap of sound effects supported by the device

ffbit\[BITS\_TO\_LONGS(FF\_CNT)\]

bitmap of force feedback effects supported by the device

swbit\[BITS\_TO\_LONGS(SW\_CNT)\]

bitmap of switches present on the device

hint\_events\_per\_packet

average number of events generated by the device in a packet (between EV\_SYN/SYN\_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events.

keycodemax

size of keycode table

keycodesize

size of elements in keycode table

keycode

map of scancodes to keycodes for this device

setkeycode

optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event\_lock and thus must not sleep

getkeycode

optional legacy method to retrieve current keymap.

ff

force feedback structure associated with the device if device supports force feedback effects

repeat\_key

stores key code of the last key pressed; used to implement software autorepeat

timer

timer for software autorepeat

rep\[REP\_CNT\]

current values for autorepeat parameters (delay, rate)

mt

pointer to multitouch state

absinfo

array of struct input\_absinfo elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)

key\[BITS\_TO\_LONGS(KEY\_CNT)\]

reflects current state of device's keys/buttons

led\[BITS\_TO\_LONGS(LED\_CNT)\]

reflects current state of device's LEDs

snd\[BITS\_TO\_LONGS(SND\_CNT)\]

reflects current state of sound effects

sw\[BITS\_TO\_LONGS(SW\_CNT)\]

reflects current state of device's switches

open

this method is called when the very first user calls **input\_open\_device**. The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.)

close

this method is called when the very last user calls **input\_close\_device**.

flush

purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it

event

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 call is protected by *event\_lock* and must not sleep

grab

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

event\_lock

this spinlock is is 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.

mutex

serializes calls to **open**, **close** and **flush** methods

users

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

going\_away

marks devices that are in a middle of unregistering and causes input\_open\_device\*() fail with -ENODEV.

dev

driver model's view of this device

h\_list

list of input handles associated with the device. When accessing the list dev-\>mutex must be held

node

used to place the device onto input\_dev\_list

num\_vals

number of values queued in the current frame

max\_vals

maximum number of values queued in a frame

vals

array of values queued in the current frame

devres\_managed

indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.

## COPYRIGHT
