From 36e8ef7ad9974aa10f802a7857d7fe1ba850603a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 21 Jan 2021 00:32:01 +0100 Subject: [PATCH] debian/patches: Include upstream udev fixes and use hardcoded rules Fixes the multi-arch file conflict --- ...ed-but-hardcoded-autosuspend-rules-f.patch | 629 ++++++++++++++++++ debian/patches/series | 7 +- ...t-no-supported-device-is-whitelisted.patch | 24 + ...vent-devices-from-being-listed-twice.patch | 31 + ...-Print-warning-if-an-ID-is-supported.patch | 38 ++ ...s-Remove-supported-synaptics-devices.patch | 25 + 6 files changed, 753 insertions(+), 1 deletion(-) create mode 100644 debian/patches/debian/data-Use-auto-generated-but-hardcoded-autosuspend-rules-f.patch create mode 100644 debian/patches/tests-Add-check-that-no-supported-device-is-whitelisted.patch create mode 100644 debian/patches/udev-hwdb-Prevent-devices-from-being-listed-twice.patch create mode 100644 debian/patches/udev-rules-Print-warning-if-an-ID-is-supported.patch create mode 100644 debian/patches/udev-rules-Remove-supported-synaptics-devices.patch diff --git a/debian/patches/debian/data-Use-auto-generated-but-hardcoded-autosuspend-rules-f.patch b/debian/patches/debian/data-Use-auto-generated-but-hardcoded-autosuspend-rules-f.patch new file mode 100644 index 00000000..f2253220 --- /dev/null +++ b/debian/patches/debian/data-Use-auto-generated-but-hardcoded-autosuspend-rules-f.patch @@ -0,0 +1,629 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Wed, 20 Jan 2021 20:02:05 +0100 +Subject: data: Use auto-generated but hardcoded autosuspend rules file + +This solves various problems: + 1. It stays the same also if some drivers have been disabled + 2. It is still checked for its validity by tests + 3. It can be auto-generated using a simple command + +Based on: https://gitlab.freedesktop.org/libfprint/libfprint/-/commit/533180a2 +--- + data/autosuspend.rules | 445 +++++++++++++++++++++++++++++++++++++ + data/meson.build | 9 + + libfprint/fprint-list-udev-rules.c | 5 + + libfprint/meson.build | 26 ++- + meson.build | 13 ++ + tests/meson.build | 5 +- + tests/test-generated-rules.sh | 24 ++ + 7 files changed, 518 insertions(+), 9 deletions(-) + create mode 100644 data/autosuspend.rules + create mode 100644 data/meson.build + create mode 100755 tests/test-generated-rules.sh + +diff --git a/data/autosuspend.rules b/data/autosuspend.rules +new file mode 100644 +index 0000000..c87d3d1 +--- /dev/null ++++ b/data/autosuspend.rules +@@ -0,0 +1,445 @@ ++# This file has been generated using fprint-list-udev-rules with all drivers enabled ++# Upek TouchChip Fingerprint Coprocessor ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="2016", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="2016", ENV{LIBFPRINT_DRIVER}="Upek TouchChip Fingerprint Coprocessor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="2020", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="2020", ENV{LIBFPRINT_DRIVER}="Upek TouchChip Fingerprint Coprocessor" ++ ++# Validity VFS5011 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0010", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0010", ENV{LIBFPRINT_DRIVER}="Validity VFS5011" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0011", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0011", ENV{LIBFPRINT_DRIVER}="Validity VFS5011" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0015", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0015", ENV{LIBFPRINT_DRIVER}="Validity VFS5011" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0017", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0017", ENV{LIBFPRINT_DRIVER}="Validity VFS5011" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0018", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0018", ENV{LIBFPRINT_DRIVER}="Validity VFS5011" ++ ++# AuthenTec AES3500 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="5731", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="5731", ENV{LIBFPRINT_DRIVER}="AuthenTec AES3500" ++ ++# AuthenTec AES4000 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="5501", ATTRS{idProduct}=="08ff", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="5501", ATTRS{idProduct}=="08ff", ENV{LIBFPRINT_DRIVER}="AuthenTec AES4000" ++ ++# AuthenTec AES1610 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1600", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1600", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1610" ++ ++# AuthenTec AES1660 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1660", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1660", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1680", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1680", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1681", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1681", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1682", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1682", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1683", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1683", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1684", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1684", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1685", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1685", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1686", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1686", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1687", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1687", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1688", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1688", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1689", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="1689", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168a", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168b", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168c", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168d", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168e", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168e", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="168f", ENV{LIBFPRINT_DRIVER}="AuthenTec AES1660" ++ ++# AuthenTec AES2660 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2660", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2660", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2680", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2680", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2681", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2681", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2682", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2682", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2683", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2683", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2684", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2684", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2685", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2685", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2686", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2686", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2687", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2687", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2688", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2688", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2689", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2689", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268a", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268b", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268c", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268d", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268e", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268e", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="268f", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2691", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2691", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2660" ++ ++# AuthenTec AES2501 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2500", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2500", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2501" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2580", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2580", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2501" ++ ++# AuthenTec AES2550/AES2810 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2550", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2550", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2550/AES2810" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2810", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="08ff", ATTRS{idProduct}=="2810", ENV{LIBFPRINT_DRIVER}="AuthenTec AES2550/AES2810" ++ ++# Validity VFS101 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0001", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0001", ENV{LIBFPRINT_DRIVER}="Validity VFS101" ++ ++# Validity VFS301 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0005", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0005", ENV{LIBFPRINT_DRIVER}="Validity VFS301" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0008", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0008", ENV{LIBFPRINT_DRIVER}="Validity VFS301" ++ ++# Validity VFS0050 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0050", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0050", ENV{LIBFPRINT_DRIVER}="Validity VFS0050" ++ ++# EgisTec ES603 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0603", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0603", ENV{LIBFPRINT_DRIVER}="EgisTec ES603" ++ ++# Veridicom 5thSense ++SUBSYSTEM=="usb", ATTRS{idVendor}=="061a", ATTRS{idProduct}=="0110", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="061a", ATTRS{idProduct}=="0110", ENV{LIBFPRINT_DRIVER}="Veridicom 5thSense" ++ ++# Synaptics Sensors ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00bd", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00bd", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00e9", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00e9", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00df", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00df", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00f9", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00f9", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00fc", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00fc", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00c2", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00c2", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00c9", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00c9", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00e7", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00e7", ENV{LIBFPRINT_DRIVER}="Synaptics Sensors" ++ ++# ElanTech Fingerprint Sensor ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0903", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0903", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0907", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0907", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c01", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c01", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c02", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c02", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c03", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c03", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c04", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c04", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c05", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c05", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c06", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c06", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c07", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c07", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c08", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c08", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c09", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c09", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0a", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0b", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0c", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0d", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0e", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0e", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c0f", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c10", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c10", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c11", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c11", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c12", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c12", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c13", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c13", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c14", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c14", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c15", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c15", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c16", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c16", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c17", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c17", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c18", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c18", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c19", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c19", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1a", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1b", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1c", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1d", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1e", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1e", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c1f", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c20", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c20", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c21", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c21", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c22", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c22", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c23", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c23", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c24", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c24", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c25", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c25", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c26", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c26", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c27", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c27", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c28", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c28", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c29", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c29", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2a", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2b", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2c", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2d", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2e", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2e", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c2f", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c30", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c30", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c31", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c31", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c32", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c32", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c33", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c33", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c42", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c42", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4d", ENV{LIBFPRINT_DRIVER}="ElanTech Fingerprint Sensor" ++ ++# Digital Persona U.are.U 4000/4000B/4500 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bb", ATTRS{dev}=="*", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bb", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bc", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bc", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bd", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00bd", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00ca", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00ca", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="0007", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="0007", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="0008", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="0008", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="000a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="05ba", ATTRS{idProduct}=="000a", ENV{LIBFPRINT_DRIVER}="Digital Persona U.are.U 4000/4000B/4500" ++ ++# UPEK TouchChip/Eikon Touch 300 ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="2015", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="2015", ENV{LIBFPRINT_DRIVER}="UPEK TouchChip/Eikon Touch 300" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="3001", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="3001", ENV{LIBFPRINT_DRIVER}="UPEK TouchChip/Eikon Touch 300" ++ ++# UPEK TouchStrip Sensor-Only ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1000", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1000", ENV{LIBFPRINT_DRIVER}="UPEK TouchStrip Sensor-Only" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1001", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1001", ENV{LIBFPRINT_DRIVER}="UPEK TouchStrip Sensor-Only" ++ ++# UPEK TouchStrip ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="2016", ATTRS{dev}=="*", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="2016", ENV{LIBFPRINT_DRIVER}="UPEK TouchStrip" ++ ++# Goodix MOC Fingerprint Sensor ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5840", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5840", ENV{LIBFPRINT_DRIVER}="Goodix MOC Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="6496", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="6496", ENV{LIBFPRINT_DRIVER}="Goodix MOC Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="60a2", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="60a2", ENV{LIBFPRINT_DRIVER}="Goodix MOC Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="63ac", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="63ac", ENV{LIBFPRINT_DRIVER}="Goodix MOC Fingerprint Sensor" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="639c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="639c", ENV{LIBFPRINT_DRIVER}="Goodix MOC Fingerprint Sensor" ++ ++# Hardcoded whitelist ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="036b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="036b", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c00", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c00", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4b", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4c", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c4f", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c57", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="0c57", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="2706", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="2706", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="0081", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="0081", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="0088", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="0088", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="008a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="008a", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="009a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="009a", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="009b", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="009b", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00a2", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00a2", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00b7", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00b7", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00bb", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00bb", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00be", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00be", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00cb", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00cb", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00d8", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00d8", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00da", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="06cb", ATTRS{idProduct}=="00da", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5801", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5801", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5805", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5805", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5834", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5834", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5843", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="5843", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="10a5", ATTRS{idProduct}=="0007", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="10a5", ATTRS{idProduct}=="0007", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1188", ATTRS{idProduct}=="9545", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1188", ATTRS{idProduct}=="9545", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0007", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0007", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003a", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003a", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003c", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003d", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003f", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="003f", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0090", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0090", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0091", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0091", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0092", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0092", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0094", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0094", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0097", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0097", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="009d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="009d", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="00ab", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="00ab", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1002", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="147e", ATTRS{idProduct}=="1002", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1491", ATTRS{idProduct}=="0088", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1491", ATTRS{idProduct}=="0088", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="16d1", ATTRS{idProduct}=="1027", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="16d1", ATTRS{idProduct}=="1027", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0300", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0300", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0570", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0570", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0575", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="1c7a", ATTRS{idProduct}=="0575", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5042", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5042", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5110", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5110", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5117", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5117", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5201", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5201", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="521d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="521d", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5301", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5301", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="530c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="530c", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="532d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="532d", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="533c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="533c", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5381", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5381", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5385", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5385", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="538c", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="538c", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="538d", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="538d", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5395", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5395", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5584", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5584", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55a2", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55a2", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55a4", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55a4", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55b4", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="55b4", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5740", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="27c6", ATTRS{idProduct}=="5740", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="2808", ATTRS{idProduct}=="9338", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="2808", ATTRS{idProduct}=="9338", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="298d", ATTRS{idProduct}=="2033", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="298d", ATTRS{idProduct}=="2033", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="3538", ATTRS{idProduct}=="0930", ATTRS{dev}=="*", TEST=="power/control", ATTR{power/control}="auto", MODE="0660", GROUP="plugdev" ++SUBSYSTEM=="usb", ATTRS{idVendor}=="3538", ATTRS{idProduct}=="0930", ENV{LIBFPRINT_DRIVER}="Hardcoded whitelist" ++ +diff --git a/data/meson.build b/data/meson.build +new file mode 100644 +index 0000000..8f79716 +--- /dev/null ++++ b/data/meson.build +@@ -0,0 +1,9 @@ ++if get_option('udev_rules') ++ # This file has to be updated using ++ # ninja -C libfprint/sync-udev-rules ++ ++ install_data('autosuspend.rules', ++ rename: '60-@0@-autosuspend.rules'.format(versioned_libname), ++ install_dir: udev_rules_dir, ++ ) ++endif +diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c +index cba2b2f..3cda912 100644 +--- a/libfprint/fprint-list-udev-rules.c ++++ b/libfprint/fprint-list-udev-rules.c +@@ -164,8 +164,13 @@ int + main (int argc, char **argv) + { + g_autoptr(GArray) drivers = fpi_get_driver_types (); ++ g_autofree char *program_name = NULL; + guint i; + ++ program_name = g_path_get_basename (argv[0]); ++ g_print ("# This file has been generated using %s with all drivers enabled\n", ++ program_name); ++ + printed = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + for (i = 0; i < drivers->len; i++) +diff --git a/libfprint/meson.build b/libfprint/meson.build +index 4d1d30c..671a1e5 100644 +--- a/libfprint/meson.build ++++ b/libfprint/meson.build +@@ -301,14 +301,24 @@ udev_rules = executable('fprint-list-udev-rules', + link_with: libfprint_drivers, + install: false) + +-if get_option('udev_rules') +- custom_target('udev-rules', +- output: '60-@0@-autosuspend.rules'.format(versioned_libname), +- capture: true, +- command: [ udev_rules ], +- install: true, +- install_dir: udev_rules_dir) +-endif ++udev_rules_generator = custom_target('udev-rules', ++ output: 'autosuspend.rules', ++ depend_files: drivers_sources, ++ capture: true, ++ command: [ udev_rules ], ++ install: false, ++) ++ ++custom_target('sync-udev-rules', ++ depends: udev_rules_generator, ++ output: 'sync-udev-rules', ++ install: false, ++ command: [ ++ 'cp', '-v', ++ udev_rules_generator.full_path(), ++ meson.source_root() / 'data' ++ ] ++) + + supported_devices = executable('fprint-list-supported-devices', + 'fprint-list-supported-devices.c', +diff --git a/meson.build b/meson.build +index 483f1ec..4c73c00 100644 +--- a/meson.build ++++ b/meson.build +@@ -136,6 +136,18 @@ if drivers.length() == 0 or drivers[0] == '' + error('Cannot build libfprint without drivers, please specify a valid value for the drivers option') + endif + ++if drivers == all_drivers or drivers == default_drivers ++ default_drivers_are_enabled = true ++else ++ default_drivers_are_enabled = true ++ foreach driver: default_drivers ++ if driver not in drivers ++ default_drivers_are_enabled = false ++ break ++ endif ++ endforeach ++endif ++ + nss_dep = dependency('', required: false) + imaging_dep = dependency('', required: false) + libfprint_conf.set10('HAVE_PIXMAN', false) +@@ -223,6 +235,7 @@ if get_option('gtk-examples') + subdir('demo') + endif + ++subdir('data') + subdir('tests') + + pkgconfig = import('pkgconfig') +diff --git a/tests/meson.build b/tests/meson.build +index 27bdd9f..efcb1cb 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -5,6 +5,7 @@ envs.set('G_MESSAGES_DEBUG', 'all') + + # Setup paths + envs.set('MESON_SOURCE_ROOT', meson.source_root()) ++envs.set('MESON_BUILD_ROOT', meson.build_root()) + envs.prepend('LD_LIBRARY_PATH', join_paths(meson.build_root(), 'libfprint')) + + # Set FP_DEVICE_EMULATION so that drivers can adapt (e.g. to use fixed +@@ -170,8 +171,10 @@ foreach test_name: unit_tests + endforeach + + # Run udev rule generator with fatal warnings ++envs.set('UDEV_RULES', udev_rules.full_path()) ++envs.set('UDEV_RULES_CHECK_CONTENTS', default_drivers_are_enabled ? '1' : '0') + test('udev-rules', +- udev_rules, ++ find_program('test-generated-rules.sh'), + env: envs) + + gdb = find_program('gdb', required: false) +diff --git a/tests/test-generated-rules.sh b/tests/test-generated-rules.sh +new file mode 100755 +index 0000000..5ba913b +--- /dev/null ++++ b/tests/test-generated-rules.sh +@@ -0,0 +1,24 @@ ++#!/usr/bin/env bash ++set -e ++ ++[ -x "$UDEV_RULES" ] || exit 1 ++ ++if [ "$UDEV_RULES_CHECK_CONTENTS" == 1 ]; then ++ generated_rules=$(mktemp "${TMPDIR:-/tmp}/libfprint-XXXXXX.rules") ++else ++ generated_rules=/dev/null ++fi ++ ++$UDEV_RULES > "$generated_rules" ++ ++if [ "$UDEV_RULES_CHECK_CONTENTS" != 1 ]; then ++ exit 77 ++fi ++ ++if ! cmp "$MESON_SOURCE_ROOT/data/autosuspend.rules" "$generated_rules"; then ++ echo "E: Autosuspend file needs to be re-generated!" ++ echo " ninja -C $MESON_BUILD_ROOT libfprint/sync-udev-rules" ++ exit 1 ++fi ++ ++rm "$generated_rules" diff --git a/debian/patches/series b/debian/patches/series index 6a371149..4a1a4463 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,7 @@ -meson-Do-not-support-drivers-known-to-fail-in-Big-Endian-.patch debian/Tweak-the-udev-rules-creator-for-Debian-usage.patch +meson-Do-not-support-drivers-known-to-fail-in-Big-Endian-.patch +udev-rules-Print-warning-if-an-ID-is-supported.patch +udev-rules-Remove-supported-synaptics-devices.patch +tests-Add-check-that-no-supported-device-is-whitelisted.patch +udev-hwdb-Prevent-devices-from-being-listed-twice.patch +debian/data-Use-auto-generated-but-hardcoded-autosuspend-rules-f.patch diff --git a/debian/patches/tests-Add-check-that-no-supported-device-is-whitelisted.patch b/debian/patches/tests-Add-check-that-no-supported-device-is-whitelisted.patch new file mode 100644 index 00000000..b4979302 --- /dev/null +++ b/debian/patches/tests-Add-check-that-no-supported-device-is-whitelisted.patch @@ -0,0 +1,24 @@ +From: Benjamin Berg +Date: Tue, 19 Jan 2021 13:38:08 +0100 +Subject: tests: Add check that no supported device is whitelisted + +--- + tests/meson.build | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/tests/meson.build b/tests/meson.build +index 8fcae69..27bdd9f 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -169,6 +169,11 @@ foreach test_name: unit_tests + ) + endforeach + ++# Run udev rule generator with fatal warnings ++test('udev-rules', ++ udev_rules, ++ env: envs) ++ + gdb = find_program('gdb', required: false) + if gdb.found() + add_test_setup('gdb', diff --git a/debian/patches/udev-hwdb-Prevent-devices-from-being-listed-twice.patch b/debian/patches/udev-hwdb-Prevent-devices-from-being-listed-twice.patch new file mode 100644 index 00000000..2e6730d1 --- /dev/null +++ b/debian/patches/udev-hwdb-Prevent-devices-from-being-listed-twice.patch @@ -0,0 +1,31 @@ +From: Benjamin Berg +Date: Wed, 20 Jan 2021 18:02:31 +0100 +Subject: udev-hwdb: Prevent devices from being listed twice + +The change to print a warning (for testing purposes) from commit +944e0d03837 (udev-rules: Print warning if an ID is supported) was +incorrect because it prevented duplicated to be suppressed if a device +is listed by two independent drivers. +--- + libfprint/fprint-list-udev-rules.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c +index af289da..cba2b2f 100644 +--- a/libfprint/fprint-list-udev-rules.c ++++ b/libfprint/fprint-list-udev-rules.c +@@ -133,10 +133,11 @@ print_driver (const FpDeviceClass *cls) + + key = g_strdup_printf ("%04x:%04x", entry->vid, entry->pid); + +- if (cls == &whitelist && g_hash_table_lookup (printed, key) != NULL) ++ if (g_hash_table_lookup (printed, key) != NULL) + { +- g_warning ("%s implemented by driver %s", +- key, (const char *) g_hash_table_lookup (printed, key)); ++ if (cls == &whitelist) ++ g_warning ("%s implemented by driver %s", ++ key, (const char *) g_hash_table_lookup (printed, key)); + g_free (key); + continue; + } diff --git a/debian/patches/udev-rules-Print-warning-if-an-ID-is-supported.patch b/debian/patches/udev-rules-Print-warning-if-an-ID-is-supported.patch new file mode 100644 index 00000000..7e5c2133 --- /dev/null +++ b/debian/patches/udev-rules-Print-warning-if-an-ID-is-supported.patch @@ -0,0 +1,38 @@ +From: Benjamin Berg +Date: Tue, 19 Jan 2021 13:29:17 +0100 +Subject: udev-rules: Print warning if an ID is supported + +--- + libfprint/fprint-list-udev-rules.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c +index 3b6f572..57aa5e6 100644 +--- a/libfprint/fprint-list-udev-rules.c ++++ b/libfprint/fprint-list-udev-rules.c +@@ -110,6 +110,7 @@ static const FpIdEntry blacklist_id_table[] = { + static const FpDeviceClass whitelist = { + .type = FP_DEVICE_TYPE_USB, + .id_table = whitelist_id_table, ++ .id = "whitelist", + .full_name = "Hardcoded whitelist" + }; + +@@ -135,13 +136,15 @@ print_driver (const FpDeviceClass *cls) + + key = g_strdup_printf ("%04x:%04x", entry->vid, entry->pid); + +- if (g_hash_table_lookup (printed, key) != NULL) ++ if (cls == &whitelist && g_hash_table_lookup (printed, key) != NULL) + { ++ g_warning ("%s implemented by driver %s", ++ key, (const char *) g_hash_table_lookup (printed, key)); + g_free (key); + continue; + } + +- g_hash_table_insert (printed, key, GINT_TO_POINTER (1)); ++ g_hash_table_insert (printed, key, (void *) cls->id); + + if (num_printed == 0) + g_print ("# %s\n", cls->full_name); diff --git a/debian/patches/udev-rules-Remove-supported-synaptics-devices.patch b/debian/patches/udev-rules-Remove-supported-synaptics-devices.patch new file mode 100644 index 00000000..f602aee1 --- /dev/null +++ b/debian/patches/udev-rules-Remove-supported-synaptics-devices.patch @@ -0,0 +1,25 @@ +From: Benjamin Berg +Date: Tue, 19 Jan 2021 13:37:51 +0100 +Subject: udev-rules: Remove supported synaptics devices + +--- + libfprint/fprint-list-udev-rules.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c +index 57aa5e6..af289da 100644 +--- a/libfprint/fprint-list-udev-rules.c ++++ b/libfprint/fprint-list-udev-rules.c +@@ -45,12 +45,9 @@ static const FpIdEntry whitelist_id_table[] = { + { .vid = 0x06cb, .pid = 0x00b7 }, + { .vid = 0x06cb, .pid = 0x00bb }, + { .vid = 0x06cb, .pid = 0x00be }, +- { .vid = 0x06cb, .pid = 0x00c2 }, +- { .vid = 0x06cb, .pid = 0x00c9 }, + { .vid = 0x06cb, .pid = 0x00cb }, + { .vid = 0x06cb, .pid = 0x00d8 }, + { .vid = 0x06cb, .pid = 0x00da }, +- { .vid = 0x06cb, .pid = 0x00e7 }, + { .vid = 0x0a5c, .pid = 0x5801 }, + { .vid = 0x0a5c, .pid = 0x5805 }, + { .vid = 0x0a5c, .pid = 0x5834 },