summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c')
-rw-r--r--zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c51
1 files changed, 45 insertions, 6 deletions
diff --git a/zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c b/zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c
index fcc213d252..c73cf26f37 100644
--- a/zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c
+++ b/zephyr/test/drivers/default/src/integration/usbc/usb_5v_3a_pd_source.c
@@ -7,17 +7,23 @@
#include <zephyr/sys/slist.h>
#include <zephyr/ztest.h>
+#include "battery.h"
#include "battery_smart.h"
+#include "dps.h"
#include "emul/emul_isl923x.h"
#include "emul/emul_smart_battery.h"
#include "emul/tcpc/emul_tcpci_partner_src.h"
#include "system.h"
+#include "task.h"
#include "test/drivers/test_state.h"
#include "test/drivers/utils.h"
#include "usb_pd.h"
#define BATTERY_NODE DT_NODELABEL(battery)
+#define GPIO_BATT_PRES_ODL_PATH DT_PATH(named_gpios, ec_batt_pres_odl)
+#define GPIO_BATT_PRES_ODL_PORT DT_GPIO_PIN(GPIO_BATT_PRES_ODL_PATH, gpios)
+
struct usb_attach_5v_3a_pd_source_fixture {
struct tcpci_partner_data source_5v_3a;
struct tcpci_src_emul_data src_ext;
@@ -58,6 +64,15 @@ static void usb_attach_5v_3a_pd_source_after(void *data)
disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul);
}
+static void control_battery_present(bool present)
+{
+ const struct device *dev =
+ DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_BATT_PRES_ODL_PATH, gpios));
+
+ /* 0 means battery present */
+ zassume_ok(gpio_emul_input_set(dev, GPIO_BATT_PRES_ODL_PORT, !present));
+}
+
ZTEST_SUITE(usb_attach_5v_3a_pd_source, drivers_predicate_post_main,
usb_attach_5v_3a_pd_source_setup, usb_attach_5v_3a_pd_source_before,
usb_attach_5v_3a_pd_source_after, NULL);
@@ -68,8 +83,7 @@ ZTEST(usb_attach_5v_3a_pd_source, test_battery_is_charging)
uint16_t battery_status;
zassume_ok(sbat_emul_get_word_val(emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
+ &battery_status));
zassert_equal(battery_status & STATUS_DISCHARGING, 0,
"Battery is discharging: %d", battery_status);
}
@@ -137,8 +151,7 @@ ZTEST_F(usb_attach_5v_3a_pd_source, test_disconnect_battery_not_charging)
disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul);
zassert_ok(sbat_emul_get_word_val(emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
+ &battery_status));
zassert_equal(battery_status & STATUS_DISCHARGING, STATUS_DISCHARGING,
"Battery is not discharging: %d", battery_status);
}
@@ -225,7 +238,7 @@ ZTEST(usb_attach_5v_3a_pd_source,
batt_data->design_cap / 100) -
1;
- zassert_true(system_can_boot_ap(), NULL);
+ zassert_true(system_can_boot_ap());
}
ZTEST_F(usb_attach_5v_3a_pd_source,
@@ -246,7 +259,7 @@ ZTEST_F(usb_attach_5v_3a_pd_source,
disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul);
- zassert_false(system_can_boot_ap(), NULL);
+ zassert_false(system_can_boot_ap());
}
ZTEST_F(usb_attach_5v_3a_pd_source, test_uvdm_ignored)
@@ -282,3 +295,29 @@ ZTEST_F(usb_attach_5v_3a_pd_source, test_uvdm_ignored)
zassert_false(tcpm_response,
"Sent unstructured VDM to TCPM; TCPM did not ignore");
}
+
+ZTEST_F(usb_attach_5v_3a_pd_source, test_dps_battery_absent)
+{
+ control_battery_present(false);
+ zassert_false(battery_is_present(), "dps battery is present");
+ task_wake(TASK_ID_DPS);
+ /* wait dps_config.t_check*/
+ k_sleep(K_MSEC(5000));
+ zassert_true(dps_get_flag() & DPS_FLAG_NO_BATTERY,
+ "DPS_FLAG_NO_BATTERY is set");
+ control_battery_present(true);
+ zassert_true(battery_is_present(), "dps battery is not present");
+}
+
+ZTEST_F(usb_attach_5v_3a_pd_source, test_dps_enable)
+{
+ dps_enable(false);
+ zassert_false(dps_is_enabled());
+ task_wake(TASK_ID_DPS);
+ /* wait dps_config.t_check*/
+ k_sleep(K_MSEC(5000));
+ zassert_true(dps_get_flag() & DPS_FLAG_DISABLED,
+ "DPS_FLAG_DISABLED is set");
+ dps_enable(true);
+ zassert_true(dps_is_enabled());
+}