Hi.

On 10/21/2014 02:52 AM, Suriyan Ramasami wrote:
> Allow to set the bucket voltage for the max77686.
> This will be used to reset the SMC LAN9730 ethernet on the odroids.
> 
> Signed-off-by: Suriyan Ramasami <suriya...@gmail.com>
> ---
>  drivers/power/pmic/pmic_max77686.c | 48 
> +++++++++++++++++++++++++++++++++++++-
>  include/power/max77686_pmic.h      |  3 +++
>  2 files changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/power/pmic/pmic_max77686.c 
> b/drivers/power/pmic/pmic_max77686.c
> index df1fd91..1aeadb4 100644
> --- a/drivers/power/pmic/pmic_max77686.c
> +++ b/drivers/power/pmic/pmic_max77686.c
> @@ -42,6 +42,25 @@ static unsigned int max77686_ldo_volt2hex(int ldo, ulong 
> uV)
>       return 0;
>  }
>  
> +static unsigned int max77686_buck_volt2hex(int buck, ulong uV)
> +{
> +     unsigned int hex = 0;
> +
> +     if (buck < 5 || buck > 9) {
> +             debug("%s: buck %d is not supported\n", __func__, buck);
> +             return 0;
> +     }
> +
> +     hex = (uV - 750000) / 50000;
> +
> +     if (hex >= 0 && hex <= MAX77686_BUCK_VOLT_MAX_HEX)
> +             return hex;
> +
> +     debug("%s: %ld is wrong voltage value for BUCK%d\n",
> +           __func__, uV, buck);
> +     return MAX77686_BUCK_VOLT_MAX_HEX + 1;
> +}
> +
>  int max77686_set_ldo_voltage(struct pmic *p, int ldo, ulong uV)
>  {
>       unsigned int val, ret, hex, adr;
> @@ -68,6 +87,33 @@ int max77686_set_ldo_voltage(struct pmic *p, int ldo, 
> ulong uV)
>       return ret;
>  }
>  
> +int max77686_set_buck_voltage(struct pmic *p, int buck, ulong uV)
> +{
> +     unsigned int val, ret, hex, adr;
> +
> +     if (buck < 5 && buck > 9) {
> +             printf("%s: %d is an unsupported bucket number\n",
> +                    __func__, buck);
> +             return -1;

How about using error number instead of "-1"?

> +     }
> +
> +     adr = max77686_buck_addr[buck] + 1;
> +     hex = max77686_buck_volt2hex(buck, uV);
> +
> +     if (hex == MAX77686_BUCK_VOLT_MAX_HEX + 1)
> +             return -1;

Ditto.

> +
> +     ret = pmic_reg_read(p, adr, &val);
> +     if (ret)
> +             return ret;
> +
> +     val &= ~MAX77686_BUCK_VOLT_MASK;
> +     val |= hex;
> +     ret |= pmic_reg_write(p, adr, val);

ret |= pmic_reg_write(p, addr, val | hex); ?

Best Regards,
Jaehoon Chung
> +
> +     return ret;
> +}
> +
>  int max77686_set_ldo_mode(struct pmic *p, int ldo, char opmode)
>  {
>       unsigned int val, ret, adr, mode;
> @@ -157,7 +203,7 @@ int max77686_set_buck_mode(struct pmic *p, int buck, char 
> opmode)
>       /* mode */
>       switch (opmode) {
>       case OPMODE_OFF:
> -             mode = MAX77686_BUCK_MODE_OFF;
> +             mode = MAX77686_BUCK_MODE_OFF << mode_shift;
>               break;
>       case OPMODE_STANDBY:
>               switch (buck) {
> diff --git a/include/power/max77686_pmic.h b/include/power/max77686_pmic.h
> index c2a772a..b0e4255 100644
> --- a/include/power/max77686_pmic.h
> +++ b/include/power/max77686_pmic.h
> @@ -150,6 +150,7 @@ enum {
>  
>  int max77686_set_ldo_voltage(struct pmic *p, int ldo, ulong uV);
>  int max77686_set_ldo_mode(struct pmic *p, int ldo, char opmode);
> +int max77686_set_buck_voltage(struct pmic *p, int buck, ulong uV);
>  int max77686_set_buck_mode(struct pmic *p, int buck, char opmode);
>  
>  #define MAX77686_LDO_VOLT_MAX_HEX    0x3f
> @@ -159,6 +160,8 @@ int max77686_set_buck_mode(struct pmic *p, int buck, char 
> opmode);
>  #define MAX77686_LDO_MODE_STANDBY    (0x01 << 0x06)
>  #define MAX77686_LDO_MODE_LPM                (0x02 << 0x06)
>  #define MAX77686_LDO_MODE_ON         (0x03 << 0x06)
> +#define MAX77686_BUCK_VOLT_MAX_HEX   0x3f
> +#define MAX77686_BUCK_VOLT_MASK              0x3f
>  #define MAX77686_BUCK_MODE_MASK              0x03
>  #define MAX77686_BUCK_MODE_SHIFT_1   0x00
>  #define MAX77686_BUCK_MODE_SHIFT_2   0x04
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to