diff options
author | Aseda Aboagye <aaboagye@google.com> | 2020-04-22 12:27:47 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-25 06:09:00 +0000 |
commit | 91e63b526eeaa85312f2ea6f84d2f264575b25e1 (patch) | |
tree | f3909bf53448fd9642dd33372758ec04f82f4816 /driver/charger | |
parent | 70fcff4f7da0d23fb9fee33c30dc54107f8e1969 (diff) | |
download | chrome-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>
Diffstat (limited to 'driver/charger')
-rw-r--r-- | driver/charger/sm5803.c | 10 |
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); + } } } |