summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYilun Lin <yllin@google.com>2018-07-23 14:02:56 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-07-24 06:36:05 -0700
commit8ff9198bb10722481139a2e540d76789f8404d36 (patch)
tree0a16171ae3c4c9bdeb54af1aa4837b9ce2702e1d
parent95a30548abfebfaac38e621ac124dc2197ded6fc (diff)
downloadchrome-ec-8ff9198bb10722481139a2e540d76789f8404d36.tar.gz
charger/mt6370: Support set LDO voltage function.
TEST=flash kukui and manually test on kukui p0. BUG=b:80160408 BRANCH=None Change-Id: I2be4bda585babd0afe6e64837904898d46115e54 Signed-off-by: Yilun Lin <yllin@google.com> Reviewed-on: https://chromium-review.googlesource.com/1146418 Commit-Ready: Yilun Lin <yllin@chromium.org> Tested-by: Yilun Lin <yllin@chromium.org> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r--driver/charger/rt946x.c24
-rw-r--r--driver/charger/rt946x.h26
2 files changed, 50 insertions, 0 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index a6cf203a34..137026d660 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -983,6 +983,30 @@ int rt946x_enable_charge_termination(int en)
}
#ifdef CONFIG_CHARGER_MT6370
+/* MT6370 LDO */
+
+int mt6370_set_ldo_voltage(int mv)
+{
+ int rv;
+ int vout_val;
+ const int vout_mask = MT6370_MASK_LDOVOUT_EN | MT6370_MASK_LDOVOUT_VOUT;
+
+ /* LDO output-off mode to floating. */
+ rv = rt946x_update_bits(MT6370_REG_LDOCFG, MT6370_MASK_LDOCFG_OMS, 0);
+ if (rv)
+ return rv;
+
+ /* Disable LDO if voltage is zero. */
+ if (mv == 0)
+ return rt946x_clr_bit(MT6370_REG_LDOVOUT,
+ MT6370_MASK_LDOVOUT_EN);
+
+ vout_val = 1 << MT6370_SHIFT_LDOVOUT_EN;
+ vout_val |= rt946x_closest_reg(MT6370_LDO_MIN, MT6370_LDO_MAX,
+ MT6370_LDO_STEP, mv);
+ return rt946x_update_bits(MT6370_REG_LDOVOUT, vout_mask, vout_val);
+}
+
/* MT6370 RGB LED */
int mt6370_led_set_dim_mode(enum mt6370_led_index index,
diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h
index d82d6e8e6d..16ba9ff823 100644
--- a/driver/charger/rt946x.h
+++ b/driver/charger/rt946x.h
@@ -118,6 +118,8 @@
#define RT946X_REG_CHGNTC 0X4B
#define RT946X_REG_ADCDATAH 0X4C
#define RT946X_REG_ADCDATAL 0X4D
+#define MT6370_REG_LDOCFG 0X80
+#define MT6370_REG_LDOVOUT 0X81
/* RGB led */
#define MT6370_REG_RGBDIM_BASE 0x81
#define MT6370_REG_RGB1DIM 0x82
@@ -206,6 +208,11 @@
#define RT946X_BATTEMP_COLD 0x05
#define RT946X_BATTEMP_HOT 0x06
+/* LDO voltage */
+#define MT6370_LDO_MIN 1600
+#define MT6370_LDO_MAX 4000
+#define MT6370_LDO_STEP 200
+
/* ========== CORECTRL0 0x00 ============ */
#define RT946X_SHIFT_RST 7
@@ -379,6 +386,19 @@
#define RT946X_MASK_DPDMIRQ_ATTACH (1 << RT946X_SHIFT_DPDMIRQ_ATTACH)
#endif
+
+/* ========== LDOCFG 0x80 (mt6370) ============ */
+#define MT6370_SHIFT_LDOCFG_OMS 6
+
+#define MT6370_MASK_LDOCFG_OMS (1 << MT6370_SHIFT_LDOCFG_OMS)
+
+/* ========== LDOVOUT 0x81 (mt6370) ============ */
+#define MT6370_SHIFT_LDOVOUT_EN 7
+#define MT6370_SHIFT_LDOVOUT_VOUT 0
+
+#define MT6370_MASK_LDOVOUT_EN (1 << MT6370_SHIFT_LDOVOUT_EN)
+#define MT6370_MASK_LDOVOUT_VOUT (0xf << MT6370_SHIFT_LDOVOUT_VOUT)
+
/* ========== RGBDIM 0x82/0x83/0x84 (mt6370) ============ */
#define MT6370_LED_PWM_DIMDUTY_MIN 0x00
#define MT6370_LED_PWM_DIMDUTY_MAX 0x1f
@@ -467,6 +487,12 @@ int rt946x_enable_charge_termination(int en);
#ifdef CONFIG_CHARGER_MT6370
+/*
+ * Set LDO voltage.
+ * Disable LDO if voltage is zero.
+ */
+int mt6370_set_ldo_voltage(int mv);
+
enum mt6370_led_index {
MT6370_LED_ID_OFF = 0,
MT6370_LED_ID1 = 1,