11da177e4SLinus Torvalds #ifndef _INPUT_H 21da177e4SLinus Torvalds #define _INPUT_H 31da177e4SLinus Torvalds 41da177e4SLinus Torvalds /* 51da177e4SLinus Torvalds * Copyright (c) 1999-2002 Vojtech Pavlik 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify it 81da177e4SLinus Torvalds * under the terms of the GNU General Public License version 2 as published by 91da177e4SLinus Torvalds * the Free Software Foundation. 101da177e4SLinus Torvalds */ 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #ifdef __KERNEL__ 131da177e4SLinus Torvalds #include <linux/time.h> 141da177e4SLinus Torvalds #include <linux/list.h> 15d19fbe8aSDmitry Torokhov #include <linux/device.h> 16*e39b8433SRusty Russell #include <linux/mod_devicetable.h> 171da177e4SLinus Torvalds #else 181da177e4SLinus Torvalds #include <sys/time.h> 191da177e4SLinus Torvalds #include <sys/ioctl.h> 201da177e4SLinus Torvalds #include <asm/types.h> 211da177e4SLinus Torvalds #endif 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds /* 241da177e4SLinus Torvalds * The event structure itself 251da177e4SLinus Torvalds */ 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds struct input_event { 281da177e4SLinus Torvalds struct timeval time; 291da177e4SLinus Torvalds __u16 type; 301da177e4SLinus Torvalds __u16 code; 311da177e4SLinus Torvalds __s32 value; 321da177e4SLinus Torvalds }; 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds /* 351da177e4SLinus Torvalds * Protocol version. 361da177e4SLinus Torvalds */ 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds #define EV_VERSION 0x010000 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds /* 411da177e4SLinus Torvalds * IOCTLs (0x00 - 0x7f) 421da177e4SLinus Torvalds */ 431da177e4SLinus Torvalds 441da177e4SLinus Torvalds struct input_id { 451da177e4SLinus Torvalds __u16 bustype; 461da177e4SLinus Torvalds __u16 vendor; 471da177e4SLinus Torvalds __u16 product; 481da177e4SLinus Torvalds __u16 version; 491da177e4SLinus Torvalds }; 501da177e4SLinus Torvalds 511da177e4SLinus Torvalds struct input_absinfo { 521da177e4SLinus Torvalds __s32 value; 531da177e4SLinus Torvalds __s32 minimum; 541da177e4SLinus Torvalds __s32 maximum; 551da177e4SLinus Torvalds __s32 fuzz; 561da177e4SLinus Torvalds __s32 flat; 571da177e4SLinus Torvalds }; 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds #define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ 601da177e4SLinus Torvalds #define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */ 611da177e4SLinus Torvalds #define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */ 621da177e4SLinus Torvalds #define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */ 631da177e4SLinus Torvalds 641da177e4SLinus Torvalds #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */ 651da177e4SLinus Torvalds #define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */ 661da177e4SLinus Torvalds #define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */ 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds #define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */ 691da177e4SLinus Torvalds #define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */ 701da177e4SLinus Torvalds #define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */ 7131581066SRichard Purdie #define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len) /* get all switch states */ 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */ 741da177e4SLinus Torvalds #define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */ 751da177e4SLinus Torvalds #define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, struct input_absinfo) /* set abs value/limits */ 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */ 781da177e4SLinus Torvalds #define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */ 791da177e4SLinus Torvalds #define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */ 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds /* 841da177e4SLinus Torvalds * Event types 851da177e4SLinus Torvalds */ 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds #define EV_SYN 0x00 881da177e4SLinus Torvalds #define EV_KEY 0x01 891da177e4SLinus Torvalds #define EV_REL 0x02 901da177e4SLinus Torvalds #define EV_ABS 0x03 911da177e4SLinus Torvalds #define EV_MSC 0x04 9231581066SRichard Purdie #define EV_SW 0x05 931da177e4SLinus Torvalds #define EV_LED 0x11 941da177e4SLinus Torvalds #define EV_SND 0x12 951da177e4SLinus Torvalds #define EV_REP 0x14 961da177e4SLinus Torvalds #define EV_FF 0x15 971da177e4SLinus Torvalds #define EV_PWR 0x16 981da177e4SLinus Torvalds #define EV_FF_STATUS 0x17 991da177e4SLinus Torvalds #define EV_MAX 0x1f 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds /* 1021da177e4SLinus Torvalds * Synchronization events. 1031da177e4SLinus Torvalds */ 1041da177e4SLinus Torvalds 1051da177e4SLinus Torvalds #define SYN_REPORT 0 1061da177e4SLinus Torvalds #define SYN_CONFIG 1 1071da177e4SLinus Torvalds 1081da177e4SLinus Torvalds /* 1091da177e4SLinus Torvalds * Keys and buttons 1101da177e4SLinus Torvalds */ 1111da177e4SLinus Torvalds 1121da177e4SLinus Torvalds #define KEY_RESERVED 0 1131da177e4SLinus Torvalds #define KEY_ESC 1 1141da177e4SLinus Torvalds #define KEY_1 2 1151da177e4SLinus Torvalds #define KEY_2 3 1161da177e4SLinus Torvalds #define KEY_3 4 1171da177e4SLinus Torvalds #define KEY_4 5 1181da177e4SLinus Torvalds #define KEY_5 6 1191da177e4SLinus Torvalds #define KEY_6 7 1201da177e4SLinus Torvalds #define KEY_7 8 1211da177e4SLinus Torvalds #define KEY_8 9 1221da177e4SLinus Torvalds #define KEY_9 10 1231da177e4SLinus Torvalds #define KEY_0 11 1241da177e4SLinus Torvalds #define KEY_MINUS 12 1251da177e4SLinus Torvalds #define KEY_EQUAL 13 1261da177e4SLinus Torvalds #define KEY_BACKSPACE 14 1271da177e4SLinus Torvalds #define KEY_TAB 15 1281da177e4SLinus Torvalds #define KEY_Q 16 1291da177e4SLinus Torvalds #define KEY_W 17 1301da177e4SLinus Torvalds #define KEY_E 18 1311da177e4SLinus Torvalds #define KEY_R 19 1321da177e4SLinus Torvalds #define KEY_T 20 1331da177e4SLinus Torvalds #define KEY_Y 21 1341da177e4SLinus Torvalds #define KEY_U 22 1351da177e4SLinus Torvalds #define KEY_I 23 1361da177e4SLinus Torvalds #define KEY_O 24 1371da177e4SLinus Torvalds #define KEY_P 25 1381da177e4SLinus Torvalds #define KEY_LEFTBRACE 26 1391da177e4SLinus Torvalds #define KEY_RIGHTBRACE 27 1401da177e4SLinus Torvalds #define KEY_ENTER 28 1411da177e4SLinus Torvalds #define KEY_LEFTCTRL 29 1421da177e4SLinus Torvalds #define KEY_A 30 1431da177e4SLinus Torvalds #define KEY_S 31 1441da177e4SLinus Torvalds #define KEY_D 32 1451da177e4SLinus Torvalds #define KEY_F 33 1461da177e4SLinus Torvalds #define KEY_G 34 1471da177e4SLinus Torvalds #define KEY_H 35 1481da177e4SLinus Torvalds #define KEY_J 36 1491da177e4SLinus Torvalds #define KEY_K 37 1501da177e4SLinus Torvalds #define KEY_L 38 1511da177e4SLinus Torvalds #define KEY_SEMICOLON 39 1521da177e4SLinus Torvalds #define KEY_APOSTROPHE 40 1531da177e4SLinus Torvalds #define KEY_GRAVE 41 1541da177e4SLinus Torvalds #define KEY_LEFTSHIFT 42 1551da177e4SLinus Torvalds #define KEY_BACKSLASH 43 1561da177e4SLinus Torvalds #define KEY_Z 44 1571da177e4SLinus Torvalds #define KEY_X 45 1581da177e4SLinus Torvalds #define KEY_C 46 1591da177e4SLinus Torvalds #define KEY_V 47 1601da177e4SLinus Torvalds #define KEY_B 48 1611da177e4SLinus Torvalds #define KEY_N 49 1621da177e4SLinus Torvalds #define KEY_M 50 1631da177e4SLinus Torvalds #define KEY_COMMA 51 1641da177e4SLinus Torvalds #define KEY_DOT 52 1651da177e4SLinus Torvalds #define KEY_SLASH 53 1661da177e4SLinus Torvalds #define KEY_RIGHTSHIFT 54 1671da177e4SLinus Torvalds #define KEY_KPASTERISK 55 1681da177e4SLinus Torvalds #define KEY_LEFTALT 56 1691da177e4SLinus Torvalds #define KEY_SPACE 57 1701da177e4SLinus Torvalds #define KEY_CAPSLOCK 58 1711da177e4SLinus Torvalds #define KEY_F1 59 1721da177e4SLinus Torvalds #define KEY_F2 60 1731da177e4SLinus Torvalds #define KEY_F3 61 1741da177e4SLinus Torvalds #define KEY_F4 62 1751da177e4SLinus Torvalds #define KEY_F5 63 1761da177e4SLinus Torvalds #define KEY_F6 64 1771da177e4SLinus Torvalds #define KEY_F7 65 1781da177e4SLinus Torvalds #define KEY_F8 66 1791da177e4SLinus Torvalds #define KEY_F9 67 1801da177e4SLinus Torvalds #define KEY_F10 68 1811da177e4SLinus Torvalds #define KEY_NUMLOCK 69 1821da177e4SLinus Torvalds #define KEY_SCROLLLOCK 70 1831da177e4SLinus Torvalds #define KEY_KP7 71 1841da177e4SLinus Torvalds #define KEY_KP8 72 1851da177e4SLinus Torvalds #define KEY_KP9 73 1861da177e4SLinus Torvalds #define KEY_KPMINUS 74 1871da177e4SLinus Torvalds #define KEY_KP4 75 1881da177e4SLinus Torvalds #define KEY_KP5 76 1891da177e4SLinus Torvalds #define KEY_KP6 77 1901da177e4SLinus Torvalds #define KEY_KPPLUS 78 1911da177e4SLinus Torvalds #define KEY_KP1 79 1921da177e4SLinus Torvalds #define KEY_KP2 80 1931da177e4SLinus Torvalds #define KEY_KP3 81 1941da177e4SLinus Torvalds #define KEY_KP0 82 1951da177e4SLinus Torvalds #define KEY_KPDOT 83 1961da177e4SLinus Torvalds 1971da177e4SLinus Torvalds #define KEY_ZENKAKUHANKAKU 85 1981da177e4SLinus Torvalds #define KEY_102ND 86 1991da177e4SLinus Torvalds #define KEY_F11 87 2001da177e4SLinus Torvalds #define KEY_F12 88 2011da177e4SLinus Torvalds #define KEY_RO 89 2021da177e4SLinus Torvalds #define KEY_KATAKANA 90 2031da177e4SLinus Torvalds #define KEY_HIRAGANA 91 2041da177e4SLinus Torvalds #define KEY_HENKAN 92 2051da177e4SLinus Torvalds #define KEY_KATAKANAHIRAGANA 93 2061da177e4SLinus Torvalds #define KEY_MUHENKAN 94 2071da177e4SLinus Torvalds #define KEY_KPJPCOMMA 95 2081da177e4SLinus Torvalds #define KEY_KPENTER 96 2091da177e4SLinus Torvalds #define KEY_RIGHTCTRL 97 2101da177e4SLinus Torvalds #define KEY_KPSLASH 98 2111da177e4SLinus Torvalds #define KEY_SYSRQ 99 2121da177e4SLinus Torvalds #define KEY_RIGHTALT 100 2131da177e4SLinus Torvalds #define KEY_LINEFEED 101 2141da177e4SLinus Torvalds #define KEY_HOME 102 2151da177e4SLinus Torvalds #define KEY_UP 103 2161da177e4SLinus Torvalds #define KEY_PAGEUP 104 2171da177e4SLinus Torvalds #define KEY_LEFT 105 2181da177e4SLinus Torvalds #define KEY_RIGHT 106 2191da177e4SLinus Torvalds #define KEY_END 107 2201da177e4SLinus Torvalds #define KEY_DOWN 108 2211da177e4SLinus Torvalds #define KEY_PAGEDOWN 109 2221da177e4SLinus Torvalds #define KEY_INSERT 110 2231da177e4SLinus Torvalds #define KEY_DELETE 111 2241da177e4SLinus Torvalds #define KEY_MACRO 112 2251da177e4SLinus Torvalds #define KEY_MUTE 113 2261da177e4SLinus Torvalds #define KEY_VOLUMEDOWN 114 2271da177e4SLinus Torvalds #define KEY_VOLUMEUP 115 2281da177e4SLinus Torvalds #define KEY_POWER 116 2291da177e4SLinus Torvalds #define KEY_KPEQUAL 117 2301da177e4SLinus Torvalds #define KEY_KPPLUSMINUS 118 2311da177e4SLinus Torvalds #define KEY_PAUSE 119 2321da177e4SLinus Torvalds 2331da177e4SLinus Torvalds #define KEY_KPCOMMA 121 2341da177e4SLinus Torvalds #define KEY_HANGUEL 122 2351da177e4SLinus Torvalds #define KEY_HANJA 123 2361da177e4SLinus Torvalds #define KEY_YEN 124 2371da177e4SLinus Torvalds #define KEY_LEFTMETA 125 2381da177e4SLinus Torvalds #define KEY_RIGHTMETA 126 2391da177e4SLinus Torvalds #define KEY_COMPOSE 127 2401da177e4SLinus Torvalds 2411da177e4SLinus Torvalds #define KEY_STOP 128 2421da177e4SLinus Torvalds #define KEY_AGAIN 129 2431da177e4SLinus Torvalds #define KEY_PROPS 130 2441da177e4SLinus Torvalds #define KEY_UNDO 131 2451da177e4SLinus Torvalds #define KEY_FRONT 132 2461da177e4SLinus Torvalds #define KEY_COPY 133 2471da177e4SLinus Torvalds #define KEY_OPEN 134 2481da177e4SLinus Torvalds #define KEY_PASTE 135 2491da177e4SLinus Torvalds #define KEY_FIND 136 2501da177e4SLinus Torvalds #define KEY_CUT 137 2511da177e4SLinus Torvalds #define KEY_HELP 138 2521da177e4SLinus Torvalds #define KEY_MENU 139 2531da177e4SLinus Torvalds #define KEY_CALC 140 2541da177e4SLinus Torvalds #define KEY_SETUP 141 2551da177e4SLinus Torvalds #define KEY_SLEEP 142 2561da177e4SLinus Torvalds #define KEY_WAKEUP 143 2571da177e4SLinus Torvalds #define KEY_FILE 144 2581da177e4SLinus Torvalds #define KEY_SENDFILE 145 2591da177e4SLinus Torvalds #define KEY_DELETEFILE 146 2601da177e4SLinus Torvalds #define KEY_XFER 147 2611da177e4SLinus Torvalds #define KEY_PROG1 148 2621da177e4SLinus Torvalds #define KEY_PROG2 149 2631da177e4SLinus Torvalds #define KEY_WWW 150 2641da177e4SLinus Torvalds #define KEY_MSDOS 151 2651da177e4SLinus Torvalds #define KEY_COFFEE 152 2661da177e4SLinus Torvalds #define KEY_DIRECTION 153 2671da177e4SLinus Torvalds #define KEY_CYCLEWINDOWS 154 2681da177e4SLinus Torvalds #define KEY_MAIL 155 2691da177e4SLinus Torvalds #define KEY_BOOKMARKS 156 2701da177e4SLinus Torvalds #define KEY_COMPUTER 157 2711da177e4SLinus Torvalds #define KEY_BACK 158 2721da177e4SLinus Torvalds #define KEY_FORWARD 159 2731da177e4SLinus Torvalds #define KEY_CLOSECD 160 2741da177e4SLinus Torvalds #define KEY_EJECTCD 161 2751da177e4SLinus Torvalds #define KEY_EJECTCLOSECD 162 2761da177e4SLinus Torvalds #define KEY_NEXTSONG 163 2771da177e4SLinus Torvalds #define KEY_PLAYPAUSE 164 2781da177e4SLinus Torvalds #define KEY_PREVIOUSSONG 165 2791da177e4SLinus Torvalds #define KEY_STOPCD 166 2801da177e4SLinus Torvalds #define KEY_RECORD 167 2811da177e4SLinus Torvalds #define KEY_REWIND 168 2821da177e4SLinus Torvalds #define KEY_PHONE 169 2831da177e4SLinus Torvalds #define KEY_ISO 170 2841da177e4SLinus Torvalds #define KEY_CONFIG 171 2851da177e4SLinus Torvalds #define KEY_HOMEPAGE 172 2861da177e4SLinus Torvalds #define KEY_REFRESH 173 2871da177e4SLinus Torvalds #define KEY_EXIT 174 2881da177e4SLinus Torvalds #define KEY_MOVE 175 2891da177e4SLinus Torvalds #define KEY_EDIT 176 2901da177e4SLinus Torvalds #define KEY_SCROLLUP 177 2911da177e4SLinus Torvalds #define KEY_SCROLLDOWN 178 2921da177e4SLinus Torvalds #define KEY_KPLEFTPAREN 179 2931da177e4SLinus Torvalds #define KEY_KPRIGHTPAREN 180 2948a409b01SVojtech Pavlik #define KEY_NEW 181 2958a409b01SVojtech Pavlik #define KEY_REDO 182 2961da177e4SLinus Torvalds 2971da177e4SLinus Torvalds #define KEY_F13 183 2981da177e4SLinus Torvalds #define KEY_F14 184 2991da177e4SLinus Torvalds #define KEY_F15 185 3001da177e4SLinus Torvalds #define KEY_F16 186 3011da177e4SLinus Torvalds #define KEY_F17 187 3021da177e4SLinus Torvalds #define KEY_F18 188 3031da177e4SLinus Torvalds #define KEY_F19 189 3041da177e4SLinus Torvalds #define KEY_F20 190 3051da177e4SLinus Torvalds #define KEY_F21 191 3061da177e4SLinus Torvalds #define KEY_F22 192 3071da177e4SLinus Torvalds #define KEY_F23 193 3081da177e4SLinus Torvalds #define KEY_F24 194 3091da177e4SLinus Torvalds 3101da177e4SLinus Torvalds #define KEY_PLAYCD 200 3111da177e4SLinus Torvalds #define KEY_PAUSECD 201 3121da177e4SLinus Torvalds #define KEY_PROG3 202 3131da177e4SLinus Torvalds #define KEY_PROG4 203 3141da177e4SLinus Torvalds #define KEY_SUSPEND 205 3151da177e4SLinus Torvalds #define KEY_CLOSE 206 3161da177e4SLinus Torvalds #define KEY_PLAY 207 3171da177e4SLinus Torvalds #define KEY_FASTFORWARD 208 3181da177e4SLinus Torvalds #define KEY_BASSBOOST 209 3191da177e4SLinus Torvalds #define KEY_PRINT 210 3201da177e4SLinus Torvalds #define KEY_HP 211 3211da177e4SLinus Torvalds #define KEY_CAMERA 212 3221da177e4SLinus Torvalds #define KEY_SOUND 213 3231da177e4SLinus Torvalds #define KEY_QUESTION 214 3241da177e4SLinus Torvalds #define KEY_EMAIL 215 3251da177e4SLinus Torvalds #define KEY_CHAT 216 3261da177e4SLinus Torvalds #define KEY_SEARCH 217 3271da177e4SLinus Torvalds #define KEY_CONNECT 218 3281da177e4SLinus Torvalds #define KEY_FINANCE 219 3291da177e4SLinus Torvalds #define KEY_SPORT 220 3301da177e4SLinus Torvalds #define KEY_SHOP 221 3311da177e4SLinus Torvalds #define KEY_ALTERASE 222 3321da177e4SLinus Torvalds #define KEY_CANCEL 223 3331da177e4SLinus Torvalds #define KEY_BRIGHTNESSDOWN 224 3341da177e4SLinus Torvalds #define KEY_BRIGHTNESSUP 225 3351da177e4SLinus Torvalds #define KEY_MEDIA 226 3361da177e4SLinus Torvalds 337146a4b3bSAndreas Jaggi #define KEY_SWITCHVIDEOMODE 227 338146a4b3bSAndreas Jaggi #define KEY_KBDILLUMTOGGLE 228 339146a4b3bSAndreas Jaggi #define KEY_KBDILLUMDOWN 229 340146a4b3bSAndreas Jaggi #define KEY_KBDILLUMUP 230 341146a4b3bSAndreas Jaggi 3428a409b01SVojtech Pavlik #define KEY_SEND 231 3438a409b01SVojtech Pavlik #define KEY_REPLY 232 3448a409b01SVojtech Pavlik #define KEY_FORWARDMAIL 233 3458a409b01SVojtech Pavlik #define KEY_SAVE 234 3468a409b01SVojtech Pavlik #define KEY_DOCUMENTS 235 3478a409b01SVojtech Pavlik 3481da177e4SLinus Torvalds #define KEY_UNKNOWN 240 3491da177e4SLinus Torvalds 3501da177e4SLinus Torvalds #define BTN_MISC 0x100 3511da177e4SLinus Torvalds #define BTN_0 0x100 3521da177e4SLinus Torvalds #define BTN_1 0x101 3531da177e4SLinus Torvalds #define BTN_2 0x102 3541da177e4SLinus Torvalds #define BTN_3 0x103 3551da177e4SLinus Torvalds #define BTN_4 0x104 3561da177e4SLinus Torvalds #define BTN_5 0x105 3571da177e4SLinus Torvalds #define BTN_6 0x106 3581da177e4SLinus Torvalds #define BTN_7 0x107 3591da177e4SLinus Torvalds #define BTN_8 0x108 3601da177e4SLinus Torvalds #define BTN_9 0x109 3611da177e4SLinus Torvalds 3621da177e4SLinus Torvalds #define BTN_MOUSE 0x110 3631da177e4SLinus Torvalds #define BTN_LEFT 0x110 3641da177e4SLinus Torvalds #define BTN_RIGHT 0x111 3651da177e4SLinus Torvalds #define BTN_MIDDLE 0x112 3661da177e4SLinus Torvalds #define BTN_SIDE 0x113 3671da177e4SLinus Torvalds #define BTN_EXTRA 0x114 3681da177e4SLinus Torvalds #define BTN_FORWARD 0x115 3691da177e4SLinus Torvalds #define BTN_BACK 0x116 3701da177e4SLinus Torvalds #define BTN_TASK 0x117 3711da177e4SLinus Torvalds 3721da177e4SLinus Torvalds #define BTN_JOYSTICK 0x120 3731da177e4SLinus Torvalds #define BTN_TRIGGER 0x120 3741da177e4SLinus Torvalds #define BTN_THUMB 0x121 3751da177e4SLinus Torvalds #define BTN_THUMB2 0x122 3761da177e4SLinus Torvalds #define BTN_TOP 0x123 3771da177e4SLinus Torvalds #define BTN_TOP2 0x124 3781da177e4SLinus Torvalds #define BTN_PINKIE 0x125 3791da177e4SLinus Torvalds #define BTN_BASE 0x126 3801da177e4SLinus Torvalds #define BTN_BASE2 0x127 3811da177e4SLinus Torvalds #define BTN_BASE3 0x128 3821da177e4SLinus Torvalds #define BTN_BASE4 0x129 3831da177e4SLinus Torvalds #define BTN_BASE5 0x12a 3841da177e4SLinus Torvalds #define BTN_BASE6 0x12b 3851da177e4SLinus Torvalds #define BTN_DEAD 0x12f 3861da177e4SLinus Torvalds 3871da177e4SLinus Torvalds #define BTN_GAMEPAD 0x130 3881da177e4SLinus Torvalds #define BTN_A 0x130 3891da177e4SLinus Torvalds #define BTN_B 0x131 3901da177e4SLinus Torvalds #define BTN_C 0x132 3911da177e4SLinus Torvalds #define BTN_X 0x133 3921da177e4SLinus Torvalds #define BTN_Y 0x134 3931da177e4SLinus Torvalds #define BTN_Z 0x135 3941da177e4SLinus Torvalds #define BTN_TL 0x136 3951da177e4SLinus Torvalds #define BTN_TR 0x137 3961da177e4SLinus Torvalds #define BTN_TL2 0x138 3971da177e4SLinus Torvalds #define BTN_TR2 0x139 3981da177e4SLinus Torvalds #define BTN_SELECT 0x13a 3991da177e4SLinus Torvalds #define BTN_START 0x13b 4001da177e4SLinus Torvalds #define BTN_MODE 0x13c 4011da177e4SLinus Torvalds #define BTN_THUMBL 0x13d 4021da177e4SLinus Torvalds #define BTN_THUMBR 0x13e 4031da177e4SLinus Torvalds 4041da177e4SLinus Torvalds #define BTN_DIGI 0x140 4051da177e4SLinus Torvalds #define BTN_TOOL_PEN 0x140 4061da177e4SLinus Torvalds #define BTN_TOOL_RUBBER 0x141 4071da177e4SLinus Torvalds #define BTN_TOOL_BRUSH 0x142 4081da177e4SLinus Torvalds #define BTN_TOOL_PENCIL 0x143 4091da177e4SLinus Torvalds #define BTN_TOOL_AIRBRUSH 0x144 4101da177e4SLinus Torvalds #define BTN_TOOL_FINGER 0x145 4111da177e4SLinus Torvalds #define BTN_TOOL_MOUSE 0x146 4121da177e4SLinus Torvalds #define BTN_TOOL_LENS 0x147 4131da177e4SLinus Torvalds #define BTN_TOUCH 0x14a 4141da177e4SLinus Torvalds #define BTN_STYLUS 0x14b 4151da177e4SLinus Torvalds #define BTN_STYLUS2 0x14c 4161da177e4SLinus Torvalds #define BTN_TOOL_DOUBLETAP 0x14d 4171da177e4SLinus Torvalds #define BTN_TOOL_TRIPLETAP 0x14e 4181da177e4SLinus Torvalds 4191da177e4SLinus Torvalds #define BTN_WHEEL 0x150 4201da177e4SLinus Torvalds #define BTN_GEAR_DOWN 0x150 4211da177e4SLinus Torvalds #define BTN_GEAR_UP 0x151 4221da177e4SLinus Torvalds 4231da177e4SLinus Torvalds #define KEY_OK 0x160 4241da177e4SLinus Torvalds #define KEY_SELECT 0x161 4251da177e4SLinus Torvalds #define KEY_GOTO 0x162 4261da177e4SLinus Torvalds #define KEY_CLEAR 0x163 4271da177e4SLinus Torvalds #define KEY_POWER2 0x164 4281da177e4SLinus Torvalds #define KEY_OPTION 0x165 4291da177e4SLinus Torvalds #define KEY_INFO 0x166 4301da177e4SLinus Torvalds #define KEY_TIME 0x167 4311da177e4SLinus Torvalds #define KEY_VENDOR 0x168 4321da177e4SLinus Torvalds #define KEY_ARCHIVE 0x169 4331da177e4SLinus Torvalds #define KEY_PROGRAM 0x16a 4341da177e4SLinus Torvalds #define KEY_CHANNEL 0x16b 4351da177e4SLinus Torvalds #define KEY_FAVORITES 0x16c 4361da177e4SLinus Torvalds #define KEY_EPG 0x16d 4371da177e4SLinus Torvalds #define KEY_PVR 0x16e 4381da177e4SLinus Torvalds #define KEY_MHP 0x16f 4391da177e4SLinus Torvalds #define KEY_LANGUAGE 0x170 4401da177e4SLinus Torvalds #define KEY_TITLE 0x171 4411da177e4SLinus Torvalds #define KEY_SUBTITLE 0x172 4421da177e4SLinus Torvalds #define KEY_ANGLE 0x173 4431da177e4SLinus Torvalds #define KEY_ZOOM 0x174 4441da177e4SLinus Torvalds #define KEY_MODE 0x175 4451da177e4SLinus Torvalds #define KEY_KEYBOARD 0x176 4461da177e4SLinus Torvalds #define KEY_SCREEN 0x177 4471da177e4SLinus Torvalds #define KEY_PC 0x178 4481da177e4SLinus Torvalds #define KEY_TV 0x179 4491da177e4SLinus Torvalds #define KEY_TV2 0x17a 4501da177e4SLinus Torvalds #define KEY_VCR 0x17b 4511da177e4SLinus Torvalds #define KEY_VCR2 0x17c 4521da177e4SLinus Torvalds #define KEY_SAT 0x17d 4531da177e4SLinus Torvalds #define KEY_SAT2 0x17e 4541da177e4SLinus Torvalds #define KEY_CD 0x17f 4551da177e4SLinus Torvalds #define KEY_TAPE 0x180 4561da177e4SLinus Torvalds #define KEY_RADIO 0x181 4571da177e4SLinus Torvalds #define KEY_TUNER 0x182 4581da177e4SLinus Torvalds #define KEY_PLAYER 0x183 4591da177e4SLinus Torvalds #define KEY_TEXT 0x184 4601da177e4SLinus Torvalds #define KEY_DVD 0x185 4611da177e4SLinus Torvalds #define KEY_AUX 0x186 4621da177e4SLinus Torvalds #define KEY_MP3 0x187 4631da177e4SLinus Torvalds #define KEY_AUDIO 0x188 4641da177e4SLinus Torvalds #define KEY_VIDEO 0x189 4651da177e4SLinus Torvalds #define KEY_DIRECTORY 0x18a 4661da177e4SLinus Torvalds #define KEY_LIST 0x18b 4671da177e4SLinus Torvalds #define KEY_MEMO 0x18c 4681da177e4SLinus Torvalds #define KEY_CALENDAR 0x18d 4691da177e4SLinus Torvalds #define KEY_RED 0x18e 4701da177e4SLinus Torvalds #define KEY_GREEN 0x18f 4711da177e4SLinus Torvalds #define KEY_YELLOW 0x190 4721da177e4SLinus Torvalds #define KEY_BLUE 0x191 4731da177e4SLinus Torvalds #define KEY_CHANNELUP 0x192 4741da177e4SLinus Torvalds #define KEY_CHANNELDOWN 0x193 4751da177e4SLinus Torvalds #define KEY_FIRST 0x194 4761da177e4SLinus Torvalds #define KEY_LAST 0x195 4771da177e4SLinus Torvalds #define KEY_AB 0x196 4781da177e4SLinus Torvalds #define KEY_NEXT 0x197 4791da177e4SLinus Torvalds #define KEY_RESTART 0x198 4801da177e4SLinus Torvalds #define KEY_SLOW 0x199 4811da177e4SLinus Torvalds #define KEY_SHUFFLE 0x19a 4821da177e4SLinus Torvalds #define KEY_BREAK 0x19b 4831da177e4SLinus Torvalds #define KEY_PREVIOUS 0x19c 4841da177e4SLinus Torvalds #define KEY_DIGITS 0x19d 4851da177e4SLinus Torvalds #define KEY_TEEN 0x19e 4861da177e4SLinus Torvalds #define KEY_TWEN 0x19f 4871da177e4SLinus Torvalds 4881da177e4SLinus Torvalds #define KEY_DEL_EOL 0x1c0 4891da177e4SLinus Torvalds #define KEY_DEL_EOS 0x1c1 4901da177e4SLinus Torvalds #define KEY_INS_LINE 0x1c2 4911da177e4SLinus Torvalds #define KEY_DEL_LINE 0x1c3 4921da177e4SLinus Torvalds 4931da177e4SLinus Torvalds #define KEY_FN 0x1d0 4941da177e4SLinus Torvalds #define KEY_FN_ESC 0x1d1 4951da177e4SLinus Torvalds #define KEY_FN_F1 0x1d2 4961da177e4SLinus Torvalds #define KEY_FN_F2 0x1d3 4971da177e4SLinus Torvalds #define KEY_FN_F3 0x1d4 4981da177e4SLinus Torvalds #define KEY_FN_F4 0x1d5 4991da177e4SLinus Torvalds #define KEY_FN_F5 0x1d6 5001da177e4SLinus Torvalds #define KEY_FN_F6 0x1d7 5011da177e4SLinus Torvalds #define KEY_FN_F7 0x1d8 5021da177e4SLinus Torvalds #define KEY_FN_F8 0x1d9 5031da177e4SLinus Torvalds #define KEY_FN_F9 0x1da 5041da177e4SLinus Torvalds #define KEY_FN_F10 0x1db 5051da177e4SLinus Torvalds #define KEY_FN_F11 0x1dc 5061da177e4SLinus Torvalds #define KEY_FN_F12 0x1dd 5071da177e4SLinus Torvalds #define KEY_FN_1 0x1de 5081da177e4SLinus Torvalds #define KEY_FN_2 0x1df 5091da177e4SLinus Torvalds #define KEY_FN_D 0x1e0 5101da177e4SLinus Torvalds #define KEY_FN_E 0x1e1 5111da177e4SLinus Torvalds #define KEY_FN_F 0x1e2 5121da177e4SLinus Torvalds #define KEY_FN_S 0x1e3 5131da177e4SLinus Torvalds #define KEY_FN_B 0x1e4 5141da177e4SLinus Torvalds 5151d8f430cSRusty Russell /* We avoid low common keys in module aliases so they don't get huge. */ 5161d8f430cSRusty Russell #define KEY_MIN_INTERESTING KEY_MUTE 5171da177e4SLinus Torvalds #define KEY_MAX 0x1ff 5181da177e4SLinus Torvalds 5191da177e4SLinus Torvalds /* 5201da177e4SLinus Torvalds * Relative axes 5211da177e4SLinus Torvalds */ 5221da177e4SLinus Torvalds 5231da177e4SLinus Torvalds #define REL_X 0x00 5241da177e4SLinus Torvalds #define REL_Y 0x01 5251da177e4SLinus Torvalds #define REL_Z 0x02 5261da177e4SLinus Torvalds #define REL_RX 0x03 5271da177e4SLinus Torvalds #define REL_RY 0x04 5281da177e4SLinus Torvalds #define REL_RZ 0x05 5291da177e4SLinus Torvalds #define REL_HWHEEL 0x06 5301da177e4SLinus Torvalds #define REL_DIAL 0x07 5311da177e4SLinus Torvalds #define REL_WHEEL 0x08 5321da177e4SLinus Torvalds #define REL_MISC 0x09 5331da177e4SLinus Torvalds #define REL_MAX 0x0f 5341da177e4SLinus Torvalds 5351da177e4SLinus Torvalds /* 5361da177e4SLinus Torvalds * Absolute axes 5371da177e4SLinus Torvalds */ 5381da177e4SLinus Torvalds 5391da177e4SLinus Torvalds #define ABS_X 0x00 5401da177e4SLinus Torvalds #define ABS_Y 0x01 5411da177e4SLinus Torvalds #define ABS_Z 0x02 5421da177e4SLinus Torvalds #define ABS_RX 0x03 5431da177e4SLinus Torvalds #define ABS_RY 0x04 5441da177e4SLinus Torvalds #define ABS_RZ 0x05 5451da177e4SLinus Torvalds #define ABS_THROTTLE 0x06 5461da177e4SLinus Torvalds #define ABS_RUDDER 0x07 5471da177e4SLinus Torvalds #define ABS_WHEEL 0x08 5481da177e4SLinus Torvalds #define ABS_GAS 0x09 5491da177e4SLinus Torvalds #define ABS_BRAKE 0x0a 5501da177e4SLinus Torvalds #define ABS_HAT0X 0x10 5511da177e4SLinus Torvalds #define ABS_HAT0Y 0x11 5521da177e4SLinus Torvalds #define ABS_HAT1X 0x12 5531da177e4SLinus Torvalds #define ABS_HAT1Y 0x13 5541da177e4SLinus Torvalds #define ABS_HAT2X 0x14 5551da177e4SLinus Torvalds #define ABS_HAT2Y 0x15 5561da177e4SLinus Torvalds #define ABS_HAT3X 0x16 5571da177e4SLinus Torvalds #define ABS_HAT3Y 0x17 5581da177e4SLinus Torvalds #define ABS_PRESSURE 0x18 5591da177e4SLinus Torvalds #define ABS_DISTANCE 0x19 5601da177e4SLinus Torvalds #define ABS_TILT_X 0x1a 5611da177e4SLinus Torvalds #define ABS_TILT_Y 0x1b 5621da177e4SLinus Torvalds #define ABS_TOOL_WIDTH 0x1c 5631da177e4SLinus Torvalds #define ABS_VOLUME 0x20 5641da177e4SLinus Torvalds #define ABS_MISC 0x28 5651da177e4SLinus Torvalds #define ABS_MAX 0x3f 5661da177e4SLinus Torvalds 5671da177e4SLinus Torvalds /* 56831581066SRichard Purdie * Switch events 56931581066SRichard Purdie */ 57031581066SRichard Purdie 57131581066SRichard Purdie #define SW_0 0x00 57231581066SRichard Purdie #define SW_1 0x01 57331581066SRichard Purdie #define SW_2 0x02 57431581066SRichard Purdie #define SW_3 0x03 57531581066SRichard Purdie #define SW_4 0x04 57631581066SRichard Purdie #define SW_5 0x05 57731581066SRichard Purdie #define SW_6 0x06 57831581066SRichard Purdie #define SW_7 0x07 57931581066SRichard Purdie #define SW_MAX 0x0f 58031581066SRichard Purdie 58131581066SRichard Purdie /* 5821da177e4SLinus Torvalds * Misc events 5831da177e4SLinus Torvalds */ 5841da177e4SLinus Torvalds 5851da177e4SLinus Torvalds #define MSC_SERIAL 0x00 5861da177e4SLinus Torvalds #define MSC_PULSELED 0x01 5871da177e4SLinus Torvalds #define MSC_GESTURE 0x02 5881da177e4SLinus Torvalds #define MSC_RAW 0x03 5891da177e4SLinus Torvalds #define MSC_SCAN 0x04 5901da177e4SLinus Torvalds #define MSC_MAX 0x07 5911da177e4SLinus Torvalds 5921da177e4SLinus Torvalds /* 5931da177e4SLinus Torvalds * LEDs 5941da177e4SLinus Torvalds */ 5951da177e4SLinus Torvalds 5961da177e4SLinus Torvalds #define LED_NUML 0x00 5971da177e4SLinus Torvalds #define LED_CAPSL 0x01 5981da177e4SLinus Torvalds #define LED_SCROLLL 0x02 5991da177e4SLinus Torvalds #define LED_COMPOSE 0x03 6001da177e4SLinus Torvalds #define LED_KANA 0x04 6011da177e4SLinus Torvalds #define LED_SLEEP 0x05 6021da177e4SLinus Torvalds #define LED_SUSPEND 0x06 6031da177e4SLinus Torvalds #define LED_MUTE 0x07 6041da177e4SLinus Torvalds #define LED_MISC 0x08 6051da177e4SLinus Torvalds #define LED_MAIL 0x09 6061da177e4SLinus Torvalds #define LED_CHARGING 0x0a 6071da177e4SLinus Torvalds #define LED_MAX 0x0f 6081da177e4SLinus Torvalds 6091da177e4SLinus Torvalds /* 6101da177e4SLinus Torvalds * Autorepeat values 6111da177e4SLinus Torvalds */ 6121da177e4SLinus Torvalds 6131da177e4SLinus Torvalds #define REP_DELAY 0x00 6141da177e4SLinus Torvalds #define REP_PERIOD 0x01 6151da177e4SLinus Torvalds #define REP_MAX 0x01 6161da177e4SLinus Torvalds 6171da177e4SLinus Torvalds /* 6181da177e4SLinus Torvalds * Sounds 6191da177e4SLinus Torvalds */ 6201da177e4SLinus Torvalds 6211da177e4SLinus Torvalds #define SND_CLICK 0x00 6221da177e4SLinus Torvalds #define SND_BELL 0x01 6231da177e4SLinus Torvalds #define SND_TONE 0x02 6241da177e4SLinus Torvalds #define SND_MAX 0x07 6251da177e4SLinus Torvalds 6261da177e4SLinus Torvalds /* 6271da177e4SLinus Torvalds * IDs. 6281da177e4SLinus Torvalds */ 6291da177e4SLinus Torvalds 6301da177e4SLinus Torvalds #define ID_BUS 0 6311da177e4SLinus Torvalds #define ID_VENDOR 1 6321da177e4SLinus Torvalds #define ID_PRODUCT 2 6331da177e4SLinus Torvalds #define ID_VERSION 3 6341da177e4SLinus Torvalds 6351da177e4SLinus Torvalds #define BUS_PCI 0x01 6361da177e4SLinus Torvalds #define BUS_ISAPNP 0x02 6371da177e4SLinus Torvalds #define BUS_USB 0x03 6381da177e4SLinus Torvalds #define BUS_HIL 0x04 6391da177e4SLinus Torvalds #define BUS_BLUETOOTH 0x05 6401da177e4SLinus Torvalds 6411da177e4SLinus Torvalds #define BUS_ISA 0x10 6421da177e4SLinus Torvalds #define BUS_I8042 0x11 6431da177e4SLinus Torvalds #define BUS_XTKBD 0x12 6441da177e4SLinus Torvalds #define BUS_RS232 0x13 6451da177e4SLinus Torvalds #define BUS_GAMEPORT 0x14 6461da177e4SLinus Torvalds #define BUS_PARPORT 0x15 6471da177e4SLinus Torvalds #define BUS_AMIGA 0x16 6481da177e4SLinus Torvalds #define BUS_ADB 0x17 6491da177e4SLinus Torvalds #define BUS_I2C 0x18 6501da177e4SLinus Torvalds #define BUS_HOST 0x19 6516ab0f5cdSMatthew Wilcox #define BUS_GSC 0x1A 6521da177e4SLinus Torvalds 6531da177e4SLinus Torvalds /* 6541da177e4SLinus Torvalds * Values describing the status of an effect 6551da177e4SLinus Torvalds */ 6561da177e4SLinus Torvalds #define FF_STATUS_STOPPED 0x00 6571da177e4SLinus Torvalds #define FF_STATUS_PLAYING 0x01 6581da177e4SLinus Torvalds #define FF_STATUS_MAX 0x01 6591da177e4SLinus Torvalds 6601da177e4SLinus Torvalds /* 6611da177e4SLinus Torvalds * Structures used in ioctls to upload effects to a device 6621da177e4SLinus Torvalds * The first structures are not passed directly by using ioctls. 6631da177e4SLinus Torvalds * They are sub-structures of the actually sent structure (called ff_effect) 6641da177e4SLinus Torvalds */ 6651da177e4SLinus Torvalds 6661da177e4SLinus Torvalds struct ff_replay { 6671da177e4SLinus Torvalds __u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */ 6681da177e4SLinus Torvalds __u16 delay; /* Time to wait before to start playing an effect */ 6691da177e4SLinus Torvalds }; 6701da177e4SLinus Torvalds 6711da177e4SLinus Torvalds struct ff_trigger { 6721da177e4SLinus Torvalds __u16 button; /* Number of button triggering an effect */ 6731da177e4SLinus Torvalds __u16 interval; /* Time to wait before an effect can be re-triggered (ms) */ 6741da177e4SLinus Torvalds }; 6751da177e4SLinus Torvalds 6761da177e4SLinus Torvalds struct ff_envelope { 6771da177e4SLinus Torvalds __u16 attack_length; /* Duration of attack (ms) */ 6781da177e4SLinus Torvalds __u16 attack_level; /* Level at beginning of attack */ 6791da177e4SLinus Torvalds __u16 fade_length; /* Duration of fade (ms) */ 6801da177e4SLinus Torvalds __u16 fade_level; /* Level at end of fade */ 6811da177e4SLinus Torvalds }; 6821da177e4SLinus Torvalds 6831da177e4SLinus Torvalds /* FF_CONSTANT */ 6841da177e4SLinus Torvalds struct ff_constant_effect { 6851da177e4SLinus Torvalds __s16 level; /* Strength of effect. Negative values are OK */ 6861da177e4SLinus Torvalds struct ff_envelope envelope; 6871da177e4SLinus Torvalds }; 6881da177e4SLinus Torvalds 6891da177e4SLinus Torvalds /* FF_RAMP */ 6901da177e4SLinus Torvalds struct ff_ramp_effect { 6911da177e4SLinus Torvalds __s16 start_level; 6921da177e4SLinus Torvalds __s16 end_level; 6931da177e4SLinus Torvalds struct ff_envelope envelope; 6941da177e4SLinus Torvalds }; 6951da177e4SLinus Torvalds 6961da177e4SLinus Torvalds /* FF_SPRING of FF_FRICTION */ 6971da177e4SLinus Torvalds struct ff_condition_effect { 6981da177e4SLinus Torvalds __u16 right_saturation; /* Max level when joystick is on the right */ 6991da177e4SLinus Torvalds __u16 left_saturation; /* Max level when joystick in on the left */ 7001da177e4SLinus Torvalds 7011da177e4SLinus Torvalds __s16 right_coeff; /* Indicates how fast the force grows when the 7021da177e4SLinus Torvalds joystick moves to the right */ 7031da177e4SLinus Torvalds __s16 left_coeff; /* Same for left side */ 7041da177e4SLinus Torvalds 7051da177e4SLinus Torvalds __u16 deadband; /* Size of area where no force is produced */ 7061da177e4SLinus Torvalds __s16 center; /* Position of dead zone */ 7071da177e4SLinus Torvalds 7081da177e4SLinus Torvalds }; 7091da177e4SLinus Torvalds 7101da177e4SLinus Torvalds /* FF_PERIODIC */ 7111da177e4SLinus Torvalds struct ff_periodic_effect { 7121da177e4SLinus Torvalds __u16 waveform; /* Kind of wave (sine, square...) */ 7131da177e4SLinus Torvalds __u16 period; /* in ms */ 7141da177e4SLinus Torvalds __s16 magnitude; /* Peak value */ 7151da177e4SLinus Torvalds __s16 offset; /* Mean value of wave (roughly) */ 7161da177e4SLinus Torvalds __u16 phase; /* 'Horizontal' shift */ 7171da177e4SLinus Torvalds 7181da177e4SLinus Torvalds struct ff_envelope envelope; 7191da177e4SLinus Torvalds 7201da177e4SLinus Torvalds /* Only used if waveform == FF_CUSTOM */ 7211da177e4SLinus Torvalds __u32 custom_len; /* Number of samples */ 7221da177e4SLinus Torvalds __s16 *custom_data; /* Buffer of samples */ 7231da177e4SLinus Torvalds /* Note: the data pointed by custom_data is copied by the driver. You can 7241da177e4SLinus Torvalds * therefore dispose of the memory after the upload/update */ 7251da177e4SLinus Torvalds }; 7261da177e4SLinus Torvalds 7271da177e4SLinus Torvalds /* FF_RUMBLE */ 7281da177e4SLinus Torvalds /* Some rumble pads have two motors of different weight. 7291da177e4SLinus Torvalds strong_magnitude represents the magnitude of the vibration generated 7301da177e4SLinus Torvalds by the heavy motor. 7311da177e4SLinus Torvalds */ 7321da177e4SLinus Torvalds struct ff_rumble_effect { 7331da177e4SLinus Torvalds __u16 strong_magnitude; /* Magnitude of the heavy motor */ 7341da177e4SLinus Torvalds __u16 weak_magnitude; /* Magnitude of the light one */ 7351da177e4SLinus Torvalds }; 7361da177e4SLinus Torvalds 7371da177e4SLinus Torvalds /* 7381da177e4SLinus Torvalds * Structure sent through ioctl from the application to the driver 7391da177e4SLinus Torvalds */ 7401da177e4SLinus Torvalds struct ff_effect { 7411da177e4SLinus Torvalds __u16 type; 7421da177e4SLinus Torvalds /* Following field denotes the unique id assigned to an effect. 7431da177e4SLinus Torvalds * If user sets if to -1, a new effect is created, and its id is returned in the same field 7441da177e4SLinus Torvalds * Else, the user sets it to the effect id it wants to update. 7451da177e4SLinus Torvalds */ 7461da177e4SLinus Torvalds __s16 id; 7471da177e4SLinus Torvalds 7481da177e4SLinus Torvalds __u16 direction; /* Direction. 0 deg -> 0x0000 (down) 7491da177e4SLinus Torvalds 90 deg -> 0x4000 (left) 7501da177e4SLinus Torvalds 180 deg -> 0x8000 (up) 7511da177e4SLinus Torvalds 270 deg -> 0xC000 (right) 7521da177e4SLinus Torvalds */ 7531da177e4SLinus Torvalds 7541da177e4SLinus Torvalds struct ff_trigger trigger; 7551da177e4SLinus Torvalds struct ff_replay replay; 7561da177e4SLinus Torvalds 7571da177e4SLinus Torvalds union { 7581da177e4SLinus Torvalds struct ff_constant_effect constant; 7591da177e4SLinus Torvalds struct ff_ramp_effect ramp; 7601da177e4SLinus Torvalds struct ff_periodic_effect periodic; 7611da177e4SLinus Torvalds struct ff_condition_effect condition[2]; /* One for each axis */ 7621da177e4SLinus Torvalds struct ff_rumble_effect rumble; 7631da177e4SLinus Torvalds } u; 7641da177e4SLinus Torvalds }; 7651da177e4SLinus Torvalds 7661da177e4SLinus Torvalds /* 7671da177e4SLinus Torvalds * Force feedback effect types 7681da177e4SLinus Torvalds */ 7691da177e4SLinus Torvalds 7701da177e4SLinus Torvalds #define FF_RUMBLE 0x50 7711da177e4SLinus Torvalds #define FF_PERIODIC 0x51 7721da177e4SLinus Torvalds #define FF_CONSTANT 0x52 7731da177e4SLinus Torvalds #define FF_SPRING 0x53 7741da177e4SLinus Torvalds #define FF_FRICTION 0x54 7751da177e4SLinus Torvalds #define FF_DAMPER 0x55 7761da177e4SLinus Torvalds #define FF_INERTIA 0x56 7771da177e4SLinus Torvalds #define FF_RAMP 0x57 7781da177e4SLinus Torvalds 7791da177e4SLinus Torvalds /* 7801da177e4SLinus Torvalds * Force feedback periodic effect types 7811da177e4SLinus Torvalds */ 7821da177e4SLinus Torvalds 7831da177e4SLinus Torvalds #define FF_SQUARE 0x58 7841da177e4SLinus Torvalds #define FF_TRIANGLE 0x59 7851da177e4SLinus Torvalds #define FF_SINE 0x5a 7861da177e4SLinus Torvalds #define FF_SAW_UP 0x5b 7871da177e4SLinus Torvalds #define FF_SAW_DOWN 0x5c 7881da177e4SLinus Torvalds #define FF_CUSTOM 0x5d 7891da177e4SLinus Torvalds 7901da177e4SLinus Torvalds /* 7911da177e4SLinus Torvalds * Set ff device properties 7921da177e4SLinus Torvalds */ 7931da177e4SLinus Torvalds 7941da177e4SLinus Torvalds #define FF_GAIN 0x60 7951da177e4SLinus Torvalds #define FF_AUTOCENTER 0x61 7961da177e4SLinus Torvalds 7971da177e4SLinus Torvalds #define FF_MAX 0x7f 7981da177e4SLinus Torvalds 7991d8f430cSRusty Russell struct input_device_id { 8001d8f430cSRusty Russell 8011d8f430cSRusty Russell kernel_ulong_t flags; 8021d8f430cSRusty Russell 8031d8f430cSRusty Russell struct input_id id; 8041d8f430cSRusty Russell 8051d8f430cSRusty Russell kernel_ulong_t evbit[EV_MAX/BITS_PER_LONG+1]; 8061d8f430cSRusty Russell kernel_ulong_t keybit[KEY_MAX/BITS_PER_LONG+1]; 8071d8f430cSRusty Russell kernel_ulong_t relbit[REL_MAX/BITS_PER_LONG+1]; 8081d8f430cSRusty Russell kernel_ulong_t absbit[ABS_MAX/BITS_PER_LONG+1]; 8091d8f430cSRusty Russell kernel_ulong_t mscbit[MSC_MAX/BITS_PER_LONG+1]; 8101d8f430cSRusty Russell kernel_ulong_t ledbit[LED_MAX/BITS_PER_LONG+1]; 8111d8f430cSRusty Russell kernel_ulong_t sndbit[SND_MAX/BITS_PER_LONG+1]; 8121d8f430cSRusty Russell kernel_ulong_t ffbit[FF_MAX/BITS_PER_LONG+1]; 8131d8f430cSRusty Russell kernel_ulong_t swbit[SW_MAX/BITS_PER_LONG+1]; 8141d8f430cSRusty Russell 8151d8f430cSRusty Russell kernel_ulong_t driver_info; 8161d8f430cSRusty Russell }; 8171d8f430cSRusty Russell 8181d8f430cSRusty Russell /* 8191d8f430cSRusty Russell * Structure for hotplug & device<->driver matching. 8201d8f430cSRusty Russell */ 8211d8f430cSRusty Russell 8221d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_BUS 1 8231d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_VENDOR 2 8241d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_PRODUCT 4 8251d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_VERSION 8 8261d8f430cSRusty Russell 8271d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_EVBIT 0x010 8281d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020 8291d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_RELBIT 0x040 8301d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080 8311d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_MSCIT 0x100 8321d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200 8331d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400 8341d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_FFBIT 0x800 8351d8f430cSRusty Russell #define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000 8361d8f430cSRusty Russell 8371da177e4SLinus Torvalds #ifdef __KERNEL__ 8381da177e4SLinus Torvalds 8391da177e4SLinus Torvalds /* 8401da177e4SLinus Torvalds * In-kernel definitions. 8411da177e4SLinus Torvalds */ 8421da177e4SLinus Torvalds 8431da177e4SLinus Torvalds #include <linux/fs.h> 8441da177e4SLinus Torvalds #include <linux/timer.h> 8451da177e4SLinus Torvalds 8461da177e4SLinus Torvalds #define NBITS(x) (((x)/BITS_PER_LONG)+1) 8471da177e4SLinus Torvalds #define BIT(x) (1UL<<((x)%BITS_PER_LONG)) 8481da177e4SLinus Torvalds #define LONG(x) ((x)/BITS_PER_LONG) 8491da177e4SLinus Torvalds 8501da177e4SLinus Torvalds #define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ 8511da177e4SLinus Torvalds ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) 8521da177e4SLinus Torvalds 8531da177e4SLinus Torvalds #define SET_INPUT_KEYCODE(dev, scancode, val) \ 8541da177e4SLinus Torvalds ({ unsigned __old; \ 8551da177e4SLinus Torvalds switch (dev->keycodesize) { \ 8561da177e4SLinus Torvalds case 1: { \ 8571da177e4SLinus Torvalds u8 *k = (u8 *)dev->keycode; \ 8581da177e4SLinus Torvalds __old = k[scancode]; \ 8591da177e4SLinus Torvalds k[scancode] = val; \ 8601da177e4SLinus Torvalds break; \ 8611da177e4SLinus Torvalds } \ 8621da177e4SLinus Torvalds case 2: { \ 8631da177e4SLinus Torvalds u16 *k = (u16 *)dev->keycode; \ 8641da177e4SLinus Torvalds __old = k[scancode]; \ 8651da177e4SLinus Torvalds k[scancode] = val; \ 8661da177e4SLinus Torvalds break; \ 8671da177e4SLinus Torvalds } \ 8681da177e4SLinus Torvalds default: { \ 8691da177e4SLinus Torvalds u32 *k = (u32 *)dev->keycode; \ 8701da177e4SLinus Torvalds __old = k[scancode]; \ 8711da177e4SLinus Torvalds k[scancode] = val; \ 8721da177e4SLinus Torvalds break; \ 8731da177e4SLinus Torvalds } \ 8741da177e4SLinus Torvalds } \ 8751da177e4SLinus Torvalds __old; }) 8761da177e4SLinus Torvalds 8771da177e4SLinus Torvalds struct input_dev { 8781da177e4SLinus Torvalds 8791da177e4SLinus Torvalds void *private; 8801da177e4SLinus Torvalds 8815b6271bdSDmitry Torokhov const char *name; 8825b6271bdSDmitry Torokhov const char *phys; 8835b6271bdSDmitry Torokhov const char *uniq; 8841da177e4SLinus Torvalds struct input_id id; 8851da177e4SLinus Torvalds 8861da177e4SLinus Torvalds unsigned long evbit[NBITS(EV_MAX)]; 8871da177e4SLinus Torvalds unsigned long keybit[NBITS(KEY_MAX)]; 8881da177e4SLinus Torvalds unsigned long relbit[NBITS(REL_MAX)]; 8891da177e4SLinus Torvalds unsigned long absbit[NBITS(ABS_MAX)]; 8901da177e4SLinus Torvalds unsigned long mscbit[NBITS(MSC_MAX)]; 8911da177e4SLinus Torvalds unsigned long ledbit[NBITS(LED_MAX)]; 8921da177e4SLinus Torvalds unsigned long sndbit[NBITS(SND_MAX)]; 8931da177e4SLinus Torvalds unsigned long ffbit[NBITS(FF_MAX)]; 89431581066SRichard Purdie unsigned long swbit[NBITS(SW_MAX)]; 8951da177e4SLinus Torvalds int ff_effects_max; 8961da177e4SLinus Torvalds 8971da177e4SLinus Torvalds unsigned int keycodemax; 8981da177e4SLinus Torvalds unsigned int keycodesize; 8991da177e4SLinus Torvalds void *keycode; 9001da177e4SLinus Torvalds 9011da177e4SLinus Torvalds unsigned int repeat_key; 9021da177e4SLinus Torvalds struct timer_list timer; 9031da177e4SLinus Torvalds 9041da177e4SLinus Torvalds struct pt_regs *regs; 9051da177e4SLinus Torvalds int state; 9061da177e4SLinus Torvalds 9071da177e4SLinus Torvalds int sync; 9081da177e4SLinus Torvalds 9091da177e4SLinus Torvalds int abs[ABS_MAX + 1]; 9101da177e4SLinus Torvalds int rep[REP_MAX + 1]; 9111da177e4SLinus Torvalds 9121da177e4SLinus Torvalds unsigned long key[NBITS(KEY_MAX)]; 9131da177e4SLinus Torvalds unsigned long led[NBITS(LED_MAX)]; 9141da177e4SLinus Torvalds unsigned long snd[NBITS(SND_MAX)]; 91531581066SRichard Purdie unsigned long sw[NBITS(SW_MAX)]; 9161da177e4SLinus Torvalds 9171da177e4SLinus Torvalds int absmax[ABS_MAX + 1]; 9181da177e4SLinus Torvalds int absmin[ABS_MAX + 1]; 9191da177e4SLinus Torvalds int absfuzz[ABS_MAX + 1]; 9201da177e4SLinus Torvalds int absflat[ABS_MAX + 1]; 9211da177e4SLinus Torvalds 9221da177e4SLinus Torvalds int (*open)(struct input_dev *dev); 9231da177e4SLinus Torvalds void (*close)(struct input_dev *dev); 9241da177e4SLinus Torvalds int (*accept)(struct input_dev *dev, struct file *file); 9251da177e4SLinus Torvalds int (*flush)(struct input_dev *dev, struct file *file); 9261da177e4SLinus Torvalds int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); 9271da177e4SLinus Torvalds int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect); 9281da177e4SLinus Torvalds int (*erase_effect)(struct input_dev *dev, int effect_id); 9291da177e4SLinus Torvalds 9301da177e4SLinus Torvalds struct input_handle *grab; 9310fbf87caSDmitry Torokhov 9320fbf87caSDmitry Torokhov struct semaphore sem; /* serializes open and close operations */ 9330fbf87caSDmitry Torokhov unsigned int users; 9340fbf87caSDmitry Torokhov 935d19fbe8aSDmitry Torokhov struct class_device cdev; 936d19fbe8aSDmitry Torokhov struct device *dev; /* will be removed soon */ 937d19fbe8aSDmitry Torokhov 938d19fbe8aSDmitry Torokhov int dynalloc; /* temporarily */ 9391da177e4SLinus Torvalds 9401da177e4SLinus Torvalds struct list_head h_list; 9411da177e4SLinus Torvalds struct list_head node; 9421da177e4SLinus Torvalds }; 943d19fbe8aSDmitry Torokhov #define to_input_dev(d) container_of(d, struct input_dev, cdev) 9441da177e4SLinus Torvalds 9451da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_DEVICE\ 9461da177e4SLinus Torvalds (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT) 9471da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\ 9481da177e4SLinus Torvalds (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION) 9491da177e4SLinus Torvalds 9501da177e4SLinus Torvalds struct input_handle; 9511da177e4SLinus Torvalds 9521da177e4SLinus Torvalds struct input_handler { 9531da177e4SLinus Torvalds 9541da177e4SLinus Torvalds void *private; 9551da177e4SLinus Torvalds 9561da177e4SLinus Torvalds void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); 9571da177e4SLinus Torvalds struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id); 9581da177e4SLinus Torvalds void (*disconnect)(struct input_handle *handle); 9591da177e4SLinus Torvalds 9601da177e4SLinus Torvalds struct file_operations *fops; 9611da177e4SLinus Torvalds int minor; 9621da177e4SLinus Torvalds char *name; 9631da177e4SLinus Torvalds 9641da177e4SLinus Torvalds struct input_device_id *id_table; 9651da177e4SLinus Torvalds struct input_device_id *blacklist; 9661da177e4SLinus Torvalds 9671da177e4SLinus Torvalds struct list_head h_list; 9681da177e4SLinus Torvalds struct list_head node; 9691da177e4SLinus Torvalds }; 9701da177e4SLinus Torvalds 9711da177e4SLinus Torvalds struct input_handle { 9721da177e4SLinus Torvalds 9731da177e4SLinus Torvalds void *private; 9741da177e4SLinus Torvalds 9751da177e4SLinus Torvalds int open; 9761da177e4SLinus Torvalds char *name; 9771da177e4SLinus Torvalds 9781da177e4SLinus Torvalds struct input_dev *dev; 9791da177e4SLinus Torvalds struct input_handler *handler; 9801da177e4SLinus Torvalds 9811da177e4SLinus Torvalds struct list_head d_node; 9821da177e4SLinus Torvalds struct list_head h_node; 9831da177e4SLinus Torvalds }; 9841da177e4SLinus Torvalds 9851da177e4SLinus Torvalds #define to_dev(n) container_of(n,struct input_dev,node) 9861da177e4SLinus Torvalds #define to_handler(n) container_of(n,struct input_handler,node); 9871da177e4SLinus Torvalds #define to_handle(n) container_of(n,struct input_handle,d_node) 9881da177e4SLinus Torvalds #define to_handle_h(n) container_of(n,struct input_handle,h_node) 9891da177e4SLinus Torvalds 9901da177e4SLinus Torvalds static inline void init_input_dev(struct input_dev *dev) 9911da177e4SLinus Torvalds { 9921da177e4SLinus Torvalds INIT_LIST_HEAD(&dev->h_list); 9931da177e4SLinus Torvalds INIT_LIST_HEAD(&dev->node); 9941da177e4SLinus Torvalds } 9951da177e4SLinus Torvalds 996d19fbe8aSDmitry Torokhov struct input_dev *input_allocate_device(void); 997d19fbe8aSDmitry Torokhov 998d19fbe8aSDmitry Torokhov static inline void input_free_device(struct input_dev *dev) 999d19fbe8aSDmitry Torokhov { 1000d19fbe8aSDmitry Torokhov kfree(dev); 1001d19fbe8aSDmitry Torokhov } 1002d19fbe8aSDmitry Torokhov 1003d19fbe8aSDmitry Torokhov static inline struct input_dev *input_get_device(struct input_dev *dev) 1004d19fbe8aSDmitry Torokhov { 1005d19fbe8aSDmitry Torokhov return to_input_dev(class_device_get(&dev->cdev)); 1006d19fbe8aSDmitry Torokhov } 1007d19fbe8aSDmitry Torokhov 1008d19fbe8aSDmitry Torokhov static inline void input_put_device(struct input_dev *dev) 1009d19fbe8aSDmitry Torokhov { 1010d19fbe8aSDmitry Torokhov class_device_put(&dev->cdev); 1011d19fbe8aSDmitry Torokhov } 1012d19fbe8aSDmitry Torokhov 10135f945489SDmitry Torokhov int input_register_device(struct input_dev *); 10141da177e4SLinus Torvalds void input_unregister_device(struct input_dev *); 10151da177e4SLinus Torvalds 10161da177e4SLinus Torvalds void input_register_handler(struct input_handler *); 10171da177e4SLinus Torvalds void input_unregister_handler(struct input_handler *); 10181da177e4SLinus Torvalds 10191da177e4SLinus Torvalds int input_grab_device(struct input_handle *); 10201da177e4SLinus Torvalds void input_release_device(struct input_handle *); 10211da177e4SLinus Torvalds 10221da177e4SLinus Torvalds int input_open_device(struct input_handle *); 10231da177e4SLinus Torvalds void input_close_device(struct input_handle *); 10241da177e4SLinus Torvalds 10251da177e4SLinus Torvalds int input_accept_process(struct input_handle *handle, struct file *file); 10261da177e4SLinus Torvalds int input_flush_device(struct input_handle* handle, struct file* file); 10271da177e4SLinus Torvalds 10281da177e4SLinus Torvalds void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value); 10291da177e4SLinus Torvalds 10301da177e4SLinus Torvalds static inline void input_report_key(struct input_dev *dev, unsigned int code, int value) 10311da177e4SLinus Torvalds { 10321da177e4SLinus Torvalds input_event(dev, EV_KEY, code, !!value); 10331da177e4SLinus Torvalds } 10341da177e4SLinus Torvalds 10351da177e4SLinus Torvalds static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value) 10361da177e4SLinus Torvalds { 10371da177e4SLinus Torvalds input_event(dev, EV_REL, code, value); 10381da177e4SLinus Torvalds } 10391da177e4SLinus Torvalds 10401da177e4SLinus Torvalds static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value) 10411da177e4SLinus Torvalds { 10421da177e4SLinus Torvalds input_event(dev, EV_ABS, code, value); 10431da177e4SLinus Torvalds } 10441da177e4SLinus Torvalds 10451da177e4SLinus Torvalds static inline void input_report_ff(struct input_dev *dev, unsigned int code, int value) 10461da177e4SLinus Torvalds { 10471da177e4SLinus Torvalds input_event(dev, EV_FF, code, value); 10481da177e4SLinus Torvalds } 10491da177e4SLinus Torvalds 10501da177e4SLinus Torvalds static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value) 10511da177e4SLinus Torvalds { 10521da177e4SLinus Torvalds input_event(dev, EV_FF_STATUS, code, value); 10531da177e4SLinus Torvalds } 10541da177e4SLinus Torvalds 105531581066SRichard Purdie static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value) 105631581066SRichard Purdie { 105731581066SRichard Purdie input_event(dev, EV_SW, code, !!value); 105831581066SRichard Purdie } 105931581066SRichard Purdie 10601da177e4SLinus Torvalds static inline void input_regs(struct input_dev *dev, struct pt_regs *regs) 10611da177e4SLinus Torvalds { 10621da177e4SLinus Torvalds dev->regs = regs; 10631da177e4SLinus Torvalds } 10641da177e4SLinus Torvalds 10651da177e4SLinus Torvalds static inline void input_sync(struct input_dev *dev) 10661da177e4SLinus Torvalds { 10671da177e4SLinus Torvalds input_event(dev, EV_SYN, SYN_REPORT, 0); 10681da177e4SLinus Torvalds dev->regs = NULL; 10691da177e4SLinus Torvalds } 10701da177e4SLinus Torvalds 10711da177e4SLinus Torvalds static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) 10721da177e4SLinus Torvalds { 10731da177e4SLinus Torvalds dev->absmin[axis] = min; 10741da177e4SLinus Torvalds dev->absmax[axis] = max; 10751da177e4SLinus Torvalds dev->absfuzz[axis] = fuzz; 10761da177e4SLinus Torvalds dev->absflat[axis] = flat; 10771da177e4SLinus Torvalds 10781da177e4SLinus Torvalds dev->absbit[LONG(axis)] |= BIT(axis); 10791da177e4SLinus Torvalds } 10801da177e4SLinus Torvalds 1081ea9f240bSGreg Kroah-Hartman extern struct class input_class; 10821da177e4SLinus Torvalds 10831da177e4SLinus Torvalds #endif 10841da177e4SLinus Torvalds #endif 1085