From 1c66942023d4d056a43fd1c65592ff3ef28156e4 Mon Sep 17 00:00:00 2001 From: Marcel Ziswiler Date: Tue, 8 Aug 2017 13:53:16 +0200 Subject: 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 Acked-by: Stefan Agner --- drivers/power/as3722.c | 13 ++++++++++--- 1 file 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; -- cgit v1.2.3