All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Input: Fix incorrectly halved touchpad range on ELAN v3 touchpads
@ 2022-09-29  8:21 Eirin Nya
  2022-09-29  8:21 ` [PATCH 1/3] Input: Remove redundant field elantech_data::y_max Eirin Nya
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Eirin Nya @ 2022-09-29  8:21 UTC (permalink / raw)
  To: linux-input; +Cc: linux-kernel

On Linux 5.19.10, on my laptop (Dell Inspiron 15R SE 7520) with an Elan
v3 touchpad, the reported size of my touchpad (1470 by 700) is half that
of the actual touch range (2940 by 1400), and the upper half of my
touchpad reports negative values. As a result, with the Synaptics or
libinput X11 driver set to edge scrolling mode, the entire right half of
my touchpad has x-values past evdev's reported maximum size, and acts as
a giant scrollbar!

The problem is that elantech_setup_ps2() -> elantech_set_absolute_mode()
sets up absolute mode and doubles the hardware resolution (doubling the
hardware's maximum reported x/y coordinates and its response to
ETP_FW_ID_QUERY), *after* elantech_query_info() fetches the touchpad
coordinate system size using ETP_FW_ID_QUERY, which gets cached and
reported to userspace through ioctl(fd, EVIOCGABS(ABS_X/Y), ...). So the
touchpad size reported to userspace (and used to subtract vertical
coordinates from) is half the maximum position of actual touches.

This patch series splits out a function elantech_query_range_v3() which
fetches *only* ETP_FW_ID_QUERY (touchpad size), and calls it a second
time if elantech_set_absolute_mode() enables double-size mode. This
means the first call is redundant and wasted if a second call occurs,
but this minimizes the need to restructure the driver.

A possible alternative approach is to restructure the driver and set
resolution before querying touchpad size. I did not attempt this myself,
and don't know how the Windows Dell Touchpad ELAN driver handles
double-resolution.

Link: https://lore.kernel.org/linux-input/CAL57YxZNutUVxBtvbVWKMw-V2kqeVB5kTQ5BFdJmN=mdPq8Q8Q@mail.gmail.com/

Eirin Nya (3):
  Input: Remove redundant field elantech_data::y_max
  Input: Remove redundant field elantech_data::width
  Input: Fix incorrectly halved touchpad range on ELAN v3 touchpads

 drivers/input/mouse/elantech.c | 51 +++++++++++++++++++++++-----------
 drivers/input/mouse/elantech.h |  2 --
 2 files changed, 35 insertions(+), 18 deletions(-)


base-commit: fff1011a26d6cbf26b18c8ee4c61d99943174f8c
-- 
2.37.3


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-10-11 13:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-29  8:21 [PATCH 0/3] Input: Fix incorrectly halved touchpad range on ELAN v3 touchpads Eirin Nya
2022-09-29  8:21 ` [PATCH 1/3] Input: Remove redundant field elantech_data::y_max Eirin Nya
2022-10-07 13:28   ` Mattijs Korpershoek
2022-09-29  8:21 ` [PATCH 2/3] Input: Remove redundant field elantech_data::width Eirin Nya
2022-10-07 13:35   ` Mattijs Korpershoek
2022-09-29  8:21 ` [PATCH 3/3] Input: Fix incorrectly halved touchpad range on ELAN v3 touchpads Eirin Nya
2022-10-07 14:06   ` Mattijs Korpershoek
2022-10-08 10:38     ` Eirin Nya
2022-10-11 13:19       ` Mattijs Korpershoek
2022-10-08 16:34     ` Eirin Nya

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.