From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Fri, 6 Mar 2015 07:14:57 -0700 Subject: [U-Boot] [PATCH v2 10/12] odroid: board: add support to dm pmic api In-Reply-To: <1425399883-14053-11-git-send-email-p.marczak@samsung.com> References: <1412801335-1591-1-git-send-email-p.marczak@samsung.com> <1425399883-14053-1-git-send-email-p.marczak@samsung.com> <1425399883-14053-11-git-send-email-p.marczak@samsung.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Przemyslaw, On 3 March 2015 at 09:24, Przemyslaw Marczak wrote: > This commit change the old pmic framework calls with the new ones. > > Signed-off-by: Przemyslaw Marczak > --- > Changes v2: > - remove board_init_i2c() call > - update regulator calls > - update headers > - samsung/misc.c: include required header > --- > board/samsung/common/misc.c | 1 + > board/samsung/odroid/odroid.c | 52 ++++++++++++++++++++++++++----------------- > 2 files changed, 33 insertions(+), 20 deletions(-) > > diff --git a/board/samsung/common/misc.c b/board/samsung/common/misc.c > index 4538ac7..18d71e8 100644 > --- a/board/samsung/common/misc.c > +++ b/board/samsung/common/misc.c > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > #include > #include > > diff --git a/board/samsung/odroid/odroid.c b/board/samsung/odroid/odroid.c > index bff6ac9..2448cde 100644 > --- a/board/samsung/odroid/odroid.c > +++ b/board/samsung/odroid/odroid.c > @@ -12,7 +12,9 @@ > #include > #include > #include > +#include > #include > +#include > #include > #include > #include > @@ -402,15 +404,23 @@ static void board_gpio_init(void) > > static int pmic_init_max77686(void) > { > - struct pmic *p = pmic_get("MAX77686_PMIC"); > + struct udevice *reg; > + int type; > > - if (pmic_probe(p)) > + if (regulator_get("max77686", ®)) { > + error("Regulator get error\n"); > return -ENODEV; > + } > > /* Set LDO Voltage */ > - max77686_set_ldo_voltage(p, 20, 1800000); /* LDO20 eMMC */ > - max77686_set_ldo_voltage(p, 21, 2800000); /* LDO21 SD */ > - max77686_set_ldo_voltage(p, 22, 2800000); /* LDO22 eMMC */ > + type = REGULATOR_TYPE_LDO; > + regulator_set_value(reg, type, 20, 1800000); /* LDO20 eMMC */ > + regulator_set_value(reg, type, 21, 2800000); /* LDO21 SD */ > + regulator_set_value(reg, type, 22, 2800000); /* LDO22 eMMC */ > + > + regulator_set_mode(reg, type, 20, OPMODE_ON); > + regulator_set_mode(reg, type, 21, OPMODE_ON); > + regulator_set_mode(reg, type, 22, OPMODE_ON); These 20, 21, 22 values seem bad to me. Do we not have names? Also I see in the device tree that these regulators have the same min and max voltage, so perhaps you can use that voltage automatically? I think when you change the LDOs to devices you might end up with: struct udevice *ldo; ret = regulator_get("VCCQ_MMC2_2.8V", &ldo); // use the regulator device name which comes from regulator-name property. if (ret) { debug(...) goto err; } ret = regulator_set_voltage(ldo, 1800000); ...error check ret = regulator_set_mode(ldo, OPMODE_ON); ...error check > > return 0; > } > @@ -435,7 +445,6 @@ int exynos_init(void) > > int exynos_power_init(void) > { > - pmic_init(0); > pmic_init_max77686(); > > return 0; > @@ -444,19 +453,21 @@ int exynos_power_init(void) > #ifdef CONFIG_USB_GADGET > static int s5pc210_phy_control(int on) > { > - struct pmic *p_pmic; > + struct udevice *reg; > + int type; > > - p_pmic = pmic_get("MAX77686_PMIC"); > - if (!p_pmic) > + if (regulator_get("max77686", ®)) { > + error("Regulator get error\n"); > return -ENODEV; > + } > > - if (pmic_probe(p_pmic)) > - return -1; > + type = REGULATOR_TYPE_LDO; > > if (on) > - return max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); > + return regulator_set_mode(reg, type, 12, OPMODE_ON); > else > - return max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); > + return regulator_set_mode(reg, type, 12, OPMODE_LPM); > + > } > > struct s3c_plat_otg_data s5pc210_otg_data = { > @@ -473,7 +484,8 @@ struct s3c_plat_otg_data s5pc210_otg_data = { > int board_usb_init(int index, enum usb_init_type init) > { > #ifdef CONFIG_CMD_USB > - struct pmic *p_pmic; > + struct udevice *reg; > + int type, ret; > > /* Set Ref freq 0 => 24MHz, 1 => 26MHz*/ > /* Odroid Us have it at 24MHz, Odroid Xs at 26MHz */ > @@ -491,14 +503,14 @@ int board_usb_init(int index, enum usb_init_type init) > /* Power off and on BUCK8 for LAN9730 */ > debug("LAN9730 - Turning power buck 8 OFF and ON.\n"); > > - p_pmic = pmic_get("MAX77686_PMIC"); > - if (p_pmic && !pmic_probe(p_pmic)) { > - max77686_set_buck_voltage(p_pmic, 8, 750000); > - max77686_set_buck_voltage(p_pmic, 8, 3300000); > + if (regulator_get("max77686", ®)) { > + type = REGULATOR_TYPE_BUCK; > + ret = regulator_set_value(reg, type, 8, 750000); > + ret |= regulator_set_value(reg, type, 8, 3300000); > + if (ret) > + error("Can't set regulator\n"); We should return a proper error number. Also print it here as it might provide clues. > } > - > #endif > - > debug("USB_udc_probe\n"); > return s3c_udc_probe(&s5pc210_otg_data); > } > -- > 1.9.1 > Regards, Simon