summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepti Deshatty <deepti.deshatty@intel.corp-partner.google.com>2022-05-27 12:10:53 +0530
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-06-09 05:50:22 +0000
commit4c1260e92d13969b8e5aabf79082e722a4617cea (patch)
tree4d4ccf0e28a25f686d897ff96226f1a66287ae71
parent60032a8828801a316bdcb5f246ebb58da6e529f0 (diff)
downloadchrome-ec-4c1260e92d13969b8e5aabf79082e722a4617cea.tar.gz
nereid: vbus measurement using charger ic ADC
implement pd_check_vbus_level() to measure vbus precisely using SM5803 vbus ADC similar to the CL:2406342 BUG=b:231419461 BRANCH=main TEST=USBC dock is detected on Nereid port1 Change-Id: If418017256d0c34c683f1d84fb46423184cc7fa0 Signed-off-by: Deepti Deshatty <deepti.deshatty@intel.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3670785 Reviewed-by: Peter Marheine <pmarheine@chromium.org>
-rw-r--r--zephyr/projects/nissa/src/nereid/usbc.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/zephyr/projects/nissa/src/nereid/usbc.c b/zephyr/projects/nissa/src/nereid/usbc.c
index e731b73a76..eeab449c32 100644
--- a/zephyr/projects/nissa/src/nereid/usbc.c
+++ b/zephyr/projects/nissa/src/nereid/usbc.c
@@ -63,22 +63,19 @@ void board_pd_vconn_ctrl(int port, enum usbpd_cc_pin cc_pin, int enabled)
__override bool pd_check_vbus_level(int port, enum vbus_level level)
{
- /*
- * While the charger can differentiate SAFE0V from REMOVED, doing so
- * requires doing a I2C read of the VBUS analog level. Because this
- * function can be polled by the USB state machines and doing the I2C
- * read is relatively costly, we only check the cached VBUS presence
- * (for which interrupts record transitions).
- */
- switch (level) {
- case VBUS_PRESENT:
- return sm5803_is_vbus_present(port);
- case VBUS_SAFE0V: /* Less than vSafe0V */
- case VBUS_REMOVED: /* Less than vSinkDisconnect */
- return !sm5803_is_vbus_present(port);
+ int vbus_voltage;
+
+ /* If we're unable to speak to the charger, best to guess false */
+ if (charger_get_vbus_voltage(port, &vbus_voltage)) {
+ return false;
}
- LOG_WRN("Unrecognized vbus_level value: %d", level);
- return false;
+
+ if (level == VBUS_SAFE0V)
+ return vbus_voltage < PD_V_SAFE0V_MAX;
+ else if (level == VBUS_PRESENT)
+ return vbus_voltage > PD_V_SAFE5V_MIN;
+ else
+ return vbus_voltage < PD_V_SINK_DISCONNECT_MAX;
}
/*