Message ID | Y+kuD+/v3+N1vwxR@debian-qemu.internal.flying-snail.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] pinctrl: sunxi: set minimal debounce on input-debounce 0 | expand |
Hi, On Sun, Feb 12, 2023 at 07:21:03PM +0100, Andreas Feldner wrote: > 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@flying-snail.de> Like I said in the other thread, I don't think that deviating from the generic property semantics is a good thing. Maxime
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;
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@flying-snail.de> --- 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(-)