mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-21 16:50:42 +01:00
udev: support firmware detection for pointing sticks
Add support for firmware detection on pointing stick devices. This is needed for ALPS only at this time. Signed-off-by: Martin Wilck <mwilck@suse.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
198c53650a
commit
c5bfa00760
2 changed files with 25 additions and 6 deletions
|
|
@ -11,18 +11,22 @@
|
|||
ACTION!="add|change", GOTO="libinput_model_quirks_end"
|
||||
KERNEL!="event*", GOTO="libinput_model_quirks_end"
|
||||
|
||||
# Touchpad firmware detection, two-stage process.
|
||||
# Firmware detection, two-stage process.
|
||||
# First, run the program and import the LIBINPUT_MODEL_FIRMWARE_VERSION
|
||||
# environment (if any)
|
||||
KERNELS=="*input*", \
|
||||
IMPORT{program}="@UDEV_TEST_PATH@libinput-model-quirks %S%p"
|
||||
|
||||
# Second, match on anything with that env set and import from the hwdb
|
||||
KERNELS=="*input*", \
|
||||
ENV{ID_INPUT_TOUCHPAD}=="1", \
|
||||
ENV{LIBINPUT_MODEL_FIRMWARE_VERSION}!="", \
|
||||
ENV{.DETECT_FWVERSION}="1"
|
||||
KERNELS=="*input*", \
|
||||
ENV{ID_INPUT_POINTINGSTICK}=="1", \
|
||||
ENV{.DETECT_FWVERSION}="1"
|
||||
ENV{.DETECT_FWVERSION}!="1", GOTO="skip_fwversion"
|
||||
|
||||
IMPORT{program}="@UDEV_TEST_PATH@libinput-model-quirks %S%p"
|
||||
ENV{LIBINPUT_MODEL_FIRMWARE_VERSION}!="", \
|
||||
IMPORT{builtin}="hwdb 'libinput:name:$attr{name}:fwversion:$env{LIBINPUT_MODEL_FIRMWARE_VERSION}'"
|
||||
# End of touchpad firmware detection
|
||||
LABEL="skip_fwversion"
|
||||
|
||||
# libinput:touchpad:<modalias>
|
||||
ENV{ID_INPUT_TOUCHPAD}=="1", \
|
||||
|
|
|
|||
|
|
@ -108,6 +108,19 @@ handle_touchpad(struct udev_device *device)
|
|||
handle_touchpad_synaptics(device);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_pointingstick(struct udev_device *device)
|
||||
{
|
||||
const char *name = NULL;
|
||||
|
||||
name = prop_value(device, "NAME");
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
if (strstr(name, "AlpsPS/2 ALPS") != NULL)
|
||||
handle_touchpad_alps(device);
|
||||
}
|
||||
|
||||
/**
|
||||
* For a non-zero fuzz on the x/y axes, print that fuzz as property and
|
||||
* reset the kernel's fuzz to 0.
|
||||
|
|
@ -187,6 +200,8 @@ int main(int argc, char **argv)
|
|||
|
||||
if (prop_value(device, "ID_INPUT_TOUCHPAD"))
|
||||
handle_touchpad(device);
|
||||
if (prop_value(device, "ID_INPUT_POINTINGSTICK"))
|
||||
handle_pointingstick(device);
|
||||
|
||||
rc = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue