summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2020-04-22 12:27:47 -0700
committerCommit Bot <commit-bot@chromium.org>2020-04-25 06:09:00 +0000
commit91e63b526eeaa85312f2ea6f84d2f264575b25e1 (patch)
treef3909bf53448fd9642dd33372758ec04f82f4816
parent70fcff4f7da0d23fb9fee33c30dc54107f8e1969 (diff)
downloadchrome-ec-91e63b526eeaa85312f2ea6f84d2f264575b25e1.tar.gz
sm5803: Add trigger for board_vbus_present_change
Some boards don't have a direct interrupt indicating ACOK, but the charger IC can provide this notification via its VBUS interrupt. This commit adds a lightweight trigger which calls board_vbus_presence_change() whenever the charger IC gets a VBUS interrupt. The default implementation does nothing, but a board may override it to make it useful. BUG=b:154113465 BRANCH=None TEST=Build and flash on waddledee, verify that "AC on" prints are emitted when a charger is plugged into C0. Verify that "AC off" is seen when the charger is unplugged. Signed-off-by: Aseda Aboagye <aaboagye@google.com> Change-Id: I9842f769d42446398a69d105ea9f60e8e5768749 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2161695 Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--driver/charger/sm5803.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c
index 1eb23e6d3c..18892331e6 100644
--- a/driver/charger/sm5803.c
+++ b/driver/charger/sm5803.c
@@ -14,6 +14,7 @@
#include "throttle_ap.h"
#include "timer.h"
#include "usb_charge.h"
+#include "usb_pd.h"
#ifndef CONFIG_CHARGER_NARROW_VDC
#error "SM5803 is a NVDC charger, please enable CONFIG_CHARGER_NARROW_VDC."
@@ -316,13 +317,16 @@ void sm5803_handle_interrupt(int chgnum)
if ((int_reg & SM5803_INT2_VBUS) &&
!sm5803_is_sourcing_otg_power(chgnum, chgnum)) {
rv = meas_read8(chgnum, SM5803_REG_VBUS_MEAS_MSB, &meas_reg);
- if (meas_reg <= SM5803_VBUS_LOW_LEVEL)
+ if (meas_reg <= SM5803_VBUS_LOW_LEVEL) {
usb_charger_vbus_change(chgnum, 0);
- else if (meas_reg >= SM5803_VBUS_HIGH_LEVEL)
+ board_vbus_present_change();
+ } else if (meas_reg >= SM5803_VBUS_HIGH_LEVEL) {
usb_charger_vbus_change(chgnum, 1);
- else
+ board_vbus_present_change();
+ } else {
CPRINTS("%s %d: Unexpected Vbus interrupt: 0x%02x",
CHARGER_NAME, chgnum, meas_reg);
+ }
}
}