]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/linux-26-headers/include/linux/input.h
update
[l4.git] / l4 / pkg / linux-26-headers / include / linux / input.h
index a5802c9c81a47831996a93cffc00fcb7190d4089..ac0573694cdffe592bd3764ef0baf50c60f499f8 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef _INPUT_H
-#define _INPUT_H
-
 /*
  * Copyright (c) 1999-2002 Vojtech Pavlik
  *
@@ -8,16 +5,15 @@
  * under the terms of the GNU General Public License version 2 as published by
  * the Free Software Foundation.
  */
+#ifndef _INPUT_H
+#define _INPUT_H
+
 
-#ifdef __KERNEL__
-#include <linux/time.h>
-#include <linux/list.h>
-#else
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
-#include <asm/types.h>
-#endif
+#include <linux/types.h>
+
 
 /*
  * The event structure itself
@@ -34,7 +30,7 @@ struct input_event {
  * Protocol version.
  */
 
-#define EV_VERSION             0x010000
+#define EV_VERSION             0x010001
 
 /*
  * IOCTLs (0x00 - 0x7f)
@@ -47,33 +43,107 @@ struct input_id {
        __u16 version;
 };
 
+/**
+ * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
+ * @value: latest reported value for the axis.
+ * @minimum: specifies minimum value for the axis.
+ * @maximum: specifies maximum value for the axis.
+ * @fuzz: specifies fuzz value that is used to filter noise from
+ *     the event stream.
+ * @flat: values that are within this value will be discarded by
+ *     joydev interface and reported as 0 instead.
+ * @resolution: specifies resolution for the values reported for
+ *     the axis.
+ *
+ * Note that input core does not clamp reported values to the
+ * [minimum, maximum] limits, such task is left to userspace.
+ *
+ * Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in
+ * units per millimeter (units/mm), resolution for rotational axes
+ * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
+ */
 struct input_absinfo {
        __s32 value;
        __s32 minimum;
        __s32 maximum;
        __s32 fuzz;
        __s32 flat;
+       __s32 resolution;
+};
+
+/**
+ * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
+ * @scancode: scancode represented in machine-endian form.
+ * @len: length of the scancode that resides in @scancode buffer.
+ * @index: index in the keymap, may be used instead of scancode
+ * @flags: allows to specify how kernel should handle the request. For
+ *     example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
+ *     should perform lookup in keymap by @index instead of @scancode
+ * @keycode: key code assigned to this scancode
+ *
+ * The structure is used to retrieve and modify keymap data. Users have
+ * option of performing lookup either by @scancode itself or by @index
+ * in keymap entry. EVIOCGKEYCODE will also return scancode or index
+ * (depending on which element was used to perform lookup).
+ */
+struct input_keymap_entry {
+#define INPUT_KEYMAP_BY_INDEX  (1 << 0)
+       __u8  flags;
+       __u8  len;
+       __u16 index;
+       __u32 keycode;
+       __u8  scancode[32];
 };
 
 #define EVIOCGVERSION          _IOR('E', 0x01, int)                    /* get driver version */
 #define EVIOCGID               _IOR('E', 0x02, struct input_id)        /* get device ID */
-#define EVIOCGREP              _IOR('E', 0x03, int[2])                 /* get repeat settings */
-#define EVIOCSREP              _IOW('E', 0x03, int[2])                 /* set repeat settings */
-#define EVIOCGKEYCODE          _IOR('E', 0x04, int[2])                 /* get keycode */
-#define EVIOCSKEYCODE          _IOW('E', 0x04, int[2])                 /* set keycode */
+#define EVIOCGREP              _IOR('E', 0x03, unsigned int[2])        /* get repeat settings */
+#define EVIOCSREP              _IOW('E', 0x03, unsigned int[2])        /* set repeat settings */
+
+#define EVIOCGKEYCODE          _IOR('E', 0x04, unsigned int[2])        /* get keycode */
+#define EVIOCGKEYCODE_V2       _IOR('E', 0x04, struct input_keymap_entry)
+#define EVIOCSKEYCODE          _IOW('E', 0x04, unsigned int[2])        /* set keycode */
+#define EVIOCSKEYCODE_V2       _IOW('E', 0x04, struct input_keymap_entry)
 
 #define EVIOCGNAME(len)                _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
 #define EVIOCGPHYS(len)                _IOC(_IOC_READ, 'E', 0x07, len)         /* get physical location */
 #define EVIOCGUNIQ(len)                _IOC(_IOC_READ, 'E', 0x08, len)         /* get unique identifier */
+#define EVIOCGPROP(len)                _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */
 
-#define EVIOCGKEY(len)         _IOC(_IOC_READ, 'E', 0x18, len)         /* get global keystate */
+/**
+ * EVIOCGMTSLOTS(len) - get MT slot values
+ * @len: size of the data buffer in bytes
+ *
+ * The ioctl buffer argument should be binary equivalent to
+ *
+ * struct input_mt_request_layout {
+ *     __u32 code;
+ *     __s32 values[num_slots];
+ * };
+ *
+ * where num_slots is the (arbitrary) number of MT slots to extract.
+ *
+ * The ioctl size argument (len) is the size of the buffer, which
+ * should satisfy len = (num_slots + 1) * sizeof(__s32).  If len is
+ * too small to fit all available slots, the first num_slots are
+ * returned.
+ *
+ * Before the call, code is set to the wanted ABS_MT event type. On
+ * return, values[] is filled with the slot values for the specified
+ * ABS_MT code.
+ *
+ * If the request code is not an ABS_MT value, -EINVAL is returned.
+ */
+#define EVIOCGMTSLOTS(len)     _IOC(_IOC_READ, 'E', 0x0a, len)
+
+#define EVIOCGKEY(len)         _IOC(_IOC_READ, 'E', 0x18, len)         /* get global key state */
 #define EVIOCGLED(len)         _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
 #define EVIOCGSND(len)         _IOC(_IOC_READ, 'E', 0x1a, len)         /* get all sounds status */
 #define EVIOCGSW(len)          _IOC(_IOC_READ, 'E', 0x1b, len)         /* get all switch states */
 
-#define EVIOCGBIT(ev,len)      _IOC(_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
-#define EVIOCGABS(abs)         _IOR('E', 0x40 + abs, struct input_absinfo)             /* get abs value/limits */
-#define EVIOCSABS(abs)         _IOW('E', 0xc0 + abs, struct input_absinfo)             /* set abs value/limits */
+#define EVIOCGBIT(ev,len)      _IOC(_IOC_READ, 'E', 0x20 + (ev), len)  /* get event bits */
+#define EVIOCGABS(abs)         _IOR('E', 0x40 + (abs), struct input_absinfo)   /* get abs value/limits */
+#define EVIOCSABS(abs)         _IOW('E', 0xc0 + (abs), struct input_absinfo)   /* set abs value/limits */
 
 #define EVIOCSFF               _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))   /* send a force effect to a force feedback device */
 #define EVIOCRMFF              _IOW('E', 0x81, int)                    /* Erase a force effect */
@@ -81,6 +151,20 @@ struct input_absinfo {
 
 #define EVIOCGRAB              _IOW('E', 0x90, int)                    /* Grab/Release device */
 
+#define EVIOCSCLOCKID          _IOW('E', 0xa0, int)                    /* Set clockid to be used for timestamps */
+
+/*
+ * Device properties and quirks
+ */
+
+#define INPUT_PROP_POINTER             0x00    /* needs a pointer */
+#define INPUT_PROP_DIRECT              0x01    /* direct input devices */
+#define INPUT_PROP_BUTTONPAD           0x02    /* has button(s) under pad */
+#define INPUT_PROP_SEMI_MT             0x03    /* touch rectangle only */
+
+#define INPUT_PROP_MAX                 0x1f
+#define INPUT_PROP_CNT                 (INPUT_PROP_MAX + 1)
+
 /*
  * Event types
  */
@@ -106,6 +190,8 @@ struct input_absinfo {
 
 #define SYN_REPORT             0
 #define SYN_CONFIG             1
+#define SYN_MT_REPORT          2
+#define SYN_DROPPED            3
 
 /*
  * Keys and buttons
@@ -238,6 +324,7 @@ struct input_absinfo {
 #define KEY_KPEQUAL            117
 #define KEY_KPPLUSMINUS                118
 #define KEY_PAUSE              119
+#define KEY_SCALE              120     /* AL Compiz Scale (Expose) */
 
 #define KEY_KPCOMMA            121
 #define KEY_HANGEUL            122
@@ -322,6 +409,7 @@ struct input_absinfo {
 #define KEY_PAUSECD            201
 #define KEY_PROG3              202
 #define KEY_PROG4              203
+#define KEY_DASHBOARD          204     /* AL Dashboard */
 #define KEY_SUSPEND            205
 #define KEY_CLOSE              206     /* AC Close */
 #define KEY_PLAY               207
@@ -372,8 +460,11 @@ struct input_absinfo {
 #define KEY_DISPLAY_OFF                245     /* display device to off state */
 
 #define KEY_WIMAX              246
+#define KEY_RFKILL             247     /* Key that controls all radios */
+
+#define KEY_MICMUTE            248     /* Mute / unmute the microphone */
 
-/* Range 248 - 255 is reserved for special needs of AT keyboard driver */
+/* Code 255 is reserved for special needs of AT keyboard driver */
 
 #define BTN_MISC               0x100
 #define BTN_0                  0x100
@@ -438,11 +529,13 @@ struct input_absinfo {
 #define BTN_TOOL_FINGER                0x145
 #define BTN_TOOL_MOUSE         0x146
 #define BTN_TOOL_LENS          0x147
+#define BTN_TOOL_QUINTTAP      0x148   /* Five fingers on trackpad */
 #define BTN_TOUCH              0x14a
 #define BTN_STYLUS             0x14b
 #define BTN_STYLUS2            0x14c
 #define BTN_TOOL_DOUBLETAP     0x14d
 #define BTN_TOOL_TRIPLETAP     0x14e
+#define BTN_TOOL_QUADTAP       0x14f   /* Four fingers on trackpad */
 
 #define BTN_WHEEL              0x150
 #define BTN_GEAR_DOWN          0x150
@@ -488,8 +581,8 @@ struct input_absinfo {
 #define KEY_DVD                        0x185   /* Media Select DVD */
 #define KEY_AUX                        0x186
 #define KEY_MP3                        0x187
-#define KEY_AUDIO              0x188
-#define KEY_VIDEO              0x189
+#define KEY_AUDIO              0x188   /* AL Audio Browser */
+#define KEY_VIDEO              0x189   /* AL Movie Browser */
 #define KEY_DIRECTORY          0x18a
 #define KEY_LIST               0x18b
 #define KEY_MEMO               0x18c   /* Media Select Messages */
@@ -538,6 +631,9 @@ struct input_absinfo {
 #define KEY_FRAMEFORWARD       0x1b5
 #define KEY_CONTEXT_MENU       0x1b6   /* GenDesc - system context menu */
 #define KEY_MEDIA_REPEAT       0x1b7   /* Consumer - transport control */
+#define KEY_10CHANNELSUP       0x1b8   /* 10 channels up (10+) */
+#define KEY_10CHANNELSDOWN     0x1b9   /* 10 channels down (10-) */
+#define KEY_IMAGES             0x1ba   /* AL Image Browser */
 
 #define KEY_DEL_EOL            0x1c0
 #define KEY_DEL_EOS            0x1c1
@@ -577,9 +673,78 @@ struct input_absinfo {
 #define KEY_BRL_DOT9           0x1f9
 #define KEY_BRL_DOT10          0x1fa
 
+#define KEY_NUMERIC_0          0x200   /* used by phones, remote controls, */
+#define KEY_NUMERIC_1          0x201   /* and other keypads */
+#define KEY_NUMERIC_2          0x202
+#define KEY_NUMERIC_3          0x203
+#define KEY_NUMERIC_4          0x204
+#define KEY_NUMERIC_5          0x205
+#define KEY_NUMERIC_6          0x206
+#define KEY_NUMERIC_7          0x207
+#define KEY_NUMERIC_8          0x208
+#define KEY_NUMERIC_9          0x209
+#define KEY_NUMERIC_STAR       0x20a
+#define KEY_NUMERIC_POUND      0x20b
+
+#define KEY_CAMERA_FOCUS       0x210
+#define KEY_WPS_BUTTON         0x211   /* WiFi Protected Setup key */
+
+#define KEY_TOUCHPAD_TOGGLE    0x212   /* Request switch touchpad on or off */
+#define KEY_TOUCHPAD_ON                0x213
+#define KEY_TOUCHPAD_OFF       0x214
+
+#define KEY_CAMERA_ZOOMIN      0x215
+#define KEY_CAMERA_ZOOMOUT     0x216
+#define KEY_CAMERA_UP          0x217
+#define KEY_CAMERA_DOWN                0x218
+#define KEY_CAMERA_LEFT                0x219
+#define KEY_CAMERA_RIGHT       0x21a
+
+#define BTN_TRIGGER_HAPPY              0x2c0
+#define BTN_TRIGGER_HAPPY1             0x2c0
+#define BTN_TRIGGER_HAPPY2             0x2c1
+#define BTN_TRIGGER_HAPPY3             0x2c2
+#define BTN_TRIGGER_HAPPY4             0x2c3
+#define BTN_TRIGGER_HAPPY5             0x2c4
+#define BTN_TRIGGER_HAPPY6             0x2c5
+#define BTN_TRIGGER_HAPPY7             0x2c6
+#define BTN_TRIGGER_HAPPY8             0x2c7
+#define BTN_TRIGGER_HAPPY9             0x2c8
+#define BTN_TRIGGER_HAPPY10            0x2c9
+#define BTN_TRIGGER_HAPPY11            0x2ca
+#define BTN_TRIGGER_HAPPY12            0x2cb
+#define BTN_TRIGGER_HAPPY13            0x2cc
+#define BTN_TRIGGER_HAPPY14            0x2cd
+#define BTN_TRIGGER_HAPPY15            0x2ce
+#define BTN_TRIGGER_HAPPY16            0x2cf
+#define BTN_TRIGGER_HAPPY17            0x2d0
+#define BTN_TRIGGER_HAPPY18            0x2d1
+#define BTN_TRIGGER_HAPPY19            0x2d2
+#define BTN_TRIGGER_HAPPY20            0x2d3
+#define BTN_TRIGGER_HAPPY21            0x2d4
+#define BTN_TRIGGER_HAPPY22            0x2d5
+#define BTN_TRIGGER_HAPPY23            0x2d6
+#define BTN_TRIGGER_HAPPY24            0x2d7
+#define BTN_TRIGGER_HAPPY25            0x2d8
+#define BTN_TRIGGER_HAPPY26            0x2d9
+#define BTN_TRIGGER_HAPPY27            0x2da
+#define BTN_TRIGGER_HAPPY28            0x2db
+#define BTN_TRIGGER_HAPPY29            0x2dc
+#define BTN_TRIGGER_HAPPY30            0x2dd
+#define BTN_TRIGGER_HAPPY31            0x2de
+#define BTN_TRIGGER_HAPPY32            0x2df
+#define BTN_TRIGGER_HAPPY33            0x2e0
+#define BTN_TRIGGER_HAPPY34            0x2e1
+#define BTN_TRIGGER_HAPPY35            0x2e2
+#define BTN_TRIGGER_HAPPY36            0x2e3
+#define BTN_TRIGGER_HAPPY37            0x2e4
+#define BTN_TRIGGER_HAPPY38            0x2e5
+#define BTN_TRIGGER_HAPPY39            0x2e6
+#define BTN_TRIGGER_HAPPY40            0x2e7
+
 /* We avoid low common keys in module aliases so they don't get huge. */
 #define KEY_MIN_INTERESTING    KEY_MUTE
-#define KEY_MAX                        0x1ff
+#define KEY_MAX                        0x2ff
 #define KEY_CNT                        (KEY_MAX+1)
 
 /*
@@ -627,8 +792,28 @@ struct input_absinfo {
 #define ABS_TILT_X             0x1a
 #define ABS_TILT_Y             0x1b
 #define ABS_TOOL_WIDTH         0x1c
+
 #define ABS_VOLUME             0x20
+
 #define ABS_MISC               0x28
+
+#define ABS_MT_SLOT            0x2f    /* MT slot being modified */
+#define ABS_MT_TOUCH_MAJOR     0x30    /* Major axis of touching ellipse */
+#define ABS_MT_TOUCH_MINOR     0x31    /* Minor axis (omit if circular) */
+#define ABS_MT_WIDTH_MAJOR     0x32    /* Major axis of approaching ellipse */
+#define ABS_MT_WIDTH_MINOR     0x33    /* Minor axis (omit if circular) */
+#define ABS_MT_ORIENTATION     0x34    /* Ellipse orientation */
+#define ABS_MT_POSITION_X      0x35    /* Center X touch position */
+#define ABS_MT_POSITION_Y      0x36    /* Center Y touch position */
+#define ABS_MT_TOOL_TYPE       0x37    /* Type of touching device */
+#define ABS_MT_BLOB_ID         0x38    /* Group a set of packets as a blob */
+#define ABS_MT_TRACKING_ID     0x39    /* Unique ID of initiated contact */
+#define ABS_MT_PRESSURE                0x3a    /* Pressure on contact area */
+#define ABS_MT_DISTANCE                0x3b    /* Contact hover distance */
+#define ABS_MT_TOOL_X          0x3c    /* Center X tool position */
+#define ABS_MT_TOOL_Y          0x3d    /* Center Y tool position */
+
+
 #define ABS_MAX                        0x3f
 #define ABS_CNT                        (ABS_MAX+1)
 
@@ -644,6 +829,14 @@ struct input_absinfo {
 #define SW_RADIO               SW_RFKILL_ALL   /* deprecated */
 #define SW_MICROPHONE_INSERT   0x04  /* set = inserted */
 #define SW_DOCK                        0x05  /* set = plugged into dock */
+#define SW_LINEOUT_INSERT      0x06  /* set = inserted */
+#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */
+#define SW_VIDEOOUT_INSERT     0x08  /* set = inserted */
+#define SW_CAMERA_LENS_COVER   0x09  /* set = lens covered */
+#define SW_KEYPAD_SLIDE                0x0a  /* set = keypad slide out */
+#define SW_FRONT_PROXIMITY     0x0b  /* set = front proximity sensor active */
+#define SW_ROTATE_LOCK         0x0c  /* set = rotate locked/disabled */
+#define SW_LINEIN_INSERT       0x0d  /* set = inserted */
 #define SW_MAX                 0x0f
 #define SW_CNT                 (SW_MAX+1)
 
@@ -656,6 +849,7 @@ struct input_absinfo {
 #define MSC_GESTURE            0x02
 #define MSC_RAW                        0x03
 #define MSC_SCAN               0x04
+#define MSC_TIMESTAMP          0x05
 #define MSC_MAX                        0x07
 #define MSC_CNT                        (MSC_MAX+1)
 
@@ -684,6 +878,7 @@ struct input_absinfo {
 #define REP_DELAY              0x00
 #define REP_PERIOD             0x01
 #define REP_MAX                        0x01
+#define REP_CNT                        (REP_MAX+1)
 
 /*
  * Sounds
@@ -723,6 +918,14 @@ struct input_absinfo {
 #define BUS_HOST               0x19
 #define BUS_GSC                        0x1A
 #define BUS_ATARI              0x1B
+#define BUS_SPI                        0x1C
+
+/*
+ * MT_TOOL types
+ */
+#define MT_TOOL_FINGER         0
+#define MT_TOOL_PEN            1
+#define MT_TOOL_MAX            1
 
 /*
  * Values describing the status of a force-feedback effect
@@ -946,425 +1149,4 @@ struct ff_effect {
 #define FF_MAX         0x7f
 #define FF_CNT         (FF_MAX+1)
 
-#ifdef __KERNEL__
-
-/*
- * In-kernel definitions.
- */
-
-#include <linux/device.h>
-#include <linux/fs.h>
-#include <linux/timer.h>
-#include <linux/mod_devicetable.h>
-
-/**
- * struct input_dev - represents an input device
- * @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)
- * @evbit: bitmap of types of events supported by the device (EV_KEY,
- *     EV_REL, etc.)
- * @keybit: bitmap of keys/buttons this device has
- * @relbit: bitmap of relative axes for the device
- * @absbit: bitmap of absolute axes for the device
- * @mscbit: bitmap of miscellaneous events supported by the device
- * @ledbit: bitmap of leds present on the device
- * @sndbit: bitmap of sound effects supported by the device
- * @ffbit: bitmap of force feedback effects supported by the device
- * @swbit: bitmap of switches present on the device
- * @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
- * @getkeycode: optional method to retrieve current keymap. If not supplied
- *     default mechanism will be used
- * @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
- * @sync: set to 1 when there were no new events since last EV_SYNC
- * @abs: current values for reports from absolute axes
- * @rep: current values for autorepeat parameters (delay, rate)
- * @key: reflects current state of device's keys/buttons
- * @led: reflects current state of device's LEDs
- * @snd: reflects current state of sound effects
- * @sw: reflects current state of device's switches
- * @absmax: maximum values for events coming from absolute axes
- * @absmin: minimum values for events coming from absolute axes
- * @absfuzz: describes noisiness for axes
- * @absflat: size of the center flat position (used by joydev)
- * @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
- */
-struct input_dev {
-       const char *name;
-       const char *phys;
-       const char *uniq;
-       struct input_id id;
-
-       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 keycodemax;
-       unsigned int keycodesize;
-       void *keycode;
-       int (*setkeycode)(struct input_dev *dev, int scancode, int keycode);
-       int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode);
-
-       struct ff_device *ff;
-
-       unsigned int repeat_key;
-       struct timer_list timer;
-
-       int sync;
-
-       int abs[ABS_MAX + 1];
-       int rep[REP_MAX + 1];
-
-       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 absmax[ABS_MAX + 1];
-       int absmin[ABS_MAX + 1];
-       int absfuzz[ABS_MAX + 1];
-       int absflat[ABS_MAX + 1];
-
-       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 *grab;
-
-       spinlock_t event_lock;
-       struct mutex mutex;
-
-       unsigned int users;
-       int going_away;
-
-       struct device dev;
-
-       struct list_head        h_list;
-       struct list_head        node;
-};
-#define to_input_dev(d) container_of(d, struct input_dev, dev)
-
-/*
- * Verify that we are in sync with input_device_id mod_devicetable.h #defines
- */
-
-#if EV_MAX != INPUT_DEVICE_ID_EV_MAX
-#error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
-#endif
-
-#if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING
-#error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match"
-#endif
-
-#if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
-#error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
-#endif
-
-#if REL_MAX != INPUT_DEVICE_ID_REL_MAX
-#error "REL_MAX and INPUT_DEVICE_ID_REL_MAX do not match"
-#endif
-
-#if ABS_MAX != INPUT_DEVICE_ID_ABS_MAX
-#error "ABS_MAX and INPUT_DEVICE_ID_ABS_MAX do not match"
-#endif
-
-#if MSC_MAX != INPUT_DEVICE_ID_MSC_MAX
-#error "MSC_MAX and INPUT_DEVICE_ID_MSC_MAX do not match"
-#endif
-
-#if LED_MAX != INPUT_DEVICE_ID_LED_MAX
-#error "LED_MAX and INPUT_DEVICE_ID_LED_MAX do not match"
-#endif
-
-#if SND_MAX != INPUT_DEVICE_ID_SND_MAX
-#error "SND_MAX and INPUT_DEVICE_ID_SND_MAX do not match"
-#endif
-
-#if FF_MAX != INPUT_DEVICE_ID_FF_MAX
-#error "FF_MAX and INPUT_DEVICE_ID_FF_MAX do not match"
-#endif
-
-#if SW_MAX != INPUT_DEVICE_ID_SW_MAX
-#error "SW_MAX and INPUT_DEVICE_ID_SW_MAX do not match"
-#endif
-
-#define INPUT_DEVICE_ID_MATCH_DEVICE \
-       (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
-#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
-       (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
-
-struct input_handle;
-
-/**
- * struct input_handler - implements one of interfaces for input devices
- * @private: driver-specific data
- * @event: event handler. This method is being called by input core with
- *     interrupts disabled and dev->event_lock spinlock held and so
- *     it may not sleep
- * @connect: called when attaching a handler to an input device
- * @disconnect: disconnects a handler from input device
- * @start: starts handler for given handle. This function is called by
- *     input core right after connect() method and also when a process
- *     that "grabbed" a device releases it
- * @fops: file operations this driver implements
- * @minor: beginning of range of 32 minors for devices this driver
- *     can provide
- * @name: name of the handler, to be shown in /proc/bus/input/handlers
- * @id_table: pointer to a table of input_device_ids this driver can
- *     handle
- * @blacklist: pointer to a table of input_device_ids this driver should
- *     ignore even if they match @id_table
- * @h_list: list of input handles associated with the handler
- * @node: for placing the driver onto input_handler_list
- *
- * Input handlers attach to input devices and create input handles. There
- * are likely several handlers attached to any given input device at the
- * same time. All of them will get their copy of input event generated by
- * the device.
- *
- * Note that input core serializes calls to connect() and disconnect()
- * methods.
- */
-struct input_handler {
-
-       void *private;
-
-       void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
-       int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
-       void (*disconnect)(struct input_handle *handle);
-       void (*start)(struct input_handle *handle);
-
-       const struct file_operations *fops;
-       int minor;
-       const char *name;
-
-       const struct input_device_id *id_table;
-       const struct input_device_id *blacklist;
-
-       struct list_head        h_list;
-       struct list_head        node;
-};
-
-/**
- * struct input_handle - links input device with an input handler
- * @private: handler-specific data
- * @open: counter showing whether the handle is 'open', i.e. should deliver
- *     events from its device
- * @name: name given to the handle by handler that created it
- * @dev: input device the handle is attached to
- * @handler: handler that works with the device through this handle
- * @d_node: used to put the handle on device's list of attached handles
- * @h_node: used to put the handle on handler's list of handles from which
- *     it gets events
- */
-struct input_handle {
-
-       void *private;
-
-       int open;
-       const char *name;
-
-       struct input_dev *dev;
-       struct input_handler *handler;
-
-       struct list_head        d_node;
-       struct list_head        h_node;
-};
-
-struct input_dev *input_allocate_device(void);
-void input_free_device(struct input_dev *dev);
-
-static inline struct input_dev *input_get_device(struct input_dev *dev)
-{
-       return dev ? to_input_dev(get_device(&dev->dev)) : NULL;
-}
-
-static inline void input_put_device(struct input_dev *dev)
-{
-       if (dev)
-               put_device(&dev->dev);
-}
-
-static inline void *input_get_drvdata(struct input_dev *dev)
-{
-       return dev_get_drvdata(&dev->dev);
-}
-
-static inline void input_set_drvdata(struct input_dev *dev, void *data)
-{
-       dev_set_drvdata(&dev->dev, data);
-}
-
-int __must_check input_register_device(struct input_dev *);
-void input_unregister_device(struct input_dev *);
-
-int __must_check input_register_handler(struct input_handler *);
-void input_unregister_handler(struct input_handler *);
-
-int input_register_handle(struct input_handle *);
-void input_unregister_handle(struct input_handle *);
-
-int input_grab_device(struct input_handle *);
-void input_release_device(struct input_handle *);
-
-int input_open_device(struct input_handle *);
-void input_close_device(struct input_handle *);
-
-int input_flush_device(struct input_handle* handle, struct file* file);
-
-void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
-void input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value);
-
-static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
-{
-       input_event(dev, EV_KEY, code, !!value);
-}
-
-static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
-{
-       input_event(dev, EV_REL, code, value);
-}
-
-static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
-{
-       input_event(dev, EV_ABS, code, value);
-}
-
-static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
-{
-       input_event(dev, EV_FF_STATUS, code, value);
-}
-
-static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
-{
-       input_event(dev, EV_SW, code, !!value);
-}
-
-static inline void input_sync(struct input_dev *dev)
-{
-       input_event(dev, EV_SYN, SYN_REPORT, 0);
-}
-
-void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
-
-static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)
-{
-       dev->absmin[axis] = min;
-       dev->absmax[axis] = max;
-       dev->absfuzz[axis] = fuzz;
-       dev->absflat[axis] = flat;
-
-       dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis);
-}
-
-int input_get_keycode(struct input_dev *dev, int scancode, int *keycode);
-int input_set_keycode(struct input_dev *dev, int scancode, int keycode);
-
-extern struct class input_class;
-
-/**
- * struct ff_device - force-feedback part of an input device
- * @upload: Called to upload an new effect into device
- * @erase: Called to erase an effect from device
- * @playback: Called to request device to start playing specified effect
- * @set_gain: Called to set specified gain
- * @set_autocenter: Called to auto-center device
- * @destroy: called by input core when parent input device is being
- *     destroyed
- * @private: driver-specific data, will be freed automatically
- * @ffbit: bitmap of force feedback capabilities truly supported by
- *     device (not emulated like ones in input_dev->ffbit)
- * @mutex: mutex for serializing access to the device
- * @max_effects: maximum number of effects supported by device
- * @effects: pointer to an array of effects currently loaded into device
- * @effect_owners: array of effect owners; when file handle owning
- *     an effect gets closed the effect is automatically erased
- *
- * Every force-feedback device must implement upload() and playback()
- * methods; erase() is optional. set_gain() and set_autocenter() need
- * only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER
- * bits.
- */
-struct ff_device {
-       int (*upload)(struct input_dev *dev, struct ff_effect *effect,
-                     struct ff_effect *old);
-       int (*erase)(struct input_dev *dev, int effect_id);
-
-       int (*playback)(struct input_dev *dev, int effect_id, int value);
-       void (*set_gain)(struct input_dev *dev, u16 gain);
-       void (*set_autocenter)(struct input_dev *dev, u16 magnitude);
-
-       void (*destroy)(struct ff_device *);
-
-       void *private;
-
-       unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
-
-       struct mutex mutex;
-
-       int max_effects;
-       struct ff_effect *effects;
-       struct file *effect_owners[];
-};
-
-int input_ff_create(struct input_dev *dev, int max_effects);
-void input_ff_destroy(struct input_dev *dev);
-
-int input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
-
-int input_ff_upload(struct input_dev *dev, struct ff_effect *effect, struct file *file);
-int input_ff_erase(struct input_dev *dev, int effect_id, struct file *file);
-
-int input_ff_create_memless(struct input_dev *dev, void *data,
-               int (*play_effect)(struct input_dev *, void *, struct ff_effect *));
-
-#endif
-#endif
+#endif /* _INPUT_H */