chiark / gitweb /
hwdb: add a touchpad hwdb
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 28 Jan 2015 04:05:01 +0000 (14:05 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 29 Jan 2015 03:06:04 +0000 (13:06 +1000)
Currently used to tag devices in the new Lenovo *50 series and the X1 Carbon
3rd. These laptops re-introduced the physical trackpoint buttons that were
missing from the *40 series but those buttons are now wired up to the
touchpad.

The touchpad now sends BTN_0, BTN_1 and BTN_2 for the trackpoint. The same
button codes were used in older touchpads that had dedicated scroll up/down
buttons. Input drivers need to work around this and thus know what they're
dealing with.

For the previous gen we introduced INPUT_PROP_TOPBUTTONPAD in the kernel, but
the resulting mess showed that these per-device quirks should really live in
userspace.

The list currently includes the X1 Carbon 3rd PNPID, others will be added as
get to know which PNPID they have.

Makefile.am
hwdb/70-touchpad.hwdb [new file with mode: 0644]
rules/70-touchpad.rules [new file with mode: 0644]

index 80c41615e68dc4301c5e20e55c13ae1ef47969df..e3ba11c8c0bd59e07629c36f8d496d032b16ec02 100644 (file)
@@ -3560,6 +3560,7 @@ dist_udevrules_DATA += \
        rules/60-persistent-storage.rules \
        rules/64-btrfs.rules \
        rules/70-mouse.rules \
+       rules/70-touchpad.rules \
        rules/75-net-description.rules \
        rules/75-tty-description.rules \
        rules/78-sound-card.rules \
@@ -3751,7 +3752,8 @@ dist_udevhwdb_DATA = \
        hwdb/20-OUI.hwdb \
        hwdb/20-net-ifname.hwdb \
        hwdb/60-keyboard.hwdb \
-       hwdb/70-mouse.hwdb
+       hwdb/70-mouse.hwdb \
+       hwdb/70-touchpad.hwdb
 
 EXTRA_DIST += \
        units/systemd-hwdb-update.service.in
diff --git a/hwdb/70-touchpad.hwdb b/hwdb/70-touchpad.hwdb
new file mode 100644 (file)
index 0000000..bbf44db
--- /dev/null
@@ -0,0 +1,39 @@
+# This file is part of systemd.
+#
+# The lookup keys are composed in:
+#   70-touchpad.rules
+#
+# Note: The format of the "touchpad:" 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:
+# touchpad:pnpid:<pnpid>:
+#
+# To add local entries, create a new file
+#   /etc/udev/hwdb.d/71-touchpad-local.hwdb
+# and add your rules there. To load the new rules execute (as root):
+#   udevadm hwdb --update
+#   udevadm trigger /dev/input/eventXX
+# where /dev/input/eventXX is the touchpad in question. If in
+# doubt, simply use /dev/input/event* to reload all input rules.
+#
+# If your changes are generally applicable, open a bug report on
+#   http://bugs.freedesktop.org/enter_bug.cgi?product=systemd
+# and include your new rules, a description of the device, and the
+# output of
+#   udevadm info /dev/input/eventXX
+# (or /dev/input/event*).
+#
+# Allowed properties are:
+#    TOUCHPAD_HAS_TRACKPOINT_BUTTONS=1
+#
+# If the TOUCHPAD_HAS_TRACKPOINT_BUTTONS property is set, this
+# device has # the trackpoint buttons wired up to the touchpad as
+# BTN_0, BTN_1 and BTN_2. This affects the Lenovo X1 Carbon 3rd
+# and the *50 series (T450, T550, etc.)
+
+# Lenovo X1 Carbon 3rd
+touchpad:pnpid:*LEN0048*:
+ TOUCHPAD_HAS_TRACKPOINT_BUTTONS=1
diff --git a/rules/70-touchpad.rules b/rules/70-touchpad.rules
new file mode 100644 (file)
index 0000000..88e6fd2
--- /dev/null
@@ -0,0 +1,12 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION=="remove", GOTO="touchpad_end"
+KERNEL!="event*", GOTO="touchpad_end"
+ENV{ID_INPUT_TOUCHPAD}=="", GOTO="touchpad_end"
+
+# touchpad:pnpid:<pnpid>:*
+KERNELS=="serio1", \
+    IMPORT{builtin}="hwdb 'touchpad:pnpid:$attr{firmware_id}:'", \
+    GOTO="touchpad_end"
+
+LABEL="touchpad_end"