gpio: ts4900: Do not set DAT and OE together
authorMark Featherston <mark@embeddedTS.com>
Thu, 10 Mar 2022 01:16:16 +0000 (17:16 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Mar 2022 12:20:26 +0000 (13:20 +0100)
commit33e7f38e6e9165fc2f90ec782e9b7f64a8f5c50c
tree3a2b6d0dbfab73bf489bcc74061b1e946b1ec397
parentb1db33d4e54bc35d8db96ce143ea0ef92e23d58e
gpio: ts4900: Do not set DAT and OE together

[ Upstream commit 03fe003547975680fdb9ff5ab0e41cb68276c4f2 ]

This works around an issue with the hardware where both OE and
DAT are exposed in the same register. If both are updated
simultaneously, the harware makes no guarantees that OE or DAT
will actually change in any given order and may result in a
glitch of a few ns on a GPIO pin when changing direction and value
in a single write.

Setting direction to input now only affects OE bit. Setting
direction to output updates DAT first, then OE.

Fixes: 9c6686322d74 ("gpio: add Technologic I2C-FPGA gpio support")
Signed-off-by: Mark Featherston <mark@embeddedTS.com>
Signed-off-by: Kris Bahnsen <kris@embeddedTS.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpio/gpio-ts4900.c