Re: Interrupts on GPIO (on RPI, specifically, but also in general)
Manuel Bouyer <[email protected]> Thu, 19 Apr 2018 09:31:00 +0200
| Newsgroups | gmane.os.netbsd.devel.embedded |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Apr 18, 2018 at 10:28:34PM -0700, Jason Thorpe wrote: > There seems to be support for interrupts on GPIO, but no in-tree examples of how it?s used, programming patterns, etc. > > Anyone have any solid examples? > > Context: I have a device I?m building that is going to have some buttons, a switch or two, and a rotary encoder for input. Path of least resistance is to use an AVR and an existing software library for said AVR to emulate a USB keyboard (the ?throw more hardware at the problem? approach). But I have enough GPIO pins on the Raspberry Pi for the task and I loathe to make the PCB more complicated than it has to be, so I?m considering writing an interrupt-driven ?gpiokbd? driver that would allow me to map GPIO input pin interrupts to a configurable set of ?wskbd? input events. I could poll, but I *really* don?t want too, and if I?m forced down that path, then I?d almost rather use the AVR solution. > > I found Manuel Bouyer?s chart plotter driver that uses this on Github, but it seems to have some FDT conditionals, as well? Yes. I don't know specifiacally for RPis (I don't use them), but for sunxi the GPIO driver is declared as an interrupt controller too. With a reference to a GPIO in the device tree a driver can use fdtbus_intr_str()/fdtbus_intr_establish(). This interface is MI. I think this is the way to go for your driver (and writing a FDT-based driver isn't hard :) BTW we have a gpiobutton driver, but AFAIK it uses polling. -- Manuel Bouyer <[email protected]> NetBSD: 26 ans d'experience feront toujours la difference --