* Re: [PATCH 05/26] Input: maplecontrol - stop polling and clear callback on close
From: sashiko-bot @ 2026-07-04 6:07 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, dmitry.torokhov
In-Reply-To: <20260703-b4-maple-cleanup-v1-5-41e424964da5@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The event reporting loop in `dc_pad_callback()` does not call `input_sync()` after reporting a group of input events.
--
commit 5b43e607496d623e78583ef58f7527944fe7a924
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Input: maplecontrol - stop polling and clear callback on close
In dc_pad_close(), pass NULL instead of dc_pad_callback to
maple_getcond_callback() to both stop polling and clear the callback
pointer when the input device is closed.
> diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
> index a498fc322c4d5..c66b2614e2982 100644
> --- a/drivers/input/joystick/maplecontrol.c
> +++ b/drivers/input/joystick/maplecontrol.c
> @@ -74,8 +74,7 @@ static void dc_pad_close(struct input_dev *dev)
> {
> struct dc_pad *pad = dev_get_platdata(&dev->dev);
>
> - maple_getcond_callback(pad->mdev, dc_pad_callback, 0,
> - MAPLE_FUNC_CONTROLLER);
> + maple_getcond_callback(pad->mdev, NULL, 0, MAPLE_FUNC_CONTROLLER);
> }
[Severity: High]
This isn't a bug introduced by this patch, but since dc_pad_callback() is
involved here, is there a missing call to input_sync()?
Looking at dc_pad_callback(), it reports several events without ever flushing
them:
drivers/input/joystick/maplecontrol.c:dc_pad_callback() {
...
input_report_abs(dev, ABS_RX, res[14]);
input_report_abs(dev, ABS_RY, res[15]);
}
Without input_sync(), EV_SYN/SYN_REPORT events are never generated.
Will this prevent the input core from waking up userspace readers (like
evdev), causing reported events to be indefinitely buffered until the buffer
overflows?
Since maple_dma_handler calls dc_pad_callback() on every data transfer to
report new joystick states, does this omission break event propagation and
make the joystick unresponsive for applications relying on poll() or blocking
read()?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com?part=5
^ permalink raw reply
* Re: [PATCH 12/26] Input: maplecontrol - remove unused mdev->driver assignment
From: sashiko-bot @ 2026-07-04 6:06 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: dmitry.torokhov, linux-input
In-Reply-To: <20260703-b4-maple-cleanup-v1-12-41e424964da5@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Missing `input_sync()` after reporting events in the maple controller callback.
--
commit 0fbd521bb62afe1470ddde2cd989f82804cfb127
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Input: maplecontrol - remove unused mdev->driver assignment
The driver field in struct maple_device is no longer used since commit
1795cf48b322 ("sh/maple: clean maple bus code") which removed the reading
of this field. Remove the unused assignment to mdev->driver and the now
unused mdrv variable in probe_maple_controller.
> diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
> index 79cec89ad52a9..955e01bcfa0c1 100644
> --- a/drivers/input/joystick/maplecontrol.c
> +++ b/drivers/input/joystick/maplecontrol.c
> @@ -95,7 +95,6 @@ static int probe_maple_controller(struct device *dev)
> };
>
> struct maple_device *mdev = to_maple_dev(dev);
> - struct maple_driver *mdrv = to_maple_driver(dev->driver);
> int i, error;
> struct dc_pad *pad;
> struct input_dev *idev;
> @@ -138,9 +137,6 @@ static int probe_maple_controller(struct device *dev)
> error = input_register_device(idev);
> if (error)
> goto fail;
> -
> - mdev->driver = mdrv;
> -
> return 0;
>
> fail:
[Severity: High]
This isn't a bug introduced by this patch, but I noticed an issue in this
file while reviewing the driver.
Does the hardware callback need to emit a synchronization event after
reporting the controller state?
Looking at drivers/input/joystick/maplecontrol.c:dc_pad_callback():
...
input_report_abs(dev, ABS_X, res[12]);
input_report_abs(dev, ABS_Y, res[13]);
input_report_abs(dev, ABS_RX, res[14]);
input_report_abs(dev, ABS_RY, res[15]);
}
Without calling input_sync() at the end of this logical group of events,
userspace clients will not receive SYN_REPORT. Won't this cause them to
buffer events indefinitely and prevent the gamepad from functioning?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com?part=12
^ permalink raw reply
* Re: [PATCH 01/26] sh: maple: include linux/device.h in linux/maple.h
From: sashiko-bot @ 2026-07-04 6:05 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, dmitry.torokhov
In-Reply-To: <20260703-b4-maple-cleanup-v1-1-41e424964da5@gmail.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
Pre-existing issues:
- [High] The error path in `vmu_queryblocks` frees the `priv` field of previously registered MTD partitions without unregistering them, leaving dangling MTD devices that crash the kernel if accessed.
- [High] `vmu_disconnect` assumes all partitions have a fully initialized `priv` structure and unconditionally dereferences it, which causes a NULL pointer dereference if initialization failed or was incomplete.
- [High] `vmu_disconnect` fails to free multiple dynamically allocated structures, causing a severe memory leak on device removal.
- [High] `vmu_flash_read_char` truncates negative error codes into an `unsigned char`, causing the caller to silently misinterpret errors as valid data.
--
commit 3694a7f48be1fa76db703e9eae953d9ee9757f9f
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
sh: maple: include linux/device.h in linux/maple.h
This commit includes linux/device.h in linux/maple.h to ensure full
definitions of struct device and struct device_driver are available.
This fixes a compilation error in drivers/mtd/maps/vmu-flash.c.
> diff --git a/include/linux/maple.h b/include/linux/maple.h
> index 3be4e567473c8..22f2930251edc 100644
> --- a/include/linux/maple.h
> +++ b/include/linux/maple.h
[ ... ]
While this patch fixes the build, looking at drivers/mtd/maps/vmu-flash.c
revealed a few pre-existing issues:
drivers/mtd/maps/vmu-flash.c:vmu_flash_read_char() {
...
unsigned char *buf, ret;
...
error = maple_vmu_read_block(vblock->num, buf, mtd);
if (error) {
ret = error;
*retval = 2;
goto out_vblock;
}
...
return ret;
}
[Severity: High]
This is a pre-existing issue, but does assigning a negative error code
like -ENOMEM or -EIO to the unsigned char ret truncate it? This could
cause the caller to misinterpret errors as valid data instead of properly
propagating the negative error code back to the MTD subsystem.
drivers/mtd/maps/vmu-flash.c:vmu_queryblocks() {
...
error = mtd_device_register(mtd_cur, NULL, 0);
if (error)
goto fail_mtd_register;
...
fail_mpart:
for (error = 0; error <= card->partition; error++) {
kfree(((card->mtd)[error]).priv);
((card->mtd)[error]).priv = NULL;
}
...
}
[Severity: High]
This isn't a bug introduced by this patch, but could this cleanup loop
fail to unregister the previously successfully registered MTD devices?
If a recursive call fails, freeing the priv field without calling
mtd_device_unregister() might leave dangling MTD devices that could
crash the kernel if accessed later.
drivers/mtd/maps/vmu-flash.c:vmu_disconnect() {
...
for (x = 0; x < card->partitions; x++) {
mpart = ((card->mtd)[x]).priv;
mpart->mdev = NULL;
mtd_device_unregister(&((card->mtd)[x]));
kfree(((card->parts)[x]).name);
}
...
}
[Severity: High]
This is a pre-existing issue, but does this assume all partitions have a
fully initialized priv structure? If the device is disconnected before
vmu_queryblocks() finishes initialization or if initialization fails,
can mpart be NULL here, leading to a NULL pointer dereference when
assigning mpart->mdev = NULL?
[Severity: High]
This is also a pre-existing issue, but does this disconnect routine leak
resources? It appears to omit freeing the mpart, pcache, and pcache->buffer
resources that were allocated during initialization.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com?part=1
^ permalink raw reply
* [PATCH 3/3] Input: mms114 - fix Y-resolution configuration
From: Dmitry Torokhov @ 2026-07-04 6:01 UTC (permalink / raw)
To: linux-input; +Cc: Bryam Vargas, Linus Walleij, linux-kernel
In-Reply-To: <20260704060115.353049-1-dmitry.torokhov@gmail.com>
In mms114_setup_regs(), the driver mistakenly uses props->max_x instead
of props->max_y when configuring the low bits of the Y resolution
(MMS114_Y_RESOLUTION).
Fix this by using the correct property.
Fixes: 07b8481d4aff ("Input: add MELFAS mms114 touchscreen driver")
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/touchscreen/mms114.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
index 84afdadb3bcc..27911a9f4e9e 100644
--- a/drivers/input/touchscreen/mms114.c
+++ b/drivers/input/touchscreen/mms114.c
@@ -408,7 +408,7 @@ static int mms114_setup_regs(struct mms114_data *data)
if (error < 0)
return error;
- val = props->max_x & 0xff;
+ val = props->max_y & 0xff;
error = mms114_write_reg(data, MMS114_Y_RESOLUTION, val);
if (error < 0)
return error;
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 2/3] Input: mms114 - fix endianness portability in I2C packet layout
From: Dmitry Torokhov @ 2026-07-04 6:01 UTC (permalink / raw)
To: linux-input; +Cc: Bryam Vargas, Linus Walleij, linux-kernel, sashiko-bot
In-Reply-To: <20260704060115.353049-1-dmitry.torokhov@gmail.com>
The driver defines the I2C packet layout using C bitfields in struct
mms114_touch. This is not portable as the layout of bitfields within a
byte is compiler-dependent and varies with endianness. On Big Endian
systems, the fields will be parsed incorrectly.
Fix this by redefining struct mms114_touch with plain u8 fields and
introducing bitwise macros to extract the values portably.
Reported-by: sashiko-bot@kernel.org
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/touchscreen/mms114.c | 52 +++++++++++++++++++-----------
1 file changed, 33 insertions(+), 19 deletions(-)
diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
index 23e0283bc6b8..84afdadb3bcc 100644
--- a/drivers/input/touchscreen/mms114.c
+++ b/drivers/input/touchscreen/mms114.c
@@ -4,6 +4,8 @@
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
// Author: Joonyoung Shim <jy0922.shim@samsung.com>
+#include <linux/bitfield.h>
+#include <linux/bits.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/of.h>
@@ -76,9 +78,16 @@ struct mms_chip {
int (*get_version)(struct mms114_data *data);
};
+#define MMS114_FLAGS_ID_MASK GENMASK(3, 0)
+#define MMS114_FLAGS_TYPE_MASK GENMASK(6, 5)
+#define MMS114_FLAGS_PRESSED_MASK BIT(7)
+
+#define MMS114_XY_HI_X_MASK GENMASK(3, 0)
+#define MMS114_XY_HI_Y_MASK GENMASK(7, 4)
+
struct mms114_touch {
- u8 id:4, reserved_bit4:1, type:2, pressed:1;
- u8 x_hi:4, y_hi:4;
+ u8 flags;
+ u8 xy_hi;
u8 x_lo;
u8 y_lo;
u8 width;
@@ -244,28 +253,30 @@ static void mms114_process_mt(struct mms114_data *data, struct mms114_touch *tou
{
struct i2c_client *client = data->client;
struct input_dev *input_dev = data->input_dev;
- unsigned int id;
+ unsigned int id = FIELD_GET(MMS114_FLAGS_ID_MASK, touch->flags);
+ unsigned int type = FIELD_GET(MMS114_FLAGS_TYPE_MASK, touch->flags);
+ bool pressed = FIELD_GET(MMS114_FLAGS_PRESSED_MASK, touch->flags);
unsigned int x;
unsigned int y;
- if (touch->id == 0 || touch->id > MMS114_MAX_TOUCH) {
- dev_err(&client->dev, "Wrong touch id (%d)\n", touch->id);
+ if (id == 0 || id > MMS114_MAX_TOUCH) {
+ dev_err(&client->dev, "Wrong touch id (%d)\n", id);
return;
}
- id = touch->id - 1;
- x = touch->x_lo | touch->x_hi << 8;
- y = touch->y_lo | touch->y_hi << 8;
+ id--;
+ x = touch->x_lo | FIELD_GET(MMS114_XY_HI_X_MASK, touch->xy_hi) << 8;
+ y = touch->y_lo | FIELD_GET(MMS114_XY_HI_Y_MASK, touch->xy_hi) << 8;
dev_dbg(&client->dev,
"id: %d, type: %d, pressed: %d, x: %d, y: %d, width: %d, strength: %d\n",
- id, touch->type, touch->pressed,
+ id, type, pressed,
x, y, touch->width, touch->strength);
input_mt_slot(input_dev, id);
- input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, touch->pressed);
+ input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, pressed);
- if (touch->pressed) {
+ if (pressed) {
touchscreen_report_pos(input_dev, &data->props, x, y, true);
input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, touch->width);
input_report_abs(input_dev, ABS_MT_PRESSURE, touch->strength);
@@ -278,21 +289,23 @@ static void mms114_process_touchkey(struct mms114_data *data,
struct i2c_client *client = data->client;
struct input_dev *input_dev = data->input_dev;
unsigned int keycode_id;
+ unsigned int id = FIELD_GET(MMS114_FLAGS_ID_MASK, touch->flags);
+ bool pressed = FIELD_GET(MMS114_FLAGS_PRESSED_MASK, touch->flags);
- if (touch->id == 0)
+ if (id == 0)
return;
- if (touch->id > data->num_keycodes) {
+ if (id > data->num_keycodes) {
dev_err(&client->dev, "Wrong touch id for touchkey (%d)\n",
- touch->id);
+ id);
return;
}
- keycode_id = touch->id - 1;
+ keycode_id = id - 1;
dev_dbg(&client->dev, "keycode id: %d, pressed: %d\n", keycode_id,
- touch->pressed);
+ pressed);
- input_report_key(input_dev, data->keycodes[keycode_id], touch->pressed);
+ input_report_key(input_dev, data->keycodes[keycode_id], pressed);
}
static irqreturn_t mms114_interrupt(int irq, void *dev_id)
@@ -325,8 +338,9 @@ static irqreturn_t mms114_interrupt(int irq, void *dev_id)
for (index = 0; index < touch_size; index++) {
t = (struct mms114_touch *)((u8 *)touch + index * event_size);
+ unsigned int type = FIELD_GET(MMS114_FLAGS_TYPE_MASK, t->flags);
- switch (t->type) {
+ switch (type) {
case MMS114_TYPE_TOUCHSCREEN:
mms114_process_mt(data, t);
break;
@@ -337,7 +351,7 @@ static irqreturn_t mms114_interrupt(int irq, void *dev_id)
default:
dev_err(&client->dev, "Wrong touch type (%d)\n",
- t->type);
+ type);
break;
}
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 1/3] Input: mms114 - fix multi-touch slot corruption
From: Dmitry Torokhov @ 2026-07-04 6:01 UTC (permalink / raw)
To: linux-input
Cc: Bryam Vargas, Linus Walleij, linux-kernel, stable, sashiko-bot
If the touchscreen controller reports a touch ID of 0, the driver
calculates the slot ID as touch->id - 1, which underflows to UINT_MAX.
This is passed to input_mt_slot() as -1.
Since the input core ignores negative slot values, the active slot remains
unchanged. The driver then reports the touch coordinates for the previously
active slot, corrupting its state.
Fix this by rejecting touch reports with ID 0.
Fixes: 07b8481d4aff ("Input: add MELFAS mms114 touchscreen driver")
Cc: stable@vger.kernel.org
Reported-by: sashiko-bot@kernel.org
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/touchscreen/mms114.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
index 006dded17eb8..23e0283bc6b8 100644
--- a/drivers/input/touchscreen/mms114.c
+++ b/drivers/input/touchscreen/mms114.c
@@ -248,7 +248,7 @@ static void mms114_process_mt(struct mms114_data *data, struct mms114_touch *tou
unsigned int x;
unsigned int y;
- if (touch->id > MMS114_MAX_TOUCH) {
+ if (touch->id == 0 || touch->id > MMS114_MAX_TOUCH) {
dev_err(&client->dev, "Wrong touch id (%d)\n", touch->id);
return;
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 26/26] Input: maple_keyb - remove redundant 'new' buffer from struct dc_kbd
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
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
^ permalink raw reply related
* [PATCH 25/26] Input: maplecontrol - fix style issues
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Fix coding style and formatting issues reported by checkpatch.pl and
switch to using BIT(). When reporting D-PAD events avoid conditionals.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/joystick/maplecontrol.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 3ef6652d40cb..457a73d91239 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -35,22 +35,22 @@ static void dc_pad_callback(struct mapleq *mq)
buttons = ~le16_to_cpup((__le16 *)(res + 8));
input_report_abs(dev, ABS_HAT0Y,
- (buttons & 0x0010 ? -1 : 0) + (buttons & 0x0020 ? 1 : 0));
+ !!(buttons & BIT(5)) - !!(buttons & BIT(4)));
input_report_abs(dev, ABS_HAT0X,
- (buttons & 0x0040 ? -1 : 0) + (buttons & 0x0080 ? 1 : 0));
+ !!(buttons & BIT(7)) - !!(buttons & BIT(6)));
input_report_abs(dev, ABS_HAT1Y,
- (buttons & 0x1000 ? -1 : 0) + (buttons & 0x2000 ? 1 : 0));
+ !!(buttons & BIT(13)) - !!(buttons & BIT(12)));
input_report_abs(dev, ABS_HAT1X,
- (buttons & 0x4000 ? -1 : 0) + (buttons & 0x8000 ? 1 : 0));
+ !!(buttons & BIT(15)) - !!(buttons & BIT(14)));
- input_report_key(dev, BTN_C, buttons & 0x0001);
- input_report_key(dev, BTN_B, buttons & 0x0002);
- input_report_key(dev, BTN_A, buttons & 0x0004);
- input_report_key(dev, BTN_START, buttons & 0x0008);
- input_report_key(dev, BTN_Z, buttons & 0x0100);
- input_report_key(dev, BTN_Y, buttons & 0x0200);
- input_report_key(dev, BTN_X, buttons & 0x0400);
- input_report_key(dev, BTN_SELECT, buttons & 0x0800);
+ input_report_key(dev, BTN_C, buttons & BIT(0));
+ input_report_key(dev, BTN_B, buttons & BIT(1));
+ input_report_key(dev, BTN_A, buttons & BIT(2));
+ input_report_key(dev, BTN_START, buttons & BIT(3));
+ input_report_key(dev, BTN_Z, buttons & BIT(8));
+ input_report_key(dev, BTN_Y, buttons & BIT(9));
+ input_report_key(dev, BTN_X, buttons & BIT(10));
+ input_report_key(dev, BTN_SELECT, buttons & BIT(11));
input_report_abs(dev, ABS_GAS, res[10]);
input_report_abs(dev, ABS_BRAKE, res[11]);
@@ -138,7 +138,6 @@ static int probe_maple_controller(struct maple_device *mdev)
return error;
return 0;
-
}
static struct maple_driver dc_pad_driver = {
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 24/26] Input: maplemouse - fix style issues
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Fix coding style and formatting issues reported by checkpatch.pl.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/mouse/maplemouse.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index 7842bd46c9a1..691cf334ae9c 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -50,8 +50,8 @@ static int dc_mouse_open(struct input_dev *dev)
{
struct dc_mouse *mse = input_get_drvdata(dev);
- maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50,
- MAPLE_FUNC_MOUSE);
+ maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ / 50,
+ MAPLE_FUNC_MOUSE);
return 0;
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 23/26] Input: maple_keyb - fix style issues
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Fix coding style and formatting issues reported by checkpatch.pl.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/keyboard/maple_keyb.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index bd4ce803a13e..1d99ed5bad1e 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -48,7 +48,7 @@ static const unsigned short dc_kbd_keycode[NR_SCANCODES] = {
KEY_F23, KEY_F24, KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, KEY_STOP,
KEY_AGAIN, KEY_UNDO, KEY_CUT, KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE,
KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
- KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA , KEY_YEN,
+ KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA, KEY_YEN,
KEY_HENKAN, KEY_MUHENKAN, KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED,
KEY_RESERVED, KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA,
KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
@@ -92,15 +92,16 @@ static void dc_scan_kbd(struct dc_kbd *kbd)
for (i = 2; i < 8; i++) {
ptr = memchr(kbd->new + 2, kbd->old[i], 6);
code = kbd->old[i];
- if (code > 3 && ptr == NULL) {
+ if (code > 3 && !ptr) {
keycode = kbd->keycode[code];
if (keycode) {
input_event(dev, EV_MSC, MSC_SCAN, code);
input_report_key(dev, keycode, 0);
- } else
+ } else {
dev_dbg(&dev->dev,
"Unknown key (scancode %#x) released.",
code);
+ }
}
ptr = memchr(kbd->old + 2, kbd->new[i], 6);
code = kbd->new[i];
@@ -109,10 +110,11 @@ static void dc_scan_kbd(struct dc_kbd *kbd)
if (keycode) {
input_event(dev, EV_MSC, MSC_SCAN, code);
input_report_key(dev, keycode, 1);
- } else
+ } else {
dev_dbg(&dev->dev,
"Unknown key (scancode %#x) pressed.",
code);
+ }
}
}
input_sync(dev);
@@ -191,9 +193,6 @@ static int probe_maple_kbd(struct maple_device *mdev)
return 0;
}
-
-
-
static struct maple_driver dc_kbd_driver = {
.function = MAPLE_FUNC_KEYBOARD,
.probe = probe_maple_kbd,
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 22/26] Input: maplecontrol - convert to devm
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Convert the driver to use managed resources to simplify resource
lifecycle management.
This eliminates manual error handling in probe() and allows removing
the remove() callback entirely, as all cleanup is handled automatically.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/joystick/maplecontrol.c | 30 +++++++++---------------------
1 file changed, 9 insertions(+), 21 deletions(-)
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 6864243b0b4a..3ef6652d40cb 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -99,12 +99,13 @@ static int probe_maple_controller(struct maple_device *mdev)
struct input_dev *idev;
unsigned long data = be32_to_cpu(mdev->devinfo.function_data[0]);
- pad = kzalloc_obj(*pad);
- idev = input_allocate_device();
- if (!pad || !idev) {
- error = -ENOMEM;
- goto fail;
- }
+ pad = devm_kzalloc(&mdev->dev, sizeof(*pad), GFP_KERNEL);
+ if (!pad)
+ return -ENOMEM;
+
+ idev = devm_input_allocate_device(&mdev->dev);
+ if (!idev)
+ return -ENOMEM;
pad->dev = idev;
pad->mdev = mdev;
@@ -129,33 +130,20 @@ static int probe_maple_controller(struct maple_device *mdev)
if (idev->keybit[BIT_WORD(BTN_JOYSTICK)])
idev->evbit[0] |= BIT_MASK(EV_KEY);
- idev->dev.parent = &mdev->dev;
idev->name = mdev->product_name;
idev->id.bustype = BUS_HOST;
error = input_register_device(idev);
if (error)
- goto fail;
- return 0;
+ return error;
-fail:
- input_free_device(idev);
- kfree(pad);
- return error;
-}
-
-static void remove_maple_controller(struct maple_device *mdev)
-{
- struct dc_pad *pad = maple_get_drvdata(mdev);
+ return 0;
- input_unregister_device(pad->dev);
- kfree(pad);
}
static struct maple_driver dc_pad_driver = {
.function = MAPLE_FUNC_CONTROLLER,
.probe = probe_maple_controller,
- .remove = remove_maple_controller,
.drv = {
.name = "Dreamcast_controller",
},
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 21/26] Input: maplemouse - convert to devm
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Convert the driver to use managed resources to simplify resource
lifecycle management.
This eliminates manual error handling in probe() and allows removing
the remove() callback entirely, as all cleanup is handled automatically.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/mouse/maplemouse.c | 37 +++++++++----------------------------
1 file changed, 9 insertions(+), 28 deletions(-)
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index 03cb666d278d..7842bd46c9a1 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -70,17 +70,13 @@ static int probe_maple_mouse(struct maple_device *mdev)
struct input_dev *input_dev;
struct dc_mouse *mse;
- mse = kzalloc_obj(*mse);
- if (!mse) {
- error = -ENOMEM;
- goto fail;
- }
-
- input_dev = input_allocate_device();
- if (!input_dev) {
- error = -ENOMEM;
- goto fail_nomem;
- }
+ mse = devm_kzalloc(&mdev->dev, sizeof(*mse), GFP_KERNEL);
+ if (!mse)
+ return -ENOMEM;
+
+ input_dev = devm_input_allocate_device(&mdev->dev);
+ if (!input_dev)
+ return -ENOMEM;
mse->dev = input_dev;
mse->mdev = mdev;
@@ -99,29 +95,14 @@ static int probe_maple_mouse(struct maple_device *mdev)
input_dev->id.bustype = BUS_HOST;
error = input_register_device(input_dev);
if (error)
- goto fail_register;
- return error;
-
-fail_register:
- input_free_device(input_dev);
-fail_nomem:
- kfree(mse);
-fail:
- return error;
-}
+ return error;
-static void remove_maple_mouse(struct maple_device *mdev)
-{
- struct dc_mouse *mse = maple_get_drvdata(mdev);
-
- input_unregister_device(mse->dev);
- kfree(mse);
+ return 0;
}
static struct maple_driver dc_mouse_driver = {
.function = MAPLE_FUNC_MOUSE,
.probe = probe_maple_mouse,
- .remove = remove_maple_mouse,
.drv = {
.name = "Dreamcast_mouse",
},
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 20/26] Input: maple_keyb - convert to devm
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Convert the driver to use managed resources to simplify resource
lifecycle management.
This eliminates manual error handling in probe() and removes manual
input device unregistration and memory freeing from remove().
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/keyboard/maple_keyb.c | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index aa9a4a80e26f..bd4ce803a13e 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -155,17 +155,13 @@ static int probe_maple_kbd(struct maple_device *mdev)
struct dc_kbd *kbd;
struct input_dev *idev;
- kbd = kzalloc_obj(*kbd);
- if (!kbd) {
- error = -ENOMEM;
- goto fail;
- }
+ kbd = devm_kzalloc(&mdev->dev, sizeof(*kbd), GFP_KERNEL);
+ if (!kbd)
+ return -ENOMEM;
- idev = input_allocate_device();
- if (!idev) {
- error = -ENOMEM;
- goto fail_idev_alloc;
- }
+ idev = devm_input_allocate_device(&mdev->dev);
+ if (!idev)
+ return -ENOMEM;
kbd->dev = idev;
memcpy(kbd->keycode, dc_kbd_keycode, sizeof(kbd->keycode));
@@ -179,7 +175,6 @@ static int probe_maple_kbd(struct maple_device *mdev)
idev->keycodesize = sizeof(unsigned short);
idev->keycodemax = ARRAY_SIZE(kbd->keycode);
idev->id.bustype = BUS_HOST;
- idev->dev.parent = &mdev->dev;
idev->open = dc_kbd_open;
idev->close = dc_kbd_close;
@@ -191,15 +186,9 @@ static int probe_maple_kbd(struct maple_device *mdev)
error = input_register_device(idev);
if (error)
- goto fail_register;
- return error;
-
-fail_register:
- input_free_device(idev);
-fail_idev_alloc:
- kfree(kbd);
-fail:
- return error;
+ return error;
+
+ return 0;
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 19/26] Input: maple_keyb - remove redundant mutex and remove method
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Now that the Maple bus core handles callback synchronization via
callback_mutex, the keyboard-driver-specific maple_keyb_mutex
is redundant.
Remove the mutex and its usage. Since the mutex was the only reason
we kept the remove method (to synchronize during detach), we can
now remove remove_maple_kbd entirely. The devm-managed resource
cleanup is sufficient.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/keyboard/maple_keyb.c | 25 +++----------------------
1 file changed, 3 insertions(+), 22 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index ab9257db7e03..aa9a4a80e26f 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -14,9 +14,6 @@
#include <linux/timer.h>
#include <linux/maple.h>
-/* Very simple mutex to ensure proper cleanup */
-static DEFINE_MUTEX(maple_keyb_mutex);
-
#define NR_SCANCODES 256
MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk");
@@ -128,15 +125,9 @@ static void dc_kbd_callback(struct mapleq *mq)
struct dc_kbd *kbd = maple_get_drvdata(mapledev);
unsigned long *buf = (unsigned long *)(mq->recvbuf->buf);
- /*
- * We should always get the lock because the only
- * time it may be locked is if the driver is in the cleanup phase.
- */
- scoped_guard(mutex_try, &maple_keyb_mutex) {
- if (buf[1] == mapledev->function) {
- memcpy(kbd->new, buf + 2, 8);
- dc_scan_kbd(kbd);
- }
+ if (buf[1] == mapledev->function) {
+ memcpy(kbd->new, buf + 2, 8);
+ dc_scan_kbd(kbd);
}
}
@@ -211,22 +202,12 @@ static int probe_maple_kbd(struct maple_device *mdev)
return error;
}
-static void remove_maple_kbd(struct maple_device *mdev)
-{
- struct dc_kbd *kbd = maple_get_drvdata(mdev);
- guard(mutex)(&maple_keyb_mutex);
- input_unregister_device(kbd->dev);
- kfree(kbd);
-
-
-}
static struct maple_driver dc_kbd_driver = {
.function = MAPLE_FUNC_KEYBOARD,
.probe = probe_maple_kbd,
- .remove = remove_maple_kbd,
.drv = {
.name = "Dreamcast_keyboard",
},
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 18/26] sh: maple: introduce callback_mutex in maple_device
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The Maple bus core invokes client callbacks asynchronously from a
workqueue (maple_dma_handler). If a device is removed (or closed) while
a callback is in flight, it can lead to UAF bugs if the driver's private
data is freed.
Introduce callback_mutex in struct maple_device to synchronize
callback registration/modification and callback invocation.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/sh/maple/maple.c | 9 +++++++--
include/linux/maple.h | 2 ++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index c0715e3ace6f..7c82b7a8a280 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -121,6 +121,7 @@ void maple_getcond_callback(struct maple_device *dev,
void (*callback) (struct mapleq *mq),
unsigned long interval, unsigned long function)
{
+ guard(mutex)(&dev->callback_mutex);
dev->callback = callback;
dev->interval = interval;
dev->function = cpu_to_be32(function);
@@ -230,11 +231,13 @@ static struct maple_device *maple_alloc_dev(int port, int unit)
mdev->dev.bus = &maple_bus_type;
mdev->dev.parent = &maple_bus;
init_waitqueue_head(&mdev->maple_wait);
+ mutex_init(&mdev->callback_mutex);
return mdev;
}
static void maple_free_dev(struct maple_device *mdev)
{
+ mutex_destroy(&mdev->callback_mutex);
kmem_cache_free(maple_queue_cache, mdev->mq->recvbuf);
kfree(mdev->mq);
kfree(mdev);
@@ -655,8 +658,10 @@ static void maple_dma_handler(struct work_struct *work)
break;
case MAPLE_RESPONSE_DATATRF:
- if (mdev->callback)
- mdev->callback(mq);
+ scoped_guard(mutex, &mdev->callback_mutex) {
+ if (mdev->callback)
+ mdev->callback(mq);
+ }
atomic_set(&mdev->busy, 0);
wake_up(&mdev->maple_wait);
break;
diff --git a/include/linux/maple.h b/include/linux/maple.h
index 641cf3330409..48ed7558b8ab 100644
--- a/include/linux/maple.h
+++ b/include/linux/maple.h
@@ -3,6 +3,7 @@
#define __LINUX_MAPLE_H
#include <linux/device.h>
+#include <linux/mutex.h>
#include <mach/maple.h>
/* Maple Bus command and response codes */
@@ -75,6 +76,7 @@ struct maple_device {
char product_licence[64];
atomic_t busy;
wait_queue_head_t maple_wait;
+ struct mutex callback_mutex;
struct device dev;
};
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 17/26] sh: maple: implement bus-level probe/remove
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
Implement probe() and remove() methods for the maple bus, and update
struct maple_driver to have its own probe() and remove() members that
take struct maple_device * directly.
Adjust all maple drivers (keyboard, mouse, joystick, vmu-flash) to
use these new bus-level methods, simplifying their probe and remove
functions by removing the need to cast from struct device * using
to_maple_dev().
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/joystick/maplecontrol.c | 12 ++++--------
drivers/input/keyboard/maple_keyb.c | 14 +++++---------
drivers/input/mouse/maplemouse.c | 12 ++++--------
drivers/mtd/maps/vmu-flash.c | 13 ++++---------
drivers/sh/maple/maple.c | 27 ++++++++++++++++++++++++++-
include/linux/maple.h | 2 ++
6 files changed, 45 insertions(+), 35 deletions(-)
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 955e01bcfa0c..6864243b0b4a 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -78,7 +78,7 @@ static void dc_pad_close(struct input_dev *dev)
}
/* allow the controller to be used */
-static int probe_maple_controller(struct device *dev)
+static int probe_maple_controller(struct maple_device *mdev)
{
static const short btn_bit[32] = {
BTN_C, BTN_B, BTN_A, BTN_START, -1, -1, -1, -1,
@@ -94,7 +94,6 @@ static int probe_maple_controller(struct device *dev)
-1, -1, -1, -1, -1, -1, -1, -1,
};
- struct maple_device *mdev = to_maple_dev(dev);
int i, error;
struct dc_pad *pad;
struct input_dev *idev;
@@ -145,23 +144,20 @@ static int probe_maple_controller(struct device *dev)
return error;
}
-static int remove_maple_controller(struct device *dev)
+static void remove_maple_controller(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
struct dc_pad *pad = maple_get_drvdata(mdev);
input_unregister_device(pad->dev);
kfree(pad);
-
- return 0;
}
static struct maple_driver dc_pad_driver = {
.function = MAPLE_FUNC_CONTROLLER,
+ .probe = probe_maple_controller,
+ .remove = remove_maple_controller,
.drv = {
.name = "Dreamcast_controller",
- .probe = probe_maple_controller,
- .remove = remove_maple_controller,
},
};
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index e277b929a375..ab9257db7e03 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -158,15 +158,12 @@ static void dc_kbd_close(struct input_dev *dev)
maple_getcond_callback(mdev, NULL, 0, MAPLE_FUNC_KEYBOARD);
}
-static int probe_maple_kbd(struct device *dev)
+static int probe_maple_kbd(struct maple_device *mdev)
{
- struct maple_device *mdev;
int i, error;
struct dc_kbd *kbd;
struct input_dev *idev;
- mdev = to_maple_dev(dev);
-
kbd = kzalloc_obj(*kbd);
if (!kbd) {
error = -ENOMEM;
@@ -214,9 +211,8 @@ static int probe_maple_kbd(struct device *dev)
return error;
}
-static int remove_maple_kbd(struct device *dev)
+static void remove_maple_kbd(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
struct dc_kbd *kbd = maple_get_drvdata(mdev);
guard(mutex)(&maple_keyb_mutex);
@@ -224,15 +220,15 @@ static int remove_maple_kbd(struct device *dev)
input_unregister_device(kbd->dev);
kfree(kbd);
- return 0;
+
}
static struct maple_driver dc_kbd_driver = {
.function = MAPLE_FUNC_KEYBOARD,
+ .probe = probe_maple_kbd,
+ .remove = remove_maple_kbd,
.drv = {
.name = "Dreamcast_keyboard",
- .probe = probe_maple_kbd,
- .remove = remove_maple_kbd,
},
};
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index f67e3eb5841b..03cb666d278d 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -64,9 +64,8 @@ static void dc_mouse_close(struct input_dev *dev)
}
/* allow the mouse to be used */
-static int probe_maple_mouse(struct device *dev)
+static int probe_maple_mouse(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
int error;
struct input_dev *input_dev;
struct dc_mouse *mse;
@@ -111,23 +110,20 @@ static int probe_maple_mouse(struct device *dev)
return error;
}
-static int remove_maple_mouse(struct device *dev)
+static void remove_maple_mouse(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
struct dc_mouse *mse = maple_get_drvdata(mdev);
input_unregister_device(mse->dev);
kfree(mse);
-
- return 0;
}
static struct maple_driver dc_mouse_driver = {
.function = MAPLE_FUNC_MOUSE,
+ .probe = probe_maple_mouse,
+ .remove = remove_maple_mouse,
.drv = {
.name = "Dreamcast_mouse",
- .probe = probe_maple_mouse,
- .remove = remove_maple_mouse,
},
};
diff --git a/drivers/mtd/maps/vmu-flash.c b/drivers/mtd/maps/vmu-flash.c
index 8f7028ac1b56..c34c768dfb87 100644
--- a/drivers/mtd/maps/vmu-flash.c
+++ b/drivers/mtd/maps/vmu-flash.c
@@ -769,30 +769,25 @@ static void vmu_file_error(struct maple_device *mdev, void *recvbuf)
}
-static int probe_maple_vmu(struct device *dev)
+static int probe_maple_vmu(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
-
mdev->can_unload = vmu_can_unload;
mdev->fileerr_handler = vmu_file_error;
return vmu_connect(mdev);
}
-static int remove_maple_vmu(struct device *dev)
+static void remove_maple_vmu(struct maple_device *mdev)
{
- struct maple_device *mdev = to_maple_dev(dev);
-
vmu_disconnect(mdev);
- return 0;
}
static struct maple_driver vmu_flash_driver = {
.function = MAPLE_FUNC_MEMCARD,
+ .probe = probe_maple_vmu,
+ .remove = remove_maple_vmu,
.drv = {
.name = "Dreamcast_visual_memory",
- .probe = probe_maple_vmu,
- .remove = remove_maple_vmu,
},
};
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index 35aff2e57d2c..c0715e3ace6f 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -721,6 +721,11 @@ static irqreturn_t maple_vblank_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
+/*
+ * We pass &maple_bus as dev_id for the shared interrupts because
+ * the kernel requires a unique non-NULL token for shared IRQs,
+ * even though the handlers themselves ignore it.
+ */
static int maple_set_dma_interrupt_handler(void)
{
return request_irq(HW_EVENT_MAPLE_DMA, maple_dma_interrupt,
@@ -765,9 +770,30 @@ static void maple_bus_release(struct device *dev)
/*
* maple_bus_type - core maple bus structure
*/
+static int maple_bus_probe(struct device *dev)
+{
+ struct maple_driver *maple_drv = to_maple_driver(dev->driver);
+ struct maple_device *maple_dev = to_maple_dev(dev);
+
+ if (maple_drv->probe)
+ return maple_drv->probe(maple_dev);
+ return -ENODEV;
+}
+
+static void maple_bus_remove(struct device *dev)
+{
+ struct maple_driver *maple_drv = to_maple_driver(dev->driver);
+ struct maple_device *maple_dev = to_maple_dev(dev);
+
+ if (maple_drv->remove)
+ maple_drv->remove(maple_dev);
+}
+
static const struct bus_type maple_bus_type = {
.name = "maple",
.match = maple_match_bus_driver,
+ .probe = maple_bus_probe,
+ .remove = maple_bus_remove,
};
static struct device maple_bus = {
@@ -790,7 +816,6 @@ static int __init maple_bus_init(void)
if (retval)
goto cleanup_device;
-
/* allocate memory for maple bus dma */
retval = maple_get_dma_buffer();
if (retval) {
diff --git a/include/linux/maple.h b/include/linux/maple.h
index 90c26c86e3ed..641cf3330409 100644
--- a/include/linux/maple.h
+++ b/include/linux/maple.h
@@ -80,6 +80,8 @@ struct maple_device {
struct maple_driver {
unsigned long function;
+ int (*probe)(struct maple_device *dev);
+ void (*remove)(struct maple_device *dev);
struct device_driver drv;
};
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 16/26] sh: maple: remove unused driver field from struct maple_device
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver field in struct maple_device was not really used since
commit 1795cf48b322 ("sh/maple: clean maple bus code") which removed
the reading of this field.
Now that all the writers are gone as well, remove the field from struct
maple_device.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
include/linux/maple.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/include/linux/maple.h b/include/linux/maple.h
index 22f2930251ed..90c26c86e3ed 100644
--- a/include/linux/maple.h
+++ b/include/linux/maple.h
@@ -64,7 +64,6 @@ struct maple_devinfo {
};
struct maple_device {
- struct maple_driver *driver;
struct mapleq *mq;
void (*callback) (struct mapleq * mq);
void (*fileerr_handler)(struct maple_device *mdev, void *recvbuf);
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 15/26] sh: maple: remove not needed maple_unsupported_device driver
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The maple_unsupported_device driver was used as a fallback driver
when no matching driver was found for a device, or for ports with no
devices. However, this is not needed as the driver core handles
devices without drivers.
Remove the no longer needed maple_unsupported_device driver and its
registration and update the shared interrupts (HW_EVENT_MAPLE_DMA and
HW_EVENT_VSYNC) to use &maple_bus as their dev_id instead of
&maple_unsupported_device.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/sh/maple/maple.c | 25 +++++--------------------
1 file changed, 5 insertions(+), 20 deletions(-)
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index 5585f220e495..35aff2e57d2c 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -43,7 +43,6 @@ static LIST_HEAD(maple_sentq);
/* mutex to protect queue of waiting packets */
static DEFINE_MUTEX(maple_wlist_lock);
-static struct maple_driver maple_unsupported_device;
static struct device maple_bus;
static int subdevice_map[MAPLE_PORTS];
static unsigned long *maple_sendbuf, *maple_sendptr, *maple_lastptr;
@@ -368,7 +367,6 @@ static void maple_attach_driver(struct maple_device *mdev)
if (function > 0x200) {
/* Do this silently - as not a real device */
function = 0;
- mdev->driver = &maple_unsupported_device;
dev_set_name(&mdev->dev, "%d:0.port", mdev->port);
} else {
matched =
@@ -378,7 +376,6 @@ static void maple_attach_driver(struct maple_device *mdev)
if (matched == 0) {
/* Driver does not exist yet */
dev_info(&mdev->dev, "no driver found\n");
- mdev->driver = &maple_unsupported_device;
}
dev_set_name(&mdev->dev, "%d:0%d.%lX", mdev->port,
mdev->unit, function);
@@ -727,13 +724,13 @@ static irqreturn_t maple_vblank_interrupt(int irq, void *dev_id)
static int maple_set_dma_interrupt_handler(void)
{
return request_irq(HW_EVENT_MAPLE_DMA, maple_dma_interrupt,
- IRQF_SHARED, "maple bus DMA", &maple_unsupported_device);
+ IRQF_SHARED, "maple bus DMA", &maple_bus);
}
static int maple_set_vblank_interrupt_handler(void)
{
return request_irq(HW_EVENT_VSYNC, maple_vblank_interrupt,
- IRQF_SHARED, "maple bus VBLANK", &maple_unsupported_device);
+ IRQF_SHARED, "maple bus VBLANK", &maple_bus);
}
static int maple_get_dma_buffer(void)
@@ -765,12 +762,6 @@ static void maple_bus_release(struct device *dev)
{
}
-static struct maple_driver maple_unsupported_device = {
- .drv = {
- .name = "maple_unsupported_device",
- .bus = &maple_bus_type,
- },
-};
/*
* maple_bus_type - core maple bus structure
*/
@@ -799,15 +790,12 @@ static int __init maple_bus_init(void)
if (retval)
goto cleanup_device;
- retval = driver_register(&maple_unsupported_device.drv);
- if (retval)
- goto cleanup_bus;
/* allocate memory for maple bus dma */
retval = maple_get_dma_buffer();
if (retval) {
dev_err(&maple_bus, "failed to allocate DMA buffers\n");
- goto cleanup_basic;
+ goto cleanup_bus;
}
/* set up DMA interrupt handler */
@@ -863,17 +851,14 @@ static int __init maple_bus_init(void)
kmem_cache_destroy(maple_queue_cache);
cleanup_bothirqs:
- free_irq(HW_EVENT_VSYNC, 0);
+ free_irq(HW_EVENT_VSYNC, &maple_bus);
cleanup_irq:
- free_irq(HW_EVENT_MAPLE_DMA, 0);
+ free_irq(HW_EVENT_MAPLE_DMA, &maple_bus);
cleanup_dma:
free_pages((unsigned long) maple_sendbuf, MAPLE_DMA_PAGES);
-cleanup_basic:
- driver_unregister(&maple_unsupported_device.drv);
-
cleanup_bus:
bus_unregister(&maple_bus_type);
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 14/26] mtd: maps: vmu-flash: remove unused mdev->driver assignment
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver field in struct maple_device is no longer used since
commit 1795cf48b322 ("sh/maple: clean maple bus code") which removed
the reading of this field.
Remove the unused assignment to mdev->driver and the now unused
mdrv variable in probe_maple_vmu.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/mtd/maps/vmu-flash.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/mtd/maps/vmu-flash.c b/drivers/mtd/maps/vmu-flash.c
index 10244e6731d0..8f7028ac1b56 100644
--- a/drivers/mtd/maps/vmu-flash.c
+++ b/drivers/mtd/maps/vmu-flash.c
@@ -772,11 +772,9 @@ static void vmu_file_error(struct maple_device *mdev, void *recvbuf)
static int probe_maple_vmu(struct device *dev)
{
struct maple_device *mdev = to_maple_dev(dev);
- struct maple_driver *mdrv = to_maple_driver(dev->driver);
mdev->can_unload = vmu_can_unload;
mdev->fileerr_handler = vmu_file_error;
- mdev->driver = mdrv;
return vmu_connect(mdev);
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 13/26] Input: maple_keyb - remove unused mdev->driver assignment
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver field in struct maple_device is no longer used since
commit 1795cf48b322 ("sh/maple: clean maple bus code") which removed
the reading of this field.
Remove the unused assignment to mdev->driver and the now unused
mdrv variable in probe_maple_kbd.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/keyboard/maple_keyb.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index 0c92138bcc77..e277b929a375 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -161,13 +161,11 @@ static void dc_kbd_close(struct input_dev *dev)
static int probe_maple_kbd(struct device *dev)
{
struct maple_device *mdev;
- struct maple_driver *mdrv;
int i, error;
struct dc_kbd *kbd;
struct input_dev *idev;
mdev = to_maple_dev(dev);
- mdrv = to_maple_driver(dev->driver);
kbd = kzalloc_obj(*kbd);
if (!kbd) {
@@ -206,9 +204,6 @@ static int probe_maple_kbd(struct device *dev)
error = input_register_device(idev);
if (error)
goto fail_register;
-
- mdev->driver = mdrv;
-
return error;
fail_register:
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 12/26] Input: maplecontrol - remove unused mdev->driver assignment
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver field in struct maple_device is no longer used since
commit 1795cf48b322 ("sh/maple: clean maple bus code") which removed
the reading of this field.
Remove the unused assignment to mdev->driver and the now unused
mdrv variable in probe_maple_controller.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/joystick/maplecontrol.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 79cec89ad52a..955e01bcfa0c 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -95,7 +95,6 @@ static int probe_maple_controller(struct device *dev)
};
struct maple_device *mdev = to_maple_dev(dev);
- struct maple_driver *mdrv = to_maple_driver(dev->driver);
int i, error;
struct dc_pad *pad;
struct input_dev *idev;
@@ -138,9 +137,6 @@ static int probe_maple_controller(struct device *dev)
error = input_register_device(idev);
if (error)
goto fail;
-
- mdev->driver = mdrv;
-
return 0;
fail:
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 11/26] Input: maplemouse - remove unused mdev->driver assignment
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver field in struct maple_device is no longer used since
commit 1795cf48b322 ("sh/maple: clean maple bus code") which removed
the reading of this field.
Remove the unused assignment to mdev->driver and the now unused
mdrv variable in probe_maple_mouse.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/mouse/maplemouse.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index 37f60bbd0ba4..f67e3eb5841b 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -67,7 +67,6 @@ static void dc_mouse_close(struct input_dev *dev)
static int probe_maple_mouse(struct device *dev)
{
struct maple_device *mdev = to_maple_dev(dev);
- struct maple_driver *mdrv = to_maple_driver(dev->driver);
int error;
struct input_dev *input_dev;
struct dc_mouse *mse;
@@ -102,9 +101,6 @@ static int probe_maple_mouse(struct device *dev)
error = input_register_device(input_dev);
if (error)
goto fail_register;
-
- mdev->driver = mdrv;
-
return error;
fail_register:
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 10/26] Input: maplecontrol - remove redundant drvdata resetting
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver core automatically resets driver data to NULL on probe
failures and device removal, so we can remove it from the driver.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/joystick/maplecontrol.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 9d623c9e8f22..79cec89ad52a 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -146,7 +146,6 @@ static int probe_maple_controller(struct device *dev)
fail:
input_free_device(idev);
kfree(pad);
- maple_set_drvdata(mdev, NULL);
return error;
}
@@ -156,7 +155,6 @@ static int remove_maple_controller(struct device *dev)
struct dc_pad *pad = maple_get_drvdata(mdev);
input_unregister_device(pad->dev);
- maple_set_drvdata(mdev, NULL);
kfree(pad);
return 0;
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 08/26] Input: maplemouse - remove redundant drvdata resetting
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver core automatically resets driver data to NULL on probe
failures and device removal, so we can remove it from the driver.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/mouse/maplemouse.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index 97d520e7d66d..37f60bbd0ba4 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -109,7 +109,6 @@ static int probe_maple_mouse(struct device *dev)
fail_register:
input_free_device(input_dev);
- maple_set_drvdata(mdev, NULL);
fail_nomem:
kfree(mse);
fail:
@@ -122,7 +121,6 @@ static int remove_maple_mouse(struct device *dev)
struct dc_mouse *mse = maple_get_drvdata(mdev);
input_unregister_device(mse->dev);
- maple_set_drvdata(mdev, NULL);
kfree(mse);
return 0;
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
* [PATCH 09/26] Input: maple_keyb - remove redundant drvdata resetting
From: Dmitry Torokhov @ 2026-07-04 5:57 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz
Cc: Florian Fuchs, Adrian McMenamin, linux-kernel, Dmitry Torokhov,
linux-input, linux-mtd, linux-sh
In-Reply-To: <20260703-b4-maple-cleanup-v1-0-41e424964da5@gmail.com>
The driver core automatically resets driver data to NULL on probe
failures and device removal, so we can remove it from the driver.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/keyboard/maple_keyb.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index a245774acc55..0c92138bcc77 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -212,7 +212,6 @@ static int probe_maple_kbd(struct device *dev)
return error;
fail_register:
- maple_set_drvdata(mdev, NULL);
input_free_device(idev);
fail_idev_alloc:
kfree(kbd);
@@ -230,7 +229,6 @@ static int remove_maple_kbd(struct device *dev)
input_unregister_device(kbd->dev);
kfree(kbd);
- maple_set_drvdata(mdev, NULL);
return 0;
}
--
2.55.0.rc0.799.gd6f94ed593-goog
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox