* [PATCH] Input: charlieplex_keypad - check gpiod_direction_output() return value
@ 2026-07-23 2:29 kr494167
2026-07-23 2:38 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: kr494167 @ 2026-07-23 2:29 UTC (permalink / raw)
To: hvilleneuve, dmitry.torokhov
Cc: andriy.shevchenko, linux-input, linux-kernel,
Surendra Singh Chouhan
From: Surendra Singh Chouhan <kr494167@gmail.com>
charlieplex_keypad_scan_line() currently ignores the return value of
gpiod_direction_output() when setting the active output line for scanning.
If setting the GPIO direction fails (e.g. on I2C/SPI GPIO expanders or
hardware errors), the function continues to sleep and read input values
from an improperly configured GPIO line.
Fix this by capturing the return value of gpiod_direction_output() and
returning the error code immediately if it fails.
Fixes: 2ca45e57ea02 ("Input: charlieplex_keypad - add GPIO charlieplex keypad")
Signed-off-by: Surendra Singh Chouhan <kr494167@gmail.com>
---
drivers/input/keyboard/charlieplex_keypad.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/input/keyboard/charlieplex_keypad.c b/drivers/input/keyboard/charlieplex_keypad.c
index d222b622c820..d46a2298e6da 100644
--- a/drivers/input/keyboard/charlieplex_keypad.c
+++ b/drivers/input/keyboard/charlieplex_keypad.c
@@ -77,7 +77,9 @@ static int charlieplex_keypad_scan_line(struct charlieplex_keypad *keypad,
int err;
/* Activate only one line as output at a time. */
- gpiod_direction_output(line_gpios->desc[oline], 1);
+ err = gpiod_direction_output(line_gpios->desc[oline], 1);
+ if (err)
+ return err;
if (keypad->settling_time_us)
fsleep(keypad->settling_time_us);
--
2.55.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] Input: charlieplex_keypad - check gpiod_direction_output() return value
2026-07-23 2:29 [PATCH] Input: charlieplex_keypad - check gpiod_direction_output() return value kr494167
@ 2026-07-23 2:38 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-07-23 2:38 UTC (permalink / raw)
To: kr494167; +Cc: linux-input, dmitry.torokhov
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The return value of `gpiod_direction_input()` is ignored, which can leave the line configured as an output driving HIGH upon hardware failure, breaking the matrix scanning logic.
--
--- Patch [1]: [PATCH] Input: charlieplex_keypad - check gpiod_direction_output() return value ---
commit dcc381a1c321f8eedf04b92519f6edd1db4050eb
Author: Surendra Singh Chouhan <kr494167@gmail.com>
Input: charlieplex_keypad - check gpiod_direction_output() return value
This commit updates charlieplex_keypad_scan_line() to capture and return
the error code if setting the active output line fails. This prevents
the keypad from continuing to sleep and read inputs from an improperly
configured GPIO.
> diff --git a/drivers/input/keyboard/charlieplex_keypad.c b/drivers/input/keyboard/charlieplex_keypad.c
> --- a/drivers/input/keyboard/charlieplex_keypad.c
> +++ b/drivers/input/keyboard/charlieplex_keypad.c
> @@ -77,7 +77,9 @@ static int charlieplex_keypad_scan_line(struct charlieplex_keypad *keypad,
> int err;
>
> /* Activate only one line as output at a time. */
> - gpiod_direction_output(line_gpios->desc[oline], 1);
> + err = gpiod_direction_output(line_gpios->desc[oline], 1);
> + if (err)
> + return err;
[Severity: High]
This is a pre-existing issue, but since this patch explicitly adds error
checking for gpiod_direction_output(), should we also check the return value
when restoring the line to an input state?
A few lines below in charlieplex_keypad_scan_line(), the same pattern exists
when restoring the line direction:
err = gpiod_get_array_value_cansleep(line_gpios->ndescs, ...);
gpiod_direction_input(line_gpios->desc[oline]);
if (err)
return err;
If gpiod_direction_input() fails here due to a temporary hardware or bus error
(like on an i2c or spi GPIO expander), does this leave the line configured
as an output driving high?
On subsequent scans, this could cause multiple lines to act as outputs
simultaneously and break the matrix scanning logic entirely.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260723022943.9337-1-kr494167@gmail.com?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-23 2:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-23 2:29 [PATCH] Input: charlieplex_keypad - check gpiod_direction_output() return value kr494167
2026-07-23 2:38 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox