Revert "gpiolib: Split GPIO flags parsing and GPIO configuration"
authorJohan Hovold <johan@kernel.org>
Sun, 3 Jul 2016 16:32:05 +0000 (18:32 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 4 Jul 2016 14:51:29 +0000 (16:51 +0200)
commit85b03b3033fd4eba82665b3b9902c095a08cc52f
tree6903637e3ff3c9d821dd3718d12c2321df9c25bf
parent87041a58d3b19455d39baed2a5e5bb43b58fb915
Revert "gpiolib: Split GPIO flags parsing and GPIO configuration"

This reverts commit 923b93e451db876d1479d3e4458fce14fec31d1c.

Make sure consumers do not overwrite gpio flags for pins that have
already been claimed.

While adding support for gpio drivers to refuse a request using
unsupported flags, the order of when the requested flag was checked and
the new flags were applied was reversed to that consumers could
overwrite flags for already requested gpios.

This not only affects device-tree setups where two drivers could request
the same gpio using conflicting configurations, but also allowed user
space to clear gpio flags for already claimed pins simply by attempting
to export them through the sysfs interface. By for example clearing the
FLAG_ACTIVE_LOW flag this way, user space could effectively change the
polarity of a signal.

Reverting this change obviously prevents gpio drivers from doing sanity
checks on the flags in their request callbacks. Fortunately only one
recently added driver (gpio-tps65218 in v4.6) appears to do this, and a
follow up patch could restore this functionality through a different
interface.

Cc: stable <stable@vger.kernel.org> # 4.4
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib-legacy.c
drivers/gpio/gpiolib.c