diff options
author | Denis Brockus <dbrockus@chromium.org> | 2019-08-07 10:52:50 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-08-08 20:32:00 +0000 |
commit | 46ebe63f911331c2db73b65e90f52c0a76476443 (patch) | |
tree | 6eca33272e452fb5ac5977c2e2a281327da5efc8 | |
parent | 4f409fcad25581806c86785ce167087ca658ef0a (diff) | |
download | chrome-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.h | 1 | ||||
-rw-r--r-- | board/trembyle/board.c | 6 | ||||
-rw-r--r-- | driver/charger/isl9241.c | 46 | ||||
-rw-r--r-- | driver/charger/isl9241.h | 5 | ||||
-rw-r--r-- | include/config.h | 3 |
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 |