diff --git a/0001-Support-the-new-Lenovo-X1-Carbon-3rd-trackpoint-butt.patch b/0001-Support-the-new-Lenovo-X1-Carbon-3rd-trackpoint-butt.patch deleted file mode 100644 index 8a05c7e..0000000 --- a/0001-Support-the-new-Lenovo-X1-Carbon-3rd-trackpoint-butt.patch +++ /dev/null @@ -1,230 +0,0 @@ -From 0642342b26752a15e961a4dcb2bc14de1156caba Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Thu, 29 Jan 2015 11:25:26 +1000 -Subject: [PATCH synaptics] Support the new Lenovo X1 Carbon 3rd trackpoint - buttons - -This device has the trackpoint buttons wired up to the touchpad to send BTN_0, -BTN_1 and BTN_2 for left, right, middle. This conflicts with previous -touchpads that used those event codes for dedicated scroll buttons. - -Add an option HasTrackpointButtons that can be set via a xorg.conf.d -snippets. This option is not intended as a user-set option, rather -we expect distributions to ship some conglomerate of udev/hal rules with -xorg.conf snippets that take effect. - -If the option is set, we look at the three affected buttons at the beginning -of HandleState and send button events immediately for them. The HW state is -reset to neutral and other processing continues. This saves us from having to -synchronize these buttons with software buttons (also present on this device), -tapping, etc. - -Since the buttons are physically different and (mentally) associated with the -trackpoint device we also don't need to worry about having finger motion event -correctly synced up with the button presses - it's acceptable to send the -presses before the motion events. - -Signed-off-by: Peter Hutterer -Reviewed-by: Hans de Goede -Tested-by: Benjamin Tissoires -(cherry picked from commit 064445364b4775b25ba49c2250b22b169f291147) ---- - conf/50-synaptics.conf | 7 +++++++ - conf/71-synaptics.rules | 10 ++++++++++ - conf/Makefile.am | 7 +++++++ - configure.ac | 10 ++++++++++ - man/synaptics.man | 14 ++++++++++++++ - src/synaptics.c | 42 ++++++++++++++++++++++++++++++++++++++++++ - src/synapticsstr.h | 2 ++ - 7 files changed, 92 insertions(+) - create mode 100644 conf/71-synaptics.rules - -diff --git a/conf/50-synaptics.conf b/conf/50-synaptics.conf -index aa50456..5fb131e 100644 ---- a/conf/50-synaptics.conf -+++ b/conf/50-synaptics.conf -@@ -44,3 +44,10 @@ Section "InputClass" - MatchDriver "synaptics" - Option "SoftButtonAreas" "0 0 0 0 0 0 0 0" - EndSection -+ -+Section "InputClass" -+ Identifier "Lenovo *50 and Carbon 3rd trackpoint buttons" -+ MatchDriver "synaptics" -+ MatchTag "has_trackpoint_buttons" -+ Option "HasTrackpointButtons" "on" -+EndSection -diff --git a/conf/71-synaptics.rules b/conf/71-synaptics.rules -new file mode 100644 -index 0000000..a707421 ---- /dev/null -+++ b/conf/71-synaptics.rules -@@ -0,0 +1,10 @@ -+ACTION=="remove", GOTO="touchpad_end" -+KERNEL!="event*", GOTO="touchpad_end" -+ENV{ID_INPUT_TOUCHPAD}=="", GOTO="touchpad_end" -+ -+# Lenovo X1 Carbon 3rd -+KERNELS=="serio1", \ -+ ATTRS{firmware_id}=="*LEN0048*", \ -+ ENV{ID_INPUT.tags}="has_trackpoint_buttons" -+ -+LABEL="touchpad_end" -diff --git a/conf/Makefile.am b/conf/Makefile.am -index 38d2a01..4dde902 100644 ---- a/conf/Makefile.am -+++ b/conf/Makefile.am -@@ -25,3 +25,10 @@ else - fdidir = $(datadir)/hal/fdi/policy/20thirdparty - dist_fdi_DATA = 11-x11-synaptics.fdi - endif -+ -+if HAVE_UDEV_RULES_DIR -+udevdir=$(UDEV_RULES_DIR) -+udev_DATA = 71-synaptics.rules -+endif -+ -+EXTRA_DIST = 71-synaptics.rules -diff --git a/configure.ac b/configure.ac -index b65adc7..ba75e73 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -128,6 +128,16 @@ AM_CONDITIONAL([BUILD_EVENTCOMM], [test "x${BUILD_EVENTCOMM}" = "xyes"]) - AM_CONDITIONAL([BUILD_PSMCOMM], [test "x${BUILD_PSMCOMM}" = "xyes"]) - AM_CONDITIONAL([BUILD_PS2COMM], [test "x${BUILD_PS2COMM}" = "xyes"]) - -+AC_ARG_WITH(udev-rules-dir, -+ AS_HELP_STRING([--with-udev-rules-dir=DIR], -+ [Directory where udev expects its rules files -+ [[default=$libdir/udev/rules.d]]]), -+ [udevdir="$withval"], -+ [udevdir="$libdir/udev/rules.d"]) -+UDEV_RULES_DIR=${udevdir} -+AC_SUBST(UDEV_RULES_DIR) -+AM_CONDITIONAL(HAVE_UDEV_RULES_DIR, [test "x$UDEV_RULES_DIR" != "xno"]) -+ - # ----------------------------------------------------------------------------- - # Dependencies for synclient and syndaemon - # ----------------------------------------------------------------------------- -diff --git a/man/synaptics.man b/man/synaptics.man -index 76756be..4e0137f 100644 ---- a/man/synaptics.man -+++ b/man/synaptics.man -@@ -518,6 +518,20 @@ initialized if - .B Option \*qHasSecondarySoftButtons\*q - is enabled and this option is set in the __xconfigfile__(__filemansuffix__). - . -+.TP -+.BI "Option \*qHasTrackpointButtons\*q \*q" boolean \*q -+This option is only available on selected devices. You should never need to -+set this option manually, your distribution should ship -+__xconfigfile__(__filemansuffix__) snippets to enable this option where -+required. Devices that require this option include the Lenovo X1 Carbon 3rd -+and the Lenovo *50 series (T450, T550, etc.). -+If enabled, the device is considered to have the trackpoint left, middle, -+right buttons wired to the touchpad. If set, this option disables scroll -+buttons, i.e. -+.B Option \*qUpDownScrolling\*q, \*qLeftRightScrolling\*q -+and the respective repeat options for scroll buttons. -+This options is considered a hardware property and is not exposed as -+configurable X Input device property. - - .SH CONFIGURATION DETAILS - .SS Area handling -diff --git a/src/synaptics.c b/src/synaptics.c -index d5db457..08b90f4 100644 ---- a/src/synaptics.c -+++ b/src/synaptics.c -@@ -703,6 +703,12 @@ set_default_parameters(InputInfoPtr pInfo) - pars->touchpad_off = xf86SetIntOption(opts, "TouchpadOff", TOUCHPAD_ON); - - if (priv->has_scrollbuttons) { -+ priv->has_trackpoint_buttons = xf86SetBoolOption(opts, "HasTrackpointButtons", FALSE); -+ if (priv->has_trackpoint_buttons) -+ priv->has_scrollbuttons = FALSE; -+ } -+ -+ if (priv->has_scrollbuttons) { - pars->updown_button_scrolling = - xf86SetBoolOption(opts, "UpDownScrolling", TRUE); - pars->leftright_button_scrolling = -@@ -1064,6 +1070,7 @@ SynapticsReset(SynapticsPrivate * priv) - priv->mid_emu_state = MBE_OFF; - priv->nextRepeat = 0; - priv->lastButtons = 0; -+ priv->lastTrackpointButtons = 0; - priv->prev_z = 0; - priv->prevFingers = 0; - priv->num_active_touches = 0; -@@ -2746,6 +2753,34 @@ handle_clickfinger(SynapticsPrivate * priv, struct SynapticsHwState *hw) - } - } - -+static void -+handle_trackpoint_buttons(const InputInfoPtr pInfo, -+ struct SynapticsHwState *hw) -+{ -+ SynapticsPrivate *priv = (SynapticsPrivate *) (pInfo->private); -+ unsigned int buttons, change; -+ int id; -+ -+ buttons = (hw->multi[0] ? 0x1 : 0) | -+ (hw->multi[1] ? 0x4 : 0) | -+ (hw->multi[2] ? 0x2 : 0); -+ -+ change = buttons ^ priv->lastTrackpointButtons; -+ while (change) { -+ id = ffs(change); /* number of first set bit 1..32 is returned */ -+ change &= ~(1 << (id - 1)); -+ xf86PostButtonEvent(pInfo->dev, FALSE, id, -+ (buttons & (1 << (id - 1))), -+ 0, 0); -+ } -+ -+ hw->multi[0] = FALSE; -+ hw->multi[1] = FALSE; -+ hw->multi[2] = FALSE; -+ -+ priv->lastTrackpointButtons = buttons; -+} -+ - /* Adjust the hardware state according to the extra buttons (if the touchpad - * has any and not many touchpads do these days). These buttons are up/down - * tilt buttons and/or left/right buttons that then map into a specific -@@ -3101,6 +3136,13 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now, - Bool using_cumulative_coords = FALSE; - Bool ignore_motion; - -+ /* if we have phys. trackpoint buttons wired up to the touchpad, process -+ * them first. They belong to a different device so we don't care about -+ * sending out motion events before the trackpoint buttons. This makes -+ * the code a lot easier to slot in */ -+ if (priv->has_trackpoint_buttons) -+ handle_trackpoint_buttons(pInfo, hw); -+ - /* We need both and x/y, the driver can't handle just one of the two - * yet. But since it's possible to hit a phys button on non-clickpads - * without ever getting motion data first, we must continue with 0/0 for -diff --git a/src/synapticsstr.h b/src/synapticsstr.h -index 4bd32ac..e245c60 100644 ---- a/src/synapticsstr.h -+++ b/src/synapticsstr.h -@@ -288,6 +288,7 @@ struct _SynapticsPrivateRec { - int repeatButtons; /* buttons for repeat */ - int nextRepeat; /* Time when to trigger next auto repeat event */ - int lastButtons; /* last state of the buttons */ -+ int lastTrackpointButtons; /* last state of the trackpoint buttons */ - int prev_z; /* previous z value, for palm detection */ - int prevFingers; /* previous numFingers, for transition detection */ - int avg_width; /* weighted average of previous fingerWidth values */ -@@ -307,6 +308,7 @@ struct _SynapticsPrivateRec { - Bool has_pressure; /* device reports pressure */ - Bool has_width; /* device reports finger width */ - Bool has_scrollbuttons; /* device has physical scrollbuttons */ -+ Bool has_trackpoint_buttons;/* device has trackpoint buttons wired to touchpad */ - Bool has_semi_mt; /* device is only semi-multitouch capable */ - - enum TouchpadModel model; /* The detected model */ --- -2.1.0 - diff --git a/xorg-x11-drv-synaptics.spec b/xorg-x11-drv-synaptics.spec index 4ea728b..21a5cb6 100644 --- a/xorg-x11-drv-synaptics.spec +++ b/xorg-x11-drv-synaptics.spec @@ -8,7 +8,7 @@ Name: xorg-x11-drv-synaptics Summary: Xorg X11 Synaptics touchpad input driver Version: 1.8.2 -Release: 1%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} +Release: 2%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support @@ -23,7 +23,6 @@ Source0: ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar. Source3: 50-synaptics.conf Source4: 70-touchpad-quirks.rules -Patch01: 0001-Support-the-new-Lenovo-X1-Carbon-3rd-trackpoint-butt.patch Patch02: 0001-Limit-the-movement-to-20-mm-per-event.patch ExcludeArch: s390 s390x @@ -99,7 +98,7 @@ git am -p1 %{patches} < /dev/null %build autoreconf -v --install --force || exit 1 -%configure --disable-static --disable-silent-rules --with-udev-rules-dir=%{_udevrulesdir} +%configure --disable-static --disable-silent-rules make %{?_smp_mflags} %install @@ -132,7 +131,6 @@ udevadm control --reload-rules || : %{_mandir}/man1/syndaemon.1* %doc COPYING README %{_udevrulesdir}/70-touchpad-quirks.rules -%{_udevrulesdir}/71-synaptics.rules %package devel Summary: Xorg X11 synaptics input driver @@ -149,6 +147,11 @@ Development files for the Synaptics TouchPad for X.Org. %{_includedir}/xorg/synaptics-properties.h %changelog +* Fri May 01 2015 Peter Hutterer 1.8.2-2 +- Drop the custom patch for the new X1 Carbon series. This was an early fix, + the kernel now handles this correctly for us and we don't need userspace + workarounds. + * Fri Mar 27 2015 Peter Hutterer 1.8.2-1 - synaptics 1.8.2