diff options
author | Ting Shen <phoenixshen@google.com> | 2022-09-16 17:42:01 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-09-22 08:18:03 +0000 |
commit | 2f26f8e0b3ddc7f58a839d983bf02f32c3f6c6dc (patch) | |
tree | 4e26e61ebf9e7dea055749152478115ac493b844 | |
parent | 5a5403fc905b35b4b36e3a9bf288df72f4085996 (diff) | |
download | chrome-ec-2f26f8e0b3ddc7f58a839d983bf02f32c3f6c6dc.tar.gz |
zephyr: test add rt9490 bc12 test
BUG=b:244233556
TEST=./twister -T zephyr/test/drivers/
BRANCH=none
Signed-off-by: Ting Shen <phoenixshen@google.com>
Change-Id: I091c1dd6c292c22d86670079113bea4820669ce5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3901856
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Tested-by: Ting Shen <phoenixshen@chromium.org>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Reviewed-by: Jeremy Bettis <jbettis@chromium.org>
-rw-r--r-- | zephyr/test/drivers/rt9490/CMakeLists.txt | 2 | ||||
-rw-r--r-- | zephyr/test/drivers/rt9490/prj.conf | 1 | ||||
-rw-r--r-- | zephyr/test/drivers/rt9490/src/bc12.c | 101 |
3 files changed, 103 insertions, 1 deletions
diff --git a/zephyr/test/drivers/rt9490/CMakeLists.txt b/zephyr/test/drivers/rt9490/CMakeLists.txt index be9cf11515..441b54ef4c 100644 --- a/zephyr/test/drivers/rt9490/CMakeLists.txt +++ b/zephyr/test/drivers/rt9490/CMakeLists.txt @@ -3,4 +3,4 @@ # found in the LICENSE file. # Add source files -target_sources(app PRIVATE src/charger.c) +target_sources(app PRIVATE src/charger.c src/bc12.c) diff --git a/zephyr/test/drivers/rt9490/prj.conf b/zephyr/test/drivers/rt9490/prj.conf index b1b216c6a5..29c63c48f3 100644 --- a/zephyr/test/drivers/rt9490/prj.conf +++ b/zephyr/test/drivers/rt9490/prj.conf @@ -8,3 +8,4 @@ CONFIG_PLATFORM_EC_CHARGER_OTG=y CONFIG_PLATFORM_EC_CHARGER_RT9490=y CONFIG_PLATFORM_EC_CHARGE_RAMP_HW=y CONFIG_PLATFORM_EC_CONSOLE_CMD_CHARGER_DUMP=y +CONFIG_PLATFORM_EC_HOOKS=y diff --git a/zephyr/test/drivers/rt9490/src/bc12.c b/zephyr/test/drivers/rt9490/src/bc12.c new file mode 100644 index 0000000000..eae2308c93 --- /dev/null +++ b/zephyr/test/drivers/rt9490/src/bc12.c @@ -0,0 +1,101 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <zephyr/ztest.h> +#include <zephyr/fff.h> + +#include "charger.h" +#include "charge_manager.h" +#include "driver/charger/rt9490.h" +#include "driver/tcpm/tcpci.h" +#include "emul/emul_rt9490.h" +#include "emul/tcpc/emul_tcpci.h" +#include "i2c.h" +#include "test/drivers/test_state.h" +#include "timer.h" +#include "usb_charge.h" + +static const struct emul *emul = EMUL_DT_GET(DT_NODELABEL(rt9490)); +static const struct emul *tcpci_emul = EMUL_DT_GET(DT_NODELABEL(tcpci_emul)); +static const int chgnum = CHARGER_SOLO; + +void run_bc12_test(int reg_value, enum charge_supplier expected_result) +{ + int port = 0; + + /* simulate plug, expect bc12 detection starting. */ + tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, + TCPC_REG_POWER_STATUS_VBUS_PRES | + TCPC_REG_POWER_STATUS_VBUS_DET); + zassert_ok(tcpc_config[port].drv->init(port), NULL); + zassert_true(tcpc_config[port].drv->check_vbus_level(port, + VBUS_PRESENT), + NULL); + + usb_charger_task_set_event(port, USB_CHG_EVENT_VBUS); + msleep(1); + zassert_true(rt9490_emul_peek_reg(emul, RT9490_REG_CHG_CTRL2) & + RT9490_BC12_EN, + NULL); + + /* + * simulate triggering interrupt on bc12 detection done, and verify the + * result. + */ + zassert_ok(rt9490_emul_write_reg(emul, RT9490_REG_CHG_IRQ_FLAG1, + RT9490_BC12_DONE_FLAG)); + zassert_ok( + rt9490_emul_write_reg(emul, RT9490_REG_CHG_STATUS1, reg_value)); + rt9490_interrupt(port); + /* wait for deferred task scheduled, this takes longer. */ + msleep(500); + zassert_false(rt9490_emul_peek_reg(emul, RT9490_REG_CHG_CTRL2) & + RT9490_BC12_EN, + NULL); + zassert_equal(charge_manager_get_supplier(), expected_result, NULL); + + /* simulate unplug */ + tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, + TCPC_REG_POWER_STATUS_VBUS_DET); + zassert_ok(tcpc_config[port].drv->init(port), NULL); + zassert_false(tcpc_config[port].drv->check_vbus_level(port, + VBUS_PRESENT), + NULL); + + usb_charger_task_set_event(port, USB_CHG_EVENT_VBUS); + msleep(1); + zassert_equal(charge_manager_get_supplier(), CHARGE_SUPPLIER_NONE, + NULL); +} + +ZTEST(rt9490_bc12, test_detection_flow) +{ + int port = 0; + + /* make charge manager thinks port 0 is chargable */ + msleep(500); + usb_charger_task_set_event(port, USB_CHG_EVENT_DR_UFP); + charge_manager_update_dualrole(port, CAP_DEDICATED); + zassert_equal(charge_manager_get_supplier(), CHARGE_SUPPLIER_NONE, + NULL); + msleep(1); + + run_bc12_test(RT9490_DCP << RT9490_VBUS_STAT_SHIFT, + CHARGE_SUPPLIER_BC12_DCP); + run_bc12_test(RT9490_CDP << RT9490_VBUS_STAT_SHIFT, + CHARGE_SUPPLIER_BC12_CDP); + run_bc12_test(RT9490_SDP << RT9490_VBUS_STAT_SHIFT, + CHARGE_SUPPLIER_BC12_SDP); + run_bc12_test(0xA, CHARGE_SUPPLIER_VBUS); /* unknown type */ +} + +static void reset_emul(void *fixture) +{ + rt9490_emul_reset_regs(emul); + rt9490_drv.init(chgnum); +} + +ZTEST_SUITE(rt9490_bc12, drivers_predicate_post_main, NULL, reset_emul, NULL, + NULL); |