Message ID | 1358245546-10035-3-git-send-email-rajeshwari.s@samsung.com |
---|---|
State | New |
Headers | show |
On Tue, Jan 15, 2013 at 2:25 AM, Rajeshwari Shinde <rajeshwari.s@samsung.com> wrote: > This patch adds required pmic voltage settings for SMDK5250. > > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> (But see a comment nit below) > --- > board/samsung/smdk5250/smdk5250.c | 113 ++++++++++++++++++++++++++++++++++++- > include/power/max77686_pmic.h | 30 ++++++++++ > 2 files changed, 141 insertions(+), 2 deletions(-) > > diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c > index 7a5f132..12cc03e 100644 > --- a/board/samsung/smdk5250/smdk5250.c > +++ b/board/samsung/smdk5250/smdk5250.c > @@ -23,6 +23,7 @@ > #include <common.h> > #include <fdtdec.h> > #include <asm/io.h> > +#include <errno.h> > #include <i2c.h> > #include <lcd.h> > #include <netdev.h> > @@ -35,6 +36,7 @@ > #include <asm/arch/sromc.h> > #include <asm/arch/dp_info.h> > #include <power/pmic.h> > +#include <power/max77686_pmic.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -80,12 +82,119 @@ int dram_init(void) > } > > #if defined(CONFIG_POWER) > +static int pmic_reg_update(struct pmic *p, int reg, uint regval) > +{ > + u32 val; > + int ret = 0; > + > + ret = pmic_reg_read(p, reg, &val); > + if (ret) { > + debug("%s: PMIC %d register read failed\n", __func__, reg); > + return -1; > + } > + val |= regval; > + ret = pmic_reg_write(p, reg, val); > + if (ret) { > + debug("%s: PMIC %d register write failed\n", __func__, reg); > + return -1; > + } > + return 0; > +} > + > int power_init_board(void) > { > + struct pmic *p; > + > + power_ps_hold_setup(); > + > + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); > + > if (pmic_init(I2C_PMIC)) > return -1; > - else > - return 0; > + > + p = pmic_get("MAX77686_PMIC"); > + if (!p) > + return -ENODEV; > + > + if (pmic_probe(p)) > + return -1; > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_32KHZ, MAX77686_32KHCP_EN)) > + return -1; > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_BBAT, > + MAX77686_BBCHOSTEN | MAX77686_BBCVS_3_5V)) > + return -1; > + > + /* VDD_MIF */ > + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK1OUT, > + MAX77686_BUCK1OUT_1V)) { > + debug("%s: PMIC %d register write failed\n", __func__, > + MAX77686_REG_PMIC_BUCK1OUT); > + return -1; > + } > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK1CRTL, > + MAX77686_BUCK1CTRL_EN)) > + return -1; > + > + /* VDD_ARM */ > + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK2DVS1, > + MAX77686_BUCK2DVS1_1_3V)) { > + debug("%s: PMIC %d register write failed\n", __func__, > + MAX77686_REG_PMIC_BUCK2DVS1); > + return -1; > + } > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK2CTRL1, > + MAX77686_BUCK2CTRL_ON)) > + return -1; > + > + /* VDD_INT */ > + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK3DVS1, > + MAX77686_BUCK3DVS1_1_0125V)) { > + debug("%s: PMIC %d register write failed\n", __func__, > + MAX77686_REG_PMIC_BUCK3DVS1); > + return -1; > + } > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK3CTRL, > + MAX77686_BUCK3CTRL_ON)) > + return -1; > + > + /* VDD_G3D */ > + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK4DVS1, > + MAX77686_BUCK4DVS1_1_2V)) { > + debug("%s: PMIC %d register write failed\n", __func__, > + MAX77686_REG_PMIC_BUCK4DVS1); > + return -1; > + } > + > + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK4CTRL1, > + MAX77686_BUCK3CTRL_ON)) > + return -1; > + > + /* VDD_LDO2 */ > + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO2CTRL1, > + MAX77686_LD02CTRL1_1_5V | EN_LDO)) > + return -1; > + > + /* VDD_LDO3 */ > + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO3CTRL1, > + MAX77686_LD03CTRL1_1_8V | EN_LDO)) > + return -1; > + > + /* VDD_LDO5 */ > + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO5CTRL1, > + MAX77686_LD05CTRL1_1_8V | EN_LDO)) > + return -1; > + > + /* VDD_LDO10 */ > + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO10CTRL1, > + MAX77686_LD10CTRL1_1_8V | EN_LDO)) > + return -1; > + > + return 0; > } > #endif > > diff --git a/include/power/max77686_pmic.h b/include/power/max77686_pmic.h > index d949ace..5b7b6ce 100644 > --- a/include/power/max77686_pmic.h > +++ b/include/power/max77686_pmic.h > @@ -155,4 +155,34 @@ enum { > EN_LDO = (0x3 << 6), > }; > > +/* Buck1 1 volt value */ > +#define MAX77686_BUCK1OUT_1V 0x5 > +#define MAX77686_BUCK1CTRL_EN (3 << 0) > +/* Buck2 1.3 volt value */ > +#define MAX77686_BUCK2DVS1_1_3V 0x38 > +#define MAX77686_BUCK2CTRL_ON (1 << 4) > +/* Buck3 1.0125 volt value */ > +#define MAX77686_BUCK3DVS1_1_0125V 0x21 > +#define MAX77686_BUCK3CTRL_ON (1 << 4) > +/* Buck4 1.2 volt value */ > +#define MAX77686_BUCK4DVS1_1_2V 0x30 > +#define MAX77686_BUCK4CTRL_ON (1 << 4) > +/* LDO2 1.5 volt value */ > +#define MAX77686_LD02CTRL1_1_5V 0x1c > +/* LDO3 1.8 volt value */ > +#define MAX77686_LD03CTRL1_1_8V 0x14 > +/* LDO5 1.8 volt value */ > +#define MAX77686_LD05CTRL1_1_8V 0x14 > +/* LDO10 1.8 volt value */ > +#define MAX77686_LD10CTRL1_1_8V 0x14 > +/* MAX77686_REG_PMIC_32KHZ set to 32KH CP > + * output is activated > + */ > +#define MAX77686_32KHCP_EN (1 << 1) > +/* MAX77686_REG_PMIC_BBAT set to > + * Back up batery charger on and > + * limit voltage setting to 3.5v > + */ Multi-line comment style should be: /* * MAX... */ Also perhaps try to expand the comment to fill the lines. > +#define MAX77686_BBCHOSTEN (1 << 0) > +#define MAX77686_BBCVS_3_5V (3 << 3) > #endif /* __MAX77686_PMIC_H_ */ > -- > 1.7.4.4 > Regards, Simon
diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c index 7a5f132..12cc03e 100644 --- a/board/samsung/smdk5250/smdk5250.c +++ b/board/samsung/smdk5250/smdk5250.c @@ -23,6 +23,7 @@ #include <common.h> #include <fdtdec.h> #include <asm/io.h> +#include <errno.h> #include <i2c.h> #include <lcd.h> #include <netdev.h> @@ -35,6 +36,7 @@ #include <asm/arch/sromc.h> #include <asm/arch/dp_info.h> #include <power/pmic.h> +#include <power/max77686_pmic.h> DECLARE_GLOBAL_DATA_PTR; @@ -80,12 +82,119 @@ int dram_init(void) } #if defined(CONFIG_POWER) +static int pmic_reg_update(struct pmic *p, int reg, uint regval) +{ + u32 val; + int ret = 0; + + ret = pmic_reg_read(p, reg, &val); + if (ret) { + debug("%s: PMIC %d register read failed\n", __func__, reg); + return -1; + } + val |= regval; + ret = pmic_reg_write(p, reg, val); + if (ret) { + debug("%s: PMIC %d register write failed\n", __func__, reg); + return -1; + } + return 0; +} + int power_init_board(void) { + struct pmic *p; + + power_ps_hold_setup(); + + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); + if (pmic_init(I2C_PMIC)) return -1; - else - return 0; + + p = pmic_get("MAX77686_PMIC"); + if (!p) + return -ENODEV; + + if (pmic_probe(p)) + return -1; + + if (pmic_reg_update(p, MAX77686_REG_PMIC_32KHZ, MAX77686_32KHCP_EN)) + return -1; + + if (pmic_reg_update(p, MAX77686_REG_PMIC_BBAT, + MAX77686_BBCHOSTEN | MAX77686_BBCVS_3_5V)) + return -1; + + /* VDD_MIF */ + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK1OUT, + MAX77686_BUCK1OUT_1V)) { + debug("%s: PMIC %d register write failed\n", __func__, + MAX77686_REG_PMIC_BUCK1OUT); + return -1; + } + + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK1CRTL, + MAX77686_BUCK1CTRL_EN)) + return -1; + + /* VDD_ARM */ + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK2DVS1, + MAX77686_BUCK2DVS1_1_3V)) { + debug("%s: PMIC %d register write failed\n", __func__, + MAX77686_REG_PMIC_BUCK2DVS1); + return -1; + } + + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK2CTRL1, + MAX77686_BUCK2CTRL_ON)) + return -1; + + /* VDD_INT */ + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK3DVS1, + MAX77686_BUCK3DVS1_1_0125V)) { + debug("%s: PMIC %d register write failed\n", __func__, + MAX77686_REG_PMIC_BUCK3DVS1); + return -1; + } + + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK3CTRL, + MAX77686_BUCK3CTRL_ON)) + return -1; + + /* VDD_G3D */ + if (pmic_reg_write(p, MAX77686_REG_PMIC_BUCK4DVS1, + MAX77686_BUCK4DVS1_1_2V)) { + debug("%s: PMIC %d register write failed\n", __func__, + MAX77686_REG_PMIC_BUCK4DVS1); + return -1; + } + + if (pmic_reg_update(p, MAX77686_REG_PMIC_BUCK4CTRL1, + MAX77686_BUCK3CTRL_ON)) + return -1; + + /* VDD_LDO2 */ + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO2CTRL1, + MAX77686_LD02CTRL1_1_5V | EN_LDO)) + return -1; + + /* VDD_LDO3 */ + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO3CTRL1, + MAX77686_LD03CTRL1_1_8V | EN_LDO)) + return -1; + + /* VDD_LDO5 */ + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO5CTRL1, + MAX77686_LD05CTRL1_1_8V | EN_LDO)) + return -1; + + /* VDD_LDO10 */ + if (pmic_reg_update(p, MAX77686_REG_PMIC_LDO10CTRL1, + MAX77686_LD10CTRL1_1_8V | EN_LDO)) + return -1; + + return 0; } #endif diff --git a/include/power/max77686_pmic.h b/include/power/max77686_pmic.h index d949ace..5b7b6ce 100644 --- a/include/power/max77686_pmic.h +++ b/include/power/max77686_pmic.h @@ -155,4 +155,34 @@ enum { EN_LDO = (0x3 << 6), }; +/* Buck1 1 volt value */ +#define MAX77686_BUCK1OUT_1V 0x5 +#define MAX77686_BUCK1CTRL_EN (3 << 0) +/* Buck2 1.3 volt value */ +#define MAX77686_BUCK2DVS1_1_3V 0x38 +#define MAX77686_BUCK2CTRL_ON (1 << 4) +/* Buck3 1.0125 volt value */ +#define MAX77686_BUCK3DVS1_1_0125V 0x21 +#define MAX77686_BUCK3CTRL_ON (1 << 4) +/* Buck4 1.2 volt value */ +#define MAX77686_BUCK4DVS1_1_2V 0x30 +#define MAX77686_BUCK4CTRL_ON (1 << 4) +/* LDO2 1.5 volt value */ +#define MAX77686_LD02CTRL1_1_5V 0x1c +/* LDO3 1.8 volt value */ +#define MAX77686_LD03CTRL1_1_8V 0x14 +/* LDO5 1.8 volt value */ +#define MAX77686_LD05CTRL1_1_8V 0x14 +/* LDO10 1.8 volt value */ +#define MAX77686_LD10CTRL1_1_8V 0x14 +/* MAX77686_REG_PMIC_32KHZ set to 32KH CP + * output is activated + */ +#define MAX77686_32KHCP_EN (1 << 1) +/* MAX77686_REG_PMIC_BBAT set to + * Back up batery charger on and + * limit voltage setting to 3.5v + */ +#define MAX77686_BBCHOSTEN (1 << 0) +#define MAX77686_BBCVS_3_5V (3 << 3) #endif /* __MAX77686_PMIC_H_ */
This patch adds required pmic voltage settings for SMDK5250. Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com> --- board/samsung/smdk5250/smdk5250.c | 113 ++++++++++++++++++++++++++++++++++++- include/power/max77686_pmic.h | 30 ++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-)