
31 Mar
2020
31 Mar
'20
9:09 p.m.
On Tue, Jan 28, 2020 at 12:04:34PM +0000, Rasmus Villemoes wrote:
The driver correctly handles reading back the value of an output gpio by reading from the shadow register for output, and from gpdat for inputs.
Unfortunately, when setting the value of some gpio, we do a RMW cycle on the gpdat register without taking the shadow register into account, thus accidentally setting other output gpios (at least those whose value cannot be read back) to 0 at the same time.
When changing a gpio from input to output, we still need to make sure it initially has the requested value. So, the procedure is
- update the shadow register
- compute the new gpdir register
- write the bitwise and of the shadow and new gpdir register to gpdat
- write the new gpdir register
Signed-off-by: Rasmus Villemoes rasmus.villemoes@prevas.dk
Applied to u-boot/master, thanks!
--
Tom