All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 1/3] arm: odroid: pmic77686: allow buck voltage settings
@ 2014-10-29 16:22 Suriyan Ramasami
  2014-10-29 16:22 ` [U-Boot] [PATCH v3 2/3] arm: odroid: enable/disable usb host phy for exynos4412 Suriyan Ramasami
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Suriyan Ramasami @ 2014-10-29 16:22 UTC (permalink / raw)
  To: u-boot

Allow to set the buck voltage for the max77686.
This will be used to reset the SMC LAN9730 ethernet on the odroids.

Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com>

---

Changes in v3:
* Correct ldo and buck validation logic
* Jaehoon/Przemyslaw - Use negative errno values for error condistions
* Albert - its buck not bucket

Changes in v2:
* Jaehoon - separate out this patch

Changes in v1:
- First try

 drivers/power/pmic/pmic_max77686.c | 52 +++++++++++++++++++++++++++++++++++---
 include/power/max77686_pmic.h      |  3 +++
 2 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/drivers/power/pmic/pmic_max77686.c b/drivers/power/pmic/pmic_max77686.c
index df1fd91..95b1a57 100644
--- a/drivers/power/pmic/pmic_max77686.c
+++ b/drivers/power/pmic/pmic_max77686.c
@@ -42,11 +42,30 @@ static unsigned int max77686_ldo_volt2hex(int ldo, ulong uV)
 	return 0;
 }
 
+static int max77686_buck_volt2hex(int buck, ulong uV)
+{
+	int hex = 0;
+
+	if (buck < 5 || buck > 9) {
+		debug("%s: buck %d is not supported\n", __func__, buck);
+		return -EINVAL;
+	}
+
+	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 -EINVAL;
+}
+
 int max77686_set_ldo_voltage(struct pmic *p, int ldo, ulong uV)
 {
 	unsigned int val, ret, hex, adr;
 
-	if (ldo < 1 && ldo > 26) {
+	if (ldo < 1 || ldo > 26) {
 		printf("%s: %d is wrong ldo number\n", __func__, ldo);
 		return -1;
 	}
@@ -68,11 +87,38 @@ 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, adr;
+	int hex, ret;
+
+	if (buck < 5 || buck > 9) {
+		printf("%s: %d is an unsupported bucket number\n",
+		       __func__, buck);
+		return -EINVAL;
+	}
+
+	adr = max77686_buck_addr[buck] + 1;
+	hex = max77686_buck_volt2hex(buck, uV);
+
+	if (hex < 0)
+		return hex;
+
+	ret = pmic_reg_read(p, adr, &val);
+	if (ret)
+		return ret;
+
+	val &= ~MAX77686_BUCK_VOLT_MASK;
+	ret |= pmic_reg_write(p, adr, val | hex);
+
+	return ret;
+}
+
 int max77686_set_ldo_mode(struct pmic *p, int ldo, char opmode)
 {
 	unsigned int val, ret, adr, mode;
 
-	if (ldo < 1 && 26 < ldo) {
+	if (ldo < 1 || 26 < ldo) {
 		printf("%s: %d is wrong ldo number\n", __func__, ldo);
 		return -1;
 	}
@@ -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
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2014-11-19 17:18 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-29 16:22 [U-Boot] [PATCH v3 1/3] arm: odroid: pmic77686: allow buck voltage settings Suriyan Ramasami
2014-10-29 16:22 ` [U-Boot] [PATCH v3 2/3] arm: odroid: enable/disable usb host phy for exynos4412 Suriyan Ramasami
2014-11-17 14:03   ` Minkyu Kang
2014-10-29 16:22 ` [U-Boot] [PATCH v3 3/3] arm: odroid: usb: add support for usb host including ethernet Suriyan Ramasami
2014-10-30  1:17   ` Jaehoon Chung
2014-10-30  4:40     ` Suriyan Ramasami
2014-10-30  5:11       ` Suriyan Ramasami
2014-11-17 14:02   ` Minkyu Kang
2014-11-18  3:30     ` Suriyan Ramasami
2014-11-18  8:14       ` Minkyu Kang
2014-11-18 11:14         ` Przemyslaw Marczak
2014-11-18 14:05           ` Minkyu Kang
2014-11-18 14:33             ` Przemyslaw Marczak
2014-11-18 11:09       ` Przemyslaw Marczak
2014-11-18 17:34         ` Suriyan Ramasami
2014-11-19 17:18           ` Przemyslaw Marczak
2014-11-17 14:03 ` [U-Boot] [PATCH v3 1/3] arm: odroid: pmic77686: allow buck voltage settings Minkyu Kang

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.