summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zephyr/test/drivers/src/ppc_syv682c.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/zephyr/test/drivers/src/ppc_syv682c.c b/zephyr/test/drivers/src/ppc_syv682c.c
index 6572d179f6..0d1b315628 100644
--- a/zephyr/test/drivers/src/ppc_syv682c.c
+++ b/zephyr/test/drivers/src/ppc_syv682c.c
@@ -492,6 +492,36 @@ ZTEST(ppc_syv682c, test_syv682x_vbus_sink_enable)
"Sink disabled, but power path enabled");
}
+ZTEST(ppc_syv682c, test_syv682x_vbus_sink_oc_limit)
+{
+ struct i2c_emul *emul = syv682x_emul_get(SYV682X_ORD);
+
+ zassert_ok(ppc_vbus_sink_enable(syv682x_port, true),
+ "Sink enable failed");
+
+ /* Generate 4 consecutive sink over-current interrupts. After reaching
+ * this count, the driver should prevent sink enable until the count is
+ * cleared by sink disable.
+ */
+ for (int i = 0; i < 4; ++i) {
+ syv682x_emul_set_condition(emul, SYV682X_STATUS_OC_HV,
+ SYV682X_CONTROL_4_NONE);
+ msleep(15);
+ }
+ syv682x_emul_set_condition(emul, SYV682X_STATUS_NONE,
+ SYV682X_CONTROL_4_NONE);
+
+ zassert_not_equal(ppc_vbus_sink_enable(syv682x_port, true), EC_SUCCESS,
+ "VBUS sink enable succeeded after 4 OC events");
+
+ zassert_ok(ppc_vbus_sink_enable(syv682x_port, false),
+ "Sink disable failed");
+ zassert_ok(ppc_vbus_sink_enable(syv682x_port, true),
+ "Sink enable failed");
+ zassert_ok(ppc_vbus_sink_enable(syv682x_port, false),
+ "Sink disable failed");
+}
+
ZTEST(ppc_syv682c, test_syv682x_ppc_dump)
{
/*