[PATCH libinput] touchpad: add a special quirk for the Lenovo x220 with updated firmware
Hans de Goede
hdegoede at redhat.com
Fri Dec 11 02:34:56 PST 2015
Hi,
On 11-12-15 02:25, Peter Hutterer wrote:
> If an x220 is updated to the touchpad firmware version 8.1, the touchpad
> suffers from the same issues as the x230 and needs custom acceleration code.
> Unfortunately we cannot detect this otherwise, so it is left to the user as a
> custom hwdb setting.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1264453
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Ugh, well nothing we can do about this:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> doc/device-configuration-via-udev.dox | 18 ++++++++++++++++++
> src/evdev-mt-touchpad.c | 3 ++-
> src/evdev.c | 1 +
> src/evdev.h | 1 +
> udev/90-libinput-model-quirks.hwdb | 12 ++++++++++++
> 5 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/doc/device-configuration-via-udev.dox b/doc/device-configuration-via-udev.dox
> index f615cc1..7987073 100644
> --- a/doc/device-configuration-via-udev.dox
> +++ b/doc/device-configuration-via-udev.dox
> @@ -117,4 +117,22 @@ defaults or any other reason. The effects of setting these properties, the
> format of the property and the value of the property are subject to change
> at any time.
>
> + at subsection model_specific_configuration_x220fw81 Lenovo x220 with touchpad firmware v8.1
> +
> +The property <b>LIBINPUT_MODEL_LENOVO_X220_TOUCHPAD_FW81</b> may be set by a
> +user in a local hwdb file. This property designates the touchpad on a Lenovo
> +x220 with a touchpad firmware version 8.1. When this firmware version is
> +installed, the touchpad is imprecise. The touchpad device does not send
> +continuos x/y axis position updates, a behavior also observed on its
> +successor model, the Lenovo x230 which has the same firmware version. If the
> +above property is set, libinput adjusts its behavior to better suit this
> +particular model.
> +
> +The touchpad firmware version cannot be detected automatically by libinput,
> +local configuration is required to set this property. Refer to the libinput
> +model quirks hwdb for instructions.
> +
> +This property must not be used for any other purpose, no specific behavior
> +is guaranteed.
> +
> */
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 8e2a5c5..8014cc9 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -1566,7 +1566,8 @@ tp_init_accel(struct tp_dispatch *tp, double diagonal)
> tp->accel.x_scale_coeff = (DEFAULT_MOUSE_DPI/25.4) / res_x;
> tp->accel.y_scale_coeff = (DEFAULT_MOUSE_DPI/25.4) / res_y;
>
> - if (tp->device->model_flags & EVDEV_MODEL_LENOVO_X230)
> + if (tp->device->model_flags & EVDEV_MODEL_LENOVO_X230 ||
> + tp->device->model_flags & EVDEV_MODEL_LENOVO_X220_TOUCHPAD_FW81)
> filter = create_pointer_accelerator_filter_lenovo_x230(tp->device->dpi);
> else
> filter = create_pointer_accelerator_filter_touchpad(tp->device->dpi);
> diff --git a/src/evdev.c b/src/evdev.c
> index 83b1c20..85ca640 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1651,6 +1651,7 @@ evdev_read_model_flags(struct evdev_device *device)
> enum evdev_device_model model;
> } model_map[] = {
> { "LIBINPUT_MODEL_LENOVO_X230", EVDEV_MODEL_LENOVO_X230 },
> + { "LIBINPUT_MODEL_LENOVO_X220_TOUCHPAD_FW81", EVDEV_MODEL_LENOVO_X220_TOUCHPAD_FW81 },
> { "LIBINPUT_MODEL_CHROMEBOOK", EVDEV_MODEL_CHROMEBOOK },
> { "LIBINPUT_MODEL_SYSTEM76_BONOBO", EVDEV_MODEL_SYSTEM76_BONOBO },
> { "LIBINPUT_MODEL_SYSTEM76_GALAGO", EVDEV_MODEL_SYSTEM76_GALAGO },
> diff --git a/src/evdev.h b/src/evdev.h
> index 75a2cb6..09c05e9 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -108,6 +108,7 @@ enum evdev_device_model {
> EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD = (1 << 9),
> EVDEV_MODEL_JUMPING_SEMI_MT = (1 << 10),
> EVDEV_MODEL_ELANTECH_TOUCHPAD = (1 << 11),
> + EVDEV_MODEL_LENOVO_X220_TOUCHPAD_FW81 = (1 << 12),
> };
>
> struct mt_slot {
> diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb
> index cf4fbfa..814ec40 100644
> --- a/udev/90-libinput-model-quirks.hwdb
> +++ b/udev/90-libinput-model-quirks.hwdb
> @@ -67,6 +67,18 @@ libinput:name:Atmel maXTouch Touchpad:dmi:*svn*GOOGLE*:pn*Samus*
> # LENOVO
> ##########################################
>
> +# X220 after a bios update updating the touchpad firmware version to 8.1
> +# See https://bugzilla.redhat.com/show_bug.cgi?id=1264453 for details
> +# If the touchpad is unresponsive and dmesg includes this line
> +# psmouse serio1: synaptics: Touchpad model: 1, fw: 8.1 [...]
> +# then copy the two lines below into a new file
> +# /etc/udev/hwdb.d/90-libinput-x220-touchpad-fw81.hwdb, then run
> +# sudo udevadm hwdb --update and reboot.
> +#
> +# Copy the two lines below:
> +#libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*:pvrThinkPadX220*
> +# LIBINPUT_MODEL_LENOVO_X220_TOUCHPAD_FW81=1
> +
> # X230 (Tablet)
> libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*:pvrThinkPadX230*
> LIBINPUT_MODEL_LENOVO_X230=1
>
More information about the wayland-devel
mailing list