allwinner: Return the PMIC to I2C mode after use
This gives the rich OS the flexibility to choose between I2C and RSB communication. Since a runtime address can only be assigned once after entering RSB mode, it also lets the rich OS choose any runtime address. Signed-off-by: Samuel Holland <samuel@sholland.org> Change-Id: Id49c124c5e925985fc31c0ba38c7fb6c941aafa8
This commit is contained in:
parent
d6fdb52b9c
commit
4470298333
|
@ -9,6 +9,10 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#define AXP20X_MODE_REG 0x3e
|
||||
#define AXP20X_MODE_I2C 0x00
|
||||
#define AXP20X_MODE_RSB 0x7c
|
||||
|
||||
#define NA 0xff
|
||||
|
||||
enum {
|
||||
|
|
|
@ -97,11 +97,8 @@ static int rsb_init(void)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Initiate an I2C transaction to write 0x7c into register 0x3e,
|
||||
* switching the PMIC to RSB mode.
|
||||
*/
|
||||
ret = rsb_set_device_mode(0x7c3e00);
|
||||
/* Initiate an I2C transaction to switch the PMIC to RSB mode. */
|
||||
ret = rsb_set_device_mode(AXP20X_MODE_RSB << 16 | AXP20X_MODE_REG << 8);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -151,6 +148,11 @@ int sunxi_pmic_setup(uint16_t socid, const void *fdt)
|
|||
pmic = AXP803_RSB;
|
||||
axp_setup_regulators(fdt);
|
||||
|
||||
/* Switch the PMIC back to I2C mode. */
|
||||
ret = axp_write(AXP20X_MODE_REG, AXP20X_MODE_I2C);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
break;
|
||||
default:
|
||||
return -ENODEV;
|
||||
|
|
Loading…
Reference in New Issue