HomeFreeBSD

Make reading imx6 gpio pins work correctly whether the pin is in open-drain

Description

Make reading imx6 gpio pins work correctly whether the pin is in open-drain
mode or not. An earlier attempt to make this work was done in r320456, by
always reading the pad status register (PSR) instead of the data register.
But it turns out the values in PSR only reflect the electrical level of an
output pin if the pad is configured with the SION (Set Input On) bit in the
pinmux config, and most output gpio pads are not configured that way.

So now a gpio read is done by returning the value from the data register,
which works right whether the pin is configured for input or output, unless
the pin has been set for OPENDRAIN mode, in which case the PSR is read
instead. For this to work, the pin must also be configured with SION turned
on in the fdt pinmux data, which is a reasonable thing to require for the
unusual case of reading an open-drain output pin.

Details

Provenance
ianAuthored on
Parents
rS333254: iflib: fix invalid free during queue allocation failure
Branches
Unknown
Tags
Unknown