On Tue, Nov 05, 2024 at 02:03:16PM +0100, Markus Burri wrote: > The delay is retrieved from a device-tree property, so the duration is > variable. fsleep guesses the best delay function based on duration. activate_col() may be called in atomic context, and if fsleep() turns into usleep_range() or msleep() we are going to have a bad time. We should either stop using request_any_context_irq() or figure out if interrupt handler can sleep or not and adjust behavior properly. > > Link: https://www.kernel.org/doc/html/latest/timers/timers-howto.html > > Signed-off-by: Markus Burri <markus.burri@xxxxxx> > --- > drivers/input/keyboard/matrix_keypad.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c > index 3c38bae..9eb6808 100644 > --- a/drivers/input/keyboard/matrix_keypad.c > +++ b/drivers/input/keyboard/matrix_keypad.c > @@ -69,7 +69,7 @@ static void activate_col(struct matrix_keypad *keypad, int col, bool on) > __activate_col(keypad, col, on); > > if (on && keypad->col_scan_delay_us) > - udelay(keypad->col_scan_delay_us); > + fsleep(keypad->col_scan_delay_us); > } > > static void activate_all_cols(struct matrix_keypad *keypad, bool on) > -- > 2.39.5 > Thanks. -- Dmitry