]> git.baikalelectronics.ru Git - kernel.git/commitdiff
HID: asus: Only set EV_REP if we are adding a mapping
authorHans de Goede <hdegoede@redhat.com>
Tue, 28 Apr 2020 14:22:49 +0000 (16:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 15:43:48 +0000 (16:43 +0100)
[ Upstream commit fa6463fe44c91bd7d9390b464d2d53cf3b4f522a ]

Make asus_input_mapping() only set EV_REP if we are adding a mapping.

The T100CHI bluetooth keyboard dock has a few input reports for which
we do not create any mappings (these input-reports are present in the
descriptors but never send).

The hid-asus code relies on the HID core not creating input devices for
input-reports without any mappings. But the present of the EV_REP but
counts as a mapping causing 6 /dev/input/event# nodes to be created for
the T100CHI bluetooth keyboard dock. This change brings the amount of
created /dev/input/event# nodes / input-devices down to 4.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Stable-dep-of: 4ab3a086d10e ("HID: asus: use spinlock to safely schedule workers")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hid/hid-asus.c

index e1e27d87c86be075dfe767fb53dba2ce2e08e416..5ea4d678b7413f1b6ac27ebe6551f8e60a825f4e 100644 (file)
@@ -714,7 +714,6 @@ static int asus_input_mapping(struct hid_device *hdev,
 
        /* ASUS-specific keyboard hotkeys */
        if ((usage->hid & HID_USAGE_PAGE) == 0xff310000) {
-               set_bit(EV_REP, hi->input->evbit);
                switch (usage->hid & HID_USAGE) {
                case 0x10: asus_map_key_clear(KEY_BRIGHTNESSDOWN);      break;
                case 0x20: asus_map_key_clear(KEY_BRIGHTNESSUP);                break;
@@ -757,11 +756,11 @@ static int asus_input_mapping(struct hid_device *hdev,
                if (drvdata->quirks & QUIRK_USE_KBD_BACKLIGHT)
                        drvdata->enable_backlight = true;
 
+               set_bit(EV_REP, hi->input->evbit);
                return 1;
        }
 
        if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) {
-               set_bit(EV_REP, hi->input->evbit);
                switch (usage->hid & HID_USAGE) {
                case 0xff01: asus_map_key_clear(BTN_1); break;
                case 0xff02: asus_map_key_clear(BTN_2); break;
@@ -784,6 +783,7 @@ static int asus_input_mapping(struct hid_device *hdev,
                        return 0;
                }
 
+               set_bit(EV_REP, hi->input->evbit);
                return 1;
        }