diff options
author | Deepti Deshatty <deepti.deshatty@intel.corp-partner.google.com> | 2022-05-27 12:10:53 +0530 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-06-09 05:50:22 +0000 |
commit | 4c1260e92d13969b8e5aabf79082e722a4617cea (patch) | |
tree | 4d4ccf0e28a25f686d897ff96226f1a66287ae71 | |
parent | 60032a8828801a316bdcb5f246ebb58da6e529f0 (diff) | |
download | chrome-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.c | 27 |
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; } /* |