[PATCH libinput 1/2] touchpad: add a hwdb quirk for (external) touchpad/keyboard combos

Hans de Goede hdegoede at redhat.com
Fri Feb 10 10:04:00 UTC 2017


Hi,

Series looks good, but patch 1/2 introduces
tp_is_tpkb_combo_below() and patch 2/2 then moves it around
to avoid doing a forward declaration, it would be better IMHO
if patch 1/2 simply defined it in the place where 2/2 puts it.

With that fixed:

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

Regards,

Hans



On 10-02-17 06:45, Peter Hutterer wrote:
> Specify the layout of the combo so we know when to initialize palm detection.
>
> This allows us to drop palm detection on external touchpads otherwise,
> replacing the wacom-specific check with something more generic..
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  src/evdev-mt-touchpad.c            | 19 +++++++++++++++++--
>  src/libinput-util.c                | 24 ++++++++++++++++++++++++
>  src/libinput-util.h                |  7 +++++++
>  test/test-touchpad.c               |  4 ++++
>  udev/90-libinput-model-quirks.hwdb |  7 +++++++
>  udev/parse_hwdb.py                 |  7 ++++++-
>  6 files changed, 65 insertions(+), 3 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index c5eeeac..f8c5cc6 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -2192,6 +2192,21 @@ tp_init_dwt(struct tp_dispatch *tp,
>  	return;
>  }
>
> +static inline bool
> +tp_is_tpkb_combo_below(struct evdev_device *device)
> +{
> +	const char *prop;
> +	enum tpkbcombo_layout layout = TPKBCOMBO_LAYOUT_UNKNOWN;
> +
> +	prop = udev_device_get_property_value(device->udev_device,
> +					      "LIBINPUT_ATTR_TPKBCOMBO_LAYOUT");
> +	if (!prop)
> +		return false;
> +
> +	return parse_tpkbcombo_layout_poperty(prop, &layout) &&
> +		layout == TPKBCOMBO_LAYOUT_BELOW;
> +}
> +
>  static void
>  tp_init_palmdetect(struct tp_dispatch *tp,
>  		   struct evdev_device *device)
> @@ -2203,8 +2218,8 @@ tp_init_palmdetect(struct tp_dispatch *tp,
>  	tp->palm.right_edge = INT_MAX;
>  	tp->palm.left_edge = INT_MIN;
>
> -	/* Wacom doesn't have internal touchpads */
> -	if (device->model_flags & EVDEV_MODEL_WACOM_TOUCHPAD)
> +	if (device->tags & EVDEV_TAG_EXTERNAL_TOUCHPAD &&
> +	    !tp_is_tpkb_combo_below(device))
>  		return;
>
>  	evdev_device_get_size(device, &width, &height);
> diff --git a/src/libinput-util.c b/src/libinput-util.c
> index d75955c..351bbe4 100644
> --- a/src/libinput-util.c
> +++ b/src/libinput-util.c
> @@ -336,6 +336,30 @@ parse_switch_reliability_property(const char *prop,
>  }
>
>  /**
> + * Parses a string with the allowed values: "below"
> + * The value refers to the position of the touchpad (relative to the
> + * keyboard, i.e. your average laptop would be 'below')
> + *
> + * @param prop The value of the property
> + * @param layout The layout
> + * @return true on success, false otherwise
> + */
> +bool
> +parse_tpkbcombo_layout_poperty(const char *prop,
> +			       enum tpkbcombo_layout *layout)
> +{
> +	if (!prop)
> +		return false;
> +
> +	if (streq(prop, "below")) {
> +		*layout = TPKBCOMBO_LAYOUT_BELOW;
> +		return true;
> +	}
> +
> +	return false;
> +}
> +
> +/**
>   * Return the next word in a string pointed to by state before the first
>   * separator character. Call repeatedly to tokenize a whole string.
>   *
> diff --git a/src/libinput-util.h b/src/libinput-util.h
> index 00ece58..d86ff12 100644
> --- a/src/libinput-util.h
> +++ b/src/libinput-util.h
> @@ -379,6 +379,13 @@ double parse_trackpoint_accel_property(const char *prop);
>  bool parse_dimension_property(const char *prop, size_t *width, size_t *height);
>  bool parse_calibration_property(const char *prop, float calibration[6]);
>
> +enum tpkbcombo_layout {
> +	TPKBCOMBO_LAYOUT_UNKNOWN,
> +	TPKBCOMBO_LAYOUT_BELOW,
> +};
> +bool parse_tpkbcombo_layout_poperty(const char *prop,
> +				    enum tpkbcombo_layout *layout);
> +
>  enum switch_reliability {
>  	RELIABILITY_UNKNOWN,
>  	RELIABILITY_RELIABLE,
> diff --git a/test/test-touchpad.c b/test/test-touchpad.c
> index aca9f7b..4656443 100644
> --- a/test/test-touchpad.c
> +++ b/test/test-touchpad.c
> @@ -933,11 +933,15 @@ touchpad_has_palm_detect_size(struct litest_device *dev)
>  {
>  	double width, height;
>  	unsigned int vendor;
> +	unsigned int bustype;
>  	int rc;
>
>  	vendor = libinput_device_get_id_vendor(dev->libinput_device);
> +	bustype = libevdev_get_id_bustype(dev->evdev);
>  	if (vendor == VENDOR_ID_WACOM)
>  		return 0;
> +	if (bustype == BUS_BLUETOOTH)
> +		return 0;
>  	if (vendor == VENDOR_ID_APPLE)
>  		return 1;
>
> diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb
> index 412d872..c1d6235 100644
> --- a/udev/90-libinput-model-quirks.hwdb
> +++ b/udev/90-libinput-model-quirks.hwdb
> @@ -60,6 +60,13 @@ libinput:name:*ETPS/2 Elantech Touchpad*:dmi:*svnASUSTeKCOMPUTERINC.:pnX555LAB:*
>   LIBINPUT_MODEL_TOUCHPAD_VISIBLE_MARKER=1
>
>  ##########################################
> +# Chicony
> +##########################################
> +# Acer Hawaii Keyboard, uses Chicony VID
> +libinput:touchpad:input:b0003v04F2p1558*
> + LIBINPUT_ATTR_TPKBCOMBO_LAYOUT=below
> +
> +##########################################
>  # Cyborg
>  ##########################################
>  # Saitek Cyborg R.A.T.5 Mouse
> diff --git a/udev/parse_hwdb.py b/udev/parse_hwdb.py
> index d079be2..2a342bf 100755
> --- a/udev/parse_hwdb.py
> +++ b/udev/parse_hwdb.py
> @@ -107,7 +107,12 @@ def property_grammar():
>                           Suppress('=') -
>                           reliability_tags('VALUE')]
>
> -    grammar = Or(model_props + size_props + reliability)
> +    tpkbcombo_tags = Or(('below'))
> +    tpkbcombo = [Literal('LIBINPUT_ATTR_TPKBCOMBO_LAYOUT')('NAME') -
> +                         Suppress('=') -
> +                         tpkbcombo_tags('VALUE')]
> +
> +    grammar = Or(model_props + size_props + reliability + tpkbcombo)
>
>      return grammar
>
>


More information about the wayland-devel mailing list