input: gpio_keys_polled: Add support for abs/rel axis
Subsystems (3)
v3 cover input: gpio_keys_polled: Add support for abs/rel axis
Hi Dmitry,
This patch-series really is 2 related series:
Patch 1 + 2:
Support for abs/rel axis in gpio_keys_polled, the dt-bindings patch is updated, the actual implementation is the same as the v2 version.
Patch 3 + 4:
Add a single header with key / btn / axis defines to be shared by input.h and the dt-bindings headers, as requested by you. The first patch introduces a new header for this, the second patch makes dt-bindings/input/input.h use this new header. The second patch has been Acked by the devicetree maintainer, and since it depends on the first one I believe that it is best if this patch gets merged via your tree too.
Regards,
Hans
PATCH v3 1/4 devicetree: bindings: Update gpio-keys-polled with support for abs/rel axis
The devicetree binding for gpio-keys-polled already allows specifying what type of events (key / rel / abs) a button generates when pressed.
But for rel / abs axis we also need to specify which value this specific gpio represents.
One usecase is digital joysticks / direction-pads which are hooked up to gpio, in this case we've left and right buttons which we want to map to EV_ABS, ABS_X and we want generate events for left with a value of -1 and for right with a value of +1 (and similar for up / down and ABS_Y).
---
Changes in v2:
-Add Rob's ack
-s/send/sent/
-Make the remarks of axis reporting a value of 0 when all buttons tied to
that axis are released also apply to EV_REL axis
Changes in v3:
-Document that linux,input-value is a *signed* 32 bit variable and an example
how to specify a negative value
--- Documentation/devicetree/bindings/input/gpio-keys-polled.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/input/gpio-keys-polled.txt +8 -1
@@ -13,11 +13,18 @@ Subnode properties: - gpios: OF device-tree gpio specification. - label: Descriptive name of the key. - - linux,code: Keycode to emit. + - linux,code: Key / Axis code to emit. Optional subnode-properties: - linux,input-type: Specify event type this button/key generates. If not specified defaults to <1> == EV_KEY. + - linux,input-value: If linux,input-type is EV_ABS or EV_REL then this + value is sent for events this button generates when pressed. + EV_ABS/EV_REL axis will generate an event with a value of 0 when + all buttons with linux,input-type == type and linux,code == axis + are released. This value is interpreted as a signed 32 bit value, + e.g. to make a button generate a value of -1 use: + linux,input-value = <0xffffffff>; /* -1 */ - debounce-interval: Debouncing interval time in milliseconds. If not specified defaults to 5. - wakeup-source: Boolean, button can wake-up the system.
Signature · 1 line
2.4.3
PATCH v3 2/4 input: gpio_keys_polled: Add support for abs/rel axis
In reply to Hans de GoedeAdd support for EV_ABS / EV_REL events to the gpio-keys-polled driver.
---
Changes in v2:
-Fix commit message to actually describe what the patch does
(fix patch squashing fail)
--- drivers/input/keyboard/gpio_keys_polled.c | 88 +++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 9 deletions(-)
drivers/input/keyboard/gpio_keys_polled.c +79 -9
@@ -40,10 +40,36 @@ struct gpio_keys_polled_dev {struct input_polled_dev *poll_dev;struct device *dev;const struct gpio_keys_platform_data *pdata; +unsigned long rel_axis_seen[BITS_TO_LONGS (REL_CNT )]; +unsigned long abs_axis_seen[BITS_TO_LONGS (ABS_CNT )];struct gpio_keys_button_data data[0 ]; }; -static void gpio_keys_polled_check_state (struct input_dev *input, +static void gpio_keys_button_event (struct input_polled_dev *dev, +struct gpio_keys_button *button, +int state) +{ +struct gpio_keys_polled_dev *bdev = dev->private; +struct input_dev *input = dev->input; +unsigned int type = button->type ?:EV_KEY ; + +if (type ==EV_REL ) { +if (state) { +input_event (input, type, button->code, button->value); +__set_bit (button->code, bdev->rel_axis_seen); + } + }else if (type ==EV_ABS ) { +if (state) { +input_event (input, type, button->code, button->value); +__set_bit (button->code, bdev->abs_axis_seen); + } + }else { +input_event (input, type, button->code, state); +input_sync (input); + } +} + +static void gpio_keys_polled_check_state (struct input_polled_dev *dev,struct gpio_keys_button *button,struct gpio_keys_button_data *bdata) {
@@ -54,11 +80,9 @@ static void gpio_keys_polled_check_state(struct input_dev *input,else state = !!gpiod_get_value (button->gpiod); -if (state != bdata->last_state) { -unsigned int type = button->type ?:EV_KEY ; +gpio_keys_button_event (dev, button, state); -input_event (input, type, button->code, state); -input_sync (input); +if (state != bdata->last_state) { bdata->count =0 ; bdata->last_state = state; }
@@ -71,15 +95,33 @@ static void gpio_keys_polled_poll(struct input_polled_dev *dev)struct input_dev *input = dev->input;int i; +memset (bdev->rel_axis_seen,0 ,sizeof (bdev->rel_axis_seen)); +memset (bdev->abs_axis_seen,0 ,sizeof (bdev->abs_axis_seen)); +for (i =0 ; i < pdata->nbuttons; i++) {struct gpio_keys_button_data *bdata = &bdev->data[i]; -if (bdata->count < bdata->threshold) +if (bdata->count < bdata->threshold) { bdata->count++; -else -gpio_keys_polled_check_state (input, &pdata->buttons[i], +gpio_keys_button_event (dev, &pdata->buttons[i], + bdata->last_state); + }else { +gpio_keys_polled_check_state (dev, &pdata->buttons[i], bdata); + } + } + +for_each_set_bit (i, input->relbit,REL_CNT ) { +if (!test_bit (i, bdev->rel_axis_seen)) +input_event (input,EV_REL , i,0 ); + } + +for_each_set_bit (i, input->absbit,ABS_CNT ) { +if (!test_bit (i, bdev->abs_axis_seen)) +input_event (input,EV_ABS , i,0 ); } + +input_sync (input); }static void gpio_keys_polled_open (struct input_polled_dev *dev)
@@ -152,6 +194,10 @@ static struct gpio_keys_platform_data *gpio_keys_polled_get_devtree_pdata(struct &button->type)) button->type =EV_KEY ; +if (fwnode_property_read_u32 (child,"linux,input-value" , + (u32 *)&button->value)) + button->value =1 ; + button->wakeup = fwnode_property_read_bool(child, "wakeup-source") ||/* legacy name */
@@ -168,6 +214,25 @@ static struct gpio_keys_platform_data *gpio_keys_polled_get_devtree_pdata(structreturn pdata; } +static void gpio_keys_polled_set_abs_params (struct input_dev *input, +const struct gpio_keys_platform_data *pdata,unsigned int code) +{ +int i, min =0 , max =0 ; + +for (i =0 ; i < pdata->nbuttons; i++) { +struct gpio_keys_button *button = &pdata->buttons[i]; + +if (button->type !=EV_ABS || button->code != code) +continue ; + +if (button->value < min) + min = button->value; +if (button->value > max) + max = button->value; + } +input_set_abs_params (input, code, min, max,0 ,0 ); +} +static const struct of_device_id gpio_keys_polled_of_match[] = { { .compatible ="gpio-keys-polled" , }, { },
@@ -274,6 +339,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) pdata->poll_interval);input_set_capability (input, type, button->code); +if (type ==EV_ABS ) +gpio_keys_polled_set_abs_params (input, pdata, + button->code); } bdev->poll_dev = poll_dev;
@@ -290,9 +358,11 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)/* report initial state of the buttons */ for (i =0 ; i < pdata->nbuttons; i++) -gpio_keys_polled_check_state (input, &pdata->buttons[i], +gpio_keys_polled_check_state (poll_dev, &pdata->buttons[i], &bdev->data[i]); +input_sync (input); +return 0 ; }
Signature · 1 line
2.4.3
PATCH v3 3/4 input: Add an input-event-codes header file
In reply to Hans de GoedeAdd an input-event-codes header file and move all type and axis defines there.
The purpose of this new header file is to have a single canonical source for event-codes which can be used outside of C-code too. One example of such usage is the use of event-codes in devicetree source files.
---
.../uapi/linux/{input.h => input-event-codes.h} | 421 +----------
include/uapi/linux/input.h | 788 +--------------------
2 files changed, 11 insertions(+), 1198 deletions(-)
copy include/uapi/linux/{input.h => input-event-codes.h} (65%)include/uapi/linux/input-event-codes.h renamed from include/uapi/linux/input.h +10 -411
@@ -1,160 +1,19 @@/* +* 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 <[email protected]> * * 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/ioctl.h> -#include <sys/types.h> -#include <linux/types.h> -#endif - - -/* -* The event structure itself -*/ - -struct input_event { -struct timeval time; -__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. -* -* Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in -* units per millimeter (units/mm), resolution for rotational axes -* (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian. -*/ -struct input_absinfo { -__s32 value; -__s32 minimum; -__s32 maximum; -__s32 fuzz; -__s32 flat; -__s32 resolution; -}; - -/** -* struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls -* @scancode: scancode represented in machine-endian form. -* @len: length of the scancode that resides in @scancode buffer. -* @index: index in the keymap, may be used instead of scancode -* @flags: allows to specify how kernel should handle the request. For -* example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel -* should perform lookup in keymap by @index instead of @scancode -* @keycode: key code assigned to this scancode -* -* The structure is used to retrieve and modify keymap data. Users have -* option of performing lookup either by @scancode itself or by @index -* in keymap entry. EVIOCGKEYCODE will also return scancode or index -* (depending on which element was used to perform lookup). -*/ -struct input_keymap_entry { -#define INPUT_KEYMAP_BY_INDEX (1 << 0) -__u8 flags; -__u8 len; -__u16 index; -__u32 keycode; -__u8 scancode[32 ]; -}; - -#define EVIOCGVERSION _IOR('E', 0x01, int)/* get driver version */ -#define EVIOCGID _IOR('E', 0x02, struct input_id)/* get device ID */ -#define EVIOCGREP _IOR('E', 0x03, 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 _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))/* send a force effect to a force feedback device */ -#define EVIOCRMFF _IOW('E', 0x81, int)/* Erase a force effect */ -#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 */ - -#define EVIOCSCLOCKID _IOW('E', 0xa0, int)/* Set clockid to be used for timestamps */ +#ifndef _UAPI_INPUT_EVENT_CODES_H +#define _UAPI_INPUT_EVENT_CODES_H/* * Device properties and quirks
@@ -943,264 +802,4 @@ struct input_keymap_entry {#define SND_MAX 0x07#define SND_CNT (SND_MAX+1) -/* -* 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 - -/* -* 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@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 __user *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 - -#define FF_MAX 0x7f -#define FF_CNT (FF_MAX+1) - -#endif /* _UAPI_INPUT_H */ +#endif
include/uapi/linux/input.h +1 -787
800 lines not on this page · raw message
Signature · 1 line
2.4.3
PATCH v3 4/4 devicetree: bindings: Use linux-event-codes.h for evdev codes
In reply to Hans de GoedeAdd a symlink to uapi/linux/linux-event-codes.h, and include that instead of (re)defining all the evdev type and code values in dt-bindings/input/input.h. This way we do not need to keep all the event codes synced manually.
---
Changes in v3:
-Rename the symlink from input-event-codes.h to linux-event-codes.h to make
it clear that we're dealing with Linux specific defines
--- include/dt-bindings/input/input.h | 510 +------------------------- include/dt-bindings/input/linux-event-codes.h | 1 + 2 files changed, 2 insertions(+), 509 deletions(-) create mode 120000 include/dt-bindings/input/linux-event-codes.h
include/dt-bindings/input/input.h +1 -509
@@ -9,515 +9,7 @@#ifndef _DT_BINDINGS_INPUT_INPUT_H#define _DT_BINDINGS_INPUT_INPUT_H -#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_DIRECTION 153 -#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_ZERO 244/* brightness off, use ambient */ -#define KEY_DISPLAY_OFF 245/* display device to off state */ - -#define KEY_WIMAX 246 -#define KEY_RFKILL 247/* Key that controls all radios */ - -#define KEY_MICMUTE 248/* Mute / unmute the microphone */ - -/* 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_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_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 +#include "linux-event-codes.h" #define MATRIX_KEY (row, col, code) \ ((((row) & 0xFF) << 24) | (((col) & 0xFF) << 16) | ((code) & 0xFFFF))
include/dt-bindings/input/linux-event-codes.h new file +1 -0
@@ -0,0 +1 @@ +../../uapi/linux/input-event-codes.h
Signature · 1 line
2.4.3
Dmitry Torokhov
maintainerv3 cover input: gpio_keys_polled: Add support for abs/rel axis
In reply to Hans de GoedeQuoted 9 lines · Hans de Goede
Hi Dmitry,
This patch-series really is 2 related series:
Patch 1 + 2:
Support for abs/rel axis in
gpio_keys_polled, the dt-bindings patch is updated, the actual implementation is the same as the v2 version.
Quoted 8 lines
Patch 3 + 4:
Add a single header with key / btn / axis defines to be shared by
input.hand the dt-bindings headers, as requested by you. The first patch introduces a new header for this, the second patch makesdt-bindings/input/input.huse this new header. The second patch has been Acked by the devicetree maintainer, and since it depends on the first one I believe that it is best if this patch gets merged via your tree too.
Applied the lot, thank you.
Signature · 1 line
Dmitry