lkml.org 
[lkml]   [2020]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 146/191] HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery
    Date
    From: Jason Gerecke <jason.gerecke@wacom.com>

    commit d9216d753b2b1406b801243b12aaf00a5ce5b861 upstream.

    It has recently been reported that the "heartbeat" report from devices
    like the 2nd-gen Intuos Pro (PTH-460, PTH-660, PTH-860) or the 2nd-gen
    Bluetooth-enabled Intuos tablets (CTL-4100WL, CTL-6100WL) can cause the
    driver to send a spurious BTN_TOUCH=0 once per second in the middle of
    drawing. This can result in broken lines while drawing on Chrome OS.

    The source of the issue has been traced back to a change which modified
    the driver to only call `wacom_wac_pad_report()` once per report instead
    of once per collection. As part of this change, pad-handling code was
    removed from `wacom_wac_collection()` under the assumption that the
    `WACOM_PEN_FIELD` and `WACOM_TOUCH_FIELD` checks would not be satisfied
    when a pad or battery collection was being processed.

    To be clear, the macros `WACOM_PAD_FIELD` and `WACOM_PEN_FIELD` do not
    currently check exclusive conditions. In fact, most "pad" fields will
    also appear to be "pen" fields simply due to their presence inside of
    a Digitizer application collection. Because of this, the removal of
    the check from `wacom_wac_collection()` just causes pad / battery
    collections to instead trigger a call to `wacom_wac_pen_report()`
    instead. The pen report function in turn resets the tip switch state
    just prior to exiting, resulting in the observed BTN_TOUCH=0 symptom.

    To correct this, we restore a version of the `WACOM_PAD_FIELD` check
    in `wacom_wac_collection()` and return early. This effectively prevents
    pad / battery collections from being reported until the very end of the
    report as originally intended.

    Fixes: d4b8efeb46d9 ("HID: wacom: generic: Correct pad syncing")
    Cc: stable@vger.kernel.org # v4.17+
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
    Tested-by: Ping Cheng <ping.cheng@wacom.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/hid/wacom_wac.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/drivers/hid/wacom_wac.c
    +++ b/drivers/hid/wacom_wac.c
    @@ -2729,7 +2729,9 @@ static int wacom_wac_collection(struct h
    if (report->type != HID_INPUT_REPORT)
    return -1;

    - if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
    + if (WACOM_PAD_FIELD(field))
    + return 0;
    + else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
    wacom_wac_pen_report(hdev, report);
    else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
    wacom_wac_finger_report(hdev, report);

    \
     
     \ /
      Last update: 2020-11-03 22:06    [W:2.695 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site