allwinner: power: fix DRIVEVBUS pin setup
authorAndre Przywara <andre.przywara@arm.com>
Mon, 5 Nov 2018 00:52:06 +0000 (00:52 +0000)
committerAndre Przywara <andre.przywara@arm.com>
Wed, 14 Nov 2018 09:50:06 +0000 (09:50 +0000)
commitd93eb4467a0ca09d359f242b19f584a58e4e805b
tree4e6861cce2cd40c686888f26e687f7ac80de6841
parent19a7507a9e790841efe904647a2464425dcf5bb3
allwinner: power: fix DRIVEVBUS pin setup

The DRIVEVBUS pin setup was broken in two ways:
- To configure this pin as an output pin, one has to *clear* the bit in
  register 0x8f. It is 0 by default, but rebooting from Linux might have
  left this bit set.
- Doing this just configures the pin as an output pin, but doesn't
  actually drive power to it. This is done via bit 2 in register 0x30.

Fix the routine to both properly configure the pin and drive power to
it. Add an axp_clrsetbits() helper on the way.

Now this isn't really perfect, still:
We only need to setup the PMIC power rails that are needed for U-Boot.
DRIVEVBUS typically controls the VBUS voltage for the host function of
an USB-OTG port, something we typically don't want in U-Boot (fastboot,
using the USB *device* functionality, is much more common). The
BananaPi-M64 uses the regulator in this way, but the Remix Mini PC
actually controls the power of both its USB ports via this line.

Technically we should differentiate here: if DRIVEVBUS controls a
microUSB-B socket, the power should stay off, any host-type A sockets
should be supplied, though.
For now just always enable the power, that shouldn't really hurt the
USB-OTG functionality anyway.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
plat/allwinner/sun50i_a64/sunxi_power.c