sunxi-h3-h5 based boards have no support for switching off IRQ debouncing filter. This would be the expected behaviour of value 0 for the general pinctl parameter input-debounce. The current driver implementation ignores value 0 for input-debounce, leaving the chip's default. This default, however, is not minimal, but equivalent to value 31 (microseconds). This patch does not ignore value 0 but instead makes sure the corresponding IRQ debounce filter is set to the shortest time selectable, i. e. the fast oscillator with a divider of 1 == (2 ^ 0). Fixes: 7c926492d38a ("pinctrl: sunxi: Add support for interrupt debouncing") Signed-off-by: Andreas Feldner <pelzi@xxxxxxxxxxxxxxx> --- Changes in v2: - Posted as separate mail thread - Made sure tabs are kept - Excluded patch to devicetree drivers/pinctrl/sunxi/pinctrl-sunxi.c | 40 +++++++++++++++------------ 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c index f35179eceb4e..6798c8f4067e 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c +++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c @@ -1444,29 +1444,35 @@ static int sunxi_pinctrl_setup_debounce(struct sunxi_pinctrl *pctl, if (ret) return ret; - if (!debounce) - continue; - - debounce_freq = DIV_ROUND_CLOSEST(USEC_PER_SEC, debounce); - losc_div = sunxi_pinctrl_get_debounce_div(losc, - debounce_freq, - &losc_diff); - - hosc_div = sunxi_pinctrl_get_debounce_div(hosc, - debounce_freq, - &hosc_diff); - - if (hosc_diff < losc_diff) { - div = hosc_div; - src = 1; + if (debounce) { + debounce_freq = DIV_ROUND_CLOSEST(USEC_PER_SEC, debounce); + losc_div = sunxi_pinctrl_get_debounce_div(losc, + debounce_freq, + &losc_diff); + + hosc_div = sunxi_pinctrl_get_debounce_div(hosc, + debounce_freq, + &hosc_diff); + + if (hosc_diff < losc_diff) { + div = hosc_div; + src = 1; + } else { + div = losc_div; + src = 0; + } } else { - div = losc_div; - src = 0; + /* lowest time as best approximation to "off" */ + div = 0; + src = 1; } writel(src | div << 4, pctl->membase + sunxi_irq_debounce_reg_from_bank(pctl->desc, i)); + + pr_info("Debounce filter for IRQ bank %d configured to %d us (reg %x)\n", + i, debounce, src | div << 4); } return 0; -- 2.30.2