[PATCH v2 libinput] touchpad: add a quirk for the HP Pavilion dm4

Hans de Goede hdegoede at redhat.com
Wed Nov 30 07:27:03 UTC 2016


Hi,

On 30-11-16 03:24, Peter Hutterer wrote:
> This touchpad has cursor jumps for 2-finger scrolling that also affects the
> single-finger emulation. So disable any multitouch bits on this device and
> disallow the 2-finger scroll method. This still allows for 2-finger
> tapping/clicking.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=91135
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

v2 LGTM:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans



> ---
> Changes to v1:
> - move the DM4 magic to tp_init_slots and pretend it's a single-touch
>   touchpad.
>
>  src/evdev-mt-touchpad.c            | 12 +++++++++++-
>  src/evdev.c                        |  1 +
>  src/evdev.h                        |  1 +
>  udev/90-libinput-model-quirks.hwdb |  4 ++++
>  4 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 0492851..0a261a3 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -1770,8 +1770,12 @@ tp_init_slots(struct tp_dispatch *tp,
>  	 * If three fingers are set down in the same frame, one slot has the
>  	 * coordinates 0/0 and may not get updated for several frames.
>  	 * See https://bugzilla.redhat.com/show_bug.cgi?id=1295073
> +	 *
> +	 * The HP Pavilion DM4 touchpad has random jumps in slots, including
> +	 * for single-finger movement. See fdo bug 91135
>  	 */
> -	if (tp->semi_mt) {
> +	if (tp->semi_mt ||
> +	    device->model_flags & EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD) {
>  		tp->num_slots = 1;
>  		tp->slot = 0;
>  		tp->has_mt = false;
> @@ -1874,6 +1878,12 @@ tp_scroll_get_methods(struct tp_dispatch *tp)
>  {
>  	uint32_t methods = LIBINPUT_CONFIG_SCROLL_EDGE;
>
> +	/* Any movement with more than one finger has random cursor
> +	 * jumps. Don't allow for 2fg scrolling on this device, see
> +	 * fdo bug 91135 */
> +	if (tp->device->model_flags & EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD)
> +		return LIBINPUT_CONFIG_SCROLL_EDGE;
> +
>  	if (tp->ntouches >= 2)
>  		methods |= LIBINPUT_CONFIG_SCROLL_2FG;
>
> diff --git a/src/evdev.c b/src/evdev.c
> index afb5e34..57670e2 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -2186,6 +2186,7 @@ evdev_read_model_flags(struct evdev_device *device)
>  		MODEL(HP8510_TOUCHPAD),
>  		MODEL(HP6910_TOUCHPAD),
>  		MODEL(HP_ZBOOK_STUDIO_G3),
> +		MODEL(HP_PAVILION_DM4_TOUCHPAD),
>  #undef MODEL
>  		{ "ID_INPUT_TRACKBALL", EVDEV_MODEL_TRACKBALL },
>  		{ NULL, EVDEV_MODEL_DEFAULT },
> diff --git a/src/evdev.h b/src/evdev.h
> index b5a54a2..071b9ec 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -122,6 +122,7 @@ enum evdev_device_model {
>  	EVDEV_MODEL_HP8510_TOUCHPAD = (1 << 21),
>  	EVDEV_MODEL_HP6910_TOUCHPAD = (1 << 22),
>  	EVDEV_MODEL_HP_ZBOOK_STUDIO_G3 = (1 << 23),
> +	EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD = (1 << 24),
>  };
>
>  struct mt_slot {
> diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb
> index 347a229..eb74f61 100644
> --- a/udev/90-libinput-model-quirks.hwdb
> +++ b/udev/90-libinput-model-quirks.hwdb
> @@ -99,6 +99,10 @@ libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnHewlett-Packard:*pnHPCompaq6910
>  libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnHewlett-Packard:*pnHPCompaq8510w*
>   LIBINPUT_MODEL_HP8510_TOUCHPAD=1
>
> +# HP Pavillion dm4
> +libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnHewlett-Packard:*pnHPPaviliondm4NotebookPC*
> + LIBINPUT_MODEL_HP_PAVILION_DM4_TOUCHPAD=1
> +
>  # HP Stream 11
>  libinput:name:SYN1EDE:00 06CB:7442:dmi:*svnHewlett-Packard:pnHPStreamNotebookPC11*
>   LIBINPUT_MODEL_HP_STREAM11_TOUCHPAD=1
>


More information about the wayland-devel mailing list