diff mbox

[U-Boot,02/27] power: twl6030: Enable VAUX1 for eMMC power, depending on BOOT2 value

Message ID 1456597155-10711-3-git-send-email-contact@paulk.fr
State Accepted
Commit d7b6a75497ea2a33a1d2e4b8fa4d98dc8c7e876b
Delegated to: Tom Rini
Headers show

Commit Message

Paul Kocialkowski Feb. 27, 2016, 6:18 p.m. UTC
This enables the VAUX1 supply, used for eMMC power in standard configurations.
Its voltage is determined by the value of the BOOT2 pin of the TWL6030.

Note that the TWL6030 might already have enabled this regulator at startup
(depending on the value of the BOOT3 pin of the TWL6030), according to the
TWL6030 datasheet.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 drivers/power/twl6030.c | 19 +++++++++++++++++++
 include/twl6030.h       | 11 +++++++++++
 2 files changed, 30 insertions(+)

Comments

Tom Rini March 17, 2016, 1:57 a.m. UTC | #1
On Sat, Feb 27, 2016 at 07:18:50PM +0100, Paul Kocialkowski wrote:

> This enables the VAUX1 supply, used for eMMC power in standard configurations.
> Its voltage is determined by the value of the BOOT2 pin of the TWL6030.
> 
> Note that the TWL6030 might already have enabled this regulator at startup
> (depending on the value of the BOOT3 pin of the TWL6030), according to the
> TWL6030 datasheet.
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/drivers/power/twl6030.c b/drivers/power/twl6030.c
index 8924f7f..2fb3967 100644
--- a/drivers/power/twl6030.c
+++ b/drivers/power/twl6030.c
@@ -214,6 +214,8 @@  void twl6030_init_battery_charging(void)
 
 void twl6030_power_mmc_init()
 {
+	u8 value = 0;
+
 	/* 3.0V voltage output for VMMC */
 	twl6030_i2c_write_u8(TWL6030_CHIP_PM, TWL6030_VMMC_CFG_VOLTAGE,
 		TWL6030_CFG_VOLTAGE_30);
@@ -221,6 +223,23 @@  void twl6030_power_mmc_init()
 	/* Enable P1 output for VMMC */
 	twl6030_i2c_write_u8(TWL6030_CHIP_PM, TWL6030_VMMC_CFG_STATE,
 		TWL6030_CFG_STATE_P1 | TWL6030_CFG_STATE_ON);
+
+	twl6030_i2c_read_u8(TWL6030_CHIP_PM, TWL6030_PH_STS_BOOT, &value);
+
+	/* BOOT2 indicates 1.8V/2.8V VAUX1 for eMMC */
+	if (value & TWL6030_PH_STS_BOOT2) {
+		/* 1.8V voltage output for VAUX1 */
+		twl6030_i2c_write_u8(TWL6030_CHIP_PM, TWL6030_VAUX1_CFG_VOLTAGE,
+			TWL6030_CFG_VOLTAGE_18);
+	} else {
+		/* 2.8V voltage output for VAUX1 */
+		twl6030_i2c_write_u8(TWL6030_CHIP_PM, TWL6030_VAUX1_CFG_VOLTAGE,
+			TWL6030_CFG_VOLTAGE_28);
+	}
+
+	/* Enable P1 output for VAUX */
+	twl6030_i2c_write_u8(TWL6030_CHIP_PM, TWL6030_VAUX1_CFG_STATE,
+		TWL6030_CFG_STATE_P1 | TWL6030_CFG_STATE_ON);
 }
 
 void twl6030_usb_device_settings()
diff --git a/include/twl6030.h b/include/twl6030.h
index bb02d6f..a17a9b5 100644
--- a/include/twl6030.h
+++ b/include/twl6030.h
@@ -20,6 +20,15 @@ 
 #define TWL6030_CHIP_PWM	0x49
 
 /* Slave Address 0x48 */
+#define TWL6030_PH_STS_BOOT		0x29
+
+#define TWL6030_PH_STS_BOOT0		(1 << 0)
+#define TWL6030_PH_STS_BOOT1		(1 << 1)
+#define TWL6030_PH_STS_BOOT2		(1 << 2)
+#define TWL6030_PH_STS_BOOT3		(1 << 3)
+
+#define TWL6030_VAUX1_CFG_STATE		0x86
+#define TWL6030_VAUX1_CFG_VOLTAGE	0x87
 #define TWL6030_VMMC_CFG_STATE		0x9A
 #define TWL6030_VMMC_CFG_VOLTAGE	0x9B
 #define TWL6030_VUSB_CFG_STATE		0xA2
@@ -27,6 +36,8 @@ 
 #define TWL6030_CFG_GRP_P1		(1 << 0)
 #define TWL6030_CFG_STATE_ON		(1 << 0)
 #define TWL6030_CFG_STATE_P1		(TWL6030_CFG_GRP_P1 << 5)
+#define TWL6030_CFG_VOLTAGE_18		0x09
+#define TWL6030_CFG_VOLTAGE_28		0x13
 #define TWL6030_CFG_VOLTAGE_30		0x15
 
 #define MISC1			0xE4