diff options
Diffstat (limited to 'HID-asus-Reduce-object-size-by-consolidating-calls.patch')
-rw-r--r-- | HID-asus-Reduce-object-size-by-consolidating-calls.patch | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/HID-asus-Reduce-object-size-by-consolidating-calls.patch b/HID-asus-Reduce-object-size-by-consolidating-calls.patch new file mode 100644 index 000000000000..761b6bcae9ef --- /dev/null +++ b/HID-asus-Reduce-object-size-by-consolidating-calls.patch @@ -0,0 +1,190 @@ +From patchwork Sat May 29 16:29:48 2021 +Message-ID: <56767df55117cc5834b0021ba2c056272e686804.camel@perches.com> +Subject: [PATCH] HID: asus: Reduce object size by consolidating calls +From: Joe Perches <joe@perches.com> +To: Jiri Kosina <jikos@kernel.org>, + Benjamin Tissoires <benjamin.tissoires@redhat.com> +Cc: linux-input <linux-input@vger.kernel.org>, + LKML <linux-kernel@vger.kernel.org> +Date: Sat, 29 May 2021 09:29:48 -0700 +List-ID: <linux-input.vger.kernel.org> +X-Mailing-List: linux-input@vger.kernel.org + +Add intermediating lookup functions to avoid repetitive calls. + +Reduces object size ~4kb (x86-64 defconfig w/ hid-asus) + +$ size drivers/hid/hid-asus.o* + text data bss dec hex filename + 10442 468 0 10910 2a9e drivers/hid/hid-asus.o.bew + 14523 468 0 14991 3a8f drivers/hid/hid-asus.o.old + +Miscellanea: + +o Remove now unused asus_map_kay_clear macro + +Signed-off-by: Joe Perches <joe@perches.com> +--- + +untested, no hardware + + drivers/hid/hid-asus.c | 128 ++++++++++++++++++++++++------------------------- + 1 file changed, 64 insertions(+), 64 deletions(-) + +diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c +index fca8fc78a78a3..5b78e6c3bb5d9 100644 +--- a/drivers/hid/hid-asus.c ++++ b/drivers/hid/hid-asus.c +@@ -811,8 +811,58 @@ static int asus_input_configured(struct hid_device *hdev, struct hid_input *hi) + return 0; + } + +-#define asus_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, \ +- max, EV_KEY, (c)) ++static int asus_map_use_to_btn(int use) ++{ ++ switch (use) { ++ case 0x10: return KEY_BRIGHTNESSDOWN; ++ case 0x20: return KEY_BRIGHTNESSUP; ++ case 0x35: return KEY_DISPLAY_OFF; ++ case 0x6c: return KEY_SLEEP; ++ case 0x7c: return KEY_MICMUTE; ++ case 0x82: return KEY_CAMERA; ++ case 0x88: return KEY_RFKILL; ++ case 0xb5: return KEY_CALC; ++ case 0xc4: return KEY_KBDILLUMUP; ++ case 0xc5: return KEY_KBDILLUMDOWN; ++ case 0x6b: return KEY_F21; /* ASUS touchpad toggle */ ++ case 0x38: return KEY_PROG1; /* ROG key */ ++ case 0xba: return KEY_PROG2; /* Fn+C ASUS Splendid */ ++ case 0x5c: return KEY_PROG3; /* Fn+Space Power4Gear Hybrid */ ++ case 0x99: return KEY_PROG4; /* Fn+F5 "fan" symbol on FX503VD */ ++ /* for N-Key keyboard */ ++ case 0xae: return KEY_PROG4; /* Fn+F5 "fan" symbol */ ++ case 0x92: return KEY_CALC; /* Fn+Ret "Calc" symbol */ ++ case 0xb2: return KEY_PROG2; /* Fn+Left Aura mode previous */ ++ case 0xb3: return KEY_PROG3; /* Fn+Right Aura mode next */ ++ } ++ ++ return 0; ++} ++ ++static int ms_map_use_to_btn(int use) ++{ ++ switch (use) { ++ case 0xff01: return BTN_1; ++ case 0xff02: return BTN_2; ++ case 0xff03: return BTN_3; ++ case 0xff04: return BTN_4; ++ case 0xff05: return BTN_5; ++ case 0xff06: return BTN_6; ++ case 0xff07: return BTN_7; ++ case 0xff08: return BTN_8; ++ case 0xff09: return BTN_9; ++ case 0xff0a: return BTN_A; ++ case 0xff0b: return BTN_B; ++ case 0x00f1: return KEY_WLAN; ++ case 0x00f2: return KEY_BRIGHTNESSDOWN; ++ case 0x00f3: return KEY_BRIGHTNESSUP; ++ case 0x00f4: return KEY_DISPLAY_OFF; ++ case 0x00f7: return KEY_CAMERA; ++ case 0x00f8: return KEY_PROG1; ++ } ++ ++ return 0; ++} + static int asus_input_mapping(struct hid_device *hdev, + struct hid_input *hi, struct hid_field *field, + struct hid_usage *usage, unsigned long **bit, +@@ -842,50 +892,16 @@ static int asus_input_mapping(struct hid_device *hdev, + + /* ASUS-specific keyboard hotkeys and led backlight */ + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_ASUSVENDOR) { +- switch (usage->hid & HID_USAGE) { +- case 0x10: asus_map_key_clear(KEY_BRIGHTNESSDOWN); break; +- case 0x20: asus_map_key_clear(KEY_BRIGHTNESSUP); break; +- case 0x35: asus_map_key_clear(KEY_DISPLAY_OFF); break; +- case 0x6c: asus_map_key_clear(KEY_SLEEP); break; +- case 0x7c: asus_map_key_clear(KEY_MICMUTE); break; +- case 0x82: asus_map_key_clear(KEY_CAMERA); break; +- case 0x88: asus_map_key_clear(KEY_RFKILL); break; +- case 0xb5: asus_map_key_clear(KEY_CALC); break; +- case 0xc4: asus_map_key_clear(KEY_KBDILLUMUP); break; +- case 0xc5: asus_map_key_clear(KEY_KBDILLUMDOWN); break; +- +- /* ASUS touchpad toggle */ +- case 0x6b: asus_map_key_clear(KEY_F21); break; +- +- /* ROG key */ +- case 0x38: asus_map_key_clear(KEY_PROG1); break; +- +- /* Fn+C ASUS Splendid */ +- case 0xba: asus_map_key_clear(KEY_PROG2); break; ++ int btn = asus_map_use_to_btn(usage->hid & HID_USAGE); + +- /* Fn+Space Power4Gear Hybrid */ +- case 0x5c: asus_map_key_clear(KEY_PROG3); break; +- +- /* Fn+F5 "fan" symbol on FX503VD */ +- case 0x99: asus_map_key_clear(KEY_PROG4); break; +- +- /* Fn+F5 "fan" symbol on N-Key keyboard */ +- case 0xae: asus_map_key_clear(KEY_PROG4); break; +- +- /* Fn+Ret "Calc" symbol on N-Key keyboard */ +- case 0x92: asus_map_key_clear(KEY_CALC); break; +- +- /* Fn+Left Aura mode previous on N-Key keyboard */ +- case 0xb2: asus_map_key_clear(KEY_PROG2); break; +- +- /* Fn+Right Aura mode next on N-Key keyboard */ +- case 0xb3: asus_map_key_clear(KEY_PROG3); break; +- +- default: +- /* ASUS lazily declares 256 usages, ignore the rest, +- * as some make the keyboard appear as a pointer device. */ ++ /* ++ * ASUS lazily declares 256 usages, ignore the rest, ++ * as some make the keyboard appear as a pointer device. ++ */ ++ if (!btn) + return -1; +- } ++ ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, btn); + + /* + * Check and enable backlight only on devices with UsagePage == +@@ -901,28 +917,12 @@ static int asus_input_mapping(struct hid_device *hdev, + } + + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { +- switch (usage->hid & HID_USAGE) { +- case 0xff01: asus_map_key_clear(BTN_1); break; +- case 0xff02: asus_map_key_clear(BTN_2); break; +- case 0xff03: asus_map_key_clear(BTN_3); break; +- case 0xff04: asus_map_key_clear(BTN_4); break; +- case 0xff05: asus_map_key_clear(BTN_5); break; +- case 0xff06: asus_map_key_clear(BTN_6); break; +- case 0xff07: asus_map_key_clear(BTN_7); break; +- case 0xff08: asus_map_key_clear(BTN_8); break; +- case 0xff09: asus_map_key_clear(BTN_9); break; +- case 0xff0a: asus_map_key_clear(BTN_A); break; +- case 0xff0b: asus_map_key_clear(BTN_B); break; +- case 0x00f1: asus_map_key_clear(KEY_WLAN); break; +- case 0x00f2: asus_map_key_clear(KEY_BRIGHTNESSDOWN); break; +- case 0x00f3: asus_map_key_clear(KEY_BRIGHTNESSUP); break; +- case 0x00f4: asus_map_key_clear(KEY_DISPLAY_OFF); break; +- case 0x00f7: asus_map_key_clear(KEY_CAMERA); break; +- case 0x00f8: asus_map_key_clear(KEY_PROG1); break; +- default: ++ int btn = ms_map_use_to_btn(usage->hid & HID_USAGE); ++ ++ if (!btn) + return 0; +- } + ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, btn); + set_bit(EV_REP, hi->input->evbit); + return 1; + } |