Home | History | Annotate | Download | only in pckbport
History log of /src/sys/dev/pckbport/synaptics.c
RevisionDateAuthorComments
 1.84  19-Jul-2024  mlelstv hw.synaptics.aux_mid_button_scroll translates vertical movements
of an aux device (like a trackpoint) into a scroll event when
the middle mouse button is pressed.

Make this work with either the middle mouse button of the main
device (buttonmask 0x02) or the middle mouse button of the aux
device (buttonmask 0x40).

Fixes PR 58435.
 1.83  18-Apr-2024  mlelstv Renamed border/boundary variables to better describe their use.
Fix edge default values, factor out percentage calculation for more consistent
values. Use device_printf/DPRINTF to show errors instead of aprint variants.
Print raw input for debugging.

Correct capability parsing. Old devices were probed with nonexistent
commands and then used undefined boundary values that made them unusuable.

Fixes PR 57874.
 1.82  05-Sep-2023  mrg panic on an condition that shouldn't be possible.

appease GCC 12.
 1.81  28-Sep-2022  nia branches: 1.81.4;
synaptics: Lower scale factor to give less sluggish mouse performance
on modern displays.
 1.80  17-Sep-2022  mlelstv - synaptics_filter_policy no longer generates movements from stale data.
- button boundary is now computed consistently.
- multi finger operation now works for MULTI_FINGER and MULTI_FINGER_REPORT.

Fixes PR kern/56476 and probably kern/56998.
 1.79  31-May-2022  andvar fix various typos in comments, documentation and messages.
 1.78  04-Apr-2022  blymn Use the original right boundary when calculating the vertical scroll
region so the boundary does not creep left on each subsequent setting.
Thanks to Martin@ for the report.
 1.77  01-Apr-2022  blymn Fix regression introduced when fixing PR kern/56613 and related tweaks

* A trackpad with external buttons needs to mask a number of lower bits
of the X and Y coordinates IFF a button is down. This was not being
done so a button held down looked like an out of range packet and
was therefore dropped.

* Now that trackpads are probed for their boundaries make the emulated
button boundary settable by a percentage, also allow the right and
bottom boundaries to be adjusted by a percentage to allow for
horizontal and vertical scroll regions.
 1.76  03-Mar-2022  blymn Fix for PR kern/56613

* For trackpads that report max and min coordinates, retrieve these and
use them as the boundaries instead of the hard coded limits.
* Drop packets that are have x/y values that are outside the limits of
the trackpad. Some trackpads report a stream of low values in some
situations that cause cursor jumping.
 1.75  04-Dec-2021  nia synaptics: Fix tracking of extended buttons.

- Ensure that packets are processed whenever any button change
occurs, instead of just processing packets when there is movement
or trackpad finger activity
- Only transfer the state of the "extended buttons" to the button
masks when actual changes occur OR a button is being held down.

With this patch, my middle mouse button no longer gets "stuck down",
but proper press/release tracking and dragging behavior is preserved.

Thanks to blymn for pointers.
 1.74  03-Dec-2021  andvar fix various typos in comments, log messages and documentation.
 1.73  21-Oct-2021  blymn Significant update to the synaptics touchpad driver.

* Accumulate packets for primary, secondary, finger count packets
before handing off to pms_synaptics_process_packet. This means
that both primary and, possibly, secondary finger locations will
be processed at the same time. Previously the processing each
packet as it arrived.

* Fix the secondary finger position reporting, there was an off by
one in the shifts when decoding which effectively halved the
reported position.

* For a clickpad, make the emulated button region "dead" so that finger
movements in this region are ignored. This makes it easier to click
a button without accidentally repositioning the cursor. There is a
sysctl variable "button_region_movement_enable" that will allow
these finger movements to be reported if this is desirable.

* Reset the finger ballistics when the number of fingers changes. This
stops the annoying position jumps when a second finger touch is added
to or removed from the touchpad.

* Add a level argument to the DPRINTF macro so one can choose their
level of debug spam via the debug sysctl variable.
 1.72  28-Sep-2021  nia synaptics: use the new WSCONS_EVENT_(H|V)SCROLL event types
to implement two-finger scrolling. remove non-functional code for
detecting reported finger width.
 1.71  30-May-2021  riastradh synaptics(4): New sysctl knob for debug output.

Set hw.synaptics.debug=1 to re-enable it; the compile-time DIAGNOSTIC
option was inappropriate for this.
 1.70  01-Oct-2020  nia branches: 1.70.6; 1.70.8;
synaptics: Emulate scrolling when the middle button is held with TrackPoints

idea stolen from various other operating systems.

this configurable with a sysctl in case somebody wants to hold the middle
button, e.g. with old window managers that close menus when a button is
released.
 1.69  01-Oct-2020  nia erect a signpost for weary travellers
 1.68  01-Oct-2020  nia comment was likely true in 2007 but no longer reflects the reality of hw
 1.67  14-May-2020  nia synaptics: Don't reset the device multiple times in succession

Cherrypicked from a patch from an anonymous contributor.
 1.66  28-Apr-2020  jmcneill pms_synaptics_enable: no need to send PMS_DEV_ENABLE here because
pms_enable does this for us. Seems to resolve issues with my trackpoint
not working immediately after starting X on ThinkPad X260.
 1.65  27-Apr-2020  jmcneill Extended buttons are reported separate from touchpad buttons, so track
button press / release state separate from touch events.
 1.64  31-Mar-2020  nia synaptics: Maintain the left/right buttons when up/down are remapped

Reported on current-users by Mandacarú Cascavel
 1.63  27-Mar-2020  nia synaptics: Revert changes that broke gestures in cases where they worked.

It seems I have to figure out another way to make scrolling work for me.
 1.62  16-Mar-2020  nia synaptics: Increase default scale_z for more precise scrolling
 1.61  15-Mar-2020  nia synaptics: Check for single-finger event jitter in all cases.

I now have smooth two-finger scrolling.
 1.60  14-Mar-2020  nia synaptics: Detect multiple fingers outside the gesture period

I suspect this code doesn't make any sense if we want two-finger scrolling
 1.59  14-Mar-2020  nia synaptics: Automatically scroll when multiple fingers are detected

This will mean we automatically get two-finger scrolling on multitouch
pads.

This works, but the scrolling is janky. Why does it eventually move the
mouse cursor (only one finger detected, but two are still there), and why
does it jump up slightly?
 1.58  14-Mar-2020  nia synaptics: fix syntax
 1.57  14-Mar-2020  nia synaptics: Allow the max_speed sysctls to be set
 1.56  14-Mar-2020  nia synaptics: Set up_down_emulation=3 by default.

It's a less surprising default for modern hardware.
 1.55  14-Mar-2020  nia synaptics: Make up_down_emulation useful for single-button clickpads

On devices such as the Thinkpad X250, the clickpad can be pressed
to generate mouse button events 1 and 2. There are also additional
physical buttons which the pms(4) driver recognizes as "up/down" buttons
(mouse buttons 3 and 4). Allow these to be remapped to buttons 1 and 2
and used like normal touchpad buttons with the following sysctl:

# sysctl -w hw.synaptics.up_down_emulation=3

While here, adjust the existing "middle button emulation"
(hw.synaptics.up_down_emulation=1) so it works with single-button
clickpads.

XXX: 3 may be a more useful default than the current default,
depending on hardware availability of touchpads with "up/down buttons".

Update the documentation accordingly.
 1.54  25-Feb-2020  ryoon Messages in pms_synaptics_input() should not start with "pms_input"

Use "pms_synaptics_input" instead for another 2 messages.
 1.53  25-Feb-2020  ryoon Messages in pms_synaptics_input() should not start with "pms_input"

Use "pms_synaptics_input" instead.
 1.52  25-Feb-2020  ryoon Do not enter extended W mode conditional for non extended W mode device

Even without extended W mode, sp_w can be 2. This causes
"invalid extended w mode N" warning messages.
Restrict extended W mode conditional for hardwares with extended W
support.

Tested with Synaptics 6.2 device on Panasonic CF-Y8, however it does
not work with X.
 1.51  25-Feb-2020  ryoon Remove a trailing tab.
 1.50  05-Jul-2019  mlelstv branches: 1.50.2; 1.50.4;
Resynchronizing the input stream could infinitely wait when the touchpad
is in the wrong (relative) mode. The detection of relative mode is never
reached.

Limit the resynchronization to 6 bytes, then trigger a reset.
 1.49  02-Jun-2019  blymn Changes based on code from an anonymous contributor. This should make
trackpads work for Thinkpads. Also adds code to handle externally
connected buttons (synaptics parlance), the first five are mapped to
mouse buttons 1-5. The rest are currently not reported but could be
decoded if required.
 1.48  22-Apr-2019  blymn Modify driver to use bits(3) to extract capabilities. Thanks to
Anon Ymous for the fix.
 1.47  21-Apr-2019  blymn Fix minor comment nit.
 1.46  04-Dec-2018  blymn * Increase the default scaling of the two finger scroll to make it
less sensitive
* Fix range check for hw.synaptics.scale_z so it can be set with sysctl
 1.45  28-Nov-2018  blymn * Increase minimum finger width to prevent entering scroll mode erroneously
* Attempt to clarify what the sysctl variables for finger scroll do
* Add hysteresis to validity check so changing it does not get rejected

Thanks to Martin Husemann and Michael van Elst for reporting the issues.
 1.44  06-Nov-2018  blymn Add double finger scroll feature. If the detected width is between a
defined range then report y movement as z-axis. Effectively emulating
a mouse scroll wheel.
 1.43  06-Nov-2018  blymn Fix clamping of deltas so it works for both positive and negative deltas.
 1.42  14-Jul-2018  maya Send the 'magic reverse engineered sequence' with a single sliced command,
don't wait for individual ACKs. Fixes kern/53444.

While here:
- use better descriptive names for functions
- use a function for the extended write command
- add macro for number from the old synaptics documentation
- don't get the resp from the command sequence if we're going to ignore
it anyway

most from uwe.
 1.41  03-Jun-2018  christos branches: 1.41.2;
restore \n printing.
 1.40  03-Jun-2018  christos use a more data-driven :-) approach to avoid cut-n-pasted code.
 1.39  03-Jun-2018  ryoon Enable Synaptics multifinger capability (Extended W mode)

Magic parameters are taken from
https://github.com/RehabMan/OS-X-Voodoo-PS2-Controller/.
Tested on HP ProBook 4630s, Lenovo E530, VAIO Pro 11 and HP Spectre x360 ae.
 1.38  30-May-2018  ryoon Remove double and trailing whitespaces
 1.37  29-May-2018  ryoon Remove trailing tab
 1.36  05-Dec-2017  jmcneill branches: 1.36.2;
Add hw.synaptics.movement_enable sysctl. Default value is 1, but if set
to 0 disables movement events from the touchpad.

While here, fixup a few sysctl nodenum comparisons in
pms_sysctl_synaptics_verify to compare against node numbers instead of
values.
 1.35  07-Nov-2017  ryoon Return res in non-synaptics case like before. Fix ALPS case
 1.34  06-Nov-2017  blymn Add two finger support and middle/right button emulation.
 1.33  04-Mar-2015  christos Fix clickpad button detection (From Rhialto)
 1.32  23-May-2014  christos branches: 1.32.2; 1.32.4;
PR/48831: J�rg Grundmann: Synaptics Touch pad (ClickPad) and
Klick-by-tap-gestures do not work
 1.31  25-Feb-2014  pooka branches: 1.31.2;
Ensure that the top level sysctl nodes (kern, vfs, net, ...) exist before
the sysctl link sets are processed, and remove redundancy.

Shaves >13kB off of an amd64 GENERIC, not to mention >1k duplicate
lines of code.
 1.30  03-Jun-2012  dsl branches: 1.30.2; 1.30.4;
Remove a couple of (void *) casts added in the previous commin.
They aren't needed here (script error).
 1.29  02-Jun-2012  dsl Add some pre-processor magic to verify that the type of the data item
passed to sysctl_createv() actually matches the declared type for
the item itself.
In the places where the caller specifies a function and a structure
address (typically the 'softc') an explicit (void *) cast is now needed.
Fixes bugs in sys/dev/acpi/asus_acpi.c sys/dev/bluetooth/bcsp.c
sys/kern/vfs_bio.c sys/miscfs/syncfs/sync_subr.c and setting
AcpiGbl_EnableAmlDebugObject.
(mostly passing the address of a uint64_t when typed as CTLTYPE_INT).
I've test built quite a few kernels, but there may be some unfixed MD
fallout. Most likely passing &char[] to char *.
Also add CTLFLAG_UNSIGNED for unsiged decimals - not set yet.
 1.28  10-Sep-2011  jakllsch branches: 1.28.2;
Correct and improve some comments. Collect unused variables. Add a define.
 1.27  09-Sep-2011  jakllsch Replace pms_synaptics_send_command() and identical pms_elantech_send_command()
with pms_sliced_command(). Linux shows that this sequence can also be used by
"Logitech PS/2++" protocol as well.
 1.26  29-Jan-2011  cegger use aprint_debug_dev and get rid of SYNAPTICSDEBUG
 1.25  15-Nov-2010  uebayasi branches: 1.25.2; 1.25.4;
wakeup needs sys/proc.h.
 1.24  21-Mar-2010  plunky send the SET_SCALE11 command before the 'sliced' command as per the
Linux driver (and elantech(4)), via PR kern/42853
 1.23  21-Mar-2010  plunky Extended capability probes can confuse the passthrough device,
reset the touchpad on enable to cure that.
 1.22  21-Mar-2010  plunky some definitions from the Linux driver (via PR kern/42853)
 1.21  30-Apr-2008  ad branches: 1.21.10; 1.21.20; 1.21.22;
Make various bits of debug code compile again.
 1.20  15-Mar-2008  cube branches: 1.20.2; 1.20.4;
Split device_t and softc for pckbd(4) and pms(4).
 1.19  28-Jan-2008  jmcneill branches: 1.19.2; 1.19.6;
Change synaptics 'unusual delay' printf to aprint_debug. I'm tired of
seeing it over and over again.
 1.18  28-Jan-2008  jmcneill De-noisify resume handler.
 1.17  11-Dec-2007  lukem use __KERNEL_RCSID()
 1.16  19-Oct-2007  ad branches: 1.16.2; 1.16.4; 1.16.6; 1.16.8;
machine/{bus,cpu,intr}.h -> sys/{bus,cpu,intr}.h
 1.15  25-Mar-2007  mlelstv branches: 1.15.8; 1.15.10; 1.15.14;
add missing W coordinate
 1.14  25-Mar-2007  mlelstv Handle events from passthrough devices like the Thinkpad 'Navistick'.
 1.13  16-Nov-2006  christos branches: 1.13.2; 1.13.4; 1.13.8; 1.13.10; 1.13.12;
__unused removal on arguments; approved by core.
 1.12  12-Nov-2006  plunky Tidy away wsmouse_input() abstractions and update
documentation to include the W direction.
 1.11  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.10  07-Jun-2006  kardel branches: 1.10.6; 1.10.8;
merge FreeBSD timecounters from branch simonb-timecounters
- struct timeval time is gone
time.tv_sec -> time_second
- struct timeval mono_time is gone
mono_time.tv_sec -> time_uptime
- access to time via
{get,}{micro,nano,bin}time()
get* versions are fast but less precise
- support NTP nanokernel implementation (NTP API 4)
- further reading:
Timecounter Paper: http://phk.freebsd.dk/pubs/timecounter.pdf
NTP Nanokernel: http://www.eecis.udel.edu/~mills/ntp/html/kern.html
 1.9  24-Dec-2005  perry branches: 1.9.4; 1.9.6; 1.9.8; 1.9.14;
Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
 1.8  11-Dec-2005  christos merge ktrace-lwp.
 1.7  26-Oct-2005  rpaulo s/SYNAPTICS_DEBUG/SYNAPTICSDEBUG/ to keep consistency.
 1.6  20-Jun-2005  atatat branches: 1.6.2; 1.6.4;
Change the rest of the sysctl subsystem to use const consistently.
The __UNCONST macro is now used only where necessary and the RW macros
are gone. Most of the changes here are consumers of the
sysctl_createv(9) interface that now takes a pair of const pointers
which used not to be.
 1.5  27-Feb-2005  perry nuke trailing whitespace
 1.4  18-Jan-2005  scw branches: 1.4.2;
Address PR kern/28990 by making Synaptics Touchpad support contingent
on "options PMS_SYNAPTICS_TOUCHPAD" in the kernel config file. See
the PR for details on why this is necessary.

While here, defflag PMS_DISABLE_POWERHOOK.
 1.3  02-Jan-2005  scw branches: 1.3.2; 1.3.4;
Major re-write of the recently-committed Synaptics Touchpad driver,
prompted by jittery and/or random movement during tap gestures, lack
of edge motion, and a general desire to make use of the extra features
available with the native protocol.

- Ditch the kernel thread; it was overkill for the small amount of
processing required to deal with touchpad events.

- If we fail to probe a Synaptics touchpad, issue a RESET command
to ensure that whatever device is out there is left in a sane
state (thanks to Reinoud Zandijk for the hint).

- Completely re-write gesture support.

- Put the touchpad in 80 packets per second mode and count them so
they can be used to time gesture durations (instead of using
mono_time).

- Enhance up/down button support with options to use them to emulate
the middle button or Z-axis events (like a traditional wheel mouse).

- Add 'edge motion'. If a drag gesture is in progress, and the reported
finger position moves to the touchpad's border region, continue
to report movement events at a fixed rate as if the finger carried
on moving in the same direction. This restores some functionality
usually provided by the touchpad's firmware in PS/2 mode.

- Filter successive movement events to reduce jitter. When scaling
movement events, fold the remainder into the next event to prevent
loss of information during slow/small finger movements. Pointer
movement is now much more refined.

- Add support for touchpads which can report more than one finger on
the pad simultaneously. Optionally use this feature for middle/right
button emulation (i.e. tap two fingers to emulate middle button).
This feature is disabled by default (for now) to avoid surprise
pasting of clipboard text. ;-)
 1.2  28-Dec-2004  christos - cleanup some debugging stuff.
- don't create the sysctl nodes if we don't have a synaptics pad.
 1.1  24-Dec-2004  christos PR/28774: Kentaro A. Kurahone: Add synaptics touchpad driver
 1.3.4.5  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.3.4.4  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.3.4.3  24-Jan-2005  skrll Sync with HEAD.
 1.3.4.2  17-Jan-2005  skrll Sync with HEAD.
 1.3.4.1  02-Jan-2005  skrll file synaptics.c was added on branch ktrace-lwp on 2005-01-17 19:31:51 +0000
 1.3.2.1  29-Apr-2005  kent sync with -current
 1.4.2.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.6.4.1  02-Nov-2005  yamt sync with head.
 1.6.2.7  17-Mar-2008  yamt sync with head.
 1.6.2.6  04-Feb-2008  yamt sync with head.
 1.6.2.5  21-Jan-2008  yamt sync with head
 1.6.2.4  27-Oct-2007  yamt sync with head.
 1.6.2.3  03-Sep-2007  yamt sync with head.
 1.6.2.2  30-Dec-2006  yamt sync with head.
 1.6.2.1  21-Jun-2006  yamt sync with head.
 1.9.14.1  19-Jun-2006  chap Sync with head.
 1.9.8.1  26-Jun-2006  yamt sync with head.
 1.9.6.2  24-Apr-2006  kardel remove int s; (for spl level) as time counter conversion makes
that obsolete.
 1.9.6.1  04-Feb-2006  simonb Adapt for timecounters: mostly use get*time() and use "time_second"
instead of "time.tv_sec".
 1.9.4.1  09-Sep-2006  rpaulo sync with head
 1.10.8.2  10-Dec-2006  yamt sync with head.
 1.10.8.1  22-Oct-2006  yamt sync with head
 1.10.6.1  18-Nov-2006  ad Sync with head.
 1.13.12.1  29-Mar-2007  reinoud Pullup to -current
 1.13.10.1  11-Jul-2007  mjf Sync with head.
 1.13.8.2  23-Oct-2007  ad Sync with head.
 1.13.8.1  10-Apr-2007  ad Sync with head.
 1.13.4.1  15-Apr-2007  yamt sync with head.
 1.13.2.1  01-Apr-2007  bouyer Pull up following revision(s) (requested by mlelstv in ticket #550):
sys/dev/pckbport/synaptics.c: revisions 1.14, 1.15
Handle events from passthrough devices like the Thinkpad
'Navistick'.
add missing W coordinate
 1.15.14.1  25-Oct-2007  bouyer Sync with HEAD.
 1.15.10.3  23-Mar-2008  matt sync with HEAD
 1.15.10.2  09-Jan-2008  matt sync with HEAD
 1.15.10.1  06-Nov-2007  matt sync with HEAD
 1.15.8.1  26-Oct-2007  joerg Sync with HEAD.

Follow the merge of pmap.c on i386 and amd64 and move
pmap_init_tmp_pgtbl into arch/x86/x86/pmap.c. Modify the ACPI wakeup
code to restore CR4 before jumping back into kernel space as the large
page option might cover that.
 1.16.8.1  13-Dec-2007  bouyer Sync with HEAD
 1.16.6.1  11-Dec-2007  yamt sync with head.
 1.16.4.1  26-Dec-2007  ad Sync with head.
 1.16.2.1  18-Feb-2008  mjf Sync with HEAD.
 1.19.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.19.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.19.2.1  24-Mar-2008  keiichi sync with head.
 1.20.4.2  11-Aug-2010  yamt sync with head.
 1.20.4.1  16-May-2008  yamt sync with head.
 1.20.2.1  18-May-2008  yamt sync with head.
 1.21.22.2  05-Mar-2011  rmind sync with head
 1.21.22.1  30-May-2010  rmind sync with head
 1.21.20.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.21.10.1  20-Nov-2010  riz Pull up following revision(s) (requested by plunky in ticket #1383):
sys/dev/pckbport/synapticsreg.h: revision 1.6
sys/dev/pckbport/synaptics.c: revision 1.22
sys/dev/pckbport/synaptics.c: revision 1.23
sys/dev/pckbport/synaptics.c: revision 1.24
some definitions from the Linux driver (via PR kern/42853)
Extended capability probes can confuse the passthrough device,
reset the touchpad on enable to cure that.
send the SET_SCALE11 command before the 'sliced' command as per the
Linux driver (and elantech(4)), via PR kern/42853
 1.25.4.1  08-Feb-2011  bouyer Sync with HEAD
 1.25.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.28.2.1  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.30.4.1  18-May-2014  rmind sync with head
 1.30.2.2  03-Dec-2017  jdolecek update from HEAD
 1.30.2.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.31.2.1  10-Aug-2014  tls Rebase.
 1.32.4.1  06-Apr-2015  skrll Sync with HEAD
 1.32.2.1  21-Mar-2015  snj Pull up following revision(s) (requested by nonaka in ticket #629):
sys/dev/pckbport/synaptics.c: revision 1.33
Fix clickpad button detection (From Rhialto)
 1.36.2.4  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.36.2.3  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.36.2.2  28-Jul-2018  pgoyette Sync with HEAD
 1.36.2.1  25-Jun-2018  pgoyette Sync with HEAD
 1.41.2.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.41.2.1  10-Jun-2019  christos Sync with HEAD
 1.50.4.1  29-Feb-2020  ad Sync with head.
 1.50.2.8  30-Dec-2021  martin Pull up following revision(s) (requested by riastradh in ticket #1397):

sys/dev/pckbport/synaptics.c: revision 1.71

synaptics(4): New sysctl knob for debug output.

Set hw.synaptics.debug=1 to re-enable it; the compile-time DIAGNOSTIC
option was inappropriate for this.
 1.50.2.7  08-Oct-2020  martin Pull up following revision(s) (requested by nia in ticket #1100):

sys/dev/pckbport/synaptics.c: revision 1.69
sys/dev/pckbport/synaptics.c: revision 1.70
share/man/man4/pms.4: revision 1.38

erect a signpost for weary travellers

synaptics: Emulate scrolling when the middle button is held with TrackPoints
idea stolen from various other operating systems.

this configurable with a sysctl in case somebody wants to hold the middle
button, e.g. with old window managers that close menus when a button is
released.
 1.50.2.6  20-Jun-2020  martin Pull up following revision(s) (requested by nia in ticket #954):

sys/dev/pckbport/synaptics.c: revision 1.67

synaptics: Don't reset the device multiple times in succession
Cherrypicked from a patch from an anonymous contributor.
 1.50.2.5  29-Apr-2020  martin Pull up following revision(s) (requested by jmcneill in ticket #865):

sys/dev/pckbport/synaptics.c: revision 1.66

pms_synaptics_enable: no need to send PMS_DEV_ENABLE here because
pms_enable does this for us. Seems to resolve issues with my trackpoint
not working immediately after starting X on ThinkPad X260.
 1.50.2.4  28-Apr-2020  martin Pull up following revision(s) (requested by jmcneill in ticket #863):

sys/dev/pckbport/synaptics.c: revision 1.65
sys/dev/pckbport/synapticsvar.h: revision 1.10

Extended buttons are reported separate from touchpad buttons, so track
button press / release state separate from touch events.
 1.50.2.3  02-Apr-2020  martin Pull up following revision(s) (requested by nia in ticket #818):

sys/dev/pckbport/synaptics.c: revision 1.64

synaptics: Maintain the left/right buttons when up/down are remapped
Reported on current-users by Mandacar� Cascavel
 1.50.2.2  30-Mar-2020  martin Pull up following revision(s) (requested by nia in ticket #810):

sys/dev/pckbport/synaptics.c: revision 1.57
sys/dev/pckbport/synaptics.c: revision 1.58

synaptics: Allow the max_speed sysctls to be set
synaptics: fix syntax
 1.50.2.1  30-Mar-2020  martin Pull up following revision(s) (requested by nia in ticket #809):

sys/dev/pckbport/synaptics.c: revision 1.55
sys/dev/pckbport/synaptics.c: revision 1.56
share/man/man4/pms.4: revision 1.35
share/man/man4/pms.4: revision 1.36

synaptics: Make up_down_emulation useful for single-button clickpads

On devices such as the Thinkpad X250, the clickpad can be pressed
to generate mouse button events 1 and 2. There are also additional
physical buttons which the pms(4) driver recognizes as "up/down" buttons
(mouse buttons 3 and 4). Allow these to be remapped to buttons 1 and 2
and used like normal touchpad buttons with the following sysctl:

While here, adjust the existing "middle button emulation"
(hw.synaptics.up_down_emulation=1) so it works with single-button
clickpads.

XXX: 3 may be a more useful default than the current default,
depending on hardware availability of touchpads with "up/down buttons".

Update the documentation accordingly.

synaptics: Set up_down_emulation=3 by default.

It's a less surprising default for modern hardware.
 1.70.8.1  31-May-2021  cjep sync with head
 1.70.6.1  17-Jun-2021  thorpej Sync w/ HEAD.
 1.81.4.1  22-Jun-2024  martin Pull up following revision(s) (requested by gutteridge in ticket #718):

sys/dev/pckbport/synaptics.c: revision 1.83

Renamed border/boundary variables to better describe their use.

Fix edge default values, factor out percentage calculation for more
consistent
values. Use device_printf/DPRINTF to show errors instead of aprint
variants.

Print raw input for debugging.

Correct capability parsing. Old devices were probed with nonexistent
commands and then used undefined boundary values that made them
unusuable.

Fixes PR 57874.

RSS XML Feed