lkml.org 
[lkml]   [2022]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 38/62] HID: multitouch: simplify the application retrieval
    Date
    From: Benjamin Tissoires <benjamin.tissoires@redhat.com>

    [ Upstream commit 7ffa13be4945b2f60dfe6c71acbc1fdcfc4629a0 ]

    Now that the application is simply stored in struct hid_input, we can
    overwrite it in mt_input_mapping() for the faulty egalax and have a
    simpler suffix processing in mt_input_configured()

    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/hid/hid-multitouch.c | 72 ++++++++++++++++--------------------
    1 file changed, 32 insertions(+), 40 deletions(-)

    diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
    index e99286258f62..5509b09f8656 100644
    --- a/drivers/hid/hid-multitouch.c
    +++ b/drivers/hid/hid-multitouch.c
    @@ -1332,6 +1332,13 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
    return mt_touch_input_mapping(hdev, hi, field, usage, bit, max,
    application);

    + /*
    + * some egalax touchscreens have "application == DG_TOUCHSCREEN"
    + * for the stylus. Overwrite the hid_input application
    + */
    + if (field->physical == HID_DG_STYLUS)
    + hi->application = HID_DG_STYLUS;
    +
    /* let hid-core decide for the others */
    return 0;
    }
    @@ -1520,14 +1527,12 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
    struct mt_device *td = hid_get_drvdata(hdev);
    char *name;
    const char *suffix = NULL;
    - unsigned int application = 0;
    struct mt_report_data *rdata;
    struct mt_application *mt_application = NULL;
    struct hid_report *report;
    int ret;

    list_for_each_entry(report, &hi->reports, hidinput_list) {
    - application = report->application;
    rdata = mt_find_report_data(td, report);
    if (!rdata) {
    hid_err(hdev, "failed to allocate data for report\n");
    @@ -1542,46 +1547,33 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
    if (ret)
    return ret;
    }
    -
    - /*
    - * some egalax touchscreens have "application == DG_TOUCHSCREEN"
    - * for the stylus. Check this first, and then rely on
    - * the application field.
    - */
    - if (report->field[0]->physical == HID_DG_STYLUS) {
    - suffix = "Pen";
    - /* force BTN_STYLUS to allow tablet matching in udev */
    - __set_bit(BTN_STYLUS, hi->input->keybit);
    - }
    }

    - if (!suffix) {
    - switch (application) {
    - case HID_GD_KEYBOARD:
    - case HID_GD_KEYPAD:
    - case HID_GD_MOUSE:
    - case HID_DG_TOUCHPAD:
    - case HID_GD_SYSTEM_CONTROL:
    - case HID_CP_CONSUMER_CONTROL:
    - case HID_GD_WIRELESS_RADIO_CTLS:
    - case HID_GD_SYSTEM_MULTIAXIS:
    - /* already handled by hid core */
    - break;
    - case HID_DG_TOUCHSCREEN:
    - /* we do not set suffix = "Touchscreen" */
    - hi->input->name = hdev->name;
    - break;
    - case HID_DG_STYLUS:
    - /* force BTN_STYLUS to allow tablet matching in udev */
    - __set_bit(BTN_STYLUS, hi->input->keybit);
    - break;
    - case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
    - suffix = "Custom Media Keys";
    - break;
    - default:
    - suffix = "UNKNOWN";
    - break;
    - }
    + switch (hi->application) {
    + case HID_GD_KEYBOARD:
    + case HID_GD_KEYPAD:
    + case HID_GD_MOUSE:
    + case HID_DG_TOUCHPAD:
    + case HID_GD_SYSTEM_CONTROL:
    + case HID_CP_CONSUMER_CONTROL:
    + case HID_GD_WIRELESS_RADIO_CTLS:
    + case HID_GD_SYSTEM_MULTIAXIS:
    + /* already handled by hid core */
    + break;
    + case HID_DG_TOUCHSCREEN:
    + /* we do not set suffix = "Touchscreen" */
    + hi->input->name = hdev->name;
    + break;
    + case HID_DG_STYLUS:
    + /* force BTN_STYLUS to allow tablet matching in udev */
    + __set_bit(BTN_STYLUS, hi->input->keybit);
    + break;
    + case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
    + suffix = "Custom Media Keys";
    + break;
    + default:
    + suffix = "UNKNOWN";
    + break;
    }

    if (suffix) {
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-27 18:35    [W:4.152 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site