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

Peter Hutterer peter.hutterer at who-t.net
Sun Feb 12 22:29:38 UTC 2017


On Fri, Feb 10, 2017 at 11:04:00AM +0100, Hans de Goede wrote:
> 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>

fixed, thanks!

Cheers,
   Peter

> 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