hwdb: Add ID_INPUT_JOYSTICK_INTEGRATION property (#5413)

When the joystick is integrated directly into the machine, knowing
that the device is internal allows us to disable attached functionality
when the device is not used or inaccessible.

For example, this allows disabling rumble and accelerometer on
flip-console-like devices like the GPD-XD.
This commit is contained in:
hadess 2017-06-26 12:17:36 +02:00 committed by Lennart Poettering
parent 0c0097a60a
commit c8ec393b25
4 changed files with 65 additions and 0 deletions

View File

@ -3878,6 +3878,7 @@ dist_udevrules_DATA += \
rules/60-sensor.rules \
rules/60-serial.rules \
rules/64-btrfs.rules \
rules/70-joystick.rules \
rules/70-mouse.rules \
rules/70-touchpad.rules \
rules/75-net-description.rules \

50
hwdb/70-joystick.hwdb Normal file
View File

@ -0,0 +1,50 @@
# This file is part of systemd.
#
# Database for joystick device information that cannot be queried directly.
#
# The lookup keys are composed in:
# 70-joystick.rules
#
# Note: The format of the "joystick:" prefix match key is a
# contract between the rules file and the hardware data, it might
# change in later revisions to support more or better matches, it
# is not necessarily expected to be a stable ABI.
#
# Match string format:
# joystick:<bustype>:v<vid>p<pid>:name:<name>:
#
# vid/pid as 4-digit hex lowercase vendor/product
#
# To add local entries, create a new file
# /etc/udev/hwdb.d/71-joystick-local.hwdb
# and add your rules there. To load the new rules execute (as root):
# systemd-hwdb update
# udevadm trigger /dev/input/eventXX
# where /dev/input/eventXX is the joystick in question. If in
# doubt, simply use /dev/input/event* to reload all input rules.
#
# If your changes are generally applicable, preferably send them as a pull
# request to
# https://github.com/systemd/systemd
# or create a bug report on https://github.com/systemd/systemd/issues and
# include your new rules, a description of the device, and the output of
# udevadm info /dev/input/eventXX.
#
# Permitted keys:
# Specify if a joystick is a built-in one or external:
# ID_INPUT_JOYSTICK_INTEGRATION=internal|external
#
# If the property is missing, user-space can assume:
# ID_INPUT_JOYSTICK_INTEGRATION=external
joystick:bluetooth:*
ID_INPUT_JOYSTICK_INTEGRATION=external
###########################################################
# GPD
###########################################################
# GPD Win, Classic and XBox 360 compat modes
joystick:usb:v11c5p5507*
joystick:usb:v045ep028e*
ID_INPUT_JOYSTICK_INTEGRATION=internal

View File

@ -66,6 +66,7 @@ UDEV_TAG = Word(string.ascii_uppercase, alphanums + '_')
TYPES = {'mouse': ('usb', 'bluetooth', 'ps2', '*'),
'evdev': ('name', 'atkbd', 'input'),
'touchpad': ('i8042', 'rmi', 'bluetooth', 'usb'),
'joystick': ('i8042', 'rmi', 'bluetooth', 'usb'),
'keyboard': ('name', ),
'sensor': ('modalias', ),
}
@ -109,6 +110,7 @@ def property_grammar():
('MOUSE_WHEEL_TILT_VERTICAL', Literal('1')),
('POINTINGSTICK_SENSITIVITY', INTEGER),
('POINTINGSTICK_CONST_ACCEL', REAL),
('ID_INPUT_JOYSTICK_INTEGRATION', Or(('internal', 'external'))),
('ID_INPUT_TOUCHPAD_INTEGRATION', Or(('internal', 'external'))),
('XKB_FIXED_LAYOUT', STRING),
('XKB_FIXED_VARIANT', STRING),

12
rules/70-joystick.rules Normal file
View File

@ -0,0 +1,12 @@
# do not edit this file, it will be overwritten on update
ACTION=="remove", GOTO="joystick_end"
ENV{ID_INPUT_JOYSTICK}=="", GOTO="joystick_end"
KERNEL!="event*", GOTO="joystick_end"
# joystick:<bustype>:v<vid>p<pid>:name:<name>:*
KERNELS=="input*", ENV{ID_BUS}!="", \
IMPORT{builtin}="hwdb 'joystick:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
GOTO="joystick_end"
LABEL="joystick_end"