GPIO expander user space access(ie. pca9552)

Joel Stanley joel at
Tue Jan 31 11:24:00 AEDT 2017

On Tue, Jan 24, 2017 at 2:28 AM, Matt Barth <msbarth at> wrote:
> Is there a defined process/interface to access GPIO expanders from user
> space to be able to determine when the state changes? Possibly polling a fd
> or getting notified on the state change?

>From the GPIO documentation:

 "value" ... reads as either 0 (low) or 1 (high). If the GPIO
 is configured as an output, this value may be written;
 any nonzero value is treated as high.

 If the pin can be configured as interrupt-generating interrupt
 and if it has been configured to generate interrupts (see the
 description of "edge"), you can poll(2) on that file and
 poll(2) will return whenever the interrupt was triggered. If
 you use poll(2), set the events POLLPRI and POLLERR. If you
 use select(2), set the file descriptor in exceptfds. After
 poll(2) returns, either lseek(2) to the beginning of the sysfs
 file and read the new value or close the file and re-open it
 to read the value.

Is this what you are after?

What action do you need to take when the interrupt fires?



> Previously this was an i2c device that was accessed over i2c and the set of
> interested bits were simply read into the application. An example is the use
> of a pca9552 for presence detection on chassis fans.

More information about the openbmc mailing list