lkml.org 
[lkml]   [2022]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 39/73] HID: quirks: Allow inverting the absolute X/Y values
    Date
    From: Alistair Francis <alistair@alistair23.me>

    [ Upstream commit fd8d135b2c5e88662f2729e034913f183455a667 ]

    Add a HID_QUIRK_X_INVERT/HID_QUIRK_Y_INVERT quirk that can be used
    to invert the X/Y values.

    Signed-off-by: Alistair Francis <alistair@alistair23.me>
    [bentiss: silence checkpatch warning]
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Link: https://lore.kernel.org/r/20211208124045.61815-2-alistair@alistair23.me
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/hid/hid-input.c | 6 ++++++
    include/linux/hid.h | 2 ++
    2 files changed, 8 insertions(+)

    diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
    index ea4c97f5b0736..749558aa27e78 100644
    --- a/drivers/hid/hid-input.c
    +++ b/drivers/hid/hid-input.c
    @@ -1288,6 +1288,12 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct

    input = field->hidinput->input;

    + if (usage->type == EV_ABS &&
    + (((*quirks & HID_QUIRK_X_INVERT) && usage->code == ABS_X) ||
    + ((*quirks & HID_QUIRK_Y_INVERT) && usage->code == ABS_Y))) {
    + value = field->logical_maximum - value;
    + }
    +
    if (usage->hat_min < usage->hat_max || usage->hat_dir) {
    int hat_dir = usage->hat_dir;
    if (!hat_dir)
    diff --git a/include/linux/hid.h b/include/linux/hid.h
    index ad46ed41e8836..d5f9bbf8afa51 100644
    --- a/include/linux/hid.h
    +++ b/include/linux/hid.h
    @@ -344,6 +344,8 @@ struct hid_item {
    /* BIT(9) reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */
    #define HID_QUIRK_ALWAYS_POLL BIT(10)
    #define HID_QUIRK_INPUT_PER_APP BIT(11)
    +#define HID_QUIRK_X_INVERT BIT(12)
    +#define HID_QUIRK_Y_INVERT BIT(13)
    #define HID_QUIRK_SKIP_OUTPUT_REPORTS BIT(16)
    #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID BIT(17)
    #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
    --
    2.34.1
    \
     
     \ /
      Last update: 2022-01-18 04:03    [W:4.056 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site