lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 008/287] HID: wacom: Dont register pad_input for touch switch
    Date
    From: Ping Cheng <pinglinux@gmail.com>

    commit d6b675687a4ab4dba684716d97c8c6f81bf10905 upstream.

    Touch switch state is received through WACOM_PAD_FIELD. However, it
    is reported by touch_input. Don't register pad_input if no other pad
    events require the interface.

    Cc: stable@vger.kernel.org
    Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
    Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/hid/wacom_sys.c | 2 +-
    drivers/hid/wacom_wac.c | 43 +++++++++++++++++++++++++------------------
    2 files changed, 26 insertions(+), 19 deletions(-)

    --- a/drivers/hid/wacom_sys.c
    +++ b/drivers/hid/wacom_sys.c
    @@ -2095,7 +2095,7 @@ static int wacom_register_inputs(struct

    error = wacom_setup_pad_input_capabilities(pad_input_dev, wacom_wac);
    if (error) {
    - /* no pad in use on this interface */
    + /* no pad events using this interface */
    input_free_device(pad_input_dev);
    wacom_wac->pad_input = NULL;
    pad_input_dev = NULL;
    --- a/drivers/hid/wacom_wac.c
    +++ b/drivers/hid/wacom_wac.c
    @@ -1954,7 +1954,6 @@ static void wacom_wac_pad_usage_mapping(
    wacom_wac->has_mute_touch_switch = true;
    usage->type = EV_SW;
    usage->code = SW_MUTE_DEVICE;
    - features->device_type |= WACOM_DEVICETYPE_PAD;
    break;
    case WACOM_HID_WD_TOUCHSTRIP:
    wacom_map_usage(input, usage, field, EV_ABS, ABS_RX, 0);
    @@ -2034,6 +2033,30 @@ static void wacom_wac_pad_event(struct h
    wacom_wac->hid_data.inrange_state |= value;
    }

    + /* Process touch switch state first since it is reported through touch interface,
    + * which is indepentent of pad interface. In the case when there are no other pad
    + * events, the pad interface will not even be created.
    + */
    + if ((equivalent_usage == WACOM_HID_WD_MUTE_DEVICE) ||
    + (equivalent_usage == WACOM_HID_WD_TOUCHONOFF)) {
    + if (wacom_wac->shared->touch_input) {
    + bool *is_touch_on = &wacom_wac->shared->is_touch_on;
    +
    + if (equivalent_usage == WACOM_HID_WD_MUTE_DEVICE && value)
    + *is_touch_on = !(*is_touch_on);
    + else if (equivalent_usage == WACOM_HID_WD_TOUCHONOFF)
    + *is_touch_on = value;
    +
    + input_report_switch(wacom_wac->shared->touch_input,
    + SW_MUTE_DEVICE, !(*is_touch_on));
    + input_sync(wacom_wac->shared->touch_input);
    + }
    + return;
    + }
    +
    + if (!input)
    + return;
    +
    switch (equivalent_usage) {
    case WACOM_HID_WD_TOUCHRING:
    /*
    @@ -2063,22 +2086,6 @@ static void wacom_wac_pad_event(struct h
    input_event(input, usage->type, usage->code, 0);
    break;

    - case WACOM_HID_WD_MUTE_DEVICE:
    - case WACOM_HID_WD_TOUCHONOFF:
    - if (wacom_wac->shared->touch_input) {
    - bool *is_touch_on = &wacom_wac->shared->is_touch_on;
    -
    - if (equivalent_usage == WACOM_HID_WD_MUTE_DEVICE && value)
    - *is_touch_on = !(*is_touch_on);
    - else if (equivalent_usage == WACOM_HID_WD_TOUCHONOFF)
    - *is_touch_on = value;
    -
    - input_report_switch(wacom_wac->shared->touch_input,
    - SW_MUTE_DEVICE, !(*is_touch_on));
    - input_sync(wacom_wac->shared->touch_input);
    - }
    - break;
    -
    case WACOM_HID_WD_MODE_CHANGE:
    if (wacom_wac->is_direct_mode != value) {
    wacom_wac->is_direct_mode = value;
    @@ -2719,7 +2726,7 @@ void wacom_wac_event(struct hid_device *
    /* usage tests must precede field tests */
    if (WACOM_BATTERY_USAGE(usage))
    wacom_wac_battery_event(hdev, field, usage, value);
    - else if (WACOM_PAD_FIELD(field) && wacom->wacom_wac.pad_input)
    + else if (WACOM_PAD_FIELD(field))
    wacom_wac_pad_event(hdev, field, usage, value);
    else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
    wacom_wac_pen_event(hdev, field, usage, value);

    \
     
     \ /
      Last update: 2022-08-23 12:35    [W:4.366 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site