Compare commits

...

8 commits
main ... 1.17.1

Author SHA1 Message Date
Peter Hutterer
6df5169229 libinput 1.17.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2021-03-24 14:46:08 +10:00
Greg V
4f2f1d29ec quirks: add wildcard to HID-over-I2C names (for FreeBSD)
The FreeBSD HID stack adds the device type to the evdev name,
so we get e.g. "ACPI0C50:00 18D1:5028 TouchPad".

(Maybe this shouldn't be matched by name at all though...)

Signed-off-by: Greg V <greg@unrelenting.technology>
(cherry picked from commit 06697b5e85)
2021-03-24 14:45:24 +10:00
Greg V
4c1862c1e4 quirks: implement DMI support on FreeBSD
FreeBSD does not use Linux modaliases, so we have to generate these strings.
Unfortunately for us, the data in kenv has the chassis type pre-parsed into
a nice string, so we have to match these strings back into numbers.
Only relevant types are included to avoid bloating the code.

Signed-off-by: Greg V <greg@unrelenting.technology>
(cherry picked from commit 6941f74070)
2021-03-24 14:45:18 +10:00
Greg V
a49826a7a8 quirks: add quirks for Apple SPI input devices
The Linux applespi driver currently uses the Synaptics vendor ID
on the trackpad for some reason (even though, at least from bcm5974
we only know that Broadcom is involved..) but my upcoming FreeBSD driver
uses the Apple vendor ID everywhere, so add two quirks.

Signed-off-by: Greg V <greg@unrelenting.technology>
(cherry picked from commit d8b1a773e3)
2021-03-24 14:45:17 +10:00
Greg V
f905054b5b quirks: recognize SPI bus
Apple MacBooks (Broadwell/Skylake/Kaby Lake and Apple Silicon)
use SPI to communicate with the keyboard and trackpad.

Signed-off-by: Greg V <greg@unrelenting.technology>
(cherry picked from commit 5f00c32d9e)
2021-03-24 14:45:16 +10:00
Peter Hutterer
b8f90d074e doc/user: explain why we are doing motion normalization
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 2f8dab4537)
2021-03-24 14:44:47 +10:00
Peter Hutterer
7624497df5 completion: add missing libinput analyze subtools to the zsh completions
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 40b83b1105)
2021-03-24 14:44:31 +10:00
Pedro Ribeiro
1ca2f11524 Add Lenovo Legion 5 keyboard to 50-system-lenovo.quirks
Signed-off-by: Pedro Ribeiro <pedrib@gmail.com>
(cherry picked from commit 5e69c5f9ae)
2021-03-24 14:44:29 +10:00
8 changed files with 152 additions and 8 deletions

View file

@ -163,12 +163,35 @@ __all_seats()
':device:_files -W /dev/input/ -P /dev/input/'
}
(( $+functions[_libinput_analyze_per-slot-delta] )) || _libinput_analyze_per-slot-delta()
{
_arguments \
'--help[Show help message and exit]' \
':recording:_files'
}
(( $+functions[_libinput_analyze_touch-down-state] )) || _libinput_analyze_touch-down-state()
{
_arguments \
'--help[Show help message and exit]' \
':recording:_files'
}
(( $+functions[_libinput_analyze_recording] )) || _libinput_analyze_recording()
{
_arguments \
'--help[Show help message and exit]' \
':recording:_files'
}
(( $+functions[_libinput_analyze] )) || _libinput_analyze()
{
local curcontext=$curcontext state line ret=1
local features
features=(
"per-slot-delta:analyze relative movement per touch per slot"
"recording:analyze a recording by printing a pretty table"
"touch-down-state:analyze a recording for logical touch down states"
)
_arguments -C \

View file

@ -27,6 +27,11 @@ libinput applies a dpi-dependent acceleration function. At low speeds, a
movement speed increases, acceleration is applied - at high speeds a low-dpi
device will roughly feel the same as a higher-dpi mouse.
The reason for the normalization is convenience: a caller can assume that a
delta of 1 should result in a movement of 1 pixel on a traditional
(low-dpi) screen. On screens with high resolutions, the caller must scale
according to the UI scale factors.
This normalization only applies to accelerated coordinates, unaccelerated
coordinates are left in device-units. It is up to the caller to interpret
those coordinates correctly.

View file

@ -1,5 +1,5 @@
project('libinput', 'c',
version : '1.17.0',
version : '1.17.1',
license : 'MIT/Expat',
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
meson_version : '>= 0.47.0')

View file

@ -27,6 +27,12 @@ AttrTouchSizeRange=150:130
MatchName=*Apple Inc. Apple Internal Keyboard*
AttrKeyboardIntegration=internal
[Apple Internal Keyboard (SPI)]
MatchUdevType=keyboard
MatchBus=spi
MatchVendor=0x5AC
AttrKeyboardIntegration=internal
# The Apple MagicMouse has a touchpad built-in but the kernel still
# emulates a full 2/3 button mouse for us. Ignore anything from the
# ABS interface
@ -89,3 +95,22 @@ MatchBus=usb
MatchVendor=0x5AC
MatchProduct=0x0262
AttrPalmSizeThreshold=1600
[Apple Laptop Touchpad (SPI)]
MatchUdevType=touchpad
MatchBus=spi
MatchVendor=0x5AC
ModelAppleTouchpad=1
AttrSizeHint=104x75
AttrTouchSizeRange=150:130
AttrPalmSizeThreshold=1600
# The Linux applespi driver currently uses the Synaptics vendor for some reason
[Apple Laptop Touchpad (SPI)]
MatchUdevType=touchpad
MatchBus=spi
MatchVendor=0x6CB
ModelAppleTouchpad=1
AttrSizeHint=104x75
AttrTouchSizeRange=150:130
AttrPalmSizeThreshold=1600

View file

@ -89,7 +89,7 @@ ModelChromebook=1
[Google Chromebook Eve]
MatchUdevType=touchpad
MatchName=ACPI0C50:00 18D1:5028
MatchName=ACPI0C50:00 18D1:5028*
MatchDMIModalias=dmi:*svnGoogle:pnEve*
ModelChromebook=1
AttrPressureRange=6:4

View file

@ -22,7 +22,7 @@ ModelHPPavilionDM4Touchpad=1
# Touchpad is a clickpad but INPUT_PROP_BUTTONPAD is not set, see
# https://bugs.freedesktop.org/show_bug.cgi?id=97147
[HP Stream 11]
MatchName=SYN1EDE:00 06CB:7442
MatchName=SYN1EDE:00 06CB:7442*
MatchDMIModalias=dmi:*svnHewlett-Packard:pnHPStreamNotebookPC11*
AttrInputPropEnable=INPUT_PROP_BUTTONPAD

View file

@ -205,3 +205,19 @@ ModelTabletModeNoSuspend=1
MatchName=AT Raw Set 2 keyboard
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX1Tablet:*
ModelTabletModeNoSuspend=1
# Misidentified as an external keyboard by libinput
# Tested on Legion 5 15AR05H
[Lenovo Legion 5 Keyboard]
MatchUdevType=keyboard
MatchBus=usb
MatchVendor=0x048D
MatchProduct=0xC100
AttrKeyboardIntegration=internal
[Lenovo Legion 5 Keyboard]
MatchUdevType=keyboard
MatchBus=usb
MatchVendor=0x048D
MatchProduct=0xC955
AttrKeyboardIntegration=internal

View file

@ -35,6 +35,9 @@
#include <dirent.h>
#include <fnmatch.h>
#include <libgen.h>
#ifdef __FreeBSD__
#include <kenv.h>
#endif
#include "libinput-versionsort.h"
#include "libinput-util.h"
@ -111,6 +114,7 @@ enum bustype {
BT_PS2,
BT_RMI,
BT_I2C,
BT_SPI,
};
enum udev_type {
@ -352,10 +356,11 @@ property_cleanup(struct property *p)
}
/**
* Return the dmi modalias from the udev device.
* Return the system DMI info in modalias format.
*/
#ifdef __linux__
static inline char *
init_dmi(void)
init_dmi_linux(void)
{
struct udev *udev;
struct udev_device *udev_device;
@ -363,9 +368,6 @@ init_dmi(void)
char *copy = NULL;
const char *syspath = "/sys/devices/virtual/dmi/id";
if (getenv("LIBINPUT_RUNNING_TEST_SUITE"))
return safe_strdup("dmi:");
udev = udev_new();
if (!udev)
return NULL;
@ -388,6 +390,73 @@ init_dmi(void)
return copy;
}
#endif
#ifdef __FreeBSD__
static inline char *
init_dmi_freebsd(void)
{
#define LEN (KENV_MVALLEN + 1)
char *modalias;
char bios_vendor[LEN], bios_version[LEN], bios_date[LEN];
char sys_vendor[LEN], product_name[LEN], product_version[LEN];
char board_vendor[LEN], board_name[LEN], board_version[LEN];
char chassis_vendor[LEN], chassis_type[LEN], chassis_version[LEN];
int chassis_type_num = 0x2;
kenv(KENV_GET, "smbios.bios.vendor", bios_vendor, LEN);
kenv(KENV_GET, "smbios.bios.version", bios_version, LEN);
kenv(KENV_GET, "smbios.bios.reldate", bios_date, LEN);
kenv(KENV_GET, "smbios.system.maker", sys_vendor, LEN);
kenv(KENV_GET, "smbios.system.product", product_name, LEN);
kenv(KENV_GET, "smbios.system.version", product_version, LEN);
kenv(KENV_GET, "smbios.planar.maker", board_vendor, LEN);
kenv(KENV_GET, "smbios.planar.product", board_name, LEN);
kenv(KENV_GET, "smbios.planar.version", board_version, LEN);
kenv(KENV_GET, "smbios.chassis.vendor", chassis_vendor, LEN);
kenv(KENV_GET, "smbios.chassis.type", chassis_type, LEN);
kenv(KENV_GET, "smbios.chassis.version", chassis_version, LEN);
#undef LEN
if (strcmp(chassis_type, "Desktop") == 0)
chassis_type_num = 0x3;
else if (strcmp(chassis_type, "Portable") == 0)
chassis_type_num = 0x8;
else if (strcmp(chassis_type, "Laptop") == 0)
chassis_type_num = 0x9;
else if (strcmp(chassis_type, "Notebook") == 0)
chassis_type_num = 0xA;
else if (strcmp(chassis_type, "Tablet") == 0)
chassis_type_num = 0x1E;
else if (strcmp(chassis_type, "Convertible") == 0)
chassis_type_num = 0x1F;
else if (strcmp(chassis_type, "Detachable") == 0)
chassis_type_num = 0x20;
xasprintf(&modalias,
"dmi:bvn%s:bvr%s:bd%s:svn%s:pn%s:pvr%s:rvn%s:rn%s:rvr%s:cvn%s:ct%d:cvr%s:",
bios_vendor, bios_version, bios_date, sys_vendor, product_name,
product_version, board_vendor, board_name, board_version, chassis_vendor,
chassis_type_num, chassis_version);
return modalias;
}
#endif
static inline char *
init_dmi(void)
{
if (getenv("LIBINPUT_RUNNING_TEST_SUITE"))
return safe_strdup("dmi:");
#if defined(__linux__)
return init_dmi_linux();
#elif defined(__FreeBSD__)
return init_dmi_freebsd();
#else
return NULL;
#endif
}
/**
* Return the dt compatible string
@ -499,6 +568,8 @@ parse_match(struct quirks_context *ctx,
s->match.bus = BT_RMI;
else if (streq(value, "i2c"))
s->match.bus = BT_I2C;
else if (streq(value, "spi"))
s->match.bus = BT_SPI;
else
goto out;
} else if (streq(key, "MatchVendor")) {
@ -1241,6 +1312,10 @@ match_fill_bus_vid_pid(struct match *m,
m->bus = BT_I2C;
m->bits |= M_BUS;
break;
case BUS_SPI:
m->bus = BT_SPI;
m->bits |= M_BUS;
break;
default:
break;
}