Hi Przemyslaw, On 10 July 2015 at 05:53, Przemyslaw Marczak <p.marc...@samsung.com> wrote: > > Hello Simon, > > On 07/03/2015 02:16 AM, Simon Glass wrote: >> >> Add support for all BUCK regulators, now that the correct register is >> accessed for each. >> >> Signed-off-by: Simon Glass <s...@chromium.org> >> >> --- >> >> drivers/power/regulator/max77686.c | 10 +++------- >> 1 file changed, 3 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/power/regulator/max77686.c >> b/drivers/power/regulator/max77686.c >> index 21173fc..427b717 100644 >> --- a/drivers/power/regulator/max77686.c >> +++ b/drivers/power/regulator/max77686.c >> @@ -81,11 +81,7 @@ static int max77686_buck_volt2hex(int buck, int uV) >> /* hex = (uV - 600000) / 12500; */ >> hex = (uV - MAX77686_BUCK_UV_LMIN) / MAX77686_BUCK_UV_LSTEP; >> hex_max = MAX77686_BUCK234_VOLT_MAX_HEX; >> - /** >> - * Those use voltage scaller - temporary not implemented >> - * so return just 0 >> - */ >> - return -ENOSYS; >> + break; >> default: >> /* hex = (uV - 750000) / 50000; */ >> hex = (uV - MAX77686_BUCK_UV_HMIN) / MAX77686_BUCK_UV_HSTEP; >> @@ -379,11 +375,11 @@ static int max77686_buck_val(struct udevice *dev, int >> op, int *uV) >> case 2: >> case 3: >> case 4: >> - /* Those use voltage scallers - will support in the future */ >> mask = MAX77686_BUCK234_VOLT_MASK; >> - return -ENOSYS; >> + break; >> default: >> mask = MAX77686_BUCK_VOLT_MASK; >> + break; >> } >> >> ret = pmic_read(dev->parent, adr, &val, 1); >> > > The bucks 2,3,4 can work in DVS mode, which allows select one of eight DVS > regulators for each output. The default selection at power-on is DVS1 for > each output, and it corresponds to the currently defined output register > addresses. > > The selection can be done by six PMIC's GPIOs: > - DVS1/2/3 - output selection: 0x0=DVS1...0x7=DVS8 > - SELB2/3/4 - mode switch: 'DVS' or 'no DVS' > > Reading or writing the default registers is proper only in case: > - for the default PMIC's power-up setting - may conflict with bl1/bl2 > - when DVS1/2/3 GPIOs are set to LOW - DVS1 selected > - SELB2/3/4 - are set to LOW - no DVS mode > > The documentation is poor, but if I good understand, the SELB is used as > "latch" for the DVS selection. > > So the driver, could be unreliable for these outputs if it doesn't check the > PMIC's GPIOs. > > It's quite confusing, since the PMIC, doesn't provide registers to check > those GPIOs. It should be checked by the driver and can be delivered by > device-tree. > > This is also confusing, since it depends on board design, because the PMIC's > GPIOs can be connected to the SoCs GPIOs and also just pulled to POWER/GND > signals. > > The documentation says, that those GPIOs should be set accordingly, and for > example Odroid U3 has connected the SELB to VDD_IO(LDO3) power line, so > actually this state can not be changed or can be changed by accident when > changing the VDD_IO - which is HIGH at PMIC's power-up. > > The switching is impossible, since the VDD_IO line is shared with few other > peripherals. > > In this case, maybe you should add config to allow use of the BUCK234 only > for case in which DVS mode is disabled by board design (SELB2/3/4 set to > LOW). This may also work, when the GPIOs of Exynos stays in the reset state. > > Then, using the default 'buck_out' registers: 0x14, 0x1e, 0x28 is reasonable.
I don't see anything in the binding. I have added a comment in the driver to explain this limitation. However I haven't actually seen hardware that makes use of it. Are you saying that Odroid U3 does use it, or just that it has the lines connected up incorrectly? > > Did you tried measure the output voltage, after its change? No I have not measured it, only verified that the code looks correct. If you are able to do that I think it would be a good test. > > Regards, > -- > Przemyslaw Marczak > Samsung R&D Institute Poland > Samsung Electronics > p.marc...@samsung.com Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot