diff options
-rw-r--r-- | zephyr/test/drivers/src/ppc_syv682c.c | 30 |
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) { /* |