pinctrl: sunxi: Deal with per-bank regulators
authorMaxime Ripard <maxime.ripard@bootlin.com>
Thu, 6 Dec 2018 14:02:03 +0000 (15:02 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 14 Dec 2018 15:07:59 +0000 (16:07 +0100)
commit9a2a566adb00a44bfb9243462a8d5b2330afc756
treeced564e86a433ff355b0e17c3fd21fc5987661e1
parenteaeee373c97c638769c1e3546b32f46d30df1dbe
pinctrl: sunxi: Deal with per-bank regulators

The Allwinner SoCs have on most of their GPIO banks a regulator input.

This issue was mainly ignored so far because either the regulator was a
static regulator that would be providing power anyway, or the bank was used
for a feature unsupported so far (CSI). For the odd cases, enabling it in
the bootloader was the preferred option.

However, now that we are starting to support those features, and that we
can't really rely on the bootloader for this, we need to model those
regulators as such in the DT.

This is slightly more complicated than what it looks like, since some
regulators will be tied to the PMIC, and in order to have access to the
PMIC bus, you need to mux its pins, which will need the pinctrl driver,
that needs the regulator driver to be registered. And this is how you get a
circular dependency.

In practice however, the hardware cannot fall into this case since it would
result in a completely unusable bus. In order to avoid that circular
dependency, we can thus get and enable the regulators at pin_request time.
We'll then need to account for the references of all the pins of a
particular branch to know when to put the reference, but it works pretty
nicely once implemented.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c
drivers/pinctrl/sunxi/pinctrl-sunxi.h