summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2022-09-16 17:42:01 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-22 08:18:03 +0000
commit2f26f8e0b3ddc7f58a839d983bf02f32c3f6c6dc (patch)
tree4e26e61ebf9e7dea055749152478115ac493b844
parent5a5403fc905b35b4b36e3a9bf288df72f4085996 (diff)
downloadchrome-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.txt2
-rw-r--r--zephyr/test/drivers/rt9490/prj.conf1
-rw-r--r--zephyr/test/drivers/rt9490/src/bc12.c101
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);