summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-08-08 13:53:16 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-09-01 00:34:36 +0200
commit1c66942023d4d056a43fd1c65592ff3ef28156e4 (patch)
treee8d538922a9cecd02ebc80995f5fa2b810e55533
parent925cc3b4910c2c3bbfa19968439290fc34be49af (diff)
power: as3722: fix as3722_ldo_enable for ldo index bigger than 7
Fix as3722_ldo_enable() functions for LDOs with an index > 7. Turns out there are actually two separate AS3722_LDO_CONTROL registers AS3722_LDO_CONTROL0 and AS3722_LDO_CONTROL1. Actually make use of both. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Stefan Agner <stefan.agner@toradex.com>
-rw-r--r--drivers/power/as3722.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/power/as3722.c b/drivers/power/as3722.c
index c09e1de06f..9f2d9d56b2 100644
--- a/drivers/power/as3722.c
+++ b/drivers/power/as3722.c
@@ -22,7 +22,8 @@
#define AS3722_LDO_VOLTAGE(n) (0x10 + (n))
#define AS3722_GPIO_SIGNAL_OUT 0x20
#define AS3722_SD_CONTROL 0x4d
-#define AS3722_LDO_CONTROL 0x4e
+#define AS3722_LDO_CONTROL0 0x4e
+#define AS3722_LDO_CONTROL1 0x4f
#define AS3722_ASIC_ID1 0x90
#define AS3722_DEVICE_ID 0x0c
#define AS3722_ASIC_ID2 0x91
@@ -111,13 +112,19 @@ int as3722_sd_set_voltage(struct udevice *pmic, unsigned int sd, u8 value)
int as3722_ldo_enable(struct udevice *pmic, unsigned int ldo)
{
+ u8 ctrl_reg = AS3722_LDO_CONTROL0;
u8 value;
int err;
if (ldo > 11)
return -EINVAL;
- err = as3722_read(pmic, AS3722_LDO_CONTROL, &value);
+ if (ldo > 7) {
+ ctrl_reg = AS3722_LDO_CONTROL1;
+ ldo -= 8;
+ }
+
+ err = as3722_read(pmic, ctrl_reg, &value);
if (err) {
error("failed to read LDO control register: %d", err);
return err;
@@ -125,7 +132,7 @@ int as3722_ldo_enable(struct udevice *pmic, unsigned int ldo)
value |= 1 << ldo;
- err = as3722_write(pmic, AS3722_LDO_CONTROL, value);
+ err = as3722_write(pmic, ctrl_reg, value);
if (err < 0) {
error("failed to write LDO control register: %d", err);
return err;