lkml.org 
[lkml]   [2019]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 011/115] HID: wacom: Sync INTUOSP2_BT touch state after each frame if necessary
    Date
    From: Jason Gerecke <jason.gerecke@wacom.com>

    commit 69dbdfffef20c715df9f381b2cee4e9e0a4efd93 upstream.

    The Bluetooth interface of the 2nd-gen Intuos Pro batches together four
    independent "frames" of finger data into a single report. Each frame
    is essentially equivalent to a single USB report, with the up-to-10
    fingers worth of information being spread across two frames. At the
    moment the driver only calls `input_sync` after processing all four
    frames have been processed, which can result in the driver sending
    multiple updates for a single slot within the same SYN_REPORT. This
    can confuse userspace, so modify the driver to sync more often if
    necessary (i.e., after reporting the state of all fingers).

    Fixes: 4922cd26f03c ("HID: wacom: Support 2nd-gen Intuos Pro's Bluetooth classic interface")
    Cc: <stable@vger.kernel.org> # 4.11+
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/hid/wacom_wac.c | 10 ++++++++--
    1 file changed, 8 insertions(+), 2 deletions(-)

    --- a/drivers/hid/wacom_wac.c
    +++ b/drivers/hid/wacom_wac.c
    @@ -1371,11 +1371,17 @@ static void wacom_intuos_pro2_bt_touch(s
    if (wacom->num_contacts_left <= 0) {
    wacom->num_contacts_left = 0;
    wacom->shared->touch_down = wacom_wac_finger_count_touches(wacom);
    + input_sync(touch_input);
    }
    }

    - input_report_switch(touch_input, SW_MUTE_DEVICE, !(data[281] >> 7));
    - input_sync(touch_input);
    + if (wacom->num_contacts_left == 0) {
    + // Be careful that we don't accidentally call input_sync with
    + // only a partial set of fingers of processed
    + input_report_switch(touch_input, SW_MUTE_DEVICE, !(data[281] >> 7));
    + input_sync(touch_input);
    + }
    +
    }

    static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)

    \
     
     \ /
      Last update: 2019-06-17 23:38    [W:2.578 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site