aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11/libinput/Makefile39
-rw-r--r--x11/libinput/distinfo6
-rw-r--r--x11/libinput/files/patch-0e03784e.c35
-rw-r--r--x11/libinput/files/patch-4e3ea4b8.c73
-rw-r--r--x11/libinput/files/patch-61f3e385.c4069
-rw-r--r--x11/libinput/files/patch-Makefile.am8
-rw-r--r--x11/libinput/files/patch-ef9b7e88.c17
-rw-r--r--x11/libinput/files/patch-f8b41205.c104
-rw-r--r--x11/libinput/files/patch-src_Makefile.am21
-rw-r--r--x11/libinput/files/patch-src_evdev.c92
-rw-r--r--x11/libinput/files/patch-src_libinput-private.h10
-rw-r--r--x11/libinput/files/patch-src_libinput-util.c12
-rw-r--r--x11/libinput/files/patch-src_libinput.h10
-rw-r--r--x11/libinput/files/patch-src_path-seat.c15
-rw-r--r--x11/libinput/files/patch-tools_Makefile.am24
-rw-r--r--x11/libinput/files/patch-udev_Makefile.am10
-rw-r--r--x11/libinput/pkg-plist31
17 files changed, 4435 insertions, 141 deletions
diff --git a/x11/libinput/Makefile b/x11/libinput/Makefile
index 35597e9e54b6..e34d164a6038 100644
--- a/x11/libinput/Makefile
+++ b/x11/libinput/Makefile
@@ -1,32 +1,47 @@
# $FreeBSD$
PORTNAME= libinput
-PORTVERSION= 1.6.0
-PORTREVISION= 3
+PORTVERSION= 1.11.3
CATEGORIES= x11
MASTER_SITES= http://freedesktop.org/software/${PORTNAME}/
MAINTAINER= x11@FreeBSD.org
COMMENT= Generic input library
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/COPYING
+
BUILD_DEPENDS= ${LOCALBASE}/include/linux/input.h:devel/evdev-proto
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}evdev>0:devel/py-evdev@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pyudev>0:devel/py-pyudev@${PY_FLAVOR}
LIB_DEPENDS= libevdev.so:devel/libevdev \
libepoll-shim.so:devel/libepoll-shim \
- libwacom.so:x11/libwacom \
libudev.so:devel/libudev-devd \
libmtdev.so:devel/libmtdev
-USES= autoreconf gmake libtool pathfix pkgconfig tar:xz
-EXTRACT_AFTER_ARGS= --exclude include # evdev-proto
-USE_LDCONFIG= yes
-GNU_CONFIGURE= yes
+USES= localbase meson pkgconfig python:3.4+,run shebangfix tar:xz
-CPPFLAGS+= -I${LOCALBASE}/include/libepoll-shim
+MESON_ARGS+= -Ddocumentation=false -Dtests=false
INSTALL_TARGET= install-strip
-post-patch:
- ${REINPLACE_CMD} -e 's|program_invocation_short_name|getprogname()|' \
- ${WRKSRC}/tools/libinput-list-devices.c \
- ${WRKSRC}/tools/ptraccel-debug.c ${WRKSRC}/tools/shared.c
+python_OLD_CMD= "/usr/bin/env python3"
+SHEBANG_FILES= tools/libinput-measure-fuzz \
+ tools/libinput-measure-touch-size \
+ tools/libinput-measure-touchpad-pressure \
+ tools/libinput-measure-touchpad-tap \
+ tools/libinput-measure-trackpoint-range \
+ tools/libinput-replay
+
+OPTIONS_DEFINE= DEBUG_GUI LIBWACOM
+OPTIONS_DEFAULT=LIBWACOM
+OPTIONS_SUB= yes
+
+DEBUG_GUI_DESC= Build the GUI event viewer
+LIBWACOM_DESC= Libwacom support
+
+DEBUG_GUI_USE= GNOME=gtk30,glib20,cairo
+DEBUG_GUI_MESON_TRUE= debug-gui
+LIBWACOM_LIB_DEPENDS= libwacom.so:x11/libwacom
+LIBWACOM_MESON_TRUE= libwacom
.include <bsd.port.mk>
diff --git a/x11/libinput/distinfo b/x11/libinput/distinfo
index 6b4217e50efe..c3c5aa1fd9fb 100644
--- a/x11/libinput/distinfo
+++ b/x11/libinput/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1486789508
-SHA256 (libinput-1.6.0.tar.xz) = b7534f518d735c643aedca2fb4694683dfddc8d0600cfb628c87a18e65255832
-SIZE (libinput-1.6.0.tar.xz) = 927656
+TIMESTAMP = 1532702018
+SHA256 (libinput-1.11.3.tar.xz) = f31191d96e425b4f16319842279d65946d9d983dcd3d9e466ae1206aa10ecb06
+SIZE (libinput-1.11.3.tar.xz) = 487408
diff --git a/x11/libinput/files/patch-0e03784e.c b/x11/libinput/files/patch-0e03784e.c
new file mode 100644
index 000000000000..c25269541a89
--- /dev/null
+++ b/x11/libinput/files/patch-0e03784e.c
@@ -0,0 +1,35 @@
+diff --git a/meson.build b/meson.build
+index 9ff17117a9f6c79bb50362d6db6507ba56c20136..e3d81daeead3dd0c04fd67df5354d82a832d396e 100644
+--- meson.build
++++ meson.build
+@@ -87,6 +87,10 @@ if cc.has_header_symbol('dirent.h', 'versionsort', prefix : prefix)
+ config_h.set('HAVE_VERSIONSORT', '1')
+ endif
+
++if cc.has_header('xlocale.h')
++ config_h.set('HAVE_XLOCALE_H', '1')
++endif
++
+ # Dependencies
+ pkgconfig = import('pkgconfig')
+ dep_udev = dependency('libudev')
+diff --git a/src/libinput-util.h b/src/libinput-util.h
+index c68b888ad7385d159a1bc35c3b2bf7d324cde44c..85166ca568dd1813f78c98798dbe090cd7486236 100644
+--- src/libinput-util.h
++++ src/libinput-util.h
+@@ -31,11 +31,15 @@
+ #include <errno.h>
+ #include <limits.h>
+ #include <locale.h>
++#ifdef HAVE_XLOCALE_H
++#include <xlocale.h>
++#endif
+ #include <math.h>
+ #include <stdarg.h>
+ #include <stdbool.h>
+ #include <stddef.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+ #include <time.h>
+ #include <unistd.h>
diff --git a/x11/libinput/files/patch-4e3ea4b8.c b/x11/libinput/files/patch-4e3ea4b8.c
new file mode 100644
index 000000000000..595187786b16
--- /dev/null
+++ b/x11/libinput/files/patch-4e3ea4b8.c
@@ -0,0 +1,73 @@
+diff --git a/meson.build b/meson.build
+index b9de1119fae84730288d5766e4be1056adb6817f..fc5371bb7e73363b3a11bc5992d6846b93a3b3d5 100644
+--- meson.build
++++ meson.build
+@@ -96,6 +98,8 @@ endif
+
+ ############ udev bits ############
+
++if false
++
+ udev_dir = get_option('udev-dir')
+ if udev_dir == ''
+ udev_dir = join_paths(get_option('prefix'), 'lib', 'udev')
+@@ -173,6 +173,36 @@ litest_groups_rules_file = configure_file(input : 'udev/80-libinput-device-group
+ install : false,
+ configuration : litest_udev_rules_config)
+
++endif
++
++############ libepoll-shim (BSD) ############
++
++if cc.has_header_symbol('sys/epoll.h', 'epoll_create1', prefix : prefix)
++ # epoll is built-in (Linux, illumos)
++ dep_libepoll = declare_dependency()
++else
++ # epoll is implemented in userspace by libepoll-shim (FreeBSD)
++ dir_libepoll = get_option('epoll-dir')
++ if dir_libepoll == ''
++ dir_libepoll = get_option('prefix')
++ endif
++ includes_epoll = include_directories(join_paths(dir_libepoll, 'include/libepoll-shim'))
++ dep_libepoll = cc.find_library('epoll-shim', dirs : join_paths(dir_libepoll, 'lib'))
++ code = '''
++ #include <sys/epoll.h>
++ int main(void) { epoll_create1(0); }
++ '''
++ if not cc.links(code,
++ name : 'libepoll-shim check',
++ dependencies : [dep_libepoll, dep_rt],
++ include_directories : includes_epoll) # note: wants an include_directories object
++ error('No built-in epoll or libepoll-shim found.')
++ endif
++ dep_libepoll = declare_dependency(
++ include_directories : includes_epoll,
++ dependencies : [dep_libepoll, dep_rt])
++endif
++
+ ############ libinput-util.a ############
+ src_libinput_util = [
+ 'src/libinput-util.c',
+@@ -286,6 +314,7 @@ deps_libinput = [
+ dep_mtdev,
+ dep_udev,
+ dep_libevdev,
++ dep_libepoll,
+ dep_lm,
+ dep_rt,
+ dep_libwacom,
+diff --git a/meson_options.txt b/meson_options.txt
+index 280cf49f18710211c32c98580f7b2ecaa4b00a88..fd0149657e3635f768195485d38413a31d20e956 100644
+--- meson_options.txt
++++ meson_options.txt
+@@ -2,6 +2,10 @@ option('udev-dir',
+ type: 'string',
+ value: '',
+ description: 'udev base directory [default=$prefix/lib/udev]')
++option('epoll-dir',
++ type: 'string',
++ value: '',
++ description: 'libepoll-shim base directory (for non-Linux OS) [default=$prefix]')
+ option('libwacom',
+ type: 'boolean',
+ value: true,
diff --git a/x11/libinput/files/patch-61f3e385.c b/x11/libinput/files/patch-61f3e385.c
new file mode 100644
index 000000000000..55f2c408eb92
--- /dev/null
+++ b/x11/libinput/files/patch-61f3e385.c
@@ -0,0 +1,4069 @@
+diff --git a/include/linux/freebsd/input-event-codes.h b/include/linux/freebsd/input-event-codes.h
+new file mode 100644
+index 00000000..9771e4f8
+--- /dev/null
++++ include/linux/freebsd/input-event-codes.h
+@@ -0,0 +1,837 @@
++/*
++ * Input event codes
++ *
++ * *** IMPORTANT ***
++ * This file is not only included from C-code but also from devicetree source
++ * files. As such this file MUST only contain comments and defines.
++ *
++ * Copyright (c) 1999-2002 Vojtech Pavlik
++ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ */
++#ifndef _UAPI_INPUT_EVENT_CODES_H
++#define _UAPI_INPUT_EVENT_CODES_H
++
++/*
++ * 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_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
++#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
++#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
++
++#define INPUT_PROP_MAX 0x1f
++#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
++
++/*
++ * Event types
++ */
++
++#define EV_SYN 0x00
++#define EV_KEY 0x01
++#define EV_REL 0x02
++#define EV_ABS 0x03
++#define EV_MSC 0x04
++#define EV_SW 0x05
++#define EV_LED 0x11
++#define EV_SND 0x12
++#define EV_REP 0x14
++#define EV_FF 0x15
++#define EV_PWR 0x16
++#define EV_FF_STATUS 0x17
++#define EV_MAX 0x1f
++#define EV_CNT (EV_MAX+1)
++
++/*
++ * Synchronization events.
++ */
++
++#define SYN_REPORT 0
++#define SYN_CONFIG 1
++#define SYN_MT_REPORT 2
++#define SYN_DROPPED 3
++#define SYN_MAX 0xf
++#define SYN_CNT (SYN_MAX+1)
++
++/*
++ * Keys and buttons
++ *
++ * Most of the keys/buttons are modeled after USB HUT 1.12
++ * (see http://www.usb.org/developers/hidpage).
++ * Abbreviations in the comments:
++ * AC - Application Control
++ * AL - Application Launch Button
++ * SC - System Control
++ */
++
++#define KEY_RESERVED 0
++#define KEY_ESC 1
++#define KEY_1 2
++#define KEY_2 3
++#define KEY_3 4
++#define KEY_4 5
++#define KEY_5 6
++#define KEY_6 7
++#define KEY_7 8
++#define KEY_8 9
++#define KEY_9 10
++#define KEY_0 11
++#define KEY_MINUS 12
++#define KEY_EQUAL 13
++#define KEY_BACKSPACE 14
++#define KEY_TAB 15
++#define KEY_Q 16
++#define KEY_W 17
++#define KEY_E 18
++#define KEY_R 19
++#define KEY_T 20
++#define KEY_Y 21
++#define KEY_U 22
++#define KEY_I 23
++#define KEY_O 24
++#define KEY_P 25
++#define KEY_LEFTBRACE 26
++#define KEY_RIGHTBRACE 27
++#define KEY_ENTER 28
++#define KEY_LEFTCTRL 29
++#define KEY_A 30
++#define KEY_S 31
++#define KEY_D 32
++#define KEY_F 33
++#define KEY_G 34
++#define KEY_H 35
++#define KEY_J 36
++#define KEY_K 37
++#define KEY_L 38
++#define KEY_SEMICOLON 39
++#define KEY_APOSTROPHE 40
++#define KEY_GRAVE 41
++#define KEY_LEFTSHIFT 42
++#define KEY_BACKSLASH 43
++#define KEY_Z 44
++#define KEY_X 45
++#define KEY_C 46
++#define KEY_V 47
++#define KEY_B 48
++#define KEY_N 49
++#define KEY_M 50
++#define KEY_COMMA 51
++#define KEY_DOT 52
++#define KEY_SLASH 53
++#define KEY_RIGHTSHIFT 54
++#define KEY_KPASTERISK 55
++#define KEY_LEFTALT 56
++#define KEY_SPACE 57
++#define KEY_CAPSLOCK 58
++#define KEY_F1 59
++#define KEY_F2 60
++#define KEY_F3 61
++#define KEY_F4 62
++#define KEY_F5 63
++#define KEY_F6 64
++#define KEY_F7 65
++#define KEY_F8 66
++#define KEY_F9 67
++#define KEY_F10 68
++#define KEY_NUMLOCK 69
++#define KEY_SCROLLLOCK 70
++#define KEY_KP7 71
++#define KEY_KP8 72
++#define KEY_KP9 73
++#define KEY_KPMINUS 74
++#define KEY_KP4 75
++#define KEY_KP5 76
++#define KEY_KP6 77
++#define KEY_KPPLUS 78
++#define KEY_KP1 79
++#define KEY_KP2 80
++#define KEY_KP3 81
++#define KEY_KP0 82
++#define KEY_KPDOT 83
++
++#define KEY_ZENKAKUHANKAKU 85
++#define KEY_102ND 86
++#define KEY_F11 87
++#define KEY_F12 88
++#define KEY_RO 89
++#define KEY_KATAKANA 90
++#define KEY_HIRAGANA 91
++#define KEY_HENKAN 92
++#define KEY_KATAKANAHIRAGANA 93
++#define KEY_MUHENKAN 94
++#define KEY_KPJPCOMMA 95
++#define KEY_KPENTER 96
++#define KEY_RIGHTCTRL 97
++#define KEY_KPSLASH 98
++#define KEY_SYSRQ 99
++#define KEY_RIGHTALT 100
++#define KEY_LINEFEED 101
++#define KEY_HOME 102
++#define KEY_UP 103
++#define KEY_PAGEUP 104
++#define KEY_LEFT 105
++#define KEY_RIGHT 106
++#define KEY_END 107
++#define KEY_DOWN 108
++#define KEY_PAGEDOWN 109
++#define KEY_INSERT 110
++#define KEY_DELETE 111
++#define KEY_MACRO 112
++#define KEY_MUTE 113
++#define KEY_VOLUMEDOWN 114
++#define KEY_VOLUMEUP 115
++#define KEY_POWER 116 /* SC System Power Down */
++#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
++#define KEY_HANGUEL KEY_HANGEUL
++#define KEY_HANJA 123
++#define KEY_YEN 124
++#define KEY_LEFTMETA 125
++#define KEY_RIGHTMETA 126
++#define KEY_COMPOSE 127
++
++#define KEY_STOP 128 /* AC Stop */
++#define KEY_AGAIN 129
++#define KEY_PROPS 130 /* AC Properties */
++#define KEY_UNDO 131 /* AC Undo */
++#define KEY_FRONT 132
++#define KEY_COPY 133 /* AC Copy */
++#define KEY_OPEN 134 /* AC Open */
++#define KEY_PASTE 135 /* AC Paste */
++#define KEY_FIND 136 /* AC Search */
++#define KEY_CUT 137 /* AC Cut */
++#define KEY_HELP 138 /* AL Integrated Help Center */
++#define KEY_MENU 139 /* Menu (show menu) */
++#define KEY_CALC 140 /* AL Calculator */
++#define KEY_SETUP 141
++#define KEY_SLEEP 142 /* SC System Sleep */
++#define KEY_WAKEUP 143 /* System Wake Up */
++#define KEY_FILE 144 /* AL Local Machine Browser */
++#define KEY_SENDFILE 145
++#define KEY_DELETEFILE 146
++#define KEY_XFER 147
++#define KEY_PROG1 148
++#define KEY_PROG2 149
++#define KEY_WWW 150 /* AL Internet Browser */
++#define KEY_MSDOS 151
++#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
++#define KEY_SCREENLOCK KEY_COFFEE
++#define KEY_ROTATE_DISPLAY 153 /* Display orientation for e.g. tablets */
++#define KEY_DIRECTION KEY_ROTATE_DISPLAY
++#define KEY_CYCLEWINDOWS 154
++#define KEY_MAIL 155
++#define KEY_BOOKMARKS 156 /* AC Bookmarks */
++#define KEY_COMPUTER 157
++#define KEY_BACK 158 /* AC Back */
++#define KEY_FORWARD 159 /* AC Forward */
++#define KEY_CLOSECD 160
++#define KEY_EJECTCD 161
++#define KEY_EJECTCLOSECD 162
++#define KEY_NEXTSONG 163
++#define KEY_PLAYPAUSE 164
++#define KEY_PREVIOUSSONG 165
++#define KEY_STOPCD 166
++#define KEY_RECORD 167
++#define KEY_REWIND 168
++#define KEY_PHONE 169 /* Media Select Telephone */
++#define KEY_ISO 170
++#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
++#define KEY_HOMEPAGE 172 /* AC Home */
++#define KEY_REFRESH 173 /* AC Refresh */
++#define KEY_EXIT 174 /* AC Exit */
++#define KEY_MOVE 175
++#define KEY_EDIT 176
++#define KEY_SCROLLUP 177
++#define KEY_SCROLLDOWN 178
++#define KEY_KPLEFTPAREN 179
++#define KEY_KPRIGHTPAREN 180
++#define KEY_NEW 181 /* AC New */
++#define KEY_REDO 182 /* AC Redo/Repeat */
++
++#define KEY_F13 183
++#define KEY_F14 184
++#define KEY_F15 185
++#define KEY_F16 186
++#define KEY_F17 187
++#define KEY_F18 188
++#define KEY_F19 189
++#define KEY_F20 190
++#define KEY_F21 191
++#define KEY_F22 192
++#define KEY_F23 193
++#define KEY_F24 194
++
++#define KEY_PLAYCD 200
++#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
++#define KEY_FASTFORWARD 208
++#define KEY_BASSBOOST 209
++#define KEY_PRINT 210 /* AC Print */
++#define KEY_HP 211
++#define KEY_CAMERA 212
++#define KEY_SOUND 213
++#define KEY_QUESTION 214
++#define KEY_EMAIL 215
++#define KEY_CHAT 216
++#define KEY_SEARCH 217
++#define KEY_CONNECT 218
++#define KEY_FINANCE 219 /* AL Checkbook/Finance */
++#define KEY_SPORT 220
++#define KEY_SHOP 221
++#define KEY_ALTERASE 222
++#define KEY_CANCEL 223 /* AC Cancel */
++#define KEY_BRIGHTNESSDOWN 224
++#define KEY_BRIGHTNESSUP 225
++#define KEY_MEDIA 226
++
++#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
++ outputs (Monitor/LCD/TV-out/etc) */
++#define KEY_KBDILLUMTOGGLE 228
++#define KEY_KBDILLUMDOWN 229
++#define KEY_KBDILLUMUP 230
++
++#define KEY_SEND 231 /* AC Send */
++#define KEY_REPLY 232 /* AC Reply */
++#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
++#define KEY_SAVE 234 /* AC Save */
++#define KEY_DOCUMENTS 235
++
++#define KEY_BATTERY 236
++
++#define KEY_BLUETOOTH 237
++#define KEY_WLAN 238
++#define KEY_UWB 239
++
++#define KEY_UNKNOWN 240
++
++#define KEY_VIDEO_NEXT 241 /* drive next video source */
++#define KEY_VIDEO_PREV 242 /* drive previous video source */
++#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
++#define KEY_BRIGHTNESS_AUTO 244 /* Set Auto Brightness: manual
++ brightness control is off,
++ rely on ambient */
++#define KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO
++#define KEY_DISPLAY_OFF 245 /* display device to off state */
++
++#define KEY_WWAN 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */
++#define KEY_WIMAX KEY_WWAN
++#define KEY_RFKILL 247 /* Key that controls all radios */
++
++#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
++
++/* Code 255 is reserved for special needs of AT keyboard driver */
++
++#define BTN_MISC 0x100
++#define BTN_0 0x100
++#define BTN_1 0x101
++#define BTN_2 0x102
++#define BTN_3 0x103
++#define BTN_4 0x104
++#define BTN_5 0x105
++#define BTN_6 0x106
++#define BTN_7 0x107
++#define BTN_8 0x108
++#define BTN_9 0x109
++
++#define BTN_MOUSE 0x110
++#define BTN_LEFT 0x110
++#define BTN_RIGHT 0x111
++#define BTN_MIDDLE 0x112
++#define BTN_SIDE 0x113
++#define BTN_EXTRA 0x114
++#define BTN_FORWARD 0x115
++#define BTN_BACK 0x116
++#define BTN_TASK 0x117
++
++#define BTN_JOYSTICK 0x120
++#define BTN_TRIGGER 0x120
++#define BTN_THUMB 0x121
++#define BTN_THUMB2 0x122
++#define BTN_TOP 0x123
++#define BTN_TOP2 0x124
++#define BTN_PINKIE 0x125
++#define BTN_BASE 0x126
++#define BTN_BASE2 0x127
++#define BTN_BASE3 0x128
++#define BTN_BASE4 0x129
++#define BTN_BASE5 0x12a
++#define BTN_BASE6 0x12b
++#define BTN_DEAD 0x12f
++
++#define BTN_GAMEPAD 0x130
++#define BTN_SOUTH 0x130
++#define BTN_A BTN_SOUTH
++#define BTN_EAST 0x131
++#define BTN_B BTN_EAST
++#define BTN_C 0x132
++#define BTN_NORTH 0x133
++#define BTN_X BTN_NORTH
++#define BTN_WEST 0x134
++#define BTN_Y BTN_WEST
++#define BTN_Z 0x135
++#define BTN_TL 0x136
++#define BTN_TR 0x137
++#define BTN_TL2 0x138
++#define BTN_TR2 0x139
++#define BTN_SELECT 0x13a
++#define BTN_START 0x13b
++#define BTN_MODE 0x13c
++#define BTN_THUMBL 0x13d
++#define BTN_THUMBR 0x13e
++
++#define BTN_DIGI 0x140
++#define BTN_TOOL_PEN 0x140
++#define BTN_TOOL_RUBBER 0x141
++#define BTN_TOOL_BRUSH 0x142
++#define BTN_TOOL_PENCIL 0x143
++#define BTN_TOOL_AIRBRUSH 0x144
++#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
++#define BTN_GEAR_UP 0x151
++
++#define KEY_OK 0x160
++#define KEY_SELECT 0x161
++#define KEY_GOTO 0x162
++#define KEY_CLEAR 0x163
++#define KEY_POWER2 0x164
++#define KEY_OPTION 0x165
++#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
++#define KEY_TIME 0x167
++#define KEY_VENDOR 0x168
++#define KEY_ARCHIVE 0x169
++#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
++#define KEY_CHANNEL 0x16b
++#define KEY_FAVORITES 0x16c
++#define KEY_EPG 0x16d
++#define KEY_PVR 0x16e /* Media Select Home */
++#define KEY_MHP 0x16f
++#define KEY_LANGUAGE 0x170
++#define KEY_TITLE 0x171
++#define KEY_SUBTITLE 0x172
++#define KEY_ANGLE 0x173
++#define KEY_ZOOM 0x174
++#define KEY_MODE 0x175
++#define KEY_KEYBOARD 0x176
++#define KEY_SCREEN 0x177
++#define KEY_PC 0x178 /* Media Select Computer */
++#define KEY_TV 0x179 /* Media Select TV */
++#define KEY_TV2 0x17a /* Media Select Cable */
++#define KEY_VCR 0x17b /* Media Select VCR */
++#define KEY_VCR2 0x17c /* VCR Plus */
++#define KEY_SAT 0x17d /* Media Select Satellite */
++#define KEY_SAT2 0x17e
++#define KEY_CD 0x17f /* Media Select CD */
++#define KEY_TAPE 0x180 /* Media Select Tape */
++#define KEY_RADIO 0x181
++#define KEY_TUNER 0x182 /* Media Select Tuner */
++#define KEY_PLAYER 0x183
++#define KEY_TEXT 0x184
++#define KEY_DVD 0x185 /* Media Select DVD */
++#define KEY_AUX 0x186
++#define KEY_MP3 0x187
++#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 */
++#define KEY_CALENDAR 0x18d
++#define KEY_RED 0x18e
++#define KEY_GREEN 0x18f
++#define KEY_YELLOW 0x190
++#define KEY_BLUE 0x191
++#define KEY_CHANNELUP 0x192 /* Channel Increment */
++#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
++#define KEY_FIRST 0x194
++#define KEY_LAST 0x195 /* Recall Last */
++#define KEY_AB 0x196
++#define KEY_NEXT 0x197
++#define KEY_RESTART 0x198
++#define KEY_SLOW 0x199
++#define KEY_SHUFFLE 0x19a
++#define KEY_BREAK 0x19b
++#define KEY_PREVIOUS 0x19c
++#define KEY_DIGITS 0x19d
++#define KEY_TEEN 0x19e
++#define KEY_TWEN 0x19f
++#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
++#define KEY_GAMES 0x1a1 /* Media Select Games */
++#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
++#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
++#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
++#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
++#define KEY_EDITOR 0x1a6 /* AL Text Editor */
++#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
++#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
++#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
++#define KEY_DATABASE 0x1aa /* AL Database App */
++#define KEY_NEWS 0x1ab /* AL Newsreader */
++#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
++#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
++#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
++#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
++#define KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE
++#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
++#define KEY_LOGOFF 0x1b1 /* AL Logoff */
++
++#define KEY_DOLLAR 0x1b2
++#define KEY_EURO 0x1b3
++
++#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
++#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
++#define KEY_INS_LINE 0x1c2
++#define KEY_DEL_LINE 0x1c3
++
++#define KEY_FN 0x1d0
++#define KEY_FN_ESC 0x1d1
++#define KEY_FN_F1 0x1d2
++#define KEY_FN_F2 0x1d3
++#define KEY_FN_F3 0x1d4
++#define KEY_FN_F4 0x1d5
++#define KEY_FN_F5 0x1d6
++#define KEY_FN_F6 0x1d7
++#define KEY_FN_F7 0x1d8
++#define KEY_FN_F8 0x1d9
++#define KEY_FN_F9 0x1da
++#define KEY_FN_F10 0x1db
++#define KEY_FN_F11 0x1dc
++#define KEY_FN_F12 0x1dd
++#define KEY_FN_1 0x1de
++#define KEY_FN_2 0x1df
++#define KEY_FN_D 0x1e0
++#define KEY_FN_E 0x1e1
++#define KEY_FN_F 0x1e2
++#define KEY_FN_S 0x1e3
++#define KEY_FN_B 0x1e4
++
++#define KEY_BRL_DOT1 0x1f1
++#define KEY_BRL_DOT2 0x1f2
++#define KEY_BRL_DOT3 0x1f3
++#define KEY_BRL_DOT4 0x1f4
++#define KEY_BRL_DOT5 0x1f5
++#define KEY_BRL_DOT6 0x1f6
++#define KEY_BRL_DOT7 0x1f7
++#define KEY_BRL_DOT8 0x1f8
++#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_NUMERIC_A 0x20c /* Phone key A - HUT Telephony 0xb9 */
++#define KEY_NUMERIC_B 0x20d
++#define KEY_NUMERIC_C 0x20e
++#define KEY_NUMERIC_D 0x20f
++
++#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 KEY_ATTENDANT_ON 0x21b
++#define KEY_ATTENDANT_OFF 0x21c
++#define KEY_ATTENDANT_TOGGLE 0x21d /* Attendant call on or off */
++#define KEY_LIGHTS_TOGGLE 0x21e /* Reading light on or off */
++
++#define BTN_DPAD_UP 0x220
++#define BTN_DPAD_DOWN 0x221
++#define BTN_DPAD_LEFT 0x222
++#define BTN_DPAD_RIGHT 0x223
++
++#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
++
++#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
++#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
++#define KEY_JOURNAL 0x242 /* AL Log/Journal/Timecard */
++#define KEY_CONTROLPANEL 0x243 /* AL Control Panel */
++#define KEY_APPSELECT 0x244 /* AL Select Task/Application */
++#define KEY_SCREENSAVER 0x245 /* AL Screen Saver */
++#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
++
++#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
++#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
++
++#define KEY_KBDINPUTASSIST_PREV 0x260
++#define KEY_KBDINPUTASSIST_NEXT 0x261
++#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
++#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
++#define KEY_KBDINPUTASSIST_ACCEPT 0x264
++#define KEY_KBDINPUTASSIST_CANCEL 0x265
++
++/* Diagonal movement keys */
++#define KEY_RIGHT_UP 0x266
++#define KEY_RIGHT_DOWN 0x267
++#define KEY_LEFT_UP 0x268
++#define KEY_LEFT_DOWN 0x269
++
++#define KEY_ROOT_MENU 0x26a /* Show Device's Root Menu */
++/* Show Top Menu of the Media (e.g. DVD) */
++#define KEY_MEDIA_TOP_MENU 0x26b
++#define KEY_NUMERIC_11 0x26c
++#define KEY_NUMERIC_12 0x26d
++/*
++ * Toggle Audio Description: refers to an audio service that helps blind and
++ * visually impaired consumers understand the action in a program. Note: in
++ * some countries this is referred to as "Video Description".
++ */
++#define KEY_AUDIO_DESC 0x26e
++#define KEY_3D_MODE 0x26f
++#define KEY_NEXT_FAVORITE 0x270
++#define KEY_STOP_RECORD 0x271
++#define KEY_PAUSE_RECORD 0x272
++#define KEY_VOD 0x273 /* Video on Demand */
++#define KEY_UNMUTE 0x274
++#define KEY_FASTREVERSE 0x275
++#define KEY_SLOWREVERSE 0x276
++/*
++ * Control a data application associated with the currently viewed channel,
++ * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
++ */
++#define KEY_DATA 0x277
++#define KEY_ONSCREEN_KEYBOARD 0x278
++
++#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 0x2ff
++#define KEY_CNT (KEY_MAX+1)
++
++/*
++ * Relative axes
++ */
++
++#define REL_X 0x00
++#define REL_Y 0x01
++#define REL_Z 0x02
++#define REL_RX 0x03
++#define REL_RY 0x04
++#define REL_RZ 0x05
++#define REL_HWHEEL 0x06
++#define REL_DIAL 0x07
++#define REL_WHEEL 0x08
++#define REL_MISC 0x09
++#define REL_MAX 0x0f
++#define REL_CNT (REL_MAX+1)
++
++/*
++ * Absolute axes
++ */
++
++#define ABS_X 0x00
++#define ABS_Y 0x01
++#define ABS_Z 0x02
++#define ABS_RX 0x03
++#define ABS_RY 0x04
++#define ABS_RZ 0x05
++#define ABS_THROTTLE 0x06
++#define ABS_RUDDER 0x07
++#define ABS_WHEEL 0x08
++#define ABS_GAS 0x09
++#define ABS_BRAKE 0x0a
++#define ABS_HAT0X 0x10
++#define ABS_HAT0Y 0x11
++#define ABS_HAT1X 0x12
++#define ABS_HAT1Y 0x13
++#define ABS_HAT2X 0x14
++#define ABS_HAT2Y 0x15
++#define ABS_HAT3X 0x16
++#define ABS_HAT3Y 0x17
++#define ABS_PRESSURE 0x18
++#define ABS_DISTANCE 0x19
++#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)
++
++/*
++ * Switch events
++ */
++
++#define SW_LID 0x00 /* set = lid shut */
++#define SW_TABLET_MODE 0x01 /* set = tablet mode */
++#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
++#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
++ set = radio enabled */
++#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_MUTE_DEVICE 0x0e /* set = device disabled */
++#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
++#define SW_MAX 0x0f
++#define SW_CNT (SW_MAX+1)
++
++/*
++ * Misc events
++ */
++
++#define MSC_SERIAL 0x00
++#define MSC_PULSELED 0x01
++#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)
++
++/*
++ * LEDs
++ */
++
++#define LED_NUML 0x00
++#define LED_CAPSL 0x01
++#define LED_SCROLLL 0x02
++#define LED_COMPOSE 0x03
++#define LED_KANA 0x04
++#define LED_SLEEP 0x05
++#define LED_SUSPEND 0x06
++#define LED_MUTE 0x07
++#define LED_MISC 0x08
++#define LED_MAIL 0x09
++#define LED_CHARGING 0x0a
++#define LED_MAX 0x0f
++#define LED_CNT (LED_MAX+1)
++
++/*
++ * Autorepeat values
++ */
++
++#define REP_DELAY 0x00
++#define REP_PERIOD 0x01
++#define REP_MAX 0x01
++#define REP_CNT (REP_MAX+1)
++
++/*
++ * Sounds
++ */
++
++#define SND_CLICK 0x00
++#define SND_BELL 0x01
++#define SND_TONE 0x02
++#define SND_MAX 0x07
++#define SND_CNT (SND_MAX+1)
++
++#endif
+diff --git a/include/linux/freebsd/input.h b/include/linux/freebsd/input.h
+new file mode 100644
+index 00000000..72733f21
+--- /dev/null
++++ include/linux/freebsd/input.h
+@@ -0,0 +1,507 @@
++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
++/*
++ * Copyright (c) 1999-2002 Vojtech Pavlik
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ */
++#ifndef _UAPI_INPUT_H
++#define _UAPI_INPUT_H
++
++
++#ifndef __KERNEL__
++#include <sys/time.h>
++#include <sys/ioccom.h>
++#include <sys/types.h>
++#endif
++
++#include "input-event-codes.h"
++
++/*
++ * The event structure itself
++ * Note that __USE_TIME_BITS64 is defined by libc based on
++ * application's request to use 64 bit time_t.
++ */
++
++struct input_event {
++#if 1 /* (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL) */
++ struct timeval time;
++#define input_event_sec time.tv_sec
++#define input_event_usec time.tv_usec
++#else
++ __kernel_ulong_t __sec;
++ __kernel_ulong_t __usec;
++#define input_event_sec __sec
++#define input_event_usec __usec
++#endif
++ uint16_t type;
++ uint16_t code;
++ int32_t value;
++};
++
++/*
++ * Protocol version.
++ */
++
++#define EV_VERSION 0x010001
++
++/*
++ * IOCTLs (0x00 - 0x7f)
++ */
++
++struct input_id {
++ uint16_t bustype;
++ uint16_t vendor;
++ uint16_t product;
++ uint16_t 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.
++ *
++ * The default 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.
++ * When INPUT_PROP_ACCELEROMETER is set the resolution changes.
++ * The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
++ * in units per g (units/g) and in units per degree per second
++ * (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
++ */
++struct input_absinfo {
++ int32_t value;
++ int32_t minimum;
++ int32_t maximum;
++ int32_t fuzz;
++ int32_t flat;
++ int32_t 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)
++ uint8_t flags;
++ uint8_t len;
++ uint16_t index;
++ uint32_t keycode;
++ uint8_t scancode[32];
++};
++
++struct input_mask {
++ uint32_t type;
++ uint32_t codes_size;
++ uint64_t codes_ptr;
++};
++
++#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, unsigned int[2]) /* get repeat settings */
++#define EVIOCSREP _IOW('E', 0x03, unsigned int[2]) /* set repeat settings */
++
++#define EVIOCGKEYCODE _IOWR('E', 0x04, unsigned int[2]) /* get keycode */
++#define EVIOCGKEYCODE_V2 _IOWR('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_OUT, 'E', 0x06, len) /* get device name */
++#define EVIOCGPHYS(len) _IOC(IOC_OUT, 'E', 0x07, len) /* get physical location */
++#define EVIOCGUNIQ(len) _IOC(IOC_OUT, 'E', 0x08, len) /* get unique identifier */
++#define EVIOCGPROP(len) _IOC(IOC_OUT, 'E', 0x09, len) /* get device properties */
++
++/**
++ * 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 {
++ * uint32_t code;
++ * int32_t 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(int32_t). 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_INOUT, 'E', 0x0a, len)
++
++#define EVIOCGKEY(len) _IOC(IOC_OUT, 'E', 0x18, len) /* get global key state */
++#define EVIOCGLED(len) _IOC(IOC_OUT, 'E', 0x19, len) /* get all LEDs */
++#define EVIOCGSND(len) _IOC(IOC_OUT, 'E', 0x1a, len) /* get all sounds status */
++#define EVIOCGSW(len) _IOC(IOC_OUT, 'E', 0x1b, len) /* get all switch states */
++
++#define EVIOCGBIT(ev,len) _IOC(IOC_OUT, '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 _IOW('E', 0x80, struct ff_effect) /* send a force effect to a force feedback device */
++#define EVIOCRMFF _IOWINT('E', 0x81) /* Erase a force effect */
++#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
++
++#define EVIOCGRAB _IOWINT('E', 0x90) /* Grab/Release device */
++#define EVIOCREVOKE _IOWINT('E', 0x91) /* Revoke device access */
++
++/**
++ * EVIOCGMASK - Retrieve current event mask
++ *
++ * This ioctl allows user to retrieve the current event mask for specific
++ * event type. The argument must be of type "struct input_mask" and
++ * specifies the event type to query, the address of the receive buffer and
++ * the size of the receive buffer.
++ *
++ * The event mask is a per-client mask that specifies which events are
++ * forwarded to the client. Each event code is represented by a single bit
++ * in the event mask. If the bit is set, the event is passed to the client
++ * normally. Otherwise, the event is filtered and will never be queued on
++ * the client's receive buffer.
++ *
++ * Event masks do not affect global state of the input device. They only
++ * affect the file descriptor they are applied to.
++ *
++ * The default event mask for a client has all bits set, i.e. all events
++ * are forwarded to the client. If the kernel is queried for an unknown
++ * event type or if the receive buffer is larger than the number of
++ * event codes known to the kernel, the kernel returns all zeroes for those
++ * codes.
++ *
++ * At maximum, codes_size bytes are copied.
++ *
++ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
++ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
++ * does not implement the ioctl.
++ */
++#define EVIOCGMASK _IOW('E', 0x92, struct input_mask) /* Get event-masks */
++
++/**
++ * EVIOCSMASK - Set event mask
++ *
++ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
++ * current event mask, this changes the client's event mask for a specific
++ * type. See EVIOCGMASK for a description of event-masks and the
++ * argument-type.
++ *
++ * This ioctl provides full forward compatibility. If the passed event type
++ * is unknown to the kernel, or if the number of event codes specified in
++ * the mask is bigger than what is known to the kernel, the ioctl is still
++ * accepted and applied. However, any unknown codes are left untouched and
++ * stay cleared. That means, the kernel always filters unknown codes
++ * regardless of what the client requests. If the new mask doesn't cover
++ * all known event-codes, all remaining codes are automatically cleared and
++ * thus filtered.
++ *
++ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
++ * returned if the receive-buffer points to invalid memory. EINVAL is returned
++ * if the kernel does not implement the ioctl.
++ */
++#define EVIOCSMASK _IOW('E', 0x93, struct input_mask) /* Set event-masks */
++
++#define EVIOCSCLOCKID _IOW('E', 0xa0, int) /* Set clockid to be used for timestamps */
++
++/*
++ * IDs.
++ */
++
++#define ID_BUS 0
++#define ID_VENDOR 1
++#define ID_PRODUCT 2
++#define ID_VERSION 3
++
++#define BUS_PCI 0x01
++#define BUS_ISAPNP 0x02
++#define BUS_USB 0x03
++#define BUS_HIL 0x04
++#define BUS_BLUETOOTH 0x05
++#define BUS_VIRTUAL 0x06
++
++#define BUS_ISA 0x10
++#define BUS_I8042 0x11
++#define BUS_XTKBD 0x12
++#define BUS_RS232 0x13
++#define BUS_GAMEPORT 0x14
++#define BUS_PARPORT 0x15
++#define BUS_AMIGA 0x16
++#define BUS_ADB 0x17
++#define BUS_I2C 0x18
++#define BUS_HOST 0x19
++#define BUS_GSC 0x1A
++#define BUS_ATARI 0x1B
++#define BUS_SPI 0x1C
++#define BUS_RMI 0x1D
++#define BUS_CEC 0x1E
++#define BUS_INTEL_ISHTP 0x1F
++
++/*
++ * MT_TOOL types
++ */
++#define MT_TOOL_FINGER 0
++#define MT_TOOL_PEN 1
++#define MT_TOOL_PALM 2
++#define MT_TOOL_MAX 2
++
++/*
++ * Values describing the status of a force-feedback effect
++ */
++#define FF_STATUS_STOPPED 0x00
++#define FF_STATUS_PLAYING 0x01
++#define FF_STATUS_MAX 0x01
++
++/*
++ * Structures used in ioctls to upload effects to a device
++ * They are pieces of a bigger structure (called ff_effect)
++ */
++
++/*
++ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
++ * should not be used and have unspecified results.
++ */
++
++/**
++ * struct ff_replay - defines scheduling of the force-feedback effect
++ * @length: duration of the effect
++ * @delay: delay before effect should start playing
++ */
++struct ff_replay {
++ uint16_t length;
++ uint16_t delay;
++};
++
++/**
++ * struct ff_trigger - defines what triggers the force-feedback effect
++ * @button: number of the button triggering the effect
++ * @interval: controls how soon the effect can be re-triggered
++ */
++struct ff_trigger {
++ uint16_t button;
++ uint16_t interval;
++};
++
++/**
++ * struct ff_envelope - generic force-feedback effect envelope
++ * @attack_length: duration of the attack (ms)
++ * @attack_level: level at the beginning of the attack
++ * @fade_length: duration of fade (ms)
++ * @fade_level: level at the end of fade
++ *
++ * The @attack_level and @fade_level are absolute values; when applying
++ * envelope force-feedback core will convert to positive/negative
++ * value based on polarity of the default level of the effect.
++ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
++ */
++struct ff_envelope {
++ uint16_t attack_length;
++ uint16_t attack_level;
++ uint16_t fade_length;
++ uint16_t fade_level;
++};
++
++/**
++ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
++ * @level: strength of the effect; may be negative
++ * @envelope: envelope data
++ */
++struct ff_constant_effect {
++ int16_t level;
++ struct ff_envelope envelope;
++};
++
++/**
++ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
++ * @start_level: beginning strength of the effect; may be negative
++ * @end_level: final strength of the effect; may be negative
++ * @envelope: envelope data
++ */
++struct ff_ramp_effect {
++ int16_t start_level;
++ int16_t end_level;
++ struct ff_envelope envelope;
++};
++
++/**
++ * struct ff_condition_effect - defines a spring or friction force-feedback effect
++ * @right_saturation: maximum level when joystick moved all way to the right
++ * @left_saturation: same for the left side
++ * @right_coeff: controls how fast the force grows when the joystick moves
++ * to the right
++ * @left_coeff: same for the left side
++ * @deadband: size of the dead zone, where no force is produced
++ * @center: position of the dead zone
++ */
++struct ff_condition_effect {
++ uint16_t right_saturation;
++ uint16_t left_saturation;
++
++ int16_t right_coeff;
++ int16_t left_coeff;
++
++ uint16_t deadband;
++ int16_t center;
++};
++
++/**
++ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
++ * @waveform: kind of the effect (wave)
++ * @period: period of the wave (ms)
++ * @magnitude: peak value
++ * @offset: mean value of the wave (roughly)
++ * @phase: 'horizontal' shift
++ * @envelope: envelope data
++ * @custom_len: number of samples (FF_CUSTOM only)
++ * @custom_data: buffer of samples (FF_CUSTOM only)
++ *
++ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
++ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
++ * for the time being as no driver supports it yet.
++ *
++ * Note: the data pointed by custom_data is copied by the driver.
++ * You can therefore dispose of the memory after the upload/update.
++ */
++struct ff_periodic_effect {
++ uint16_t waveform;
++ uint16_t period;
++ int16_t magnitude;
++ int16_t offset;
++ uint16_t phase;
++
++ struct ff_envelope envelope;
++
++ uint32_t custom_len;
++ int16_t *custom_data;
++};
++
++/**
++ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
++ * @strong_magnitude: magnitude of the heavy motor
++ * @weak_magnitude: magnitude of the light one
++ *
++ * Some rumble pads have two motors of different weight. Strong_magnitude
++ * represents the magnitude of the vibration generated by the heavy one.
++ */
++struct ff_rumble_effect {
++ uint16_t strong_magnitude;
++ uint16_t weak_magnitude;
++};
++
++/**
++ * struct ff_effect - defines force feedback effect
++ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
++ * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
++ * @id: an unique id assigned to an effect
++ * @direction: direction of the effect
++ * @trigger: trigger conditions (struct ff_trigger)
++ * @replay: scheduling of the effect (struct ff_replay)
++ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
++ * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
++ * defining effect parameters
++ *
++ * This structure is sent through ioctl from the application to the driver.
++ * To create a new effect application should set its @id to -1; the kernel
++ * will return assigned @id which can later be used to update or delete
++ * this effect.
++ *
++ * Direction of the effect is encoded as follows:
++ * 0 deg -> 0x0000 (down)
++ * 90 deg -> 0x4000 (left)
++ * 180 deg -> 0x8000 (up)
++ * 270 deg -> 0xC000 (right)
++ */
++struct ff_effect {
++ uint16_t type;
++ int16_t id;
++ uint16_t direction;
++ struct ff_trigger trigger;
++ struct ff_replay replay;
++
++ union {
++ struct ff_constant_effect constant;
++ struct ff_ramp_effect ramp;
++ struct ff_periodic_effect periodic;
++ struct ff_condition_effect condition[2]; /* One for each axis */
++ struct ff_rumble_effect rumble;
++ } u;
++};
++
++/*
++ * Force feedback effect types
++ */
++
++#define FF_RUMBLE 0x50
++#define FF_PERIODIC 0x51
++#define FF_CONSTANT 0x52
++#define FF_SPRING 0x53
++#define FF_FRICTION 0x54
++#define FF_DAMPER 0x55
++#define FF_INERTIA 0x56
++#define FF_RAMP 0x57
++
++#define FF_EFFECT_MIN FF_RUMBLE
++#define FF_EFFECT_MAX FF_RAMP
++
++/*
++ * Force feedback periodic effect types
++ */
++
++#define FF_SQUARE 0x58
++#define FF_TRIANGLE 0x59
++#define FF_SINE 0x5a
++#define FF_SAW_UP 0x5b
++#define FF_SAW_DOWN 0x5c
++#define FF_CUSTOM 0x5d
++
++#define FF_WAVEFORM_MIN FF_SQUARE
++#define FF_WAVEFORM_MAX FF_CUSTOM
++
++/*
++ * Set ff device properties
++ */
++
++#define FF_GAIN 0x60
++#define FF_AUTOCENTER 0x61
++
++/*
++ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
++ * cause a collision with another ff method, in this case ff->set_gain().
++ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
++ * and thus the total number of effects should never exceed FF_GAIN.
++ */
++#define FF_MAX_EFFECTS FF_GAIN
++
++#define FF_MAX 0x7f
++#define FF_CNT (FF_MAX+1)
++
++#endif /* _UAPI_INPUT_H */
+diff --git a/include/linux/input-event-codes.h b/include/linux/input-event-codes.h
+deleted file mode 100644
+index 9771e4f8..00000000
+--- include/linux/input-event-codes.h
++++ /dev/null
+@@ -1,837 +0,0 @@
+-/*
+- * Input event codes
+- *
+- * *** IMPORTANT ***
+- * This file is not only included from C-code but also from devicetree source
+- * files. As such this file MUST only contain comments and defines.
+- *
+- * Copyright (c) 1999-2002 Vojtech Pavlik
+- * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
+- *
+- * This program is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License version 2 as published by
+- * the Free Software Foundation.
+- */
+-#ifndef _UAPI_INPUT_EVENT_CODES_H
+-#define _UAPI_INPUT_EVENT_CODES_H
+-
+-/*
+- * 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_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
+-#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
+-#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
+-
+-#define INPUT_PROP_MAX 0x1f
+-#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
+-
+-/*
+- * Event types
+- */
+-
+-#define EV_SYN 0x00
+-#define EV_KEY 0x01
+-#define EV_REL 0x02
+-#define EV_ABS 0x03
+-#define EV_MSC 0x04
+-#define EV_SW 0x05
+-#define EV_LED 0x11
+-#define EV_SND 0x12
+-#define EV_REP 0x14
+-#define EV_FF 0x15
+-#define EV_PWR 0x16
+-#define EV_FF_STATUS 0x17
+-#define EV_MAX 0x1f
+-#define EV_CNT (EV_MAX+1)
+-
+-/*
+- * Synchronization events.
+- */
+-
+-#define SYN_REPORT 0
+-#define SYN_CONFIG 1
+-#define SYN_MT_REPORT 2
+-#define SYN_DROPPED 3
+-#define SYN_MAX 0xf
+-#define SYN_CNT (SYN_MAX+1)
+-
+-/*
+- * Keys and buttons
+- *
+- * Most of the keys/buttons are modeled after USB HUT 1.12
+- * (see http://www.usb.org/developers/hidpage).
+- * Abbreviations in the comments:
+- * AC - Application Control
+- * AL - Application Launch Button
+- * SC - System Control
+- */
+-
+-#define KEY_RESERVED 0
+-#define KEY_ESC 1
+-#define KEY_1 2
+-#define KEY_2 3
+-#define KEY_3 4
+-#define KEY_4 5
+-#define KEY_5 6
+-#define KEY_6 7
+-#define KEY_7 8
+-#define KEY_8 9
+-#define KEY_9 10
+-#define KEY_0 11
+-#define KEY_MINUS 12
+-#define KEY_EQUAL 13
+-#define KEY_BACKSPACE 14
+-#define KEY_TAB 15
+-#define KEY_Q 16
+-#define KEY_W 17
+-#define KEY_E 18
+-#define KEY_R 19
+-#define KEY_T 20
+-#define KEY_Y 21
+-#define KEY_U 22
+-#define KEY_I 23
+-#define KEY_O 24
+-#define KEY_P 25
+-#define KEY_LEFTBRACE 26
+-#define KEY_RIGHTBRACE 27
+-#define KEY_ENTER 28
+-#define KEY_LEFTCTRL 29
+-#define KEY_A 30
+-#define KEY_S 31
+-#define KEY_D 32
+-#define KEY_F 33
+-#define KEY_G 34
+-#define KEY_H 35
+-#define KEY_J 36
+-#define KEY_K 37
+-#define KEY_L 38
+-#define KEY_SEMICOLON 39
+-#define KEY_APOSTROPHE 40
+-#define KEY_GRAVE 41
+-#define KEY_LEFTSHIFT 42
+-#define KEY_BACKSLASH 43
+-#define KEY_Z 44
+-#define KEY_X 45
+-#define KEY_C 46
+-#define KEY_V 47
+-#define KEY_B 48
+-#define KEY_N 49
+-#define KEY_M 50
+-#define KEY_COMMA 51
+-#define KEY_DOT 52
+-#define KEY_SLASH 53
+-#define KEY_RIGHTSHIFT 54
+-#define KEY_KPASTERISK 55
+-#define KEY_LEFTALT 56
+-#define KEY_SPACE 57
+-#define KEY_CAPSLOCK 58
+-#define KEY_F1 59
+-#define KEY_F2 60
+-#define KEY_F3 61
+-#define KEY_F4 62
+-#define KEY_F5 63
+-#define KEY_F6 64
+-#define KEY_F7 65
+-#define KEY_F8 66
+-#define KEY_F9 67
+-#define KEY_F10 68
+-#define KEY_NUMLOCK 69
+-#define KEY_SCROLLLOCK 70
+-#define KEY_KP7 71
+-#define KEY_KP8 72
+-#define KEY_KP9 73
+-#define KEY_KPMINUS 74
+-#define KEY_KP4 75
+-#define KEY_KP5 76
+-#define KEY_KP6 77
+-#define KEY_KPPLUS 78
+-#define KEY_KP1 79
+-#define KEY_KP2 80
+-#define KEY_KP3 81
+-#define KEY_KP0 82
+-#define KEY_KPDOT 83
+-
+-#define KEY_ZENKAKUHANKAKU 85
+-#define KEY_102ND 86
+-#define KEY_F11 87
+-#define KEY_F12 88
+-#define KEY_RO 89
+-#define KEY_KATAKANA 90
+-#define KEY_HIRAGANA 91
+-#define KEY_HENKAN 92
+-#define KEY_KATAKANAHIRAGANA 93
+-#define KEY_MUHENKAN 94
+-#define KEY_KPJPCOMMA 95
+-#define KEY_KPENTER 96
+-#define KEY_RIGHTCTRL 97
+-#define KEY_KPSLASH 98
+-#define KEY_SYSRQ 99
+-#define KEY_RIGHTALT 100
+-#define KEY_LINEFEED 101
+-#define KEY_HOME 102
+-#define KEY_UP 103
+-#define KEY_PAGEUP 104
+-#define KEY_LEFT 105
+-#define KEY_RIGHT 106
+-#define KEY_END 107
+-#define KEY_DOWN 108
+-#define KEY_PAGEDOWN 109
+-#define KEY_INSERT 110
+-#define KEY_DELETE 111
+-#define KEY_MACRO 112
+-#define KEY_MUTE 113
+-#define KEY_VOLUMEDOWN 114
+-#define KEY_VOLUMEUP 115
+-#define KEY_POWER 116 /* SC System Power Down */
+-#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
+-#define KEY_HANGUEL KEY_HANGEUL
+-#define KEY_HANJA 123
+-#define KEY_YEN 124
+-#define KEY_LEFTMETA 125
+-#define KEY_RIGHTMETA 126
+-#define KEY_COMPOSE 127
+-
+-#define KEY_STOP 128 /* AC Stop */
+-#define KEY_AGAIN 129
+-#define KEY_PROPS 130 /* AC Properties */
+-#define KEY_UNDO 131 /* AC Undo */
+-#define KEY_FRONT 132
+-#define KEY_COPY 133 /* AC Copy */
+-#define KEY_OPEN 134 /* AC Open */
+-#define KEY_PASTE 135 /* AC Paste */
+-#define KEY_FIND 136 /* AC Search */
+-#define KEY_CUT 137 /* AC Cut */
+-#define KEY_HELP 138 /* AL Integrated Help Center */
+-#define KEY_MENU 139 /* Menu (show menu) */
+-#define KEY_CALC 140 /* AL Calculator */
+-#define KEY_SETUP 141
+-#define KEY_SLEEP 142 /* SC System Sleep */
+-#define KEY_WAKEUP 143 /* System Wake Up */
+-#define KEY_FILE 144 /* AL Local Machine Browser */
+-#define KEY_SENDFILE 145
+-#define KEY_DELETEFILE 146
+-#define KEY_XFER 147
+-#define KEY_PROG1 148
+-#define KEY_PROG2 149
+-#define KEY_WWW 150 /* AL Internet Browser */
+-#define KEY_MSDOS 151
+-#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
+-#define KEY_SCREENLOCK KEY_COFFEE
+-#define KEY_ROTATE_DISPLAY 153 /* Display orientation for e.g. tablets */
+-#define KEY_DIRECTION KEY_ROTATE_DISPLAY
+-#define KEY_CYCLEWINDOWS 154
+-#define KEY_MAIL 155
+-#define KEY_BOOKMARKS 156 /* AC Bookmarks */
+-#define KEY_COMPUTER 157
+-#define KEY_BACK 158 /* AC Back */
+-#define KEY_FORWARD 159 /* AC Forward */
+-#define KEY_CLOSECD 160
+-#define KEY_EJECTCD 161
+-#define KEY_EJECTCLOSECD 162
+-#define KEY_NEXTSONG 163
+-#define KEY_PLAYPAUSE 164
+-#define KEY_PREVIOUSSONG 165
+-#define KEY_STOPCD 166
+-#define KEY_RECORD 167
+-#define KEY_REWIND 168
+-#define KEY_PHONE 169 /* Media Select Telephone */
+-#define KEY_ISO 170
+-#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
+-#define KEY_HOMEPAGE 172 /* AC Home */
+-#define KEY_REFRESH 173 /* AC Refresh */
+-#define KEY_EXIT 174 /* AC Exit */
+-#define KEY_MOVE 175
+-#define KEY_EDIT 176
+-#define KEY_SCROLLUP 177
+-#define KEY_SCROLLDOWN 178
+-#define KEY_KPLEFTPAREN 179
+-#define KEY_KPRIGHTPAREN 180
+-#define KEY_NEW 181 /* AC New */
+-#define KEY_REDO 182 /* AC Redo/Repeat */
+-
+-#define KEY_F13 183
+-#define KEY_F14 184
+-#define KEY_F15 185
+-#define KEY_F16 186
+-#define KEY_F17 187
+-#define KEY_F18 188
+-#define KEY_F19 189
+-#define KEY_F20 190
+-#define KEY_F21 191
+-#define KEY_F22 192
+-#define KEY_F23 193
+-#define KEY_F24 194
+-
+-#define KEY_PLAYCD 200
+-#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
+-#define KEY_FASTFORWARD 208
+-#define KEY_BASSBOOST 209
+-#define KEY_PRINT 210 /* AC Print */
+-#define KEY_HP 211
+-#define KEY_CAMERA 212
+-#define KEY_SOUND 213
+-#define KEY_QUESTION 214
+-#define KEY_EMAIL 215
+-#define KEY_CHAT 216
+-#define KEY_SEARCH 217
+-#define KEY_CONNECT 218
+-#define KEY_FINANCE 219 /* AL Checkbook/Finance */
+-#define KEY_SPORT 220
+-#define KEY_SHOP 221
+-#define KEY_ALTERASE 222
+-#define KEY_CANCEL 223 /* AC Cancel */
+-#define KEY_BRIGHTNESSDOWN 224
+-#define KEY_BRIGHTNESSUP 225
+-#define KEY_MEDIA 226
+-
+-#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
+- outputs (Monitor/LCD/TV-out/etc) */
+-#define KEY_KBDILLUMTOGGLE 228
+-#define KEY_KBDILLUMDOWN 229
+-#define KEY_KBDILLUMUP 230
+-
+-#define KEY_SEND 231 /* AC Send */
+-#define KEY_REPLY 232 /* AC Reply */
+-#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
+-#define KEY_SAVE 234 /* AC Save */
+-#define KEY_DOCUMENTS 235
+-
+-#define KEY_BATTERY 236
+-
+-#define KEY_BLUETOOTH 237
+-#define KEY_WLAN 238
+-#define KEY_UWB 239
+-
+-#define KEY_UNKNOWN 240
+-
+-#define KEY_VIDEO_NEXT 241 /* drive next video source */
+-#define KEY_VIDEO_PREV 242 /* drive previous video source */
+-#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
+-#define KEY_BRIGHTNESS_AUTO 244 /* Set Auto Brightness: manual
+- brightness control is off,
+- rely on ambient */
+-#define KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO
+-#define KEY_DISPLAY_OFF 245 /* display device to off state */
+-
+-#define KEY_WWAN 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */
+-#define KEY_WIMAX KEY_WWAN
+-#define KEY_RFKILL 247 /* Key that controls all radios */
+-
+-#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
+-
+-/* Code 255 is reserved for special needs of AT keyboard driver */
+-
+-#define BTN_MISC 0x100
+-#define BTN_0 0x100
+-#define BTN_1 0x101
+-#define BTN_2 0x102
+-#define BTN_3 0x103
+-#define BTN_4 0x104
+-#define BTN_5 0x105
+-#define BTN_6 0x106
+-#define BTN_7 0x107
+-#define BTN_8 0x108
+-#define BTN_9 0x109
+-
+-#define BTN_MOUSE 0x110
+-#define BTN_LEFT 0x110
+-#define BTN_RIGHT 0x111
+-#define BTN_MIDDLE 0x112
+-#define BTN_SIDE 0x113
+-#define BTN_EXTRA 0x114
+-#define BTN_FORWARD 0x115
+-#define BTN_BACK 0x116
+-#define BTN_TASK 0x117
+-
+-#define BTN_JOYSTICK 0x120
+-#define BTN_TRIGGER 0x120
+-#define BTN_THUMB 0x121
+-#define BTN_THUMB2 0x122
+-#define BTN_TOP 0x123
+-#define BTN_TOP2 0x124
+-#define BTN_PINKIE 0x125
+-#define BTN_BASE 0x126
+-#define BTN_BASE2 0x127
+-#define BTN_BASE3 0x128
+-#define BTN_BASE4 0x129
+-#define BTN_BASE5 0x12a
+-#define BTN_BASE6 0x12b
+-#define BTN_DEAD 0x12f
+-
+-#define BTN_GAMEPAD 0x130
+-#define BTN_SOUTH 0x130
+-#define BTN_A BTN_SOUTH
+-#define BTN_EAST 0x131
+-#define BTN_B BTN_EAST
+-#define BTN_C 0x132
+-#define BTN_NORTH 0x133
+-#define BTN_X BTN_NORTH
+-#define BTN_WEST 0x134
+-#define BTN_Y BTN_WEST
+-#define BTN_Z 0x135
+-#define BTN_TL 0x136
+-#define BTN_TR 0x137
+-#define BTN_TL2 0x138
+-#define BTN_TR2 0x139
+-#define BTN_SELECT 0x13a
+-#define BTN_START 0x13b
+-#define BTN_MODE 0x13c
+-#define BTN_THUMBL 0x13d
+-#define BTN_THUMBR 0x13e
+-
+-#define BTN_DIGI 0x140
+-#define BTN_TOOL_PEN 0x140
+-#define BTN_TOOL_RUBBER 0x141
+-#define BTN_TOOL_BRUSH 0x142
+-#define BTN_TOOL_PENCIL 0x143
+-#define BTN_TOOL_AIRBRUSH 0x144
+-#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
+-#define BTN_GEAR_UP 0x151
+-
+-#define KEY_OK 0x160
+-#define KEY_SELECT 0x161
+-#define KEY_GOTO 0x162
+-#define KEY_CLEAR 0x163
+-#define KEY_POWER2 0x164
+-#define KEY_OPTION 0x165
+-#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
+-#define KEY_TIME 0x167
+-#define KEY_VENDOR 0x168
+-#define KEY_ARCHIVE 0x169
+-#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
+-#define KEY_CHANNEL 0x16b
+-#define KEY_FAVORITES 0x16c
+-#define KEY_EPG 0x16d
+-#define KEY_PVR 0x16e /* Media Select Home */
+-#define KEY_MHP 0x16f
+-#define KEY_LANGUAGE 0x170
+-#define KEY_TITLE 0x171
+-#define KEY_SUBTITLE 0x172
+-#define KEY_ANGLE 0x173
+-#define KEY_ZOOM 0x174
+-#define KEY_MODE 0x175
+-#define KEY_KEYBOARD 0x176
+-#define KEY_SCREEN 0x177
+-#define KEY_PC 0x178 /* Media Select Computer */
+-#define KEY_TV 0x179 /* Media Select TV */
+-#define KEY_TV2 0x17a /* Media Select Cable */
+-#define KEY_VCR 0x17b /* Media Select VCR */
+-#define KEY_VCR2 0x17c /* VCR Plus */
+-#define KEY_SAT 0x17d /* Media Select Satellite */
+-#define KEY_SAT2 0x17e
+-#define KEY_CD 0x17f /* Media Select CD */
+-#define KEY_TAPE 0x180 /* Media Select Tape */
+-#define KEY_RADIO 0x181
+-#define KEY_TUNER 0x182 /* Media Select Tuner */
+-#define KEY_PLAYER 0x183
+-#define KEY_TEXT 0x184
+-#define KEY_DVD 0x185 /* Media Select DVD */
+-#define KEY_AUX 0x186
+-#define KEY_MP3 0x187
+-#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 */
+-#define KEY_CALENDAR 0x18d
+-#define KEY_RED 0x18e
+-#define KEY_GREEN 0x18f
+-#define KEY_YELLOW 0x190
+-#define KEY_BLUE 0x191
+-#define KEY_CHANNELUP 0x192 /* Channel Increment */
+-#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
+-#define KEY_FIRST 0x194
+-#define KEY_LAST 0x195 /* Recall Last */
+-#define KEY_AB 0x196
+-#define KEY_NEXT 0x197
+-#define KEY_RESTART 0x198
+-#define KEY_SLOW 0x199
+-#define KEY_SHUFFLE 0x19a
+-#define KEY_BREAK 0x19b
+-#define KEY_PREVIOUS 0x19c
+-#define KEY_DIGITS 0x19d
+-#define KEY_TEEN 0x19e
+-#define KEY_TWEN 0x19f
+-#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
+-#define KEY_GAMES 0x1a1 /* Media Select Games */
+-#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
+-#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
+-#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
+-#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
+-#define KEY_EDITOR 0x1a6 /* AL Text Editor */
+-#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
+-#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
+-#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
+-#define KEY_DATABASE 0x1aa /* AL Database App */
+-#define KEY_NEWS 0x1ab /* AL Newsreader */
+-#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
+-#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
+-#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
+-#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
+-#define KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE
+-#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
+-#define KEY_LOGOFF 0x1b1 /* AL Logoff */
+-
+-#define KEY_DOLLAR 0x1b2
+-#define KEY_EURO 0x1b3
+-
+-#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
+-#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
+-#define KEY_INS_LINE 0x1c2
+-#define KEY_DEL_LINE 0x1c3
+-
+-#define KEY_FN 0x1d0
+-#define KEY_FN_ESC 0x1d1
+-#define KEY_FN_F1 0x1d2
+-#define KEY_FN_F2 0x1d3
+-#define KEY_FN_F3 0x1d4
+-#define KEY_FN_F4 0x1d5
+-#define KEY_FN_F5 0x1d6
+-#define KEY_FN_F6 0x1d7
+-#define KEY_FN_F7 0x1d8
+-#define KEY_FN_F8 0x1d9
+-#define KEY_FN_F9 0x1da
+-#define KEY_FN_F10 0x1db
+-#define KEY_FN_F11 0x1dc
+-#define KEY_FN_F12 0x1dd
+-#define KEY_FN_1 0x1de
+-#define KEY_FN_2 0x1df
+-#define KEY_FN_D 0x1e0
+-#define KEY_FN_E 0x1e1
+-#define KEY_FN_F 0x1e2
+-#define KEY_FN_S 0x1e3
+-#define KEY_FN_B 0x1e4
+-
+-#define KEY_BRL_DOT1 0x1f1
+-#define KEY_BRL_DOT2 0x1f2
+-#define KEY_BRL_DOT3 0x1f3
+-#define KEY_BRL_DOT4 0x1f4
+-#define KEY_BRL_DOT5 0x1f5
+-#define KEY_BRL_DOT6 0x1f6
+-#define KEY_BRL_DOT7 0x1f7
+-#define KEY_BRL_DOT8 0x1f8
+-#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_NUMERIC_A 0x20c /* Phone key A - HUT Telephony 0xb9 */
+-#define KEY_NUMERIC_B 0x20d
+-#define KEY_NUMERIC_C 0x20e
+-#define KEY_NUMERIC_D 0x20f
+-
+-#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 KEY_ATTENDANT_ON 0x21b
+-#define KEY_ATTENDANT_OFF 0x21c
+-#define KEY_ATTENDANT_TOGGLE 0x21d /* Attendant call on or off */
+-#define KEY_LIGHTS_TOGGLE 0x21e /* Reading light on or off */
+-
+-#define BTN_DPAD_UP 0x220
+-#define BTN_DPAD_DOWN 0x221
+-#define BTN_DPAD_LEFT 0x222
+-#define BTN_DPAD_RIGHT 0x223
+-
+-#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
+-
+-#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
+-#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
+-#define KEY_JOURNAL 0x242 /* AL Log/Journal/Timecard */
+-#define KEY_CONTROLPANEL 0x243 /* AL Control Panel */
+-#define KEY_APPSELECT 0x244 /* AL Select Task/Application */
+-#define KEY_SCREENSAVER 0x245 /* AL Screen Saver */
+-#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
+-
+-#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
+-#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
+-
+-#define KEY_KBDINPUTASSIST_PREV 0x260
+-#define KEY_KBDINPUTASSIST_NEXT 0x261
+-#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
+-#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
+-#define KEY_KBDINPUTASSIST_ACCEPT 0x264
+-#define KEY_KBDINPUTASSIST_CANCEL 0x265
+-
+-/* Diagonal movement keys */
+-#define KEY_RIGHT_UP 0x266
+-#define KEY_RIGHT_DOWN 0x267
+-#define KEY_LEFT_UP 0x268
+-#define KEY_LEFT_DOWN 0x269
+-
+-#define KEY_ROOT_MENU 0x26a /* Show Device's Root Menu */
+-/* Show Top Menu of the Media (e.g. DVD) */
+-#define KEY_MEDIA_TOP_MENU 0x26b
+-#define KEY_NUMERIC_11 0x26c
+-#define KEY_NUMERIC_12 0x26d
+-/*
+- * Toggle Audio Description: refers to an audio service that helps blind and
+- * visually impaired consumers understand the action in a program. Note: in
+- * some countries this is referred to as "Video Description".
+- */
+-#define KEY_AUDIO_DESC 0x26e
+-#define KEY_3D_MODE 0x26f
+-#define KEY_NEXT_FAVORITE 0x270
+-#define KEY_STOP_RECORD 0x271
+-#define KEY_PAUSE_RECORD 0x272
+-#define KEY_VOD 0x273 /* Video on Demand */
+-#define KEY_UNMUTE 0x274
+-#define KEY_FASTREVERSE 0x275
+-#define KEY_SLOWREVERSE 0x276
+-/*
+- * Control a data application associated with the currently viewed channel,
+- * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
+- */
+-#define KEY_DATA 0x277
+-#define KEY_ONSCREEN_KEYBOARD 0x278
+-
+-#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 0x2ff
+-#define KEY_CNT (KEY_MAX+1)
+-
+-/*
+- * Relative axes
+- */
+-
+-#define REL_X 0x00
+-#define REL_Y 0x01
+-#define REL_Z 0x02
+-#define REL_RX 0x03
+-#define REL_RY 0x04
+-#define REL_RZ 0x05
+-#define REL_HWHEEL 0x06
+-#define REL_DIAL 0x07
+-#define REL_WHEEL 0x08
+-#define REL_MISC 0x09
+-#define REL_MAX 0x0f
+-#define REL_CNT (REL_MAX+1)
+-
+-/*
+- * Absolute axes
+- */
+-
+-#define ABS_X 0x00
+-#define ABS_Y 0x01
+-#define ABS_Z 0x02
+-#define ABS_RX 0x03
+-#define ABS_RY 0x04
+-#define ABS_RZ 0x05
+-#define ABS_THROTTLE 0x06
+-#define ABS_RUDDER 0x07
+-#define ABS_WHEEL 0x08
+-#define ABS_GAS 0x09
+-#define ABS_BRAKE 0x0a
+-#define ABS_HAT0X 0x10
+-#define ABS_HAT0Y 0x11
+-#define ABS_HAT1X 0x12
+-#define ABS_HAT1Y 0x13
+-#define ABS_HAT2X 0x14
+-#define ABS_HAT2Y 0x15
+-#define ABS_HAT3X 0x16
+-#define ABS_HAT3Y 0x17
+-#define ABS_PRESSURE 0x18
+-#define ABS_DISTANCE 0x19
+-#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)
+-
+-/*
+- * Switch events
+- */
+-
+-#define SW_LID 0x00 /* set = lid shut */
+-#define SW_TABLET_MODE 0x01 /* set = tablet mode */
+-#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
+-#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
+- set = radio enabled */
+-#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_MUTE_DEVICE 0x0e /* set = device disabled */
+-#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
+-#define SW_MAX 0x0f
+-#define SW_CNT (SW_MAX+1)
+-
+-/*
+- * Misc events
+- */
+-
+-#define MSC_SERIAL 0x00
+-#define MSC_PULSELED 0x01
+-#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)
+-
+-/*
+- * LEDs
+- */
+-
+-#define LED_NUML 0x00
+-#define LED_CAPSL 0x01
+-#define LED_SCROLLL 0x02
+-#define LED_COMPOSE 0x03
+-#define LED_KANA 0x04
+-#define LED_SLEEP 0x05
+-#define LED_SUSPEND 0x06
+-#define LED_MUTE 0x07
+-#define LED_MISC 0x08
+-#define LED_MAIL 0x09
+-#define LED_CHARGING 0x0a
+-#define LED_MAX 0x0f
+-#define LED_CNT (LED_MAX+1)
+-
+-/*
+- * Autorepeat values
+- */
+-
+-#define REP_DELAY 0x00
+-#define REP_PERIOD 0x01
+-#define REP_MAX 0x01
+-#define REP_CNT (REP_MAX+1)
+-
+-/*
+- * Sounds
+- */
+-
+-#define SND_CLICK 0x00
+-#define SND_BELL 0x01
+-#define SND_TONE 0x02
+-#define SND_MAX 0x07
+-#define SND_CNT (SND_MAX+1)
+-
+-#endif
+diff --git a/include/linux/input.h b/include/linux/input.h
+index b3044aec..03c512ef 100644
+--- include/linux/input.h
++++ include/linux/input.h
+@@ -1,506 +1,5 @@
+-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+-/*
+- * Copyright (c) 1999-2002 Vojtech Pavlik
+- *
+- * This program is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License version 2 as published by
+- * the Free Software Foundation.
+- */
+-#ifndef _INPUT_H
+-#define _INPUT_H
+-
+-
+-#include <sys/time.h>
+-#include <sys/ioctl.h>
+-#include <sys/types.h>
+-#include <linux/types.h>
+-
+-#include "input-event-codes.h"
+-
+-/*
+- * The event structure itself
+- * Note that __USE_TIME_BITS64 is defined by libc based on
+- * application's request to use 64 bit time_t.
+- */
+-
+-struct input_event {
+-#if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL)
+- struct timeval time;
+-#define input_event_sec time.tv_sec
+-#define input_event_usec time.tv_usec
+-#else
+- __kernel_ulong_t __sec;
+- __kernel_ulong_t __usec;
+-#define input_event_sec __sec
+-#define input_event_usec __usec
++#ifdef __linux__
++#include "linux/input.h"
++#elif __FreeBSD__
++#include "freebsd/input.h"
+ #endif
+- __u16 type;
+- __u16 code;
+- __s32 value;
+-};
+-
+-/*
+- * Protocol version.
+- */
+-
+-#define EV_VERSION 0x010001
+-
+-/*
+- * IOCTLs (0x00 - 0x7f)
+- */
+-
+-struct input_id {
+- __u16 bustype;
+- __u16 vendor;
+- __u16 product;
+- __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.
+- *
+- * The default 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.
+- * When INPUT_PROP_ACCELEROMETER is set the resolution changes.
+- * The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
+- * in units per g (units/g) and in units per degree per second
+- * (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
+- */
+-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];
+-};
+-
+-struct input_mask {
+- __u32 type;
+- __u32 codes_size;
+- __u64 codes_ptr;
+-};
+-
+-#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, 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 */
+-
+-/**
+- * 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 EVIOCSFF _IOW('E', 0x80, struct ff_effect) /* send a force effect to a force feedback device */
+-#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
+-#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
+-
+-#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */
+-#define EVIOCREVOKE _IOW('E', 0x91, int) /* Revoke device access */
+-
+-/**
+- * EVIOCGMASK - Retrieve current event mask
+- *
+- * This ioctl allows user to retrieve the current event mask for specific
+- * event type. The argument must be of type "struct input_mask" and
+- * specifies the event type to query, the address of the receive buffer and
+- * the size of the receive buffer.
+- *
+- * The event mask is a per-client mask that specifies which events are
+- * forwarded to the client. Each event code is represented by a single bit
+- * in the event mask. If the bit is set, the event is passed to the client
+- * normally. Otherwise, the event is filtered and will never be queued on
+- * the client's receive buffer.
+- *
+- * Event masks do not affect global state of the input device. They only
+- * affect the file descriptor they are applied to.
+- *
+- * The default event mask for a client has all bits set, i.e. all events
+- * are forwarded to the client. If the kernel is queried for an unknown
+- * event type or if the receive buffer is larger than the number of
+- * event codes known to the kernel, the kernel returns all zeroes for those
+- * codes.
+- *
+- * At maximum, codes_size bytes are copied.
+- *
+- * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
+- * if the receive-buffer points to invalid memory, or EINVAL if the kernel
+- * does not implement the ioctl.
+- */
+-#define EVIOCGMASK _IOR('E', 0x92, struct input_mask) /* Get event-masks */
+-
+-/**
+- * EVIOCSMASK - Set event mask
+- *
+- * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
+- * current event mask, this changes the client's event mask for a specific
+- * type. See EVIOCGMASK for a description of event-masks and the
+- * argument-type.
+- *
+- * This ioctl provides full forward compatibility. If the passed event type
+- * is unknown to the kernel, or if the number of event codes specified in
+- * the mask is bigger than what is known to the kernel, the ioctl is still
+- * accepted and applied. However, any unknown codes are left untouched and
+- * stay cleared. That means, the kernel always filters unknown codes
+- * regardless of what the client requests. If the new mask doesn't cover
+- * all known event-codes, all remaining codes are automatically cleared and
+- * thus filtered.
+- *
+- * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
+- * returned if the receive-buffer points to invalid memory. EINVAL is returned
+- * if the kernel does not implement the ioctl.
+- */
+-#define EVIOCSMASK _IOW('E', 0x93, struct input_mask) /* Set event-masks */
+-
+-#define EVIOCSCLOCKID _IOW('E', 0xa0, int) /* Set clockid to be used for timestamps */
+-
+-/*
+- * IDs.
+- */
+-
+-#define ID_BUS 0
+-#define ID_VENDOR 1
+-#define ID_PRODUCT 2
+-#define ID_VERSION 3
+-
+-#define BUS_PCI 0x01
+-#define BUS_ISAPNP 0x02
+-#define BUS_USB 0x03
+-#define BUS_HIL 0x04
+-#define BUS_BLUETOOTH 0x05
+-#define BUS_VIRTUAL 0x06
+-
+-#define BUS_ISA 0x10
+-#define BUS_I8042 0x11
+-#define BUS_XTKBD 0x12
+-#define BUS_RS232 0x13
+-#define BUS_GAMEPORT 0x14
+-#define BUS_PARPORT 0x15
+-#define BUS_AMIGA 0x16
+-#define BUS_ADB 0x17
+-#define BUS_I2C 0x18
+-#define BUS_HOST 0x19
+-#define BUS_GSC 0x1A
+-#define BUS_ATARI 0x1B
+-#define BUS_SPI 0x1C
+-#define BUS_RMI 0x1D
+-#define BUS_CEC 0x1E
+-#define BUS_INTEL_ISHTP 0x1F
+-
+-/*
+- * MT_TOOL types
+- */
+-#define MT_TOOL_FINGER 0
+-#define MT_TOOL_PEN 1
+-#define MT_TOOL_PALM 2
+-#define MT_TOOL_MAX 2
+-
+-/*
+- * Values describing the status of a force-feedback effect
+- */
+-#define FF_STATUS_STOPPED 0x00
+-#define FF_STATUS_PLAYING 0x01
+-#define FF_STATUS_MAX 0x01
+-
+-/*
+- * Structures used in ioctls to upload effects to a device
+- * They are pieces of a bigger structure (called ff_effect)
+- */
+-
+-/*
+- * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
+- * should not be used and have unspecified results.
+- */
+-
+-/**
+- * struct ff_replay - defines scheduling of the force-feedback effect
+- * @length: duration of the effect
+- * @delay: delay before effect should start playing
+- */
+-struct ff_replay {
+- __u16 length;
+- __u16 delay;
+-};
+-
+-/**
+- * struct ff_trigger - defines what triggers the force-feedback effect
+- * @button: number of the button triggering the effect
+- * @interval: controls how soon the effect can be re-triggered
+- */
+-struct ff_trigger {
+- __u16 button;
+- __u16 interval;
+-};
+-
+-/**
+- * struct ff_envelope - generic force-feedback effect envelope
+- * @attack_length: duration of the attack (ms)
+- * @attack_level: level at the beginning of the attack
+- * @fade_length: duration of fade (ms)
+- * @fade_level: level at the end of fade
+- *
+- * The @attack_level and @fade_level are absolute values; when applying
+- * envelope force-feedback core will convert to positive/negative
+- * value based on polarity of the default level of the effect.
+- * Valid range for the attack and fade levels is 0x0000 - 0x7fff
+- */
+-struct ff_envelope {
+- __u16 attack_length;
+- __u16 attack_level;
+- __u16 fade_length;
+- __u16 fade_level;
+-};
+-
+-/**
+- * struct ff_constant_effect - defines parameters of a constant force-feedback effect
+- * @level: strength of the effect; may be negative
+- * @envelope: envelope data
+- */
+-struct ff_constant_effect {
+- __s16 level;
+- struct ff_envelope envelope;
+-};
+-
+-/**
+- * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
+- * @start_level: beginning strength of the effect; may be negative
+- * @end_level: final strength of the effect; may be negative
+- * @envelope: envelope data
+- */
+-struct ff_ramp_effect {
+- __s16 start_level;
+- __s16 end_level;
+- struct ff_envelope envelope;
+-};
+-
+-/**
+- * struct ff_condition_effect - defines a spring or friction force-feedback effect
+- * @right_saturation: maximum level when joystick moved all way to the right
+- * @left_saturation: same for the left side
+- * @right_coeff: controls how fast the force grows when the joystick moves
+- * to the right
+- * @left_coeff: same for the left side
+- * @deadband: size of the dead zone, where no force is produced
+- * @center: position of the dead zone
+- */
+-struct ff_condition_effect {
+- __u16 right_saturation;
+- __u16 left_saturation;
+-
+- __s16 right_coeff;
+- __s16 left_coeff;
+-
+- __u16 deadband;
+- __s16 center;
+-};
+-
+-/**
+- * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
+- * @waveform: kind of the effect (wave)
+- * @period: period of the wave (ms)
+- * @magnitude: peak value
+- * @offset: mean value of the wave (roughly)
+- * @phase: 'horizontal' shift
+- * @envelope: envelope data
+- * @custom_len: number of samples (FF_CUSTOM only)
+- * @custom_data: buffer of samples (FF_CUSTOM only)
+- *
+- * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
+- * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
+- * for the time being as no driver supports it yet.
+- *
+- * Note: the data pointed by custom_data is copied by the driver.
+- * You can therefore dispose of the memory after the upload/update.
+- */
+-struct ff_periodic_effect {
+- __u16 waveform;
+- __u16 period;
+- __s16 magnitude;
+- __s16 offset;
+- __u16 phase;
+-
+- struct ff_envelope envelope;
+-
+- __u32 custom_len;
+- __s16 *custom_data;
+-};
+-
+-/**
+- * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
+- * @strong_magnitude: magnitude of the heavy motor
+- * @weak_magnitude: magnitude of the light one
+- *
+- * Some rumble pads have two motors of different weight. Strong_magnitude
+- * represents the magnitude of the vibration generated by the heavy one.
+- */
+-struct ff_rumble_effect {
+- __u16 strong_magnitude;
+- __u16 weak_magnitude;
+-};
+-
+-/**
+- * struct ff_effect - defines force feedback effect
+- * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
+- * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+- * @id: an unique id assigned to an effect
+- * @direction: direction of the effect
+- * @trigger: trigger conditions (struct ff_trigger)
+- * @replay: scheduling of the effect (struct ff_replay)
+- * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
+- * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
+- * defining effect parameters
+- *
+- * This structure is sent through ioctl from the application to the driver.
+- * To create a new effect application should set its @id to -1; the kernel
+- * will return assigned @id which can later be used to update or delete
+- * this effect.
+- *
+- * Direction of the effect is encoded as follows:
+- * 0 deg -> 0x0000 (down)
+- * 90 deg -> 0x4000 (left)
+- * 180 deg -> 0x8000 (up)
+- * 270 deg -> 0xC000 (right)
+- */
+-struct ff_effect {
+- __u16 type;
+- __s16 id;
+- __u16 direction;
+- struct ff_trigger trigger;
+- struct ff_replay replay;
+-
+- union {
+- struct ff_constant_effect constant;
+- struct ff_ramp_effect ramp;
+- struct ff_periodic_effect periodic;
+- struct ff_condition_effect condition[2]; /* One for each axis */
+- struct ff_rumble_effect rumble;
+- } u;
+-};
+-
+-/*
+- * Force feedback effect types
+- */
+-
+-#define FF_RUMBLE 0x50
+-#define FF_PERIODIC 0x51
+-#define FF_CONSTANT 0x52
+-#define FF_SPRING 0x53
+-#define FF_FRICTION 0x54
+-#define FF_DAMPER 0x55
+-#define FF_INERTIA 0x56
+-#define FF_RAMP 0x57
+-
+-#define FF_EFFECT_MIN FF_RUMBLE
+-#define FF_EFFECT_MAX FF_RAMP
+-
+-/*
+- * Force feedback periodic effect types
+- */
+-
+-#define FF_SQUARE 0x58
+-#define FF_TRIANGLE 0x59
+-#define FF_SINE 0x5a
+-#define FF_SAW_UP 0x5b
+-#define FF_SAW_DOWN 0x5c
+-#define FF_CUSTOM 0x5d
+-
+-#define FF_WAVEFORM_MIN FF_SQUARE
+-#define FF_WAVEFORM_MAX FF_CUSTOM
+-
+-/*
+- * Set ff device properties
+- */
+-
+-#define FF_GAIN 0x60
+-#define FF_AUTOCENTER 0x61
+-
+-/*
+- * ff->playback(effect_id = FF_GAIN) is the first effect_id to
+- * cause a collision with another ff method, in this case ff->set_gain().
+- * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
+- * and thus the total number of effects should never exceed FF_GAIN.
+- */
+-#define FF_MAX_EFFECTS FF_GAIN
+-
+-#define FF_MAX 0x7f
+-#define FF_CNT (FF_MAX+1)
+-
+-#endif /* _INPUT_H */
+diff --git a/include/linux/linux/input-event-codes.h b/include/linux/linux/input-event-codes.h
+new file mode 100644
+index 00000000..9771e4f8
+--- /dev/null
++++ include/linux/linux/input-event-codes.h
+@@ -0,0 +1,837 @@
++/*
++ * Input event codes
++ *
++ * *** IMPORTANT ***
++ * This file is not only included from C-code but also from devicetree source
++ * files. As such this file MUST only contain comments and defines.
++ *
++ * Copyright (c) 1999-2002 Vojtech Pavlik
++ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ */
++#ifndef _UAPI_INPUT_EVENT_CODES_H
++#define _UAPI_INPUT_EVENT_CODES_H
++
++/*
++ * 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_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
++#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
++#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
++
++#define INPUT_PROP_MAX 0x1f
++#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
++
++/*
++ * Event types
++ */
++
++#define EV_SYN 0x00
++#define EV_KEY 0x01
++#define EV_REL 0x02
++#define EV_ABS 0x03
++#define EV_MSC 0x04
++#define EV_SW 0x05
++#define EV_LED 0x11
++#define EV_SND 0x12
++#define EV_REP 0x14
++#define EV_FF 0x15
++#define EV_PWR 0x16
++#define EV_FF_STATUS 0x17
++#define EV_MAX 0x1f
++#define EV_CNT (EV_MAX+1)
++
++/*
++ * Synchronization events.
++ */
++
++#define SYN_REPORT 0
++#define SYN_CONFIG 1
++#define SYN_MT_REPORT 2
++#define SYN_DROPPED 3
++#define SYN_MAX 0xf
++#define SYN_CNT (SYN_MAX+1)
++
++/*
++ * Keys and buttons
++ *
++ * Most of the keys/buttons are modeled after USB HUT 1.12
++ * (see http://www.usb.org/developers/hidpage).
++ * Abbreviations in the comments:
++ * AC - Application Control
++ * AL - Application Launch Button
++ * SC - System Control
++ */
++
++#define KEY_RESERVED 0
++#define KEY_ESC 1
++#define KEY_1 2
++#define KEY_2 3
++#define KEY_3 4
++#define KEY_4 5
++#define KEY_5 6
++#define KEY_6 7
++#define KEY_7 8
++#define KEY_8 9
++#define KEY_9 10
++#define KEY_0 11
++#define KEY_MINUS 12
++#define KEY_EQUAL 13
++#define KEY_BACKSPACE 14
++#define KEY_TAB 15
++#define KEY_Q 16
++#define KEY_W 17
++#define KEY_E 18
++#define KEY_R 19
++#define KEY_T 20
++#define KEY_Y 21
++#define KEY_U 22
++#define KEY_I 23
++#define KEY_O 24
++#define KEY_P 25
++#define KEY_LEFTBRACE 26
++#define KEY_RIGHTBRACE 27
++#define KEY_ENTER 28
++#define KEY_LEFTCTRL 29
++#define KEY_A 30
++#define KEY_S 31
++#define KEY_D 32
++#define KEY_F 33
++#define KEY_G 34
++#define KEY_H 35
++#define KEY_J 36
++#define KEY_K 37
++#define KEY_L 38
++#define KEY_SEMICOLON 39
++#define KEY_APOSTROPHE 40
++#define KEY_GRAVE 41
++#define KEY_LEFTSHIFT 42
++#define KEY_BACKSLASH 43
++#define KEY_Z 44
++#define KEY_X 45
++#define KEY_C 46
++#define KEY_V 47
++#define KEY_B 48
++#define KEY_N 49
++#define KEY_M 50
++#define KEY_COMMA 51
++#define KEY_DOT 52
++#define KEY_SLASH 53
++#define KEY_RIGHTSHIFT 54
++#define KEY_KPASTERISK 55
++#define KEY_LEFTALT 56
++#define KEY_SPACE 57
++#define KEY_CAPSLOCK 58
++#define KEY_F1 59
++#define KEY_F2 60
++#define KEY_F3 61
++#define KEY_F4 62
++#define KEY_F5 63
++#define KEY_F6 64
++#define KEY_F7 65
++#define KEY_F8 66
++#define KEY_F9 67
++#define KEY_F10 68
++#define KEY_NUMLOCK 69
++#define KEY_SCROLLLOCK 70
++#define KEY_KP7 71
++#define KEY_KP8 72
++#define KEY_KP9 73
++#define KEY_KPMINUS 74
++#define KEY_KP4 75
++#define KEY_KP5 76
++#define KEY_KP6 77
++#define KEY_KPPLUS 78
++#define KEY_KP1 79
++#define KEY_KP2 80
++#define KEY_KP3 81
++#define KEY_KP0 82
++#define KEY_KPDOT 83
++
++#define KEY_ZENKAKUHANKAKU 85
++#define KEY_102ND 86
++#define KEY_F11 87
++#define KEY_F12 88
++#define KEY_RO 89
++#define KEY_KATAKANA 90
++#define KEY_HIRAGANA 91
++#define KEY_HENKAN 92
++#define KEY_KATAKANAHIRAGANA 93
++#define KEY_MUHENKAN 94
++#define KEY_KPJPCOMMA 95
++#define KEY_KPENTER 96
++#define KEY_RIGHTCTRL 97
++#define KEY_KPSLASH 98
++#define KEY_SYSRQ 99
++#define KEY_RIGHTALT 100
++#define KEY_LINEFEED 101
++#define KEY_HOME 102
++#define KEY_UP 103
++#define KEY_PAGEUP 104
++#define KEY_LEFT 105
++#define KEY_RIGHT 106
++#define KEY_END 107
++#define KEY_DOWN 108
++#define KEY_PAGEDOWN 109
++#define KEY_INSERT 110
++#define KEY_DELETE 111
++#define KEY_MACRO 112
++#define KEY_MUTE 113
++#define KEY_VOLUMEDOWN 114
++#define KEY_VOLUMEUP 115
++#define KEY_POWER 116 /* SC System Power Down */
++#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
++#define KEY_HANGUEL KEY_HANGEUL
++#define KEY_HANJA 123
++#define KEY_YEN 124
++#define KEY_LEFTMETA 125
++#define KEY_RIGHTMETA 126
++#define KEY_COMPOSE 127
++
++#define KEY_STOP 128 /* AC Stop */
++#define KEY_AGAIN 129
++#define KEY_PROPS 130 /* AC Properties */
++#define KEY_UNDO 131 /* AC Undo */
++#define KEY_FRONT 132
++#define KEY_COPY 133 /* AC Copy */
++#define KEY_OPEN 134 /* AC Open */
++#define KEY_PASTE 135 /* AC Paste */
++#define KEY_FIND 136 /* AC Search */
++#define KEY_CUT 137 /* AC Cut */
++#define KEY_HELP 138 /* AL Integrated Help Center */
++#define KEY_MENU 139 /* Menu (show menu) */
++#define KEY_CALC 140 /* AL Calculator */
++#define KEY_SETUP 141
++#define KEY_SLEEP 142 /* SC System Sleep */
++#define KEY_WAKEUP 143 /* System Wake Up */
++#define KEY_FILE 144 /* AL Local Machine Browser */
++#define KEY_SENDFILE 145
++#define KEY_DELETEFILE 146
++#define KEY_XFER 147
++#define KEY_PROG1 148
++#define KEY_PROG2 149
++#define KEY_WWW 150 /* AL Internet Browser */
++#define KEY_MSDOS 151
++#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
++#define KEY_SCREENLOCK KEY_COFFEE
++#define KEY_ROTATE_DISPLAY 153 /* Display orientation for e.g. tablets */
++#define KEY_DIRECTION KEY_ROTATE_DISPLAY
++#define KEY_CYCLEWINDOWS 154
++#define KEY_MAIL 155
++#define KEY_BOOKMARKS 156 /* AC Bookmarks */
++#define KEY_COMPUTER 157
++#define KEY_BACK 158 /* AC Back */
++#define KEY_FORWARD 159 /* AC Forward */
++#define KEY_CLOSECD 160
++#define KEY_EJECTCD 161
++#define KEY_EJECTCLOSECD 162
++#define KEY_NEXTSONG 163
++#define KEY_PLAYPAUSE 164
++#define KEY_PREVIOUSSONG 165
++#define KEY_STOPCD 166
++#define KEY_RECORD 167
++#define KEY_REWIND 168
++#define KEY_PHONE 169 /* Media Select Telephone */
++#define KEY_ISO 170
++#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
++#define KEY_HOMEPAGE 172 /* AC Home */
++#define KEY_REFRESH 173 /* AC Refresh */
++#define KEY_EXIT 174 /* AC Exit */
++#define KEY_MOVE 175
++#define KEY_EDIT 176
++#define KEY_SCROLLUP 177
++#define KEY_SCROLLDOWN 178
++#define KEY_KPLEFTPAREN 179
++#define KEY_KPRIGHTPAREN 180
++#define KEY_NEW 181 /* AC New */
++#define KEY_REDO 182 /* AC Redo/Repeat */
++
++#define KEY_F13 183
++#define KEY_F14 184
++#define KEY_F15 185
++#define KEY_F16 186
++#define KEY_F17 187
++#define KEY_F18 188
++#define KEY_F19 189
++#define KEY_F20 190
++#define KEY_F21 191
++#define KEY_F22 192
++#define KEY_F23 193
++#define KEY_F24 194
++
++#define KEY_PLAYCD 200
++#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
++#define KEY_FASTFORWARD 208
++#define KEY_BASSBOOST 209
++#define KEY_PRINT 210 /* AC Print */
++#define KEY_HP 211
++#define KEY_CAMERA 212
++#define KEY_SOUND 213
++#define KEY_QUESTION 214
++#define KEY_EMAIL 215
++#define KEY_CHAT 216
++#define KEY_SEARCH 217
++#define KEY_CONNECT 218
++#define KEY_FINANCE 219 /* AL Checkbook/Finance */
++#define KEY_SPORT 220
++#define KEY_SHOP 221
++#define KEY_ALTERASE 222
++#define KEY_CANCEL 223 /* AC Cancel */
++#define KEY_BRIGHTNESSDOWN 224
++#define KEY_BRIGHTNESSUP 225
++#define KEY_MEDIA 226
++
++#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
++ outputs (Monitor/LCD/TV-out/etc) */
++#define KEY_KBDILLUMTOGGLE 228
++#define KEY_KBDILLUMDOWN 229
++#define KEY_KBDILLUMUP 230
++
++#define KEY_SEND 231 /* AC Send */
++#define KEY_REPLY 232 /* AC Reply */
++#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
++#define KEY_SAVE 234 /* AC Save */
++#define KEY_DOCUMENTS 235
++
++#define KEY_BATTERY 236
++
++#define KEY_BLUETOOTH 237
++#define KEY_WLAN 238
++#define KEY_UWB 239
++
++#define KEY_UNKNOWN 240
++
++#define KEY_VIDEO_NEXT 241 /* drive next video source */
++#define KEY_VIDEO_PREV 242 /* drive previous video source */
++#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
++#define KEY_BRIGHTNESS_AUTO 244 /* Set Auto Brightness: manual
++ brightness control is off,
++ rely on ambient */
++#define KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO
++#define KEY_DISPLAY_OFF 245 /* display device to off state */
++
++#define KEY_WWAN 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */
++#define KEY_WIMAX KEY_WWAN
++#define KEY_RFKILL 247 /* Key that controls all radios */
++
++#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
++
++/* Code 255 is reserved for special needs of AT keyboard driver */
++
++#define BTN_MISC 0x100
++#define BTN_0 0x100
++#define BTN_1 0x101
++#define BTN_2 0x102
++#define BTN_3 0x103
++#define BTN_4 0x104
++#define BTN_5 0x105
++#define BTN_6 0x106
++#define BTN_7 0x107
++#define BTN_8 0x108
++#define BTN_9 0x109
++
++#define BTN_MOUSE 0x110
++#define BTN_LEFT 0x110
++#define BTN_RIGHT 0x111
++#define BTN_MIDDLE 0x112
++#define BTN_SIDE 0x113
++#define BTN_EXTRA 0x114
++#define BTN_FORWARD 0x115
++#define BTN_BACK 0x116
++#define BTN_TASK 0x117
++
++#define BTN_JOYSTICK 0x120
++#define BTN_TRIGGER 0x120
++#define BTN_THUMB 0x121
++#define BTN_THUMB2 0x122
++#define BTN_TOP 0x123
++#define BTN_TOP2 0x124
++#define BTN_PINKIE 0x125
++#define BTN_BASE 0x126
++#define BTN_BASE2 0x127
++#define BTN_BASE3 0x128
++#define BTN_BASE4 0x129
++#define BTN_BASE5 0x12a
++#define BTN_BASE6 0x12b
++#define BTN_DEAD 0x12f
++
++#define BTN_GAMEPAD 0x130
++#define BTN_SOUTH 0x130
++#define BTN_A BTN_SOUTH
++#define BTN_EAST 0x131
++#define BTN_B BTN_EAST
++#define BTN_C 0x132
++#define BTN_NORTH 0x133
++#define BTN_X BTN_NORTH
++#define BTN_WEST 0x134
++#define BTN_Y BTN_WEST
++#define BTN_Z 0x135
++#define BTN_TL 0x136
++#define BTN_TR 0x137
++#define BTN_TL2 0x138
++#define BTN_TR2 0x139
++#define BTN_SELECT 0x13a
++#define BTN_START 0x13b
++#define BTN_MODE 0x13c
++#define BTN_THUMBL 0x13d
++#define BTN_THUMBR 0x13e
++
++#define BTN_DIGI 0x140
++#define BTN_TOOL_PEN 0x140
++#define BTN_TOOL_RUBBER 0x141
++#define BTN_TOOL_BRUSH 0x142
++#define BTN_TOOL_PENCIL 0x143
++#define BTN_TOOL_AIRBRUSH 0x144
++#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
++#define BTN_GEAR_UP 0x151
++
++#define KEY_OK 0x160
++#define KEY_SELECT 0x161
++#define KEY_GOTO 0x162
++#define KEY_CLEAR 0x163
++#define KEY_POWER2 0x164
++#define KEY_OPTION 0x165
++#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
++#define KEY_TIME 0x167
++#define KEY_VENDOR 0x168
++#define KEY_ARCHIVE 0x169
++#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
++#define KEY_CHANNEL 0x16b
++#define KEY_FAVORITES 0x16c
++#define KEY_EPG 0x16d
++#define KEY_PVR 0x16e /* Media Select Home */
++#define KEY_MHP 0x16f
++#define KEY_LANGUAGE 0x170
++#define KEY_TITLE 0x171
++#define KEY_SUBTITLE 0x172
++#define KEY_ANGLE 0x173
++#define KEY_ZOOM 0x174
++#define KEY_MODE 0x175
++#define KEY_KEYBOARD 0x176
++#define KEY_SCREEN 0x177
++#define KEY_PC 0x178 /* Media Select Computer */
++#define KEY_TV 0x179 /* Media Select TV */
++#define KEY_TV2 0x17a /* Media Select Cable */
++#define KEY_VCR 0x17b /* Media Select VCR */
++#define KEY_VCR2 0x17c /* VCR Plus */
++#define KEY_SAT 0x17d /* Media Select Satellite */
++#define KEY_SAT2 0x17e
++#define KEY_CD 0x17f /* Media Select CD */
++#define KEY_TAPE 0x180 /* Media Select Tape */
++#define KEY_RADIO 0x181
++#define KEY_TUNER 0x182 /* Media Select Tuner */
++#define KEY_PLAYER 0x183
++#define KEY_TEXT 0x184
++#define KEY_DVD 0x185 /* Media Select DVD */
++#define KEY_AUX 0x186
++#define KEY_MP3 0x187
++#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 */
++#define KEY_CALENDAR 0x18d
++#define KEY_RED 0x18e
++#define KEY_GREEN 0x18f
++#define KEY_YELLOW 0x190
++#define KEY_BLUE 0x191
++#define KEY_CHANNELUP 0x192 /* Channel Increment */
++#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
++#define KEY_FIRST 0x194
++#define KEY_LAST 0x195 /* Recall Last */
++#define KEY_AB 0x196
++#define KEY_NEXT 0x197
++#define KEY_RESTART 0x198
++#define KEY_SLOW 0x199
++#define KEY_SHUFFLE 0x19a
++#define KEY_BREAK 0x19b
++#define KEY_PREVIOUS 0x19c
++#define KEY_DIGITS 0x19d
++#define KEY_TEEN 0x19e
++#define KEY_TWEN 0x19f
++#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
++#define KEY_GAMES 0x1a1 /* Media Select Games */
++#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
++#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
++#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
++#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
++#define KEY_EDITOR 0x1a6 /* AL Text Editor */
++#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
++#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
++#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
++#define KEY_DATABASE 0x1aa /* AL Database App */
++#define KEY_NEWS 0x1ab /* AL Newsreader */
++#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
++#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
++#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
++#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
++#define KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE
++#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
++#define KEY_LOGOFF 0x1b1 /* AL Logoff */
++
++#define KEY_DOLLAR 0x1b2
++#define KEY_EURO 0x1b3
++
++#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
++#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
++#define KEY_INS_LINE 0x1c2
++#define KEY_DEL_LINE 0x1c3
++
++#define KEY_FN 0x1d0
++#define KEY_FN_ESC 0x1d1
++#define KEY_FN_F1 0x1d2
++#define KEY_FN_F2 0x1d3
++#define KEY_FN_F3 0x1d4
++#define KEY_FN_F4 0x1d5
++#define KEY_FN_F5 0x1d6
++#define KEY_FN_F6 0x1d7
++#define KEY_FN_F7 0x1d8
++#define KEY_FN_F8 0x1d9
++#define KEY_FN_F9 0x1da
++#define KEY_FN_F10 0x1db
++#define KEY_FN_F11 0x1dc
++#define KEY_FN_F12 0x1dd
++#define KEY_FN_1 0x1de
++#define KEY_FN_2 0x1df
++#define KEY_FN_D 0x1e0
++#define KEY_FN_E 0x1e1
++#define KEY_FN_F 0x1e2
++#define KEY_FN_S 0x1e3
++#define KEY_FN_B 0x1e4
++
++#define KEY_BRL_DOT1 0x1f1
++#define KEY_BRL_DOT2 0x1f2
++#define KEY_BRL_DOT3 0x1f3
++#define KEY_BRL_DOT4 0x1f4
++#define KEY_BRL_DOT5 0x1f5
++#define KEY_BRL_DOT6 0x1f6
++#define KEY_BRL_DOT7 0x1f7
++#define KEY_BRL_DOT8 0x1f8
++#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_NUMERIC_A 0x20c /* Phone key A - HUT Telephony 0xb9 */
++#define KEY_NUMERIC_B 0x20d
++#define KEY_NUMERIC_C 0x20e
++#define KEY_NUMERIC_D 0x20f
++
++#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 KEY_ATTENDANT_ON 0x21b
++#define KEY_ATTENDANT_OFF 0x21c
++#define KEY_ATTENDANT_TOGGLE 0x21d /* Attendant call on or off */
++#define KEY_LIGHTS_TOGGLE 0x21e /* Reading light on or off */
++
++#define BTN_DPAD_UP 0x220
++#define BTN_DPAD_DOWN 0x221
++#define BTN_DPAD_LEFT 0x222
++#define BTN_DPAD_RIGHT 0x223
++
++#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
++
++#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
++#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
++#define KEY_JOURNAL 0x242 /* AL Log/Journal/Timecard */
++#define KEY_CONTROLPANEL 0x243 /* AL Control Panel */
++#define KEY_APPSELECT 0x244 /* AL Select Task/Application */
++#define KEY_SCREENSAVER 0x245 /* AL Screen Saver */
++#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
++
++#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
++#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
++
++#define KEY_KBDINPUTASSIST_PREV 0x260
++#define KEY_KBDINPUTASSIST_NEXT 0x261
++#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
++#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
++#define KEY_KBDINPUTASSIST_ACCEPT 0x264
++#define KEY_KBDINPUTASSIST_CANCEL 0x265
++
++/* Diagonal movement keys */
++#define KEY_RIGHT_UP 0x266
++#define KEY_RIGHT_DOWN 0x267
++#define KEY_LEFT_UP 0x268
++#define KEY_LEFT_DOWN 0x269
++
++#define KEY_ROOT_MENU 0x26a /* Show Device's Root Menu */
++/* Show Top Menu of the Media (e.g. DVD) */
++#define KEY_MEDIA_TOP_MENU 0x26b
++#define KEY_NUMERIC_11 0x26c
++#define KEY_NUMERIC_12 0x26d
++/*
++ * Toggle Audio Description: refers to an audio service that helps blind and
++ * visually impaired consumers understand the action in a program. Note: in
++ * some countries this is referred to as "Video Description".
++ */
++#define KEY_AUDIO_DESC 0x26e
++#define KEY_3D_MODE 0x26f
++#define KEY_NEXT_FAVORITE 0x270
++#define KEY_STOP_RECORD 0x271
++#define KEY_PAUSE_RECORD 0x272
++#define KEY_VOD 0x273 /* Video on Demand */
++#define KEY_UNMUTE 0x274
++#define KEY_FASTREVERSE 0x275
++#define KEY_SLOWREVERSE 0x276
++/*
++ * Control a data application associated with the currently viewed channel,
++ * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
++ */
++#define KEY_DATA 0x277
++#define KEY_ONSCREEN_KEYBOARD 0x278
++
++#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 0x2ff
++#define KEY_CNT (KEY_MAX+1)
++
++/*
++ * Relative axes
++ */
++
++#define REL_X 0x00
++#define REL_Y 0x01
++#define REL_Z 0x02
++#define REL_RX 0x03
++#define REL_RY 0x04
++#define REL_RZ 0x05
++#define REL_HWHEEL 0x06
++#define REL_DIAL 0x07
++#define REL_WHEEL 0x08
++#define REL_MISC 0x09
++#define REL_MAX 0x0f
++#define REL_CNT (REL_MAX+1)
++
++/*
++ * Absolute axes
++ */
++
++#define ABS_X 0x00
++#define ABS_Y 0x01
++#define ABS_Z 0x02
++#define ABS_RX 0x03
++#define ABS_RY 0x04
++#define ABS_RZ 0x05
++#define ABS_THROTTLE 0x06
++#define ABS_RUDDER 0x07
++#define ABS_WHEEL 0x08
++#define ABS_GAS 0x09
++#define ABS_BRAKE 0x0a
++#define ABS_HAT0X 0x10
++#define ABS_HAT0Y 0x11
++#define ABS_HAT1X 0x12
++#define ABS_HAT1Y 0x13
++#define ABS_HAT2X 0x14
++#define ABS_HAT2Y 0x15
++#define ABS_HAT3X 0x16
++#define ABS_HAT3Y 0x17
++#define ABS_PRESSURE 0x18
++#define ABS_DISTANCE 0x19
++#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)
++
++/*
++ * Switch events
++ */
++
++#define SW_LID 0x00 /* set = lid shut */
++#define SW_TABLET_MODE 0x01 /* set = tablet mode */
++#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
++#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
++ set = radio enabled */
++#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_MUTE_DEVICE 0x0e /* set = device disabled */
++#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
++#define SW_MAX 0x0f
++#define SW_CNT (SW_MAX+1)
++
++/*
++ * Misc events
++ */
++
++#define MSC_SERIAL 0x00
++#define MSC_PULSELED 0x01
++#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)
++
++/*
++ * LEDs
++ */
++
++#define LED_NUML 0x00
++#define LED_CAPSL 0x01
++#define LED_SCROLLL 0x02
++#define LED_COMPOSE 0x03
++#define LED_KANA 0x04
++#define LED_SLEEP 0x05
++#define LED_SUSPEND 0x06
++#define LED_MUTE 0x07
++#define LED_MISC 0x08
++#define LED_MAIL 0x09
++#define LED_CHARGING 0x0a
++#define LED_MAX 0x0f
++#define LED_CNT (LED_MAX+1)
++
++/*
++ * Autorepeat values
++ */
++
++#define REP_DELAY 0x00
++#define REP_PERIOD 0x01
++#define REP_MAX 0x01
++#define REP_CNT (REP_MAX+1)
++
++/*
++ * Sounds
++ */
++
++#define SND_CLICK 0x00
++#define SND_BELL 0x01
++#define SND_TONE 0x02
++#define SND_MAX 0x07
++#define SND_CNT (SND_MAX+1)
++
++#endif
+diff --git a/include/linux/linux/input.h b/include/linux/linux/input.h
+new file mode 100644
+index 00000000..b3044aec
+--- /dev/null
++++ include/linux/linux/input.h
+@@ -0,0 +1,506 @@
++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
++/*
++ * Copyright (c) 1999-2002 Vojtech Pavlik
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ */
++#ifndef _INPUT_H
++#define _INPUT_H
++
++
++#include <sys/time.h>
++#include <sys/ioctl.h>
++#include <sys/types.h>
++#include <linux/types.h>
++
++#include "input-event-codes.h"
++
++/*
++ * The event structure itself
++ * Note that __USE_TIME_BITS64 is defined by libc based on
++ * application's request to use 64 bit time_t.
++ */
++
++struct input_event {
++#if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL)
++ struct timeval time;
++#define input_event_sec time.tv_sec
++#define input_event_usec time.tv_usec
++#else
++ __kernel_ulong_t __sec;
++ __kernel_ulong_t __usec;
++#define input_event_sec __sec
++#define input_event_usec __usec
++#endif
++ __u16 type;
++ __u16 code;
++ __s32 value;
++};
++
++/*
++ * Protocol version.
++ */
++
++#define EV_VERSION 0x010001
++
++/*
++ * IOCTLs (0x00 - 0x7f)
++ */
++
++struct input_id {
++ __u16 bustype;
++ __u16 vendor;
++ __u16 product;
++ __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.
++ *
++ * The default 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.
++ * When INPUT_PROP_ACCELEROMETER is set the resolution changes.
++ * The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
++ * in units per g (units/g) and in units per degree per second
++ * (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
++ */
++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];
++};
++
++struct input_mask {
++ __u32 type;
++ __u32 codes_size;
++ __u64 codes_ptr;
++};
++
++#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, 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 */
++
++/**
++ * 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 EVIOCSFF _IOW('E', 0x80, struct ff_effect) /* send a force effect to a force feedback device */
++#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
++#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
++
++#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */
++#define EVIOCREVOKE _IOW('E', 0x91, int) /* Revoke device access */
++
++/**
++ * EVIOCGMASK - Retrieve current event mask
++ *
++ * This ioctl allows user to retrieve the current event mask for specific
++ * event type. The argument must be of type "struct input_mask" and
++ * specifies the event type to query, the address of the receive buffer and
++ * the size of the receive buffer.
++ *
++ * The event mask is a per-client mask that specifies which events are
++ * forwarded to the client. Each event code is represented by a single bit
++ * in the event mask. If the bit is set, the event is passed to the client
++ * normally. Otherwise, the event is filtered and will never be queued on
++ * the client's receive buffer.
++ *
++ * Event masks do not affect global state of the input device. They only
++ * affect the file descriptor they are applied to.
++ *
++ * The default event mask for a client has all bits set, i.e. all events
++ * are forwarded to the client. If the kernel is queried for an unknown
++ * event type or if the receive buffer is larger than the number of
++ * event codes known to the kernel, the kernel returns all zeroes for those
++ * codes.
++ *
++ * At maximum, codes_size bytes are copied.
++ *
++ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
++ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
++ * does not implement the ioctl.
++ */
++#define EVIOCGMASK _IOR('E', 0x92, struct input_mask) /* Get event-masks */
++
++/**
++ * EVIOCSMASK - Set event mask
++ *
++ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
++ * current event mask, this changes the client's event mask for a specific
++ * type. See EVIOCGMASK for a description of event-masks and the
++ * argument-type.
++ *
++ * This ioctl provides full forward compatibility. If the passed event type
++ * is unknown to the kernel, or if the number of event codes specified in
++ * the mask is bigger than what is known to the kernel, the ioctl is still
++ * accepted and applied. However, any unknown codes are left untouched and
++ * stay cleared. That means, the kernel always filters unknown codes
++ * regardless of what the client requests. If the new mask doesn't cover
++ * all known event-codes, all remaining codes are automatically cleared and
++ * thus filtered.
++ *
++ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
++ * returned if the receive-buffer points to invalid memory. EINVAL is returned
++ * if the kernel does not implement the ioctl.
++ */
++#define EVIOCSMASK _IOW('E', 0x93, struct input_mask) /* Set event-masks */
++
++#define EVIOCSCLOCKID _IOW('E', 0xa0, int) /* Set clockid to be used for timestamps */
++
++/*
++ * IDs.
++ */
++
++#define ID_BUS 0
++#define ID_VENDOR 1
++#define ID_PRODUCT 2
++#define ID_VERSION 3
++
++#define BUS_PCI 0x01
++#define BUS_ISAPNP 0x02
++#define BUS_USB 0x03
++#define BUS_HIL 0x04
++#define BUS_BLUETOOTH 0x05
++#define BUS_VIRTUAL 0x06
++
++#define BUS_ISA 0x10
++#define BUS_I8042 0x11
++#define BUS_XTKBD 0x12
++#define BUS_RS232 0x13
++#define BUS_GAMEPORT 0x14
++#define BUS_PARPORT 0x15
++#define BUS_AMIGA 0x16
++#define BUS_ADB 0x17
++#define BUS_I2C 0x18
++#define BUS_HOST 0x19
++#define BUS_GSC 0x1A
++#define BUS_ATARI 0x1B
++#define BUS_SPI 0x1C
++#define BUS_RMI 0x1D
++#define BUS_CEC 0x1E
++#define BUS_INTEL_ISHTP 0x1F
++
++/*
++ * MT_TOOL types
++ */
++#define MT_TOOL_FINGER 0
++#define MT_TOOL_PEN 1
++#define MT_TOOL_PALM 2
++#define MT_TOOL_MAX 2
++
++/*
++ * Values describing the status of a force-feedback effect
++ */
++#define FF_STATUS_STOPPED 0x00
++#define FF_STATUS_PLAYING 0x01
++#define FF_STATUS_MAX 0x01
++
++/*
++ * Structures used in ioctls to upload effects to a device
++ * They are pieces of a bigger structure (called ff_effect)
++ */
++
++/*
++ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
++ * should not be used and have unspecified results.
++ */
++
++/**
++ * struct ff_replay - defines scheduling of the force-feedback effect
++ * @length: duration of the effect
++ * @delay: delay before effect should start playing
++ */
++struct ff_replay {
++ __u16 length;
++ __u16 delay;
++};
++
++/**
++ * struct ff_trigger - defines what triggers the force-feedback effect
++ * @button: number of the button triggering the effect
++ * @interval: controls how soon the effect can be re-triggered
++ */
++struct ff_trigger {
++ __u16 button;
++ __u16 interval;
++};
++
++/**
++ * struct ff_envelope - generic force-feedback effect envelope
++ * @attack_length: duration of the attack (ms)
++ * @attack_level: level at the beginning of the attack
++ * @fade_length: duration of fade (ms)
++ * @fade_level: level at the end of fade
++ *
++ * The @attack_level and @fade_level are absolute values; when applying
++ * envelope force-feedback core will convert to positive/negative
++ * value based on polarity of the default level of the effect.
++ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
++ */
++struct ff_envelope {
++ __u16 attack_length;
++ __u16 attack_level;
++ __u16 fade_length;
++ __u16 fade_level;
++};
++
++/**
++ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
++ * @level: strength of the effect; may be negative
++ * @envelope: envelope data
++ */
++struct ff_constant_effect {
++ __s16 level;
++ struct ff_envelope envelope;
++};
++
++/**
++ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
++ * @start_level: beginning strength of the effect; may be negative
++ * @end_level: final strength of the effect; may be negative
++ * @envelope: envelope data
++ */
++struct ff_ramp_effect {
++ __s16 start_level;
++ __s16 end_level;
++ struct ff_envelope envelope;
++};
++
++/**
++ * struct ff_condition_effect - defines a spring or friction force-feedback effect
++ * @right_saturation: maximum level when joystick moved all way to the right
++ * @left_saturation: same for the left side
++ * @right_coeff: controls how fast the force grows when the joystick moves
++ * to the right
++ * @left_coeff: same for the left side
++ * @deadband: size of the dead zone, where no force is produced
++ * @center: position of the dead zone
++ */
++struct ff_condition_effect {
++ __u16 right_saturation;
++ __u16 left_saturation;
++
++ __s16 right_coeff;
++ __s16 left_coeff;
++
++ __u16 deadband;
++ __s16 center;
++};
++
++/**
++ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
++ * @waveform: kind of the effect (wave)
++ * @period: period of the wave (ms)
++ * @magnitude: peak value
++ * @offset: mean value of the wave (roughly)
++ * @phase: 'horizontal' shift
++ * @envelope: envelope data
++ * @custom_len: number of samples (FF_CUSTOM only)
++ * @custom_data: buffer of samples (FF_CUSTOM only)
++ *
++ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
++ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
++ * for the time being as no driver supports it yet.
++ *
++ * Note: the data pointed by custom_data is copied by the driver.
++ * You can therefore dispose of the memory after the upload/update.
++ */
++struct ff_periodic_effect {
++ __u16 waveform;
++ __u16 period;
++ __s16 magnitude;
++ __s16 offset;
++ __u16 phase;
++
++ struct ff_envelope envelope;
++
++ __u32 custom_len;
++ __s16 *custom_data;
++};
++
++/**
++ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
++ * @strong_magnitude: magnitude of the heavy motor
++ * @weak_magnitude: magnitude of the light one
++ *
++ * Some rumble pads have two motors of different weight. Strong_magnitude
++ * represents the magnitude of the vibration generated by the heavy one.
++ */
++struct ff_rumble_effect {
++ __u16 strong_magnitude;
++ __u16 weak_magnitude;
++};
++
++/**
++ * struct ff_effect - defines force feedback effect
++ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
++ * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
++ * @id: an unique id assigned to an effect
++ * @direction: direction of the effect
++ * @trigger: trigger conditions (struct ff_trigger)
++ * @replay: scheduling of the effect (struct ff_replay)
++ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
++ * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
++ * defining effect parameters
++ *
++ * This structure is sent through ioctl from the application to the driver.
++ * To create a new effect application should set its @id to -1; the kernel
++ * will return assigned @id which can later be used to update or delete
++ * this effect.
++ *
++ * Direction of the effect is encoded as follows:
++ * 0 deg -> 0x0000 (down)
++ * 90 deg -> 0x4000 (left)
++ * 180 deg -> 0x8000 (up)
++ * 270 deg -> 0xC000 (right)
++ */
++struct ff_effect {
++ __u16 type;
++ __s16 id;
++ __u16 direction;
++ struct ff_trigger trigger;
++ struct ff_replay replay;
++
++ union {
++ struct ff_constant_effect constant;
++ struct ff_ramp_effect ramp;
++ struct ff_periodic_effect periodic;
++ struct ff_condition_effect condition[2]; /* One for each axis */
++ struct ff_rumble_effect rumble;
++ } u;
++};
++
++/*
++ * Force feedback effect types
++ */
++
++#define FF_RUMBLE 0x50
++#define FF_PERIODIC 0x51
++#define FF_CONSTANT 0x52
++#define FF_SPRING 0x53
++#define FF_FRICTION 0x54
++#define FF_DAMPER 0x55
++#define FF_INERTIA 0x56
++#define FF_RAMP 0x57
++
++#define FF_EFFECT_MIN FF_RUMBLE
++#define FF_EFFECT_MAX FF_RAMP
++
++/*
++ * Force feedback periodic effect types
++ */
++
++#define FF_SQUARE 0x58
++#define FF_TRIANGLE 0x59
++#define FF_SINE 0x5a
++#define FF_SAW_UP 0x5b
++#define FF_SAW_DOWN 0x5c
++#define FF_CUSTOM 0x5d
++
++#define FF_WAVEFORM_MIN FF_SQUARE
++#define FF_WAVEFORM_MAX FF_CUSTOM
++
++/*
++ * Set ff device properties
++ */
++
++#define FF_GAIN 0x60
++#define FF_AUTOCENTER 0x61
++
++/*
++ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
++ * cause a collision with another ff method, in this case ff->set_gain().
++ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
++ * and thus the total number of effects should never exceed FF_GAIN.
++ */
++#define FF_MAX_EFFECTS FF_GAIN
++
++#define FF_MAX 0x7f
++#define FF_CNT (FF_MAX+1)
++
++#endif /* _INPUT_H */
diff --git a/x11/libinput/files/patch-Makefile.am b/x11/libinput/files/patch-Makefile.am
deleted file mode 100644
index b8a4db09214e..000000000000
--- a/x11/libinput/files/patch-Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
---- Makefile.am.orig 2017-02-11 05:10:33 UTC
-+++ Makefile.am
-@@ -1,4 +1,4 @@
--SUBDIRS = src doc test tools udev
-+SUBDIRS = src doc tools udev
-
- ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-
diff --git a/x11/libinput/files/patch-ef9b7e88.c b/x11/libinput/files/patch-ef9b7e88.c
new file mode 100644
index 000000000000..8079f9e4ca45
--- /dev/null
+++ b/x11/libinput/files/patch-ef9b7e88.c
@@ -0,0 +1,17 @@
+diff --git a/meson.build b/meson.build
+index e3d81daeead3dd0c04fd67df5354d82a832d396e..931681a943bb58da6ac6cf99e5947ac7816d818b 100644
+--- meson.build
++++ meson.build
+@@ -87,6 +87,12 @@ if cc.has_header_symbol('dirent.h', 'versionsort', prefix : prefix)
+ config_h.set('HAVE_VERSIONSORT', '1')
+ endif
+
++if not cc.has_header_symbol('errno.h', 'program_invocation_short_name', prefix : prefix)
++ if cc.has_header_symbol('stdlib.h', 'getprogname')
++ config_h.set('program_invocation_short_name', 'getprogname()')
++ endif
++endif
++
+ if cc.has_header('xlocale.h')
+ config_h.set('HAVE_XLOCALE_H', '1')
+ endif
diff --git a/x11/libinput/files/patch-f8b41205.c b/x11/libinput/files/patch-f8b41205.c
new file mode 100644
index 000000000000..0f6722a9c461
--- /dev/null
+++ b/x11/libinput/files/patch-f8b41205.c
@@ -0,0 +1,104 @@
+diff --git a/meson.build b/meson.build
+index 94973255d7af4020b049c1e533b2438409514f03..9ff17117a9f6c79bb50362d6db6507ba56c20136 100644
+--- meson.build
++++ meson.build
+@@ -83,6 +83,10 @@ if get_option('coverity')
+ config_h.set('_Float64x', 'long')
+ endif
+
++if cc.has_header_symbol('dirent.h', 'versionsort', prefix : prefix)
++ config_h.set('HAVE_VERSIONSORT', '1')
++endif
++
+ # Dependencies
+ pkgconfig = import('pkgconfig')
+ dep_udev = dependency('libudev')
+diff --git a/src/libinput-versionsort.h b/src/libinput-versionsort.h
+new file mode 100644
+index 0000000000000000000000000000000000000000..356ec8da2f56ccedefb4f30cbeb353a1140e175a
+--- /dev/null
++++ src/libinput-versionsort.h
+@@ -0,0 +1,71 @@
++#pragma once
++
++#include "config.h"
++
++#ifndef HAVE_VERSIONSORT
++
++/* Copyright © 2005-2014 Rich Felker, et al.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++#include <ctype.h>
++#include <string.h>
++#include <dirent.h>
++
++static int
++strverscmp(const char *l0, const char *r0)
++{
++ const unsigned char *l = (const void *)l0;
++ const unsigned char *r = (const void *)r0;
++ size_t i, dp, j;
++ int z = 1;
++
++ /* Find maximal matching prefix and track its maximal digit
++ * suffix and whether those digits are all zeros. */
++ for (dp=i=0; l[i]==r[i]; i++) {
++ int c = l[i];
++ if (!c) return 0;
++ if (!isdigit(c)) dp=i+1, z=1;
++ else if (c!='0') z=0;
++ }
++
++ if (l[dp]!='0' && r[dp]!='0') {
++ /* If we're not looking at a digit sequence that began
++ * with a zero, longest digit string is greater. */
++ for (j=i; isdigit(l[j]); j++)
++ if (!isdigit(r[j])) return 1;
++ if (isdigit(r[j])) return -1;
++ } else if (z && dp<i && (isdigit(l[i]) || isdigit(r[i]))) {
++ /* Otherwise, if common prefix of digit sequence is
++ * all zeros, digits order less than non-digits. */
++ return (unsigned char)(l[i]-'0') - (unsigned char)(r[i]-'0');
++ }
++
++ return l[i] - r[i];
++}
++
++static int
++versionsort(const struct dirent **a, const struct dirent **b)
++{
++ return strverscmp((*a)->d_name, (*b)->d_name);
++}
++
++#endif
+diff --git a/tools/libinput-record.c b/tools/libinput-record.c
+index 50b6ee8512af6dff4badd95ce8546a346e4701c0..169947df0160f862a8a4c7bffe255909be572d20 100644
+--- tools/libinput-record.c
++++ tools/libinput-record.c
+@@ -40,6 +40,7 @@
+ #include <signal.h>
+ #include <stdbool.h>
+
++#include "libinput-versionsort.h"
+ #include "libinput-util.h"
+ #include "libinput-version.h"
+ #include "libinput-git-version.h"
diff --git a/x11/libinput/files/patch-src_Makefile.am b/x11/libinput/files/patch-src_Makefile.am
deleted file mode 100644
index 0ba6f7bbfaa2..000000000000
--- a/x11/libinput/files/patch-src_Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
---- src/Makefile.am.orig 2017-02-11 05:10:33 UTC
-+++ src/Makefile.am
-@@ -38,6 +38,7 @@ libinput_la_LIBADD = $(MTDEV_LIBS) \
- $(LIBUDEV_LIBS) \
- $(LIBEVDEV_LIBS) \
- $(LIBWACOM_LIBS) \
-+ -lepoll-shim \
- libinput-util.la
-
- libinput_la_CFLAGS = -I$(top_srcdir)/include \
-@@ -61,8 +62,8 @@ libfilter_la_SOURCES = \
- filter.c \
- filter.h \
- filter-private.h
--libfilter_la_LIBADD =
--libfilter_la_CFLAGS =
-+libfilter_la_LIBADD = $(LIBUDEV_LIBS)
-+libfilter_la_CFLAGS = -I$(top_srcdir)/include $(LIBUDEV_CFLAGS)
-
- libinput_la_LDFLAGS = -version-info $(LIBINPUT_LT_VERSION) -shared \
- -Wl,--version-script=$(srcdir)/libinput.sym
diff --git a/x11/libinput/files/patch-src_evdev.c b/x11/libinput/files/patch-src_evdev.c
index 65fd54de6be3..79386c458c9e 100644
--- a/x11/libinput/files/patch-src_evdev.c
+++ b/x11/libinput/files/patch-src_evdev.c
@@ -1,11 +1,87 @@
---- src/evdev.c.orig 2017-01-19 21:36:55 UTC
+When a process without full /dev/input access enumerates devices via libudev-devd,
+the udev_device structs do not get udev properties that mark them as inputs, keyboards, etc,
+and get rejected as not being input devices.
+
+libinput reopens devices just to check path equality.
+The udev_devices from reopening do have the right properties,
+so we just use them instead of the original (enumerated) ones.
+
+--- src/evdev.c.orig 2018-06-09 12:13:43 UTC
+++ src/evdev.c
-@@ -25,6 +25,8 @@
+@@ -895,7 +895,7 @@ evdev_sync_device(struct evdev_device *device)
+ evdev_device_dispatch_one(device, &ev);
+ } while (rc == LIBEVDEV_READ_STATUS_SYNC);
- #include "config.h"
+- return rc == -EAGAIN ? 0 : rc;
++ return (rc == -EAGAIN || rc == -EINVAL)? 0 : rc;
+ }
-+#include <sys/stat.h>
-+
- #include <errno.h>
- #include <stdbool.h>
- #include <stdlib.h>
+ static void
+@@ -933,6 +933,17 @@ evdev_device_dispatch(void *data)
+
+ if (rc != -EAGAIN && rc != -EINTR) {
+ libinput_remove_source(libinput, device->source);
++ /*
++ * Dirty hack to allow cuse-based evdev backends to release
++ * character device file when device has been detached
++ * but still have it descriptor opened.
++ * Issuing evdev_device_suspend() here leads to SIGSEGV
++ */
++ int dummy_fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
++ if (dummy_fd >= 0) {
++ dup2(dummy_fd, device->fd);
++ close(dummy_fd);
++ }
+ device->source = NULL;
+ }
+ }
+@@ -1785,9 +1796,9 @@ evdev_notify_added_device(struct evdev_device *device)
+ }
+
+ static bool
+-evdev_device_have_same_syspath(struct udev_device *udev_device, int fd)
++evdev_device_have_same_syspath(struct udev_device **udev_device, int fd, bool reopen)
+ {
+- struct udev *udev = udev_device_get_udev(udev_device);
++ struct udev *udev = udev_device_get_udev(*udev_device);
+ struct udev_device *udev_device_new = NULL;
+ struct stat st;
+ bool rc = false;
+@@ -1800,10 +1811,16 @@ evdev_device_have_same_syspath(struct udev_device *ude
+ goto out;
+
+ rc = streq(udev_device_get_syspath(udev_device_new),
+- udev_device_get_syspath(udev_device));
++ udev_device_get_syspath(*udev_device));
+ out:
+- if (udev_device_new)
+- udev_device_unref(udev_device_new);
++ if (udev_device_new) {
++ if (reopen) {
++ udev_device_unref(*udev_device);
++ *udev_device = udev_device_new;
++ } else {
++ udev_device_unref(udev_device_new);
++ }
++ }
+ return rc;
+ }
+
+@@ -2003,7 +2020,7 @@ evdev_device_create(struct libinput_seat *seat,
+ return NULL;
+ }
+
+- if (!evdev_device_have_same_syspath(udev_device, fd))
++ if (!evdev_device_have_same_syspath(&udev_device, fd, true))
+ goto err;
+
+ device = zalloc(sizeof *device);
+@@ -2559,7 +2576,7 @@ evdev_device_resume(struct evdev_device *device)
+ if (fd < 0)
+ return -errno;
+
+- if (!evdev_device_have_same_syspath(device->udev_device, fd)) {
++ if (!evdev_device_have_same_syspath(&device->udev_device, fd, false)) {
+ close_restricted(libinput, fd);
+ return -ENODEV;
+ }
diff --git a/x11/libinput/files/patch-src_libinput-private.h b/x11/libinput/files/patch-src_libinput-private.h
deleted file mode 100644
index b79754ff6f7a..000000000000
--- a/x11/libinput/files/patch-src_libinput-private.h
+++ /dev/null
@@ -1,10 +0,0 @@
---- src/libinput-private.h.orig 2017-01-18 04:32:06 UTC
-+++ src/libinput-private.h
-@@ -29,6 +29,7 @@
-
- #include <errno.h>
- #include <math.h>
-+#include <stdarg.h>
-
- #include "linux/input.h"
-
diff --git a/x11/libinput/files/patch-src_libinput-util.c b/x11/libinput/files/patch-src_libinput-util.c
deleted file mode 100644
index 5344b4b97325..000000000000
--- a/x11/libinput/files/patch-src_libinput-util.c
+++ /dev/null
@@ -1,12 +0,0 @@
---- src/libinput-util.c.orig 2017-01-17 04:53:51 UTC
-+++ src/libinput-util.c
-@@ -36,6 +36,9 @@
- #include <stdbool.h>
- #include <stdio.h>
- #include <stdlib.h>
-+#ifdef __FreeBSD__
-+#include <xlocale.h>
-+#endif
-
- #include "libinput-util.h"
- #include "libinput-private.h"
diff --git a/x11/libinput/files/patch-src_libinput.h b/x11/libinput/files/patch-src_libinput.h
deleted file mode 100644
index 93d44ece6082..000000000000
--- a/x11/libinput/files/patch-src_libinput.h
+++ /dev/null
@@ -1,10 +0,0 @@
---- src/libinput.h.orig 2017-01-19 05:27:32 UTC
-+++ src/libinput.h
-@@ -29,6 +29,7 @@
- extern "C" {
- #endif
-
-+#include <stdarg.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <libudev.h>
diff --git a/x11/libinput/files/patch-src_path-seat.c b/x11/libinput/files/patch-src_path-seat.c
deleted file mode 100644
index e4c6edc01c29..000000000000
--- a/x11/libinput/files/patch-src_path-seat.c
+++ /dev/null
@@ -1,15 +0,0 @@
---- src/path-seat.c.orig 2017-01-19 05:27:32 UTC
-+++ src/path-seat.c
-@@ -23,10 +23,11 @@
-
- #include "config.h"
-
-+#include <sys/stat.h>
-+
- #include <errno.h>
- #include <fcntl.h>
- #include <string.h>
--#include <sys/stat.h>
- #include <libudev.h>
-
- #include "path-seat.h"
diff --git a/x11/libinput/files/patch-tools_Makefile.am b/x11/libinput/files/patch-tools_Makefile.am
deleted file mode 100644
index 65884b04fd3a..000000000000
--- a/x11/libinput/files/patch-tools_Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
---- tools/Makefile.am.orig 2017-02-11 05:10:33 UTC
-+++ tools/Makefile.am
-@@ -11,8 +11,8 @@ AM_CXXFLAGS = $(GCC_CXXFLAGS)
- libshared_la_SOURCES = \
- shared.c \
- shared.h
--libshared_la_CFLAGS = $(AM_CFLAGS) $(LIBEVDEV_CFLAGS)
--libshared_la_LIBADD = $(LIBEVDEV_LIBS)
-+libshared_la_CFLAGS = $(AM_CFLAGS) $(LIBEVDEV_CFLAGS) $(LIBUDEV_CFLAGS)
-+libshared_la_LIBADD = $(LIBEVDEV_LIBS) $(LIBUDEV_LIBS)
-
- event_debug_SOURCES = event-debug.c
- event_debug_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
-@@ -20,8 +20,9 @@ event_debug_LDFLAGS = -no-install
- event_debug_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
-
- ptraccel_debug_SOURCES = ptraccel-debug.c
--ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la
-+ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la $(LIBUDEV_LIBS)
- ptraccel_debug_LDFLAGS = -no-install
-+ptraccel_debug_CFLAGS = $(LIBUDEV_CFLAGS)
-
- libinput_list_devices_SOURCES = libinput-list-devices.c
- libinput_list_devices_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS)
diff --git a/x11/libinput/files/patch-udev_Makefile.am b/x11/libinput/files/patch-udev_Makefile.am
deleted file mode 100644
index 6572e9447b43..000000000000
--- a/x11/libinput/files/patch-udev_Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
---- udev/Makefile.am.orig 2017-02-11 05:10:33 UTC
-+++ udev/Makefile.am
-@@ -19,6 +19,7 @@ endif
-
- libinput_model_quirks_SOURCES = libinput-model-quirks.c
- libinput_model_quirks_CFLAGS = \
-+ -I$(top_srcdir)/include \
- -I$(top_srcdir)/src \
- $(LIBUDEV_CFLAGS) \
- $(GCC_CFLAGS)
diff --git a/x11/libinput/pkg-plist b/x11/libinput/pkg-plist
index c1bccf3c871c..94682427cd64 100644
--- a/x11/libinput/pkg-plist
+++ b/x11/libinput/pkg-plist
@@ -1,14 +1,29 @@
-bin/libinput-debug-events
-bin/libinput-list-devices
+bin/libinput
include/libinput.h
lib/libinput.so
lib/libinput.so.10
-lib/libinput.so.10.11.2
-lib/udev/hwdb.d/90-libinput-model-quirks.hwdb
-lib/udev/libinput-device-group
-lib/udev/libinput-model-quirks
-lib/udev/rules.d/80-libinput-device-groups.rules
-lib/udev/rules.d/90-libinput-model-quirks.rules
+lib/libinput.so.10.13.0
libdata/pkgconfig/libinput.pc
+libexec/libinput/libinput-debug-events
+%%DEBUG_GUI%%libexec/libinput/libinput-debug-gui
+libexec/libinput/libinput-list-devices
+libexec/libinput/libinput-measure
+libexec/libinput/libinput-measure-fuzz
+libexec/libinput/libinput-measure-touch-size
+libexec/libinput/libinput-measure-touchpad-pressure
+libexec/libinput/libinput-measure-touchpad-tap
+libexec/libinput/libinput-measure-trackpoint-range
+libexec/libinput/libinput-record
+libexec/libinput/libinput-replay
+man/man1/libinput.1.gz
man/man1/libinput-debug-events.1.gz
+%%DEBUG_GUI%%man/man1/libinput-debug-gui.1.gz
man/man1/libinput-list-devices.1.gz
+man/man1/libinput-measure.1.gz
+man/man1/libinput-measure-fuzz.1.gz
+man/man1/libinput-measure-touch-size.1.gz
+man/man1/libinput-measure-touchpad-pressure.1.gz
+man/man1/libinput-measure-touchpad-tap.1.gz
+man/man1/libinput-measure-trackpoint-range.1.gz
+man/man1/libinput-record.1.gz
+man/man1/libinput-replay.1.gz