lkml.org 
[lkml]   [2022]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH V2 0/3] Input: Fix incorrectly halved touchpad range on ELAN v3 touchpads
    Date
    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. See
    https://lore.kernel.org/linux-input/20221008093437.72d0f6b0@dell-void.nyanpasu256.gmail.com.beta.tailscale.net/
    for discussion.

    Changes in v2:
    - Fix commit summaries
    - Add "Fixes:" tag holding commit that introduced bug

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

    Eirin Nya (3):
    Input: elantech - Remove redundant field elantech_data::y_max
    Input: elantech - Remove redundant field elantech_data::width
    Input: elantech - 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: d4a596eddb90114f5f5f32a440057a175517b090
    --
    2.38.0

    \
     
     \ /
      Last update: 2022-10-14 13:17    [W:3.908 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site