On Mon, May 25, 2020 at 02:17:41PM +0200, Linus Walleij wrote: > On Mon, May 25, 2020 at 4:22 AM Kent Gibson <warthog618@xxxxxxxxx> wrote: > > > You mention timers for the gpio pins that cannot provide debounce, > > so I'm confused. Could you clarify which strategy you have in mind? > > My idea is that the callback gpiod_set_debounce() for in-kernel consumers > should more or less always return success. Either the hardware does > the debounce, or gpiolib sets up a timer. > > > I've also had a quick look at the possibility of providing the software > > debounce for in-kernel consumers. > > That is where I think it should start. > > > Are you anticipating new API for > > that? e.g. allowing consumers to request gpio events? Cos, gpio_keys > > grabs the irq itself - and that would bypass the software debouncer, > > or even conflict with it. > > It may be hard or impossible. > > I suppose gpiolib would have to steal or intercept the interrupt > by using e.g. IRQF_SHARED and then just return IRQ_HANDLED > on the first IRQ so the underlying irq handler does not get called. > And how would gpiolib ensure that it was first in the chain? > After the timer times out it needs to retrigger the IRQ. > > So the consuming driver would se a "debounced and ready" > IRQ so when it gets this IRQ it knows for sure there is > no bounciness on it because gpiolib already took care > of that. > > The above is in no way trivial, but it follows the design pattern > of "narrow and deep" APIs. > Totally agree with the concept - just trying to work out how to implement it seemlessly given the existing API and usage, and given my limited knowledge of the kernel internals. > Failure is an option! Sorry if I push too complex ideas. > I'm not as concerned about complexity as I am about fragility. I don't see any problem adding debounce for gpiolib-cdev. Adding a more complete solution to gpiolib itself is certainly non-trivial, if it is possible at all. The path I'll probably be taking is adding a debouncer to gpiolib-cdev, so at least we have a solution for userspace, then take a longer look at the more general solution. Cheers, Kent.