All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajeshwari Birje <rajeshwari.birje@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] pmic:max77686: add function to set voltage and mode
Date: Mon, 25 Mar 2013 15:53:48 +0530	[thread overview]
Message-ID: <CAPs=JDfw0sBrQdR6htjnkFJGn+BJoeV_2j5A8+_bhCHWz98rUA@mail.gmail.com> (raw)
In-Reply-To: <1364205527-14750-2-git-send-email-p.wilczek@samsung.com>

Hi Piotr Wilczek,

Nice idea to have a generic function.
Just have some minor comments.

On Mon, Mar 25, 2013 at 3:28 PM, Piotr Wilczek <p.wilczek@samsung.com> wrote:
> This patch add new functions to pmic max77686 to set voltage and mode.
>
> Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> CC: Minkyu Kang <mk7.kang@samsung.com>
> CC: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> ---
>  drivers/power/pmic/pmic_max77686.c |  186 ++++++++++++++++++++++++++++++++++++
>  include/power/max77686_pmic.h      |   11 +++
>  2 files changed, 197 insertions(+)
>
> diff --git a/drivers/power/pmic/pmic_max77686.c b/drivers/power/pmic/pmic_max77686.c
> index 7fcb4c0..3895bc5 100644
> --- a/drivers/power/pmic/pmic_max77686.c
> +++ b/drivers/power/pmic/pmic_max77686.c
> @@ -30,6 +30,192 @@
>
>  DECLARE_GLOBAL_DATA_PTR;
>
> +static const char max77686_buck_addr[] = {
> +       0xff, 0x10, 0x12, 0x1c, 0x26, 0x30, 0x32, 0x34, 0x36, 0x38
> +};
0xff is for?
I guess this is a array of Buck control 1 registers so we can be
specific in naming the same instead of just buck address.
Any way we have address for them defined as a enum in
include/power/max77686_pmic.h cant we use the same?
> +
> +static unsigned int max77686_ldo_volt2hex(int ldo, ulong uV)
> +{
> +       unsigned int hex = 0;
> +       const unsigned int MAX_HEX = 0x3f;
Any specific reason for this variable to be in capital..
> +
> +       switch (ldo) {
> +       case 1:
> +       case 2:
> +       case 6:
> +       case 7:
> +       case 8:
> +       case 15:
> +               hex = (uV - 800000) / 25000;
> +               break;
> +       default:
> +               hex = (uV - 800000) / 50000;
> +       }
> +
> +       if (0 <= hex && hex <= MAX_HEX)
> +               return hex;
> +
> +       printf("%s: %ld is wrong voltage value for LDO%d\n", __func__, uV, ldo);
Can we use debug instead of printf through out.
> +       return 0;
> +}
> +
> +int max77686_set_ldo_voltage(struct pmic *p, int ldo, ulong uV)
> +{
> +       unsigned int val, ret, hex, adr, mask;
> +
> +       if (ldo < 1 && 26 < ldo) {
> +               printf("%s: %d is wrong ldo number\n", __func__, ldo);
> +               return -1;
> +       }
> +
> +       adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1;
> +       mask = 0x3f;
> +       hex = max77686_ldo_volt2hex(ldo, uV);
> +
> +       if (!hex)
> +               return -1;
> +
> +       ret = pmic_reg_read(p, adr, &val);
> +       val &= ~mask;
> +       val |= hex;
> +       ret |= pmic_reg_write(p, adr, val);
> +
> +       return ret;
> +}
> +
> +int max77686_set_ldo_mode(struct pmic *p, int ldo, char opmode)
> +{
> +       unsigned int val, ret, mask, adr, mode;
> +
> +       if (ldo < 1 && 26 < ldo) {
> +               printf("%s: %d is wrong ldo number\n", __func__, ldo);
> +               return -1;
> +       }
> +
> +       adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1;
Cant we get the ldo addresses directly as they are available in the
include file.
Then top check would also go off.
> +
> +       /* mask */
> +       mask = 0xc0;
> +
> +       /* mode */
> +       if (opmode == OPMODE_OFF) {
> +               mode = 0x00;
> +       } else if (opmode == OPMODE_STANDBY) {
> +               switch (ldo) {
> +               case 2:
> +               case 6:
> +               case 7:
> +               case 8:
> +               case 10:
> +               case 11:
> +               case 12:
> +               case 14:
> +               case 15:
> +               case 16:
> +                       mode = 0x40;
> +                       break;
> +               default:
> +                       mode = 0xff;
> +               }
> +       } else if (opmode == OPMODE_LPM) {
> +               mode = 0x80;
> +       } else if (opmode == OPMODE_ON) {
> +               mode = 0xc0;
Cant we remove this hard coding.
> +       } else {
> +               mode = 0xff;
> +       }
> +
> +       if (mode == 0xff) {
> +               printf("%s: %d is not supported on LDO%d\n",
> +                       __func__, opmode, ldo);
> +               return -1;
> +       }
> +
> +       ret = pmic_reg_read(p, adr, &val);
> +       val &= ~mask;
> +       val |= mode;
> +       ret |= pmic_reg_write(p, adr, val);
> +
> +       return ret;
> +}
> +
> +int max77686_set_buck_mode(struct pmic *p, int buck, char opmode)
> +{
> +       unsigned int val, ret, mask, adr, size, mode;
> +
> +       size = sizeof(max77686_buck_addr) / sizeof(*max77686_buck_addr);
> +       if (buck >= size) {
> +               printf("%s: %d is wrong buck number\n", __func__, buck);
> +               return -1;
> +       }
> +
> +       adr = max77686_buck_addr[buck];
> +
> +       /* mask */
> +       switch (buck) {
> +       case 2:
> +       case 3:
> +       case 4:
> +               mask = 0x30;
> +               break;
> +       default:
> +               mask = 0x03;
> +       }
> +
> +       /* mode */
> +       if (opmode == OPMODE_OFF) {
> +               mode = 0x00;
> +       } else if (opmode == OPMODE_STANDBY) {
> +               switch (buck) {
> +               case 1:
> +                       mode = 0x01;
> +                       break;
> +               case 2:
> +               case 3:
> +               case 4:
> +                       mode = 0x10;
> +                       break;
> +               default:
> +                       mode = 0xff;
> +               }
> +       } else if (opmode == OPMODE_LPM) {
> +               switch (buck) {
> +               case 2:
> +               case 3:
> +               case 4:
> +                       mode = 0x20;
> +                       break;
> +               default:
> +                       mode = 0xff;
> +               }
> +       } else if (opmode == OPMODE_ON) {
> +               switch (buck) {
> +               case 2:
> +               case 3:
> +               case 4:
> +                       mode = 0x30;
> +                       break;
> +               default:
> +                       mode = 0x03;
> +               }
> +       } else {
> +               mode = 0xff;
> +       }
> +
> +       if (mode == 0xff) {
> +               printf("%s: %d is not supported on BUCK%d\n",
> +                       __func__, opmode, buck);
> +               return -1;
> +       }
> +
> +       ret = pmic_reg_read(p, adr, &val);
> +       val &= ~mask;
> +       val |= mode;
> +       ret |= pmic_reg_write(p, adr, val);
> +
> +       return ret;
> +}
> +
>  int pmic_init(unsigned char bus)
>  {
>         static const char name[] = "MAX77686_PMIC";
> diff --git a/include/power/max77686_pmic.h b/include/power/max77686_pmic.h
> index d949ace..e1874ec 100644
> --- a/include/power/max77686_pmic.h
> +++ b/include/power/max77686_pmic.h
> @@ -155,4 +155,15 @@ enum {
>         EN_LDO = (0x3 << 6),
>  };
>
> +enum {
> +       OPMODE_OFF = 0,
> +       OPMODE_STANDBY,
> +       OPMODE_LPM,
> +       OPMODE_ON,
> +};
> +
> +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_mode(struct pmic *p, int buck, char opmode);
> +
>  #endif /* __MAX77686_PMIC_H_ */
> --
> 1.7.9.5
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

-- 
Regards,
Rajeshwari Shinde

  reply	other threads:[~2013-03-25 10:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-25  9:58 [U-Boot] [PATCH 0/2] Introduce Samsung's new board Trats2 Piotr Wilczek
2013-03-25  9:58 ` [U-Boot] [PATCH 1/2] pmic:max77686: add function to set voltage and mode Piotr Wilczek
2013-03-25 10:23   ` Rajeshwari Birje [this message]
2013-03-25 12:53     ` Piotr Wilczek
2013-03-25  9:58 ` [U-Boot] [PATCH 2/2] samsung: trats2: add support for new board Trats2 Piotr Wilczek
2013-04-02  5:00   ` Minkyu Kang
2013-04-02  8:51     ` Piotr Wilczek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAPs=JDfw0sBrQdR6htjnkFJGn+BJoeV_2j5A8+_bhCHWz98rUA@mail.gmail.com' \
    --to=rajeshwari.birje@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.