summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-08-07 10:52:50 -0600
committerCommit Bot <commit-bot@chromium.org>2019-08-08 20:32:00 +0000
commit46ebe63f911331c2db73b65e90f52c0a76476443 (patch)
tree6eca33272e452fb5ac5977c2e2a281327da5efc8
parent4f409fcad25581806c86785ce167087ca658ef0a (diff)
downloadchrome-ec-46ebe63f911331c2db73b65e90f52c0a76476443.tar.gz
isl9241: add charger_get_vbus_voltage
BUG=b:138600692 BRANCH=none TEST=make buildall -j Change-Id: Idd20b1833945e37a84db4e7c444d8974f6059f83 Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1742532 Commit-Queue: Edward Hill <ecgh@chromium.org> Reviewed-by: Edward Hill <ecgh@chromium.org>
-rw-r--r--baseboard/zork/baseboard.h1
-rw-r--r--board/trembyle/board.c6
-rw-r--r--driver/charger/isl9241.c46
-rw-r--r--driver/charger/isl9241.h5
-rw-r--r--include/config.h3
5 files changed, 53 insertions, 8 deletions
diff --git a/baseboard/zork/baseboard.h b/baseboard/zork/baseboard.h
index e02b5a4945..81404d2451 100644
--- a/baseboard/zork/baseboard.h
+++ b/baseboard/zork/baseboard.h
@@ -133,7 +133,6 @@
#define CONFIG_USB_PD_TCPM_TCPCI
#define CONFIG_USB_PD_TRY_SRC
#define CONFIG_USB_PD_VBUS_DETECT_PPC
-#define CONFIG_USB_PD_VBUS_MEASURE_CHARGER
#define CONFIG_USBC_PPC
#define CONFIG_USBC_PPC_DEDICATED_INT
#define CONFIG_USBC_PPC_SBU
diff --git a/board/trembyle/board.c b/board/trembyle/board.c
index 209e0d51ec..e4e06c70f1 100644
--- a/board/trembyle/board.c
+++ b/board/trembyle/board.c
@@ -22,9 +22,3 @@ void board_update_sensor_config_from_sku(void)
/* Enable Gyro interrupts */
gpio_enable_interrupt(GPIO_6AXIS_INT_L);
}
-
-int charger_get_vbus_voltage(int port)
-{
- /* TODO */
- return 0;
-}
diff --git a/driver/charger/isl9241.c b/driver/charger/isl9241.c
index 4db66e0b52..1312388b5a 100644
--- a/driver/charger/isl9241.c
+++ b/driver/charger/isl9241.c
@@ -232,6 +232,52 @@ int charger_set_voltage(int voltage)
return isl9241_write(ISL9241_REG_MAX_SYSTEM_VOLTAGE, voltage);
}
+int charger_get_vbus_voltage(int port)
+{
+ int adc_val = 0;
+ int ctl3_val;
+ int rv;
+
+ /* Get current Control3 value */
+ rv = isl9241_read(ISL9241_REG_CONTROL3, &ctl3_val);
+ if (rv)
+ goto error;
+
+ /* Enable ADC */
+ if (!(ctl3_val & ISL9241_CONTROL3_ENABLE_ADC)) {
+ rv = isl9241_write(ISL9241_REG_CONTROL3,
+ ctl3_val | ISL9241_CONTROL3_ENABLE_ADC);
+ if (rv)
+ goto error;
+ }
+
+ /* Read voltage ADC value */
+ rv = isl9241_read(ISL9241_REG_VIN_ADC_RESULTS, &adc_val);
+ if (rv)
+ goto error_restore_ctl3;
+
+ /*
+ * Adjust adc_val
+ *
+ * raw adc_val has VIN_ADC in bits [13:6], so shift this down
+ * this puts adc_val in the range of 0..255, which maps to 0..24.48V
+ * each step in adc_val is 96mv
+ */
+ adc_val >>= ISL9241_VIN_ADC_BIT_OFFSET;
+ adc_val *= ISL9241_VIN_ADC_STEP_MV;
+
+error_restore_ctl3:
+ /* Restore Control3 value */
+ if (!(ctl3_val & ISL9241_CONTROL3_ENABLE_ADC))
+ (void)isl9241_write(ISL9241_REG_CONTROL3, ctl3_val);
+
+error:
+ if (rv)
+ CPRINTF("Could not read VBUS ADC! Error: %d\n", rv);
+
+ return adc_val;
+}
+
int charger_post_init(void)
{
return EC_SUCCESS;
diff --git a/driver/charger/isl9241.h b/driver/charger/isl9241.h
index 7fe3f5e579..b14c15f780 100644
--- a/driver/charger/isl9241.h
+++ b/driver/charger/isl9241.h
@@ -86,6 +86,8 @@
#define ISL9241_CONTROL3_ACLIM_RELOAD BIT(14)
/* 2: Digital Reset (0 - Idle, 1 - Reset */
#define ISL9241_CONTROL3_DIGITAL_RESET BIT(2)
+/* 0: Enable ADC (0 - Active when charging, 1 - Active always) */
+#define ISL9241_CONTROL3_ENABLE_ADC BIT(0)
/* Indicates various charger status */
#define ISL9241_REG_INFORMATION2 0x4D
@@ -112,4 +114,7 @@
#define ISL9241_REG_MANUFACTURER_ID 0xFE
#define ISL9241_REG_DEVICE_ID 0xFF
+#define ISL9241_VIN_ADC_BIT_OFFSET 6
+#define ISL9241_VIN_ADC_STEP_MV 96
+
#endif /* __CROS_EC_ISL9241_H */
diff --git a/include/config.h b/include/config.h
index 9295e2aada..f81cffcaa9 100644
--- a/include/config.h
+++ b/include/config.h
@@ -4485,7 +4485,8 @@
defined(CONFIG_CHARGER_RT9466) || \
defined(CONFIG_CHARGER_RT9467) || \
defined(CONFIG_CHARGER_MT6370) || \
- defined(CONFIG_CHARGER_BQ25710)
+ defined(CONFIG_CHARGER_BQ25710) || \
+ defined(CONFIG_CHARGER_ISL9241)
#define CONFIG_USB_PD_VBUS_MEASURE_CHARGER
#endif