summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2014-11-25 21:35:16 +1000
committerAnthony G. Basile <blueness@gentoo.org>2014-11-28 08:12:30 -0500
commit3481b5b97660d56841c24683f0b8e7ad74a833f7 (patch)
tree8d7f07f4c5b762ef0cedb50c62b9125be08e5439
parentc317efd55c2368906563309cedb6b0ddb9b88716 (diff)
hwdb: add a new db for the DPI/frequency settings of mice
Pointer acceleration for relative input devices (mice, trackballs, etc.) applies to the deltas of the device. Alas, those deltas have no physical reference point - a delta of 10 may be caused by a large movement of a low-dpi mouse or by a minute movement of a high-dpi mouse. Which makes pointer acceleration a bit useless and high-dpi devices essentially unusable. In an ideal world, we could read the DPI from the device directly and work with that. In the world we actually live in, we need to compile this list manually. This patch introduces the database, with the usual match formats and a single property to be set on a device: MOUSE_DPI That is either a single value for most mice, or a list of values for mice that can change resolution at runtime. The exact format is detailed in the hwdb file. Note that we're explicitly overshooting the requirements we have for libinput atm. Frequency could be detected in software and we don't actually use the list of multiple resolutions (because we can't detect when they change anyway). However, we might as well collect those values from the get-go, adding/modifying what will eventually amount to hundreds of entries is a bit cumbersome. Note: we rely on the input_id builtin to tag us as mouse first, ordering of the rules is important. (David: fixed up typos and moved hwdb file into ./hwdb/) Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
-rw-r--r--hwdb/70-mouse.hwdb92
-rw-r--r--hwdb/Makefile.am3
-rw-r--r--rules/70-mouse.rules15
-rw-r--r--rules/Makefile.am1
4 files changed, 110 insertions, 1 deletions
diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb
new file mode 100644
index 0000000000..3d19f17179
--- /dev/null
+++ b/hwdb/70-mouse.hwdb
@@ -0,0 +1,92 @@
+# This file is part of systemd.
+#
+# Database for the DPI setting of mice, trackballs, other pointer devices that
+# cannot be queried directly.
+#
+# The lookup keys are composed in:
+# 70-mouse.rules
+#
+# Note: The format of the "mouse:" 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:
+# mouse:<subsystem>:v<vid>p<pid>:name:<name>:
+#
+# Supported subsystems: usb, bluetooth
+# vid/pid as 4-digit hex lowercase vendor/product
+#
+# if vid/pid is unavailable, use
+# mouse:*:name:<name>:
+# if name is unavailable, use
+# mouse:<subsystem>:v<vid>p<pid>:*
+#
+# For example, the following 5 matches all match the same mouse:
+# mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:
+# mouse:usb:*:name:Lenovo Optical USB Mouse:
+# mouse:usb:v17efp6019:*
+# mouse:*:name:Lenovo Optical USB Mouse:
+#
+# DPI settings are specified as
+# MOUSE_DPI=<dpi>[@<frequency>]
+#
+# Where <dpi> is the resolution in dots per inch, and <frequency> the
+# optional sampling frequency in Hz.
+#
+# The value of MOUSE_DPI is:
+# - a single integer for single-resolution mice, e.g.
+# MOUSE_DPI=800
+# or, if the frequency is known:
+# MOUSE_DPI=800@120
+# - a space-separated list of resolutions for multi-resolution mice.
+# The default resolution must be prefixed by an asterisk, the resultions
+# in the database must be as shipped by the manufacturer. e.g.
+# MOUSE_DPI=400 *800 2000
+#
+# The order of resolutions is as configured by the HW manufacturer or in
+# ascending order, whichever appropriate.
+#
+# The frequency must be given to either none or all resolutions. If the
+# device supports multiple frequencies, the order of items is
+# MOUSE_DPI=r1@f1 r2@f1 r3@f1 r1@f2 r2@f2 r3@f2
+#
+# If the default manufacturer-set resolution is unclear, a resolution of
+# 800 or 1000 should be set as default, if available. If neither is
+# available, choose the "middle" resolution value of those available.
+#
+# The list may contain a single item which must be marked with an
+# asterisk.
+#
+# Local changes to the a non-default resolution of the mouse (e.g. through
+# third-party software) must not be entered into this file, use a local
+# hwdb instead.
+#
+# To add local entries, create a new file
+# /etc/udev/hwdb.d/71-mouse-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 mouse 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*).
+
+##########################################
+# Lenovo
+##########################################
+
+mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:
+ MOUSE_DPI=1000@125
+
+##########################################
+# Logitech
+##########################################
+
+mouse:usb:v046dpc24e:name:Logitech G500s Laser Gaming Mouse:
+ MOUSE_DPI=400@500 *800@500 2000@500
diff --git a/hwdb/Makefile.am b/hwdb/Makefile.am
index daa9d72c79..c00cfe1335 100644
--- a/hwdb/Makefile.am
+++ b/hwdb/Makefile.am
@@ -9,7 +9,8 @@ dist_udevhwdb_DATA = \
20-sdio-classes.hwdb \
20-sdio-vendor-model.hwdb \
20-usb-classes.hwdb \
- 20-usb-vendor-model.hwdb
+ 20-usb-vendor-model.hwdb \
+ 70-mouse.hwdb
if ENABLE_KEYMAP
dist_udevhwdb_DATA += \
diff --git a/rules/70-mouse.rules b/rules/70-mouse.rules
new file mode 100644
index 0000000000..0e359e83f1
--- /dev/null
+++ b/rules/70-mouse.rules
@@ -0,0 +1,15 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION=="remove", GOTO="mouse_end"
+KERNEL!="event*", GOTO="mouse_end"
+ENV{ID_INPUT_MOUSE}=="", GOTO="mouse_end"
+
+# mouse:<subsystem>:v<vid>p<pid>:name:<name>:*
+KERNELS=="input*", ENV{ID_BUS}=="usb", \
+ IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
+ GOTO="mouse_end"
+KERNELS=="input*", ENV{ID_BUS}=="bluetooth", \
+ IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
+ GOTO="mouse_end"
+
+LABEL="mouse_end"
diff --git a/rules/Makefile.am b/rules/Makefile.am
index ae950a9546..dfbda04684 100644
--- a/rules/Makefile.am
+++ b/rules/Makefile.am
@@ -12,6 +12,7 @@ dist_udevrules_DATA = \
60-persistent-v4l.rules \
61-accelerometer.rules \
64-btrfs.rules \
+ 70-mouse.rules \
75-net-description.rules \
75-probe_mtd.rules \
75-tty-description.rules \