summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>2022-08-18 17:27:22 +0300
committerAlper Nebi Yasak <alpernebiyasak@gmail.com>2022-08-18 21:17:19 +0300
commite2f25ae64889ea7fe8a7556ee5fba91bc2a0eab8 (patch)
tree65fd3c6e34793f193f841d93475e4ce96fa5247b
parentcd7ad0cbde507b9b43cf7e1797ce75e98345f4a0 (diff)
downloadsystemd-e2f25ae64889ea7fe8a7556ee5fba91bc2a0eab8.tar.gz
udev: hwdb: Match iio sensors based on their label
The IIO subsystem exposes a 'label' sysfs file to help userspace better identify its devices [1]. Standardized labels include the sensor type along with its location, including 'accel-base' and 'accel-display'. Most Chrome OS boards have two accelerometers that are indistinguishable except for this label (or a 'location' sysfs file before Linux v6.0), and need different mounting matrix corrections based on their location. Add a udev rule that matches hwdb entries using this label, so we can correct both accelerometers on these devices with hwdb entries. The existing rules and hwdb entries are not modified to keep potential out-of-tree entries working, but new entries in this form will override existing ones. Also add currently standardized labels to parse-hwdb.py. [1] https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-iio
-rw-r--r--hwdb.d/60-sensor.hwdb3
-rwxr-xr-xhwdb.d/parse_hwdb.py15
-rw-r--r--rules.d/60-sensor.rules5
3 files changed, 22 insertions, 1 deletions
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 7978675943..b8331243c6 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -4,10 +4,13 @@
# 60-sensor.rules
#
# Match string formats:
+# sensor:<label>:modalias:<parent modalias pattern>:dmi:<dmi pattern>
# sensor:modalias:<parent modalias pattern>:dmi:<dmi pattern>
#
# The device modalias can be seen in the `modalias` file of the sensor parent,
+# and the device label can be seen in the `label` file of the sensor,
# for example:
+# cat /sys/`udevadm info -q path -n /dev/iio:device0`/label
# cat /sys/`udevadm info -q path -n /dev/iio:device0`/../modalias
#
# The full DMI string of the running machine can be read from
diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
index 7bad559699..61932fb018 100755
--- a/hwdb.d/parse_hwdb.py
+++ b/hwdb.d/parse_hwdb.py
@@ -72,7 +72,20 @@ TYPES = {'mouse': ('usb', 'bluetooth', 'ps2', '*'),
'touchpad': ('i8042', 'rmi', 'bluetooth', 'usb'),
'joystick': ('i8042', 'rmi', 'bluetooth', 'usb'),
'keyboard': ('name', ),
- 'sensor': ('modalias', ),
+ 'sensor': ('modalias',
+ 'accel-base',
+ 'accel-display',
+ 'accel-camera',
+ 'proximity-palmrest',
+ 'proximity-palmrest-left',
+ 'proximity-palmrest-right',
+ 'proximity-lap',
+ 'proximity-wifi',
+ 'proximity-lte',
+ 'proximity-wifi-lte',
+ 'proximity-wifi-left',
+ 'proximity-wifi-right',
+ ),
'ieee1394-unit-function' : ('node', ),
'camera': ('usb'),
}
diff --git a/rules.d/60-sensor.rules b/rules.d/60-sensor.rules
index 7b9b7d2887..99b8f5fc7a 100644
--- a/rules.d/60-sensor.rules
+++ b/rules.d/60-sensor.rules
@@ -2,6 +2,11 @@
ACTION=="remove", GOTO="sensor_end"
+# device matching the sensor's label, name and the machine's DMI data for IIO devices
+SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", ATTR{label}!="", \
+ IMPORT{builtin}="hwdb 'sensor:$attr{label}:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \
+ GOTO="sensor_end"
+
# device matching the sensor's name and the machine's DMI data for IIO devices
SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", \
IMPORT{builtin}="hwdb 'sensor:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \