summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver/charger/rt946x.c31
-rw-r--r--driver/charger/rt946x.h57
2 files changed, 84 insertions, 4 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 226b4b4d0a..d3d9309129 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -1059,6 +1059,37 @@ int mt6370_db_external_control(int en)
en << MT6370_SHIFT_DB_EXT_EN);
}
+int mt6370_db_set_voltages(int vbst, int vpos, int vneg)
+{
+ int rv;
+
+ /* set display bias VBST */
+ rv = rt946x_update_bits(MT6370_REG_DBVBST, MT6370_MASK_DB_VBST,
+ rt946x_closest_reg(MT6370_DB_VBST_MIN,
+ MT6370_DB_VBST_MAX,
+ MT6370_DB_VBST_STEP, vbst));
+
+ /* set display bias VPOS */
+ rv |= rt946x_update_bits(MT6370_REG_DBVPOS, MT6370_MASK_DB_VPOS,
+ rt946x_closest_reg(MT6370_DB_VPOS_MIN,
+ MT6370_DB_VPOS_MAX,
+ MT6370_DB_VPOS_STEP, vpos));
+
+ /* set display bias VNEG */
+ rv |= rt946x_update_bits(MT6370_REG_DBVNEG, MT6370_MASK_DB_VNEG,
+ rt946x_closest_reg(MT6370_DB_VNEG_MIN,
+ MT6370_DB_VNEG_MAX,
+ MT6370_DB_VNEG_STEP, vneg));
+
+ /* Enable VNEG/VPOS discharge when VNEG/VPOS rails disabled. */
+ rv |= rt946x_update_bits(
+ MT6370_REG_DBCTRL2,
+ MT6370_MASK_DB_VNEG_DISC | MT6370_MASK_DB_VPOS_DISC,
+ MT6370_MASK_DB_VNEG_DISC | MT6370_MASK_DB_VPOS_DISC);
+
+ return rv;
+}
+
/* 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 aad6d74032..2b8c50ce19 100644
--- a/driver/charger/rt946x.h
+++ b/driver/charger/rt946x.h
@@ -135,14 +135,20 @@
#define MT6370_REG_RGBCHRINDDIM 0x92
#define MT6370_REG_RGBCHRINDCTRL 0x93
-/* Display bias */
-#define MT6370_REG_DBCTRL1 0XB0
-
-#define RT946X_REG_DPDMIRQ 0xC6
/* backlight */
#define MT6370_BACKLIGHT_BLEN 0xA0
#define MT6370_BACKLIGHT_BLPWM 0xA2
#define MT6370_BACKLIGHT_BLDIM 0xA5
+
+/* Display bias */
+#define MT6370_REG_DBCTRL1 0XB0
+#define MT6370_REG_DBCTRL2 0XB1
+#define MT6370_REG_DBVBST 0XB2
+#define MT6370_REG_DBVPOS 0XB3
+#define MT6370_REG_DBVNEG 0XB4
+
+#define RT946X_REG_DPDMIRQ 0xC6
+
/* status event */
#define MT6370_REG_CHGSTAT1 0xD0
#define RT946X_REG_CHGSTATC MT6370_REG_CHGSTAT1
@@ -493,6 +499,37 @@
#define MT6370_MASK_DB_FREQ_PM 1
#define MT6370_MASK_DB_PERIODIC_MODE 1
+/* ========== DBCTRL1 (mt6370) ============ */
+#define MT6370_MASK_DB_VNEG_DISC BIT(2)
+#define MT6370_MASK_DB_VPOS_DISC BIT(5)
+
+/* ========== DBVBST (mt6370) ============ */
+#define MT6370_SHIFT_DB_VBST 0
+
+#define MT6370_MASK_DB_VBST 0x3f
+
+#define MT6370_DB_VBST_MAX 6200
+#define MT6370_DB_VBST_MIN 4000
+#define MT6370_DB_VBST_STEP 50
+
+/* ========== DBVPOS (mt6370) ============ */
+#define MT6370_SHIFT_DB_VPOS 0
+
+#define MT6370_MASK_DB_VPOS 0x3f
+
+#define MT6370_DB_VPOS_MAX 6000
+#define MT6370_DB_VPOS_MIN 4000
+#define MT6370_DB_VPOS_STEP 50
+
+/* ========== DBVNEG (mt6370) ============ */
+#define MT6370_SHIFT_DB_VNEG 0
+
+#define MT6370_MASK_DB_VNEG 0x3f
+
+#define MT6370_DB_VNEG_MAX 6000
+#define MT6370_DB_VNEG_MIN 4000
+#define MT6370_DB_VNEG_STEP 50
+
/* ========== BLEN 0xA0 (mt6370) ============ */
#define MT6370_SHIFT_BLED_EXT_EN 7
#define MT6370_SHIFT_BLED_EN 6
@@ -623,6 +660,18 @@ enum mt6370_led_pwm_freq {
/* Enable display bias external pin control. */
int mt6370_db_external_control(int en);
+/**
+ * MT6370 display bias voltage settings.
+ *
+ * Set disaply bias voltages for the panel.
+ *
+ * vbst: VBST config in mv.
+ * vpos: VPOS config in mv.
+ * vneg: VNEG config in mv.
+ * return: EC_SUCCESS on succes, and EC_ERROR_* otherwise.
+ */
+int mt6370_db_set_voltages(int vbst, int vpos, int vneg);
+
/* Set LED brightness */
int mt6370_led_set_brightness(enum mt6370_led_index index, uint8_t brightness);