[PATCH 26/26] Input: maple_keyb - remove redundant 'new' buffer from struct dc_kbd
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2026-07-04 05:58:16
Also in:
linux-sh, lkml
Subsystem:
input (keyboard, mouse, joystick, touchscreen) drivers, the rest · Maintainers:
Dmitry Torokhov, Linus Torvalds
The 'new' buffer in struct dc_kbd is only ever used as a temporary staging area during dc_kbd_callback() to pass the received hardware packet to dc_scan_kbd(). Remove 'new' from struct dc_kbd entirely and pass the received buffer pointer directly to dc_scan_kbd(). This saves 8 bytes in struct dc_kbd and avoids an unnecessary 8-byte memcpy on every keyboard poll cycle. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> --- drivers/input/keyboard/maple_keyb.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index 1d99ed5bad1e..5b10c6ba7bd5 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c@@ -23,8 +23,7 @@ MODULE_LICENSE("GPL"); struct dc_kbd { struct input_dev *dev; unsigned short keycode[NR_SCANCODES]; - unsigned char new[8]; - unsigned char old[8]; + u8 old[8]; }; static const unsigned short dc_kbd_keycode[NR_SCANCODES] = {
@@ -75,7 +74,7 @@ static const unsigned short dc_kbd_keycode[NR_SCANCODES] = { KEY_CALC, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED }; -static void dc_scan_kbd(struct dc_kbd *kbd) +static void dc_scan_kbd(struct dc_kbd *kbd, const u8 *new) { struct input_dev *dev = kbd->dev; void *ptr;
@@ -86,11 +85,11 @@ static void dc_scan_kbd(struct dc_kbd *kbd) code = i + 224; keycode = kbd->keycode[code]; input_event(dev, EV_MSC, MSC_SCAN, code); - input_report_key(dev, keycode, (kbd->new[0] >> i) & 1); + input_report_key(dev, keycode, (new[0] >> i) & 1); } for (i = 2; i < 8; i++) { - ptr = memchr(kbd->new + 2, kbd->old[i], 6); + ptr = memchr(new + 2, kbd->old[i], 6); code = kbd->old[i]; if (code > 3 && !ptr) { keycode = kbd->keycode[code];
@@ -103,8 +102,8 @@ static void dc_scan_kbd(struct dc_kbd *kbd) code); } } - ptr = memchr(kbd->old + 2, kbd->new[i], 6); - code = kbd->new[i]; + ptr = memchr(kbd->old + 2, new[i], 6); + code = new[i]; if (code > 3 && !ptr) { keycode = kbd->keycode[code]; if (keycode) {
@@ -118,19 +117,17 @@ static void dc_scan_kbd(struct dc_kbd *kbd) } } input_sync(dev); - memcpy(kbd->old, kbd->new, 8); + memcpy(kbd->old, new, 8); } static void dc_kbd_callback(struct mapleq *mq) { struct maple_device *mapledev = mq->dev; struct dc_kbd *kbd = maple_get_drvdata(mapledev); - unsigned long *buf = (unsigned long *)(mq->recvbuf->buf); + unsigned long *buf = mq->recvbuf->buf; - if (buf[1] == mapledev->function) { - memcpy(kbd->new, buf + 2, 8); - dc_scan_kbd(kbd); - } + if (buf[1] == mapledev->function) + dc_scan_kbd(kbd, mq->recvbuf->buf + 8); } static int dc_kbd_open(struct input_dev *dev)
--
2.55.0.rc0.799.gd6f94ed593-goog