summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/src
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/src')
-rw-r--r--zephyr/test/drivers/src/battery.c31
-rw-r--r--zephyr/test/drivers/src/bb_retimer.c552
-rw-r--r--zephyr/test/drivers/src/bc12.c282
-rw-r--r--zephyr/test/drivers/src/bma2x2.c921
-rw-r--r--zephyr/test/drivers/src/bmi160.c2082
-rw-r--r--zephyr/test/drivers/src/bmi260.c2195
-rw-r--r--zephyr/test/drivers/src/charge_manager.c58
-rw-r--r--zephyr/test/drivers/src/chargesplash.c326
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelinfo.c55
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelinit.c93
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelrange.c112
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelrate.c104
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelread.c123
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelres.c127
-rw-r--r--zephyr/test/drivers/src/console_cmd/accelspoof.c97
-rw-r--r--zephyr/test/drivers/src/console_cmd/charge_manager.c146
-rw-r--r--zephyr/test/drivers/src/console_cmd/charge_state.c284
-rw-r--r--zephyr/test/drivers/src/console_cmd/usb_pd_console.c255
-rw-r--r--zephyr/test/drivers/src/cros_cbi.c55
-rw-r--r--zephyr/test/drivers/src/espi.c82
-rw-r--r--zephyr/test/drivers/src/gpio.c425
-rw-r--r--zephyr/test/drivers/src/host_cmd/motion_sense.c845
-rw-r--r--zephyr/test/drivers/src/i2c_passthru.c42
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb.c145
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_20v_3a_pd_charger.c235
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c318
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_source.c275
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_alt_mode.c160
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_attach_src_snk.c804
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_malfunction_sink.c259
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c402
-rw-r--r--zephyr/test/drivers/src/isl923x.c1107
-rw-r--r--zephyr/test/drivers/src/keyboard_scan.c29
-rw-r--r--zephyr/test/drivers/src/lid_switch.c250
-rw-r--r--zephyr/test/drivers/src/lis2dw12.c445
-rw-r--r--zephyr/test/drivers/src/ln9310.c695
-rw-r--r--zephyr/test/drivers/src/main.c38
-rw-r--r--zephyr/test/drivers/src/motion_sense/motion_sense.c35
-rw-r--r--zephyr/test/drivers/src/panic.c60
-rw-r--r--zephyr/test/drivers/src/power_common.c661
-rw-r--r--zephyr/test/drivers/src/ppc_sn5s330.c688
-rw-r--r--zephyr/test/drivers/src/ppc_syv682x.c804
-rw-r--r--zephyr/test/drivers/src/ps8xxx.c1255
-rw-r--r--zephyr/test/drivers/src/smart.c559
-rw-r--r--zephyr/test/drivers/src/stm_mems_common.c337
-rw-r--r--zephyr/test/drivers/src/stubs.c373
-rw-r--r--zephyr/test/drivers/src/tcpci.c488
-rw-r--r--zephyr/test/drivers/src/tcpci_test_common.c999
-rw-r--r--zephyr/test/drivers/src/tcs3400.c614
-rw-r--r--zephyr/test/drivers/src/temp_sensor.c139
-rw-r--r--zephyr/test/drivers/src/test_mocks.c35
-rw-r--r--zephyr/test/drivers/src/test_rules.c17
-rw-r--r--zephyr/test/drivers/src/thermistor.c298
-rw-r--r--zephyr/test/drivers/src/uart_hostcmd.c231
-rw-r--r--zephyr/test/drivers/src/usb_mux.c903
-rw-r--r--zephyr/test/drivers/src/usb_pd_host_cmd.c27
-rw-r--r--zephyr/test/drivers/src/utils.c361
-rw-r--r--zephyr/test/drivers/src/vboot_hash.c32
-rw-r--r--zephyr/test/drivers/src/watchdog.c142
59 files changed, 0 insertions, 23512 deletions
diff --git a/zephyr/test/drivers/src/battery.c b/zephyr/test/drivers/src/battery.c
deleted file mode 100644
index e454262aa2..0000000000
--- a/zephyr/test/drivers/src/battery.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "battery.h"
-#include "test/drivers/test_state.h"
-
-#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)
-
-ZTEST_USER(battery, test_battery_is_present_gpio)
-{
- const struct device *dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_BATT_PRES_ODL_PATH, gpios));
-
- zassert_not_null(dev, NULL);
- /* ec_batt_pres_odl = 0 means battery present. */
- zassert_ok(gpio_emul_input_set(dev, GPIO_BATT_PRES_ODL_PORT, 0), NULL);
- zassert_equal(BP_YES, battery_is_present(), NULL);
- /* ec_batt_pres_odl = 1 means battery missing. */
- zassert_ok(gpio_emul_input_set(dev, GPIO_BATT_PRES_ODL_PORT, 1), NULL);
- zassert_equal(BP_NO, battery_is_present(), NULL);
-}
-
-ZTEST_SUITE(battery, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/bb_retimer.c b/zephyr/test/drivers/src/bb_retimer.c
deleted file mode 100644
index dbe4d3143f..0000000000
--- a/zephyr/test/drivers/src/bb_retimer.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "emul/emul_bb_retimer.h"
-#include "emul/emul_common_i2c.h"
-#include "hooks.h"
-#include "i2c.h"
-#include "test/drivers/stubs.h"
-#include "usb_prl_sm.h"
-#include "usb_tc_sm.h"
-#include "chipset.h"
-
-#include "driver/retimer/bb_retimer.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-#define GPIO_USB_C1_LS_EN_PATH DT_PATH(named_gpios, usb_c1_ls_en)
-#define GPIO_USB_C1_LS_EN_PORT DT_GPIO_PIN(GPIO_USB_C1_LS_EN_PATH, gpios)
-#define GPIO_USB_C1_RT_RST_ODL_PATH DT_PATH(named_gpios, usb_c1_rt_rst_odl)
-#define GPIO_USB_C1_RT_RST_ODL_PORT \
- DT_GPIO_PIN(GPIO_USB_C1_RT_RST_ODL_PATH, gpios)
-#define EMUL_LABEL DT_NODELABEL(usb_c1_bb_retimer_emul)
-
-#define BB_RETIMER_ORD DT_DEP_ORD(EMUL_LABEL)
-
-/** Test is retimer fw update capable function. */
-ZTEST_USER(bb_retimer, test_bb_is_fw_update_capable)
-{
- /* BB retimer is fw update capable */
- zassert_true(bb_usb_retimer.is_retimer_fw_update_capable(), NULL);
-}
-
-/** Test is retimer fw update capable function. */
-ZTEST_USER(bb_retimer, test_bb_set_state)
-{
- struct pd_discovery *disc;
- uint32_t conn, exp_conn;
- struct i2c_emul *emul;
- bool ack_required;
-
- emul = bb_emul_get(BB_RETIMER_ORD);
-
- set_test_runner_tid();
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul,
- BB_RETIMER_REG_CONNECTION_STATE);
-
- /* Test fail on reset register write */
- zassert_equal(EC_ERROR_INVAL,
- bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_NONE, &ack_required),
- NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set UFP role for whole test */
- tc_set_data_role(USBC_PORT_C1, PD_ROLE_UFP);
-
- /* Test none mode */
- bb_emul_set_reg(emul, BB_RETIMER_REG_CONNECTION_STATE, 0x12144678);
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_NONE,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- /* Only UFP mode is set */
- exp_conn = BB_RETIMER_USB_DATA_ROLE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test USB3 gen1 mode */
- prl_set_rev(USBC_PORT_C1, TCPCI_MSG_SOP_PRIME, PD_REV10);
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_USB_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_USB_3_CONNECTION;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test USB3 gen2 mode */
- disc = pd_get_am_discovery_and_notify_access(
- USBC_PORT_C1, TCPCI_MSG_SOP_PRIME);
- disc->identity.product_t1.p_rev30.ss = USB_R30_SS_U32_U40_GEN2;
- prl_set_rev(USBC_PORT_C1, TCPCI_MSG_SOP_PRIME, PD_REV30);
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_USB_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_USB_3_CONNECTION |
- BB_RETIMER_USB_3_SPEED;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test USB4 mode */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_USB4_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_USB4_ENABLED;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test USB4 mode with polarity inverted */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_USB4_ENABLED |
- USB_PD_MUX_POLARITY_INVERTED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_CONNECTION_ORIENTATION |
- BB_RETIMER_USB4_ENABLED;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test DP mode */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_DP_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_DP_CONNECTION;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_DP_ENABLED |
- USB_PD_MUX_HPD_IRQ,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_DP_CONNECTION |
- BB_RETIMER_IRQ_HPD;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_DP_ENABLED |
- USB_PD_MUX_HPD_LVL,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_USB_DATA_ROLE |
- BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_DP_CONNECTION |
- BB_RETIMER_HPD_LVL;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-}
-
-/** Test setting different options for DFP role */
-ZTEST_USER(bb_retimer, test_bb_set_dfp_state)
-{
- union tbt_mode_resp_device device_resp;
- union tbt_mode_resp_cable cable_resp;
- struct pd_discovery *disc, *dev_disc;
- uint32_t conn, exp_conn;
- struct i2c_emul *emul;
- bool ack_required;
-
- emul = bb_emul_get(BB_RETIMER_ORD);
-
- set_test_runner_tid();
-
- tc_set_data_role(USBC_PORT_C1, PD_ROLE_DFP);
-
- /* Test PD mux none mode with DFP should clear all bits in state */
- bb_emul_set_reg(emul, BB_RETIMER_REG_CONNECTION_STATE, 0x12144678);
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_NONE,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = 0;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Set active cable type */
- disc = pd_get_am_discovery_and_notify_access(
- USBC_PORT_C1, TCPCI_MSG_SOP_PRIME);
- disc->identity.idh.product_type = IDH_PTYPE_ACABLE;
- disc->identity.product_t2.a2_rev30.active_elem = ACTIVE_RETIMER;
- disc->identity.product_t1.p_rev30.ss = USB_R30_SS_U32_U40_GEN2;
- prl_set_rev(USBC_PORT_C1, TCPCI_MSG_SOP_PRIME, PD_REV30);
-
- /* Set cable VDO */
- disc->svid_cnt = 1;
- disc->svids[0].svid = USB_VID_INTEL;
- disc->svids[0].discovery = PD_DISC_COMPLETE;
- disc->svids[0].mode_cnt = 1;
- cable_resp.tbt_alt_mode = TBT_ALTERNATE_MODE;
- cable_resp.tbt_cable_speed = TBT_SS_RES_0;
- cable_resp.tbt_rounded = TBT_GEN3_NON_ROUNDED;
- cable_resp.tbt_cable = TBT_CABLE_NON_OPTICAL;
- cable_resp.retimer_type = USB_NOT_RETIMER;
- cable_resp.lsrx_comm = BIDIR_LSRX_COMM;
- cable_resp.tbt_active_passive = TBT_CABLE_PASSIVE;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
-
- /* Set device VDO */
- dev_disc = pd_get_am_discovery_and_notify_access(
- USBC_PORT_C1, TCPCI_MSG_SOP);
- dev_disc->svid_cnt = 1;
- dev_disc->svids[0].svid = USB_VID_INTEL;
- dev_disc->svids[0].discovery = PD_DISC_COMPLETE;
- dev_disc->svids[0].mode_cnt = 1;
- device_resp.tbt_alt_mode = TBT_ALTERNATE_MODE;
- device_resp.tbt_adapter = TBT_ADAPTER_TBT3;
- device_resp.intel_spec_b0 = VENDOR_SPECIFIC_NOT_SUPPORTED;
- device_resp.vendor_spec_b0 = VENDOR_SPECIFIC_NOT_SUPPORTED;
- device_resp.vendor_spec_b1 = VENDOR_SPECIFIC_NOT_SUPPORTED;
- dev_disc->svids[0].mode_vdo[0] = device_resp.raw_value;
-
- /* Test USB mode with active cable */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_USB_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_USB_3_CONNECTION |
- BB_RETIMER_USB_3_SPEED |
- BB_RETIMER_RE_TIMER_DRIVER |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with active cable */
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with retimer */
- cable_resp.retimer_type = USB_RETIMER;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_RE_TIMER_DRIVER |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with optical cable */
- cable_resp.retimer_type = USB_NOT_RETIMER;
- cable_resp.tbt_cable = TBT_CABLE_OPTICAL;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_TBT_CABLE_TYPE |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with active link training */
- cable_resp.tbt_cable = TBT_CABLE_NON_OPTICAL;
- cable_resp.lsrx_comm = UNIDIR_LSRX_COMM;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_TBT_ACTIVE_LINK_TRAINING |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with different cable speeds */
- cable_resp.lsrx_comm = BIDIR_LSRX_COMM;
- cable_resp.tbt_cable_speed = TBT_SS_U31_GEN1;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_USB4_TBT_CABLE_SPEED_SUPPORT(1) |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- cable_resp.tbt_cable_speed = TBT_SS_U32_GEN1_GEN2;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_USB4_TBT_CABLE_SPEED_SUPPORT(2) |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- cable_resp.tbt_cable_speed = TBT_SS_TBT_GEN3;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_USB4_TBT_CABLE_SPEED_SUPPORT(3) |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with TBT gen4 cable */
- cable_resp.tbt_cable_speed = TBT_SS_RES_0;
- cable_resp.tbt_rounded = TBT_GEN3_GEN4_ROUNDED_NON_ROUNDED;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_TBT_CABLE_GENERATION(1) |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with legacy TBT adapter */
- cable_resp.tbt_rounded = TBT_GEN3_NON_ROUNDED;
- disc->svids[0].mode_vdo[0] = cable_resp.raw_value;
- device_resp.tbt_adapter = TBT_ADAPTER_TBT2_LEGACY;
- dev_disc->svids[0].mode_vdo[0] = device_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_TBT_TYPE |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with Intel specific b0 */
- device_resp.tbt_adapter = TBT_ADAPTER_TBT3;
- device_resp.intel_spec_b0 = VENDOR_SPECIFIC_SUPPORTED;
- dev_disc->svids[0].mode_vdo[0] = device_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_ACTIVE_PASSIVE;
-
- if (IS_ENABLED(CONFIG_USBC_RETIMER_INTEL_BB_VPRO_CAPABLE))
- exp_conn |= BB_RETIMER_VPRO_DOCK_DP_OVERDRIVE;
-
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-
- /* Test TBT mode with vendor specific b1 */
- device_resp.intel_spec_b0 = VENDOR_SPECIFIC_NOT_SUPPORTED;
- device_resp.vendor_spec_b1 = VENDOR_SPECIFIC_SUPPORTED;
- dev_disc->svids[0].mode_vdo[0] = device_resp.raw_value;
- zassert_equal(EC_SUCCESS, bb_usb_retimer.set(&usb_muxes[USBC_PORT_C1],
- USB_PD_MUX_TBT_COMPAT_ENABLED,
- &ack_required), NULL);
- zassert_false(ack_required, "ACK is never required for BB retimer");
- conn = bb_emul_get_reg(emul, BB_RETIMER_REG_CONNECTION_STATE);
- exp_conn = BB_RETIMER_DATA_CONNECTION_PRESENT |
- BB_RETIMER_TBT_CONNECTION |
- BB_RETIMER_VPRO_DOCK_DP_OVERDRIVE |
- BB_RETIMER_ACTIVE_PASSIVE;
- zassert_equal(exp_conn, conn, "Expected state 0x%lx, got 0x%lx",
- exp_conn, conn);
-}
-
-/** Test BB retimer init */
-ZTEST_USER(bb_retimer, test_bb_init)
-{
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_USB_C1_LS_EN_PATH, gpios));
- struct i2c_emul *emul;
-
- zassert_not_null(gpio_dev, "Cannot get GPIO device");
-
- emul = bb_emul_get(BB_RETIMER_ORD);
-
- /* Set AP to normal state and wait for chipset task */
- test_set_chipset_to_s0();
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BB_RETIMER_REG_VENDOR_ID);
- /* Test fail on vendor ID read */
- zassert_equal(EC_ERROR_INVAL,
- bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]), NULL);
- /* Enable pins should be set always after init, when AP is on */
- zassert_equal(1, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-
- /* Setup wrong vendor ID */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- bb_emul_set_reg(emul, BB_RETIMER_REG_VENDOR_ID, 0x12144678);
- /* Test fail on wrong vendor ID */
- zassert_equal(EC_ERROR_INVAL,
- bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]), NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-
- /* Setup emulator fail on device ID read */
- i2c_common_emul_set_read_fail_reg(emul, BB_RETIMER_REG_DEVICE_ID);
- bb_emul_set_reg(emul, BB_RETIMER_REG_VENDOR_ID, BB_RETIMER_VENDOR_ID_1);
- /* Test fail on device ID read */
- zassert_equal(EC_ERROR_INVAL,
- bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]), NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-
- /* Setup wrong device ID */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- bb_emul_set_reg(emul, BB_RETIMER_REG_DEVICE_ID, 0x12144678);
- /* Test fail on wrong device ID */
- zassert_equal(EC_ERROR_INVAL,
- bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]), NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-
- /* Test successful init */
- bb_emul_set_reg(emul, BB_RETIMER_REG_DEVICE_ID, BB_RETIMER_DEVICE_ID);
- zassert_equal(EC_SUCCESS, bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
- zassert_equal(1, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-
- /* Set AP to off state and wait for chipset task */
- test_set_chipset_to_g3();
-
- /* With AP off, init should fail and pins should be unset */
- zassert_equal(EC_ERROR_NOT_POWERED,
- bb_usb_retimer.init(&usb_muxes[USBC_PORT_C1]), NULL);
- zassert_equal(0, gpio_emul_output_get(gpio_dev, GPIO_USB_C1_LS_EN_PORT),
- NULL);
-
- msleep(1);
- zassert_equal(0, gpio_emul_output_get(gpio_dev,
- GPIO_USB_C1_RT_RST_ODL_PORT),
- NULL);
-}
-
-/** Test BB retimer console command */
-ZTEST_USER(bb_retimer, test_bb_console_cmd)
-{
- int rv;
-
- /* Validate well formed shell commands */
- rv = shell_execute_cmd(get_ec_shell(), "bb 1 r 2");
- zassert_ok(rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb 1 w 2 0");
- zassert_ok(rv, "rv=%d", rv);
-
- /* Validate errors for malformed shell commands */
- rv = shell_execute_cmd(get_ec_shell(), "bb x");
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb x r 2");
- zassert_equal(EC_ERROR_PARAM1, rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb 0 r 2");
- zassert_equal(EC_ERROR_PARAM1, rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb 1 x 2");
- zassert_equal(EC_ERROR_PARAM2, rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb 1 r x");
- zassert_equal(EC_ERROR_PARAM3, rv, "rv=%d", rv);
- rv = shell_execute_cmd(get_ec_shell(), "bb 1 w 2 x");
- zassert_equal(EC_ERROR_PARAM4, rv, "rv=%d", rv);
-}
-
-ZTEST_SUITE(bb_retimer, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/bc12.c b/zephyr/test/drivers/src/bc12.c
deleted file mode 100644
index d1a96131c1..0000000000
--- a/zephyr/test/drivers/src/bc12.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "emul/emul_pi3usb9201.h"
-
-#include "timer.h"
-#include "usb_charge.h"
-#include "battery.h"
-#include "extpower.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/test_state.h"
-
-#include <zephyr/logging/log.h>
-LOG_MODULE_REGISTER(test_drivers_bc12, LOG_LEVEL_DBG);
-
-#define EMUL_LABEL DT_NODELABEL(pi3usb9201_emul)
-
-#define PI3USB9201_ORD DT_DEP_ORD(EMUL_LABEL)
-
-/* Control_1 register bit definitions */
-#define PI3USB9201_REG_CTRL_1_INT_MASK BIT(0)
-#define PI3USB9201_REG_CTRL_1_MODE_SHIFT 1
-#define PI3USB9201_REG_CTRL_1_MODE_MASK (0x7 << \
- PI3USB9201_REG_CTRL_1_MODE_SHIFT)
-
-/* Control_2 register bit definitions */
-#define PI3USB9201_REG_CTRL_2_AUTO_SW BIT(1)
-#define PI3USB9201_REG_CTRL_2_START_DET BIT(3)
-
-/* Host status register bit definitions */
-#define PI3USB9201_REG_HOST_STS_BC12_DET BIT(0)
-#define PI3USB9201_REG_HOST_STS_DEV_PLUG BIT(1)
-#define PI3USB9201_REG_HOST_STS_DEV_UNPLUG BIT(2)
-
-enum pi3usb9201_mode {
- PI3USB9201_POWER_DOWN,
- PI3USB9201_SDP_HOST_MODE,
- PI3USB9201_DCP_HOST_MODE,
- PI3USB9201_CDP_HOST_MODE,
- PI3USB9201_CLIENT_MODE,
- PI3USB9201_RESERVED_1,
- PI3USB9201_RESERVED_2,
- PI3USB9201_USB_PATH_ON,
-};
-
-enum pi3usb9201_client_sts {
- CHG_OTHER = 0,
- CHG_2_4A,
- CHG_2_0A,
- CHG_1_0A,
- CHG_RESERVED,
- CHG_CDP,
- CHG_SDP,
- CHG_DCP,
-};
-
-struct bc12_status {
- enum charge_supplier supplier;
- int current_limit;
-};
-
-static const struct bc12_status bc12_chg_limits[] = {
- [CHG_OTHER] = { .supplier = CHARGE_SUPPLIER_OTHER,
- .current_limit = 500 },
- [CHG_2_4A] = { .supplier = CHARGE_SUPPLIER_PROPRIETARY,
- .current_limit = USB_CHARGER_MAX_CURR_MA },
- [CHG_2_0A] = { .supplier = CHARGE_SUPPLIER_PROPRIETARY,
- .current_limit = USB_CHARGER_MAX_CURR_MA },
- [CHG_1_0A] = { .supplier = CHARGE_SUPPLIER_PROPRIETARY,
- .current_limit = 1000 },
- [CHG_RESERVED] = { .supplier = CHARGE_SUPPLIER_NONE,
- .current_limit = 0 },
- [CHG_CDP] = { .supplier = CHARGE_SUPPLIER_BC12_CDP,
- .current_limit = USB_CHARGER_MAX_CURR_MA },
- [CHG_SDP] = { .supplier = CHARGE_SUPPLIER_BC12_SDP,
- .current_limit = 500 },
-#if defined(CONFIG_CHARGE_RAMP_SW) || defined(CONFIG_CHARGE_RAMP_HW)
- [CHG_DCP] = { .supplier = CHARGE_SUPPLIER_BC12_DCP,
- .current_limit = USB_CHARGER_MAX_CURR_MA },
-#else
- [CHG_DCP] = { .supplier = CHARGE_SUPPLIER_BC12_DCP,
- .current_limit = 500 },
-#endif
-};
-
-#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)
-
-#define GPIO_ACOK_OD_PATH DT_PATH(named_gpios, acok_od)
-#define GPIO_ACOK_OD_PORT DT_GPIO_PIN(GPIO_ACOK_OD_PATH, gpios)
-
-static void test_bc12_pi3usb9201_host_mode(void)
-{
- struct i2c_emul *emul = pi3usb9201_emul_get(PI3USB9201_ORD);
- uint8_t a, b;
-
- /*
- * Pretend that the USB-C Port Manager (TCPMv2) has set the port data
- * role to DFP.
- */
- usb_charger_task_set_event(0, USB_CHG_EVENT_DR_DFP);
- msleep(1);
- /*
- * Expect the pi3usb9201 driver to configure CDP host mode and unmask
- * interrupts.
- */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_CDP_HOST_MODE << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- zassert_equal(a, b, NULL);
-
- /* Pretend that a device has been plugged in. */
- msleep(500);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_HOST_STS,
- PI3USB9201_REG_HOST_STS_DEV_PLUG);
- usb_charger_task_set_event(0, USB_CHG_EVENT_BC12);
- msleep(1);
- /* Expect the pi3usb9201 driver to configure SDP host mode. */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_SDP_HOST_MODE << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- zassert_equal(a, b, NULL);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_HOST_STS, 0);
-
- /* Pretend that a device has been unplugged. */
- msleep(500);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_HOST_STS,
- PI3USB9201_REG_HOST_STS_DEV_UNPLUG);
- usb_charger_task_set_event(0, USB_CHG_EVENT_BC12);
- msleep(1);
- /* Expect the pi3usb9201 driver to configure CDP host mode. */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_CDP_HOST_MODE << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- zassert_equal(a, b, NULL);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_HOST_STS, 0);
-}
-
-static void test_bc12_pi3usb9201_client_mode(
- enum pi3usb9201_client_sts detect_result,
- enum charge_supplier supplier, int current_limit)
-{
- struct i2c_emul *emul = pi3usb9201_emul_get(PI3USB9201_ORD);
- uint8_t a, b;
- int port, voltage;
-
- /*
- * Pretend that the USB-C Port Manager (TCPMv2) has set the port data
- * role to UFP and decided charging from the port is allowed.
- */
- msleep(500);
- usb_charger_task_set_event(0, USB_CHG_EVENT_DR_UFP);
- charge_manager_update_dualrole(USBC_PORT_C0, CAP_DEDICATED);
- msleep(1);
- /*
- * Expect the pi3usb9201 driver to configure client mode and start
- * detection.
- */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_CLIENT_MODE << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- zassert_equal(a, b, NULL);
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_2, &a);
- b = PI3USB9201_REG_CTRL_2_START_DET;
- zassert_equal(a, b, NULL);
-
- /* Pretend that detection completed. */
- msleep(500);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_CLIENT_STS,
- 1 << detect_result);
- usb_charger_task_set_event(0, USB_CHG_EVENT_BC12);
- msleep(1);
- /* Expect the pi3usb9201 driver to clear the start bit. */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_2, &a);
- zassert_equal(a, 0, NULL);
- pi3usb9201_emul_set_reg(emul, PI3USB9201_REG_CLIENT_STS, 0);
- /*
- * Expect the charge manager to select the detected BC1.2 supplier.
- */
- port = CHARGE_PORT_NONE;
- voltage = 0;
- if (supplier != CHARGE_SUPPLIER_NONE) {
- port = USBC_PORT_C0;
- voltage = USB_CHARGER_VOLTAGE_MV;
- }
- /* Wait for the charge port to update. */
- msleep(500);
- zassert_equal(charge_manager_get_active_charge_port(),
- port, NULL);
- zassert_equal(charge_manager_get_supplier(),
- supplier, NULL);
- zassert_equal(charge_manager_get_charger_current(),
- current_limit, NULL);
- zassert_equal(charge_manager_get_charger_voltage(),
- voltage, NULL);
-
- /*
- * Pretend that the USB-C Port Manager (TCPMv2) has set the port data
- * role to disconnected.
- */
- msleep(500);
- usb_charger_task_set_event(0, USB_CHG_EVENT_CC_OPEN);
- msleep(1);
- /*
- * Expect the pi3usb9201 driver to configure power down mode and mask
- * interrupts.
- */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_POWER_DOWN << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- b |= PI3USB9201_REG_CTRL_1_INT_MASK;
- zassert_equal(a, b, NULL);
- /* Expect the charge manager to have no active supplier. */
- zassert_equal(charge_manager_get_active_charge_port(),
- CHARGE_PORT_NONE, NULL);
- zassert_equal(charge_manager_get_supplier(),
- CHARGE_SUPPLIER_NONE, NULL);
- zassert_equal(charge_manager_get_charger_current(), 0, NULL);
- zassert_equal(charge_manager_get_charger_voltage(), 0, NULL);
-}
-
-/*
- * PI3USB9201 is a dual-role BC1.2 charger detector/advertiser used on USB
- * ports. It can be programmed to operate in host mode or client mode through
- * I2C. When operating as a host, PI3USB9201 enables BC1.2 SDP/CDP/DCP
- * advertisement to the attached USB devices via the D+/- connection. When
- * operating as a client, PI3USB9201 starts BC1.2 detection to detect the
- * attached host type. In both host mode and client mode, the detection results
- * are reported through I2C to the controller.
- */
-ZTEST_USER(bc12, test_bc12_pi3usb9201)
-{
- const struct device *batt_pres_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_BATT_PRES_ODL_PATH, gpios));
- const struct device *acok_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_ACOK_OD_PATH, gpios));
- struct i2c_emul *emul = pi3usb9201_emul_get(PI3USB9201_ORD);
- uint8_t a, b;
-
- /* Pretend we have battery and AC so charging works normally. */
- zassert_ok(gpio_emul_input_set(batt_pres_dev,
- GPIO_BATT_PRES_ODL_PORT, 0), NULL);
- zassert_equal(BP_YES, battery_is_present(), NULL);
- zassert_ok(gpio_emul_input_set(acok_dev, GPIO_ACOK_OD_PORT, 1), NULL);
- msleep(CONFIG_EXTPOWER_DEBOUNCE_MS + 1);
- zassert_equal(1, extpower_is_present(), NULL);
-
- /* Wait long enough for TCPMv2 to be idle. */
- msleep(2000);
-
- /*
- * Pretend that the USB-C Port Manager (TCPMv2) has set the port data
- * role to disconnected.
- */
- usb_charger_task_set_event(0, USB_CHG_EVENT_CC_OPEN);
- usb_charger_task_set_event(1, USB_CHG_EVENT_CC_OPEN);
- msleep(1);
- /*
- * Expect the pi3usb9201 driver to configure power down mode and mask
- * interrupts.
- */
- pi3usb9201_emul_get_reg(emul, PI3USB9201_REG_CTRL_1, &a);
- b = PI3USB9201_POWER_DOWN << PI3USB9201_REG_CTRL_1_MODE_SHIFT;
- b |= PI3USB9201_REG_CTRL_1_INT_MASK;
- zassert_equal(a, b, NULL);
-
- test_bc12_pi3usb9201_host_mode();
-
- for (int c = CHG_OTHER; c <= CHG_DCP; c++) {
- test_bc12_pi3usb9201_client_mode(c,
- bc12_chg_limits[c].supplier,
- bc12_chg_limits[c].current_limit);
- }
-}
-
-/*
- * TODO(b/216660795): Cleanup state using a teardown_fn
- */
-
-ZTEST_SUITE(bc12, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/bma2x2.c b/zephyr/test/drivers/src/bma2x2.c
deleted file mode 100644
index 1995adc571..0000000000
--- a/zephyr/test/drivers/src/bma2x2.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "i2c.h"
-#include "emul/emul_bma255.h"
-#include "emul/emul_common_i2c.h"
-
-#include "accelgyro.h"
-#include "motion_sense.h"
-#include "driver/accel_bma2x2.h"
-#include "test/drivers/test_state.h"
-
-/** How accurate comparision of vectors should be. */
-#define V_EPS 8
-
-#define EMUL_LABEL DT_NODELABEL(bma_emul)
-
-#define BMA_ORD DT_DEP_ORD(EMUL_LABEL)
-
-/** Mutex for test motion sensor */
-static mutex_t sensor_mutex;
-
-/** Rotation used in some tests */
-static const mat33_fp_t test_rotation = {
- { 0, FLOAT_TO_FP(1), 0},
- { FLOAT_TO_FP(-1), 0, 0},
- { 0, 0, FLOAT_TO_FP(-1)}
-};
-
-/** Rotate given vector by test rotation */
-void rotate_int3v_by_test_rotation(int16_t *v)
-{
- int16_t t;
-
- t = v[0];
- v[0] = -v[1];
- v[1] = t;
- v[2] = -v[2];
-}
-
-static struct accelgyro_saved_data_t acc_data;
-
-/** Mock minimal motion sensor setup required for bma2x2 driver test */
-static struct motion_sensor_t ms = {
- .name = "bma_emul",
- .type = MOTIONSENSE_TYPE_ACCEL,
- .drv = &bma2x2_accel_drv,
- .mutex = &sensor_mutex,
- .drv_data = &acc_data,
- .port = NAMED_I2C(accel),
- .i2c_spi_addr_flags = DT_REG_ADDR(EMUL_LABEL),
- .rot_standard_ref = NULL,
- .current_range = 0,
-};
-
-/** Set emulator offset values to vector of three int16_t */
-static void set_emul_offset(struct i2c_emul *emul, int16_t *offset)
-{
- bma_emul_set_off(emul, BMA_EMUL_AXIS_X, offset[0]);
- bma_emul_set_off(emul, BMA_EMUL_AXIS_Y, offset[1]);
- bma_emul_set_off(emul, BMA_EMUL_AXIS_Z, offset[2]);
-}
-
-/** Save emulator offset values to vector of three int16_t */
-static void get_emul_offset(struct i2c_emul *emul, int16_t *offset)
-{
- offset[0] = bma_emul_get_off(emul, BMA_EMUL_AXIS_X);
- offset[1] = bma_emul_get_off(emul, BMA_EMUL_AXIS_Y);
- offset[2] = bma_emul_get_off(emul, BMA_EMUL_AXIS_Z);
-}
-
-/** Set emulator accelerometer values to vector of three int16_t */
-static void set_emul_acc(struct i2c_emul *emul, int16_t *acc)
-{
- bma_emul_set_acc(emul, BMA_EMUL_AXIS_X, acc[0]);
- bma_emul_set_acc(emul, BMA_EMUL_AXIS_Y, acc[1]);
- bma_emul_set_acc(emul, BMA_EMUL_AXIS_Z, acc[2]);
-}
-
-/** Convert accelerometer read to units used by emulator */
-static void drv_acc_to_emul(intv3_t drv, int range, int16_t *out)
-{
- const int scale = MOTION_SCALING_FACTOR / BMA_EMUL_1G;
-
- out[0] = drv[0] * range / scale;
- out[1] = drv[1] * range / scale;
- out[2] = drv[2] * range / scale;
-}
-
-/** Compare two vectors of three int16_t */
-static void compare_int3v_f(int16_t *exp_v, int16_t *v, int line)
-{
- int i;
-
- for (i = 0; i < 3; i++) {
- zassert_within(exp_v[i], v[i], V_EPS,
- "Expected [%d; %d; %d], got [%d; %d; %d]; line: %d",
- exp_v[0], exp_v[1], exp_v[2], v[0], v[1], v[2], line);
- }
-}
-#define compare_int3v(exp_v, v) compare_int3v_f(exp_v, v, __LINE__)
-
-/** Data for reset fail function */
-struct reset_func_data {
- /** Fail for given attempts */
- int fail_attempts;
- /** Do not fail for given attempts */
- int ok_before_fail;
- /** Reset register value after given attempts */
- int reset_value;
-};
-
-/**
- * Custom emulator function used in init test. It returns cmd soft when reset
- * register is accessed data.reset_value times. Error is returned after
- * accessing register data.ok_before_fail times. Error is returned during next
- * data.fail_attempts times.
- */
-static int emul_read_reset(struct i2c_emul *emul, int reg, uint8_t *buf,
- int bytes, void *data)
-{
- struct reset_func_data *d = data;
-
- reg = bma_emul_access_reg(emul, reg, bytes, true /* = read */);
- if (reg != BMA2x2_RST_ADDR) {
- return 1;
- }
-
- if (d->reset_value > 0) {
- d->reset_value--;
- bma_emul_set_reg(emul, BMA2x2_RST_ADDR, BMA2x2_CMD_SOFT_RESET);
- } else {
- bma_emul_set_reg(emul, BMA2x2_RST_ADDR, 0);
- }
-
- if (d->ok_before_fail > 0) {
- d->ok_before_fail--;
- return 1;
- }
-
- if (d->fail_attempts > 0) {
- d->fail_attempts--;
- return -EIO;
- }
-
- return 1;
-}
-
-/**
- * Test get offset with and without rotation. Also test behaviour on I2C error.
- */
-ZTEST_USER(bma2x2, test_bma_get_offset)
-{
- struct i2c_emul *emul;
- int16_t ret_offset[3];
- int16_t exp_offset[3];
- int16_t temp;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Test fail on each axis */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_OFFSET_X_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL,
- ms.drv->get_offset(&ms, ret_offset, &temp), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_OFFSET_Y_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL,
- ms.drv->get_offset(&ms, ret_offset, &temp), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_OFFSET_Z_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL,
- ms.drv->get_offset(&ms, ret_offset, &temp), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set emulator offset */
- exp_offset[0] = BMA_EMUL_1G / 10;
- exp_offset[1] = BMA_EMUL_1G / 20;
- exp_offset[2] = -(int)BMA_EMUL_1G / 30;
- set_emul_offset(emul, exp_offset);
- /* Disable rotation */
- ms.rot_standard_ref = NULL;
-
- /* Test get offset without rotation */
- zassert_equal(EC_SUCCESS, ms.drv->get_offset(&ms, ret_offset, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- compare_int3v(exp_offset, ret_offset);
-
- /* Setup rotation and rotate expected offset */
- ms.rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_offset);
-
- /* Test get offset with rotation */
- zassert_equal(EC_SUCCESS, ms.drv->get_offset(&ms, ret_offset, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- compare_int3v(exp_offset, ret_offset);
-}
-
-/**
- * Test set offset with and without rotation. Also test behaviour on I2C error.
- */
-ZTEST_USER(bma2x2, test_bma_set_offset)
-{
- struct i2c_emul *emul;
- int16_t ret_offset[3];
- int16_t exp_offset[3];
- int16_t temp = 0;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Test fail on each axis */
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_OFFSET_X_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_offset(&ms, exp_offset, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_OFFSET_Y_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_offset(&ms, exp_offset, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_OFFSET_Z_AXIS_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_offset(&ms, exp_offset, temp),
- NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set input offset */
- exp_offset[0] = BMA_EMUL_1G / 10;
- exp_offset[1] = BMA_EMUL_1G / 20;
- exp_offset[2] = -(int)BMA_EMUL_1G / 30;
- /* Disable rotation */
- ms.rot_standard_ref = NULL;
-
- /* Test set offset without rotation */
- zassert_equal(EC_SUCCESS, ms.drv->set_offset(&ms, exp_offset, temp),
- NULL);
- get_emul_offset(emul, ret_offset);
- compare_int3v(exp_offset, ret_offset);
-
- /* Setup rotation and rotate input for set_offset function */
- ms.rot_standard_ref = &test_rotation;
- ret_offset[0] = exp_offset[0];
- ret_offset[1] = exp_offset[1];
- ret_offset[2] = exp_offset[2];
- rotate_int3v_by_test_rotation(ret_offset);
-
- /* Test set offset with rotation */
- zassert_equal(EC_SUCCESS, ms.drv->set_offset(&ms, ret_offset, temp),
- NULL);
- get_emul_offset(emul, ret_offset);
- compare_int3v(exp_offset, ret_offset);
-}
-
-/*
- * Try to set range and check if expected range was set in driver and in
- * emulator.
- */
-static void check_set_range_f(struct i2c_emul *emul, int range, int rnd,
- int exp_range, int line)
-{
- uint8_t exp_range_reg;
- uint8_t range_reg;
-
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, range, rnd),
- "set_range failed; line: %d", line);
- zassert_equal(exp_range, ms.current_range,
- "Expected range %d, got %d; line %d",
- exp_range, ms.current_range, line);
- range_reg = bma_emul_get_reg(emul, BMA2x2_RANGE_SELECT_ADDR);
- range_reg &= BMA2x2_RANGE_SELECT_MSK;
-
- switch (exp_range) {
- case 2:
- exp_range_reg = BMA2x2_RANGE_2G;
- break;
- case 4:
- exp_range_reg = BMA2x2_RANGE_4G;
- break;
- case 8:
- exp_range_reg = BMA2x2_RANGE_8G;
- break;
- case 16:
- exp_range_reg = BMA2x2_RANGE_16G;
- break;
- default:
- /* Unknown expected range */
- zassert_unreachable(
- "Expected range %d not supported by device; line %d",
- exp_range, line);
- return;
- }
-
- zassert_equal(exp_range_reg, range_reg,
- "Expected range reg 0x%x, got 0x%x; line %d",
- exp_range_reg, range_reg, line);
-}
-#define check_set_range(emul, range, rnd, exp_range) \
- check_set_range_f(emul, range, rnd, exp_range, __LINE__)
-
-/** Test set range with and without I2C errors. */
-ZTEST_USER(bma2x2, test_bma_set_range)
-{
- struct i2c_emul *emul;
- int start_range;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Setup starting range, shouldn't be changed on error */
- start_range = 2;
- ms.current_range = start_range;
- bma_emul_set_reg(emul, BMA2x2_RANGE_SELECT_ADDR, BMA2x2_RANGE_2G);
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_RANGE_SELECT_ADDR);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_range(&ms, 12, 0), NULL);
- zassert_equal(start_range, ms.current_range, NULL);
- zassert_equal(BMA2x2_RANGE_2G,
- bma_emul_get_reg(emul, BMA2x2_RANGE_SELECT_ADDR), NULL);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_range(&ms, 12, 1), NULL);
- zassert_equal(start_range, ms.current_range, NULL);
- zassert_equal(BMA2x2_RANGE_2G,
- bma_emul_get_reg(emul, BMA2x2_RANGE_SELECT_ADDR), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_RANGE_SELECT_ADDR);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_range(&ms, 12, 0), NULL);
- zassert_equal(start_range, ms.current_range, NULL);
- zassert_equal(BMA2x2_RANGE_2G,
- bma_emul_get_reg(emul, BMA2x2_RANGE_SELECT_ADDR), NULL);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_range(&ms, 12, 1), NULL);
- zassert_equal(start_range, ms.current_range, NULL);
- zassert_equal(BMA2x2_RANGE_2G,
- bma_emul_get_reg(emul, BMA2x2_RANGE_SELECT_ADDR), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting range with rounding down */
- check_set_range(emul, 1, 0, 2);
- check_set_range(emul, 2, 0, 2);
- check_set_range(emul, 3, 0, 2);
- check_set_range(emul, 4, 0, 4);
- check_set_range(emul, 5, 0, 4);
- check_set_range(emul, 6, 0, 4);
- check_set_range(emul, 7, 0, 4);
- check_set_range(emul, 8, 0, 8);
- check_set_range(emul, 9, 0, 8);
- check_set_range(emul, 15, 0, 8);
- check_set_range(emul, 16, 0, 16);
- check_set_range(emul, 17, 0, 16);
-
- /* Test setting range with rounding up */
- check_set_range(emul, 1, 1, 2);
- check_set_range(emul, 2, 1, 2);
- check_set_range(emul, 3, 1, 4);
- check_set_range(emul, 4, 1, 4);
- check_set_range(emul, 5, 1, 8);
- check_set_range(emul, 6, 1, 8);
- check_set_range(emul, 7, 1, 8);
- check_set_range(emul, 8, 1, 8);
- check_set_range(emul, 9, 1, 16);
- check_set_range(emul, 15, 1, 16);
- check_set_range(emul, 16, 1, 16);
- check_set_range(emul, 17, 1, 16);
-}
-
-/** Test init with and without I2C errors. */
-ZTEST_USER(bma2x2, test_bma_init)
-{
- struct reset_func_data reset_func_data;
- struct i2c_emul *emul;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Setup emulator fail read function */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_CHIP_ID_ADDR);
-
- /* Test fail on chip id read */
- zassert_equal(EC_ERROR_UNKNOWN, ms.drv->init(&ms), NULL);
-
- /* Disable failing on chip id read, but set wrong value */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- bma_emul_set_reg(emul, BMA2x2_CHIP_ID_ADDR, 23);
-
- /* Test wrong chip id */
- zassert_equal(EC_ERROR_ACCESS_DENIED, ms.drv->init(&ms), NULL);
-
- /* Set correct chip id, but fail on reset reg read */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_RST_ADDR);
- bma_emul_set_reg(emul, BMA2x2_CHIP_ID_ADDR, BMA255_CHIP_ID_MAJOR);
-
- /* Test fail on reset register read */
- zassert_equal(EC_ERROR_INVAL, ms.drv->init(&ms), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_RST_ADDR);
-
- /* Test fail on reset register write */
- zassert_equal(EC_ERROR_INVAL, ms.drv->init(&ms), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail reset read function */
- reset_func_data.ok_before_fail = 1;
- reset_func_data.fail_attempts = 100;
- reset_func_data.reset_value = 0;
- i2c_common_emul_set_read_func(emul, emul_read_reset, &reset_func_data);
-
- /* Test fail on too many reset read errors */
- zassert_equal(EC_ERROR_TIMEOUT, ms.drv->init(&ms), NULL);
-
- /* Test success after reset read errors */
- reset_func_data.ok_before_fail = 1;
- reset_func_data.fail_attempts = 3;
- zassert_equal(EC_RES_SUCCESS, ms.drv->init(&ms), NULL);
-
- /* Test success without read errors */
- reset_func_data.fail_attempts = 0;
- zassert_equal(EC_RES_SUCCESS, ms.drv->init(&ms), NULL);
-
- /* Test fail on too many reset read wrong value */
- reset_func_data.fail_attempts = 0;
- reset_func_data.reset_value = 100;
- zassert_equal(EC_ERROR_TIMEOUT, ms.drv->init(&ms), NULL);
-
- /* Test success on few reset read wrong value */
- reset_func_data.fail_attempts = 0;
- reset_func_data.reset_value = 4;
- zassert_equal(EC_RES_SUCCESS, ms.drv->init(&ms), NULL);
-
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-/*
- * Try to set data rate and check if expected rate was set in driver and in
- * emulator.
- */
-static void check_set_rate_f(struct i2c_emul *emul, int rate, int rnd,
- int exp_rate, int line)
-{
- uint8_t exp_rate_reg;
- uint8_t rate_reg;
- int drv_rate;
-
- zassert_equal(EC_SUCCESS, ms.drv->set_data_rate(&ms, rate, rnd),
- "set_data_rate failed; line: %d", line);
- drv_rate = ms.drv->get_data_rate(&ms);
- zassert_equal(exp_rate, drv_rate, "Expected rate %d, got %d; line %d",
- exp_rate, drv_rate, line);
- rate_reg = bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR);
- rate_reg &= BMA2x2_BW_MSK;
-
- switch (exp_rate) {
- case 7812:
- exp_rate_reg = BMA2x2_BW_7_81HZ;
- break;
- case 15625:
- exp_rate_reg = BMA2x2_BW_15_63HZ;
- break;
- case 31250:
- exp_rate_reg = BMA2x2_BW_31_25HZ;
- break;
- case 62500:
- exp_rate_reg = BMA2x2_BW_62_50HZ;
- break;
- case 125000:
- exp_rate_reg = BMA2x2_BW_125HZ;
- break;
- case 250000:
- exp_rate_reg = BMA2x2_BW_250HZ;
- break;
- case 500000:
- exp_rate_reg = BMA2x2_BW_500HZ;
- break;
- case 1000000:
- exp_rate_reg = BMA2x2_BW_1000HZ;
- break;
- default:
- /* Unknown expected rate */
- zassert_unreachable(
- "Expected rate %d not supported by device; line %d",
- exp_rate, line);
- return;
- }
-
- zassert_equal(exp_rate_reg, rate_reg,
- "Expected rate reg 0x%x, got 0x%x; line %d",
- exp_rate_reg, rate_reg, line);
-}
-#define check_set_rate(emul, rate, rnd, exp_rate) \
- check_set_rate_f(emul, rate, rnd, exp_rate, __LINE__)
-
-/** Test set and get rate with and without I2C errors. */
-ZTEST_USER(bma2x2, test_bma_rate)
-{
- struct i2c_emul *emul;
- uint8_t reg_rate;
- int drv_rate;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Test setting rate with rounding down */
- check_set_rate(emul, 1, 0, 7812);
- check_set_rate(emul, 1, 0, 7812);
- check_set_rate(emul, 7811, 0, 7812);
- check_set_rate(emul, 7812, 0, 7812);
- check_set_rate(emul, 7813, 0, 7812);
- check_set_rate(emul, 15624, 0, 7812);
- check_set_rate(emul, 15625, 0, 15625);
- check_set_rate(emul, 15626, 0, 15625);
- check_set_rate(emul, 31249, 0, 15625);
- check_set_rate(emul, 31250, 0, 31250);
- check_set_rate(emul, 31251, 0, 31250);
- check_set_rate(emul, 62499, 0, 31250);
- check_set_rate(emul, 62500, 0, 62500);
- check_set_rate(emul, 62501, 0, 62500);
- check_set_rate(emul, 124999, 0, 62500);
- check_set_rate(emul, 125000, 0, 125000);
- check_set_rate(emul, 125001, 0, 125000);
- check_set_rate(emul, 249999, 0, 125000);
- check_set_rate(emul, 250000, 0, 250000);
- check_set_rate(emul, 250001, 0, 250000);
- check_set_rate(emul, 499999, 0, 250000);
- check_set_rate(emul, 500000, 0, 500000);
- check_set_rate(emul, 500001, 0, 500000);
- check_set_rate(emul, 999999, 0, 500000);
- check_set_rate(emul, 1000000, 0, 1000000);
- check_set_rate(emul, 1000001, 0, 1000000);
- check_set_rate(emul, 2000000, 0, 1000000);
-
- /* Test setting rate with rounding up */
- check_set_rate(emul, 1, 1, 7812);
- check_set_rate(emul, 1, 1, 7812);
- check_set_rate(emul, 7811, 1, 7812);
- check_set_rate(emul, 7812, 1, 7812);
- check_set_rate(emul, 7813, 1, 15625);
- check_set_rate(emul, 15624, 1, 15625);
- check_set_rate(emul, 15625, 1, 15625);
- check_set_rate(emul, 15626, 1, 31250);
- check_set_rate(emul, 31249, 1, 31250);
- check_set_rate(emul, 31250, 1, 31250);
- check_set_rate(emul, 31251, 1, 62500);
- check_set_rate(emul, 62499, 1, 62500);
- check_set_rate(emul, 62500, 1, 62500);
- check_set_rate(emul, 62501, 1, 125000);
- check_set_rate(emul, 124999, 1, 125000);
- check_set_rate(emul, 125000, 1, 125000);
- check_set_rate(emul, 125001, 1, 250000);
- check_set_rate(emul, 249999, 1, 250000);
- check_set_rate(emul, 250000, 1, 250000);
- check_set_rate(emul, 250001, 1, 500000);
- check_set_rate(emul, 499999, 1, 500000);
- check_set_rate(emul, 500000, 1, 500000);
- check_set_rate(emul, 500001, 1, 1000000);
- check_set_rate(emul, 999999, 1, 1000000);
- check_set_rate(emul, 1000000, 1, 1000000);
- check_set_rate(emul, 1000001, 1, 1000000);
- check_set_rate(emul, 2000000, 1, 1000000);
-
- /* Current rate shouldn't be changed on error */
- drv_rate = ms.drv->get_data_rate(&ms);
- reg_rate = bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR);
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_BW_SELECT_ADDR);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_data_rate(&ms, 15625, 0),
- NULL);
- zassert_equal(drv_rate, ms.drv->get_data_rate(&ms), NULL);
- zassert_equal(reg_rate, bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR),
- NULL);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_data_rate(&ms, 15625, 1),
- NULL);
- zassert_equal(drv_rate, ms.drv->get_data_rate(&ms), NULL);
- zassert_equal(reg_rate,
- bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMA2x2_BW_SELECT_ADDR);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_data_rate(&ms, 15625, 0),
- NULL);
- zassert_equal(drv_rate, ms.drv->get_data_rate(&ms), NULL);
- zassert_equal(reg_rate, bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR),
- NULL);
- zassert_equal(EC_ERROR_INVAL, ms.drv->set_data_rate(&ms, 15625, 1),
- NULL);
- zassert_equal(drv_rate, ms.drv->get_data_rate(&ms), NULL);
- zassert_equal(reg_rate, bma_emul_get_reg(emul, BMA2x2_BW_SELECT_ADDR),
- NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-/** Test read with and without I2C errors. */
-ZTEST_USER(bma2x2, test_bma_read)
-{
- struct i2c_emul *emul;
- int16_t ret_acc[3];
- int16_t exp_acc[3];
- intv3_t ret_acc_v;
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Set offset 0 to simplify test */
- bma_emul_set_off(emul, BMA_EMUL_AXIS_X, 0);
- bma_emul_set_off(emul, BMA_EMUL_AXIS_Y, 0);
- bma_emul_set_off(emul, BMA_EMUL_AXIS_Z, 0);
-
- /* Test fail on each axis */
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_X_AXIS_LSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_X_AXIS_MSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_Y_AXIS_LSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_Y_AXIS_MSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_Z_AXIS_LSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_Z_AXIS_MSB_ADDR);
- zassert_equal(EC_ERROR_INVAL, ms.drv->read(&ms, ret_acc_v), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set input accelerometer values */
- exp_acc[0] = BMA_EMUL_1G / 10;
- exp_acc[1] = BMA_EMUL_1G / 20;
- exp_acc[2] = -(int)BMA_EMUL_1G / 30;
- set_emul_acc(emul, exp_acc);
- /* Disable rotation */
- ms.rot_standard_ref = NULL;
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, 2, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms.drv->read(&ms, ret_acc_v), NULL);
- drv_acc_to_emul(ret_acc_v, 2, ret_acc);
- compare_int3v(exp_acc, ret_acc);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, 4, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms.drv->read(&ms, ret_acc_v), NULL);
- drv_acc_to_emul(ret_acc_v, 4, ret_acc);
- compare_int3v(exp_acc, ret_acc);
-
- /* Setup rotation and rotate expected vector */
- ms.rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_acc);
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, 2, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms.drv->read(&ms, ret_acc_v), NULL);
- drv_acc_to_emul(ret_acc_v, 2, ret_acc);
- compare_int3v(exp_acc, ret_acc);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, 4, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms.drv->read(&ms, ret_acc_v), NULL);
- drv_acc_to_emul(ret_acc_v, 4, ret_acc);
- compare_int3v(exp_acc, ret_acc);
-}
-
-/** Data for functions used in perform_calib test */
-struct calib_func_data {
- /** Time when offset compensation where triggered */
- int calib_start;
- /** Time how long offset cal ready should be unset */
- int time;
- /** Flag indicate if read should fail after compensation is triggered */
- int read_fail;
-};
-
-/**
- * Custom emulator read function used in perform_calib test. It controls if
- * cal ready bit in offset control register should be set. It is set after
- * data.time miliseconds passed from data.calib_start time. Function returns
- * error when offset control register is accessed when cal ready bit is not set
- * and data.read_fail is not zero.
- */
-static int emul_read_calib_func(struct i2c_emul *emul, int reg, uint8_t *val,
- int bytes, void *data)
-{
- struct calib_func_data *d = data;
- uint8_t reg_val;
- int cur_time;
-
- reg = bma_emul_access_reg(emul, reg, bytes, true /* = read */);
- if (reg != BMA2x2_OFFSET_CTRL_ADDR) {
- return 1;
- }
-
- reg_val = bma_emul_get_reg(emul, BMA2x2_OFFSET_CTRL_ADDR);
- cur_time = k_uptime_get_32();
- if (cur_time - d->calib_start < d->time) {
- if (d->read_fail) {
- return -EIO;
- }
- reg_val &= ~BMA2x2_OFFSET_CAL_READY;
- } else {
- reg_val |= BMA2x2_OFFSET_CAL_READY;
- }
- bma_emul_set_reg(emul, BMA2x2_OFFSET_CTRL_ADDR, reg_val);
-
- return 1;
-}
-
-/**
- * Custom emulator write function used in perform_calib test. It sets
- * calib_start field in data with time when offset compensation process was
- * triggerd.
- */
-static int emul_write_calib_func(struct i2c_emul *emul, int reg, uint8_t val,
- int bytes, void *data)
-{
- struct calib_func_data *d = data;
-
- reg = bma_emul_access_reg(emul, reg, bytes, false /* = read */);
- if (reg != BMA2x2_OFFSET_CTRL_ADDR) {
- return 1;
- }
-
- if (val & BMA2x2_OFFSET_TRIGGER_MASK) {
- d->calib_start = k_uptime_get_32();
- }
-
- return 1;
-}
-
-/** Test offset compensation with and without I2C errors. */
-ZTEST_USER(bma2x2, test_bma_perform_calib)
-{
- struct calib_func_data func_data;
- struct i2c_emul *emul;
- int16_t start_off[3];
- int16_t exp_off[3];
- int16_t ret_off[3];
- int range;
- int rate;
- mat33_fp_t rot = {
- { FLOAT_TO_FP(1), 0, 0},
- { 0, FLOAT_TO_FP(1), 0},
- { 0, 0, FLOAT_TO_FP(-1)}
- };
-
- emul = bma_emul_get(BMA_ORD);
-
- /* Range and rate cannot change after calibration */
- range = 4;
- rate = 125000;
- zassert_equal(EC_SUCCESS, ms.drv->set_range(&ms, range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms.drv->set_data_rate(&ms, rate, 0), NULL);
-
- /* Set offset 0 */
- start_off[0] = 0;
- start_off[1] = 0;
- start_off[2] = 0;
- set_emul_offset(emul, start_off);
-
- /* Set input accelerometer values */
- exp_off[0] = BMA_EMUL_1G / 10;
- exp_off[1] = BMA_EMUL_1G / 20;
- exp_off[2] = -(int)BMA_EMUL_1G / 30;
- set_emul_acc(emul, exp_off);
-
- /*
- * Expected offset is [-X, -Y, 1G - Z] for no rotation or positive
- * rotation on Z axis
- */
- exp_off[0] = -exp_off[0];
- exp_off[1] = -exp_off[1];
- exp_off[2] = BMA_EMUL_1G - exp_off[2];
-
- /* Setup emulator calibration functions */
- i2c_common_emul_set_read_func(emul, emul_read_calib_func, &func_data);
- i2c_common_emul_set_write_func(emul, emul_write_calib_func, &func_data);
-
- /* Setup emulator to fail on first access to offset control register */
- func_data.calib_start = k_uptime_get_32();
- func_data.read_fail = 1;
- func_data.time = 1000000;
-
- /* Test success on disabling calibration */
- zassert_equal(EC_SUCCESS, ms.drv->perform_calib(&ms, 0), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
-
- /* Test fail on first access to offset control register */
- zassert_equal(EC_ERROR_INVAL, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
-
- /* Setup emulator to return cal not ready */
- func_data.calib_start = k_uptime_get_32();
- func_data.read_fail = 0;
- func_data.time = 1000000;
-
- /* Test fail on cal not ready */
- zassert_equal(EC_ERROR_ACCESS_DENIED, ms.drv->perform_calib(&ms, 1),
- NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
-
- /*
- * Setup emulator to fail on access to offset control register after
- * triggering offset compensation
- */
- func_data.calib_start = 0;
- func_data.read_fail = 1;
- func_data.time = 160;
-
- /* Test fail on read during offset compensation */
- zassert_equal(EC_ERROR_INVAL, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
-
- /*
- * Setup emulator to return cal not ready for 1s after triggering
- * offset compensation
- */
- func_data.calib_start = 0;
- func_data.read_fail = 0;
- func_data.time = 1000;
-
- zassert_equal(EC_RES_TIMEOUT, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
-
- /*
- * Setup emulator to return cal not ready for 160ms after triggering
- * offset compensation
- */
- func_data.calib_start = 0;
- func_data.read_fail = 0;
- func_data.time = 160;
- /* Disable rotation */
- ms.rot_standard_ref = NULL;
-
- /* Test successful offset compenastion without rotation */
- zassert_equal(EC_SUCCESS, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
- get_emul_offset(emul, ret_off);
- compare_int3v(exp_off, ret_off);
-
- func_data.calib_start = 0;
- /* Enable rotation with negative value on Z axis */
- ms.rot_standard_ref = &rot;
- /* Expected offset -1G - accelerometer[Z] */
- exp_off[2] = -((int)BMA_EMUL_1G) - bma_emul_get_acc(emul,
- BMA_EMUL_AXIS_Z);
-
- /* Test successful offset compenastion with negative Z rotation */
- zassert_equal(EC_SUCCESS, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
- get_emul_offset(emul, ret_off);
- compare_int3v(exp_off, ret_off);
-
- func_data.calib_start = 0;
- /* Set positive rotation on Z axis */
- rot[2][2] = FLOAT_TO_FP(1);
- /* Expected offset 1G - accelerometer[Z] */
- exp_off[2] = BMA_EMUL_1G - bma_emul_get_acc(emul, BMA_EMUL_AXIS_Z);
-
- /* Test successful offset compenastion with positive Z rotation */
- zassert_equal(EC_SUCCESS, ms.drv->perform_calib(&ms, 1), NULL);
- zassert_equal(range, ms.current_range, NULL);
- zassert_equal(rate, ms.drv->get_data_rate(&ms), NULL);
- get_emul_offset(emul, ret_off);
- compare_int3v(exp_off, ret_off);
-
- /* Remove custom emulator functions */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-}
-
-/** Test get resolution. */
-ZTEST_USER(bma2x2, test_bma_get_resolution)
-{
- /* Resolution should be always 12 bits */
- zassert_equal(12, ms.drv->get_resolution(&ms), NULL);
-}
-
-static void *bma2x2_setup(void)
-{
- k_mutex_init(&sensor_mutex);
-
- return NULL;
-}
-
-ZTEST_SUITE(bma2x2, drivers_predicate_post_main, bma2x2_setup, NULL, NULL,
- NULL);
diff --git a/zephyr/test/drivers/src/bmi160.c b/zephyr/test/drivers/src/bmi160.c
deleted file mode 100644
index 56e38e6f9a..0000000000
--- a/zephyr/test/drivers/src/bmi160.c
+++ /dev/null
@@ -1,2082 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "i2c.h"
-#include "emul/emul_bmi.h"
-#include "emul/emul_common_i2c.h"
-#include "test/drivers/test_mocks.h"
-
-#include "motion_sense_fifo.h"
-#include "driver/accelgyro_bmi160.h"
-#include "driver/accelgyro_bmi_common.h"
-#include "test/drivers/test_state.h"
-
-#define BMI_ORD DT_DEP_ORD(DT_NODELABEL(accel_bmi160))
-#define BMI_ACC_SENSOR_ID SENSOR_ID(DT_NODELABEL(ms_bmi160_accel))
-#define BMI_GYR_SENSOR_ID SENSOR_ID(DT_NODELABEL(ms_bmi160_gyro))
-#define BMI_INT_EVENT \
- TASK_EVENT_MOTION_SENSOR_INTERRUPT(SENSOR_ID(DT_ALIAS(bmi160_int)))
-
-/** How accurate comparision of vectors should be */
-#define V_EPS 8
-
-/** Convert from one type of vector to another */
-#define convert_int3v_int16(v, r) do { \
- r[0] = v[0]; \
- r[1] = v[1]; \
- r[2] = v[2]; \
- } while (0)
-
-/** Rotation used in some tests */
-static const mat33_fp_t test_rotation = {
- { 0, FLOAT_TO_FP(1), 0},
- { FLOAT_TO_FP(-1), 0, 0},
- { 0, 0, FLOAT_TO_FP(-1)}
-};
-/** Rotate given vector by test rotation */
-static void rotate_int3v_by_test_rotation(intv3_t v)
-{
- int16_t t;
-
- t = v[0];
- v[0] = -v[1];
- v[1] = t;
- v[2] = -v[2];
-}
-
-/** Set emulator accelerometer offset values to intv3_t vector */
-static void set_emul_acc_offset(struct i2c_emul *emul, intv3_t offset)
-{
- bmi_emul_set_off(emul, BMI_EMUL_ACC_X, offset[0]);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Y, offset[1]);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Z, offset[2]);
-}
-
-/** Save emulator accelerometer offset values to intv3_t vector */
-static void get_emul_acc_offset(struct i2c_emul *emul, intv3_t offset)
-{
- offset[0] = bmi_emul_get_off(emul, BMI_EMUL_ACC_X);
- offset[1] = bmi_emul_get_off(emul, BMI_EMUL_ACC_Y);
- offset[2] = bmi_emul_get_off(emul, BMI_EMUL_ACC_Z);
-}
-
-/** Set emulator accelerometer values to intv3_t vector */
-static void set_emul_acc(struct i2c_emul *emul, intv3_t acc)
-{
- bmi_emul_set_value(emul, BMI_EMUL_ACC_X, acc[0]);
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Y, acc[1]);
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Z, acc[2]);
-}
-
-/** Set emulator gyroscope offset values to intv3_t vector */
-static void set_emul_gyr_offset(struct i2c_emul *emul, intv3_t offset)
-{
- bmi_emul_set_off(emul, BMI_EMUL_GYR_X, offset[0]);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Y, offset[1]);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Z, offset[2]);
-}
-
-/** Save emulator gyroscope offset values to intv3_t vector */
-static void get_emul_gyr_offset(struct i2c_emul *emul, intv3_t offset)
-{
- offset[0] = bmi_emul_get_off(emul, BMI_EMUL_GYR_X);
- offset[1] = bmi_emul_get_off(emul, BMI_EMUL_GYR_Y);
- offset[2] = bmi_emul_get_off(emul, BMI_EMUL_GYR_Z);
-}
-
-/** Set emulator gyroscope values to vector of three int16_t */
-static void set_emul_gyr(struct i2c_emul *emul, intv3_t gyr)
-{
- bmi_emul_set_value(emul, BMI_EMUL_GYR_X, gyr[0]);
- bmi_emul_set_value(emul, BMI_EMUL_GYR_Y, gyr[1]);
- bmi_emul_set_value(emul, BMI_EMUL_GYR_Z, gyr[2]);
-}
-
-/** Convert accelerometer read to units used by emulator */
-static void drv_acc_to_emul(intv3_t drv, int range, intv3_t out)
-{
- const int scale = MOTION_SCALING_FACTOR / BMI_EMUL_1G;
-
- out[0] = drv[0] * range / scale;
- out[1] = drv[1] * range / scale;
- out[2] = drv[2] * range / scale;
-}
-
-/** Convert gyroscope read to units used by emulator */
-static void drv_gyr_to_emul(intv3_t drv, int range, intv3_t out)
-{
- const int scale = MOTION_SCALING_FACTOR / BMI_EMUL_125_DEG_S;
-
- range /= 125;
- out[0] = drv[0] * range / scale;
- out[1] = drv[1] * range / scale;
- out[2] = drv[2] * range / scale;
-}
-
-/** Compare two vectors of intv3_t type */
-static void compare_int3v_f(intv3_t exp_v, intv3_t v, int eps, int line)
-{
- int i;
-
- for (i = 0; i < 3; i++) {
- zassert_within(exp_v[i], v[i], eps,
- "Expected [%d; %d; %d], got [%d; %d; %d]; line: %d",
- exp_v[0], exp_v[1], exp_v[2], v[0], v[1], v[2], line);
- }
-}
-#define compare_int3v_eps(exp_v, v, e) compare_int3v_f(exp_v, v, e, __LINE__)
-#define compare_int3v(exp_v, v) compare_int3v_eps(exp_v, v, V_EPS)
-
-/** Test get accelerometer offset with and without rotation */
-ZTEST_USER(bmi160, test_bmi_acc_get_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t ret[3];
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Set emulator offset */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- set_emul_acc_offset(emul, exp_v);
- /* BMI driver returns value in mg units */
- exp_v[0] = 1000 / 10;
- exp_v[1] = 1000 / 20;
- exp_v[2] = -1000 / 30;
-
- /* Test fail on offset read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test get offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected offset */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
-
- /* Test get offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v(exp_v, ret_v);
-}
-
-/** Test get gyroscope offset with and without rotation */
-ZTEST_USER(bmi160, test_bmi_gyr_get_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t ret[3];
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set emulator offset */
- exp_v[0] = BMI_EMUL_125_DEG_S / 100;
- exp_v[1] = BMI_EMUL_125_DEG_S / 200;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- set_emul_gyr_offset(emul, exp_v);
- /* BMI driver returns value in mdeg/s units */
- exp_v[0] = 125000 / 100;
- exp_v[1] = 125000 / 200;
- exp_v[2] = -125000 / 300;
-
- /* Test fail on offset read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test get offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
-
- /* Setup rotation and rotate expected offset */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
-
- /* Test get offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
-}
-
-/**
- * Test set accelerometer offset with and without rotation. Also test behaviour
- * on I2C error.
- */
-ZTEST_USER(bmi160, test_bmi_acc_set_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t input_v[3];
- int16_t temp = 0;
- intv3_t ret_v;
- intv3_t exp_v;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Test fail on OFFSET EN GYR98 register read and write */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on offset write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set input offset */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- /* BMI driver accept value in mg units */
- input_v[0] = 1000 / 10;
- input_v[1] = 1000 / 20;
- input_v[2] = -1000 / 30;
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test set offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_acc_offset(emul, ret_v);
- /*
- * Depending on used range, accelerometer values may be up to 6 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_v, ret_v, 64);
- /* Accelerometer offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_ACC_EN, NULL);
-
- /* Setup rotation and rotate input for set_offset function */
- ms->rot_standard_ref = &test_rotation;
- convert_int3v_int16(input_v, ret_v);
- rotate_int3v_by_test_rotation(ret_v);
- convert_int3v_int16(ret_v, input_v);
-
- /* Test set offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_acc_offset(emul, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
- /* Accelerometer offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_ACC_EN, NULL);
-}
-
-/**
- * Test set gyroscope offset with and without rotation. Also test behaviour
- * on I2C error.
- */
-ZTEST_USER(bmi160, test_bmi_gyr_set_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t input_v[3];
- int16_t temp = 0;
- intv3_t ret_v;
- intv3_t exp_v;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Test fail on OFFSET EN GYR98 register read and write */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on offset write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_GYR70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_GYR70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_GYR70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set input offset */
- exp_v[0] = BMI_EMUL_125_DEG_S / 100;
- exp_v[1] = BMI_EMUL_125_DEG_S / 200;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- /* BMI driver accept value in mdeg/s units */
- input_v[0] = 125000 / 100;
- input_v[1] = 125000 / 200;
- input_v[2] = -125000 / 300;
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test set offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_gyr_offset(emul, ret_v);
- compare_int3v(exp_v, ret_v);
- /* Gyroscope offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_GYRO_EN, NULL);
-
- /* Setup rotation and rotate input for set_offset function */
- ms->rot_standard_ref = &test_rotation;
- convert_int3v_int16(input_v, ret_v);
- rotate_int3v_by_test_rotation(ret_v);
- convert_int3v_int16(ret_v, input_v);
-
- /* Test set offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_gyr_offset(emul, ret_v);
- compare_int3v(exp_v, ret_v);
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_GYRO_EN, NULL);
-}
-
-/**
- * Try to set accelerometer range and check if expected range was set
- * in driver and in emulator.
- */
-static void check_set_acc_range_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int range,
- int rnd, int exp_range, int line)
-{
- uint8_t exp_range_reg;
- uint8_t range_reg;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, rnd),
- "set_range failed; line: %d", line);
- zassert_equal(exp_range, ms->current_range,
- "Expected range %d, got %d; line %d",
- exp_range, ms->current_range, line);
- range_reg = bmi_emul_get_reg(emul, BMI160_ACC_RANGE);
-
- switch (exp_range) {
- case 2:
- exp_range_reg = BMI160_GSEL_2G;
- break;
- case 4:
- exp_range_reg = BMI160_GSEL_4G;
- break;
- case 8:
- exp_range_reg = BMI160_GSEL_8G;
- break;
- case 16:
- exp_range_reg = BMI160_GSEL_16G;
- break;
- default:
- /* Unknown expected range */
- zassert_unreachable(
- "Expected range %d not supported by device; line %d",
- exp_range, line);
- return;
- }
-
- zassert_equal(exp_range_reg, range_reg,
- "Expected range reg 0x%x, got 0x%x; line %d",
- exp_range_reg, range_reg, line);
-}
-#define check_set_acc_range(emul, ms, range, rnd, exp_range) \
- check_set_acc_range_f(emul, ms, range, rnd, exp_range, __LINE__)
-
-/** Test set accelerometer range with and without I2C errors */
-ZTEST_USER(bmi160, test_bmi_acc_set_range)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int start_range;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Setup starting range, shouldn't be changed on error */
- start_range = 2;
- ms->current_range = start_range;
- bmi_emul_set_reg(emul, BMI160_ACC_RANGE, BMI160_GSEL_2G);
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_ACC_RANGE);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 12, 0), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI160_GSEL_2G,
- bmi_emul_get_reg(emul, BMI160_ACC_RANGE), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 12, 1), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI160_GSEL_2G,
- bmi_emul_get_reg(emul, BMI160_ACC_RANGE), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting range with rounding down */
- check_set_acc_range(emul, ms, 1, 0, 2);
- check_set_acc_range(emul, ms, 2, 0, 2);
- check_set_acc_range(emul, ms, 3, 0, 2);
- check_set_acc_range(emul, ms, 4, 0, 4);
- check_set_acc_range(emul, ms, 5, 0, 4);
- check_set_acc_range(emul, ms, 6, 0, 4);
- check_set_acc_range(emul, ms, 7, 0, 4);
- check_set_acc_range(emul, ms, 8, 0, 8);
- check_set_acc_range(emul, ms, 9, 0, 8);
- check_set_acc_range(emul, ms, 15, 0, 8);
- check_set_acc_range(emul, ms, 16, 0, 16);
- check_set_acc_range(emul, ms, 17, 0, 16);
-
- /* Test setting range with rounding up */
- check_set_acc_range(emul, ms, 1, 1, 2);
- check_set_acc_range(emul, ms, 2, 1, 2);
- check_set_acc_range(emul, ms, 3, 1, 4);
- check_set_acc_range(emul, ms, 4, 1, 4);
- check_set_acc_range(emul, ms, 5, 1, 8);
- check_set_acc_range(emul, ms, 6, 1, 8);
- check_set_acc_range(emul, ms, 7, 1, 8);
- check_set_acc_range(emul, ms, 8, 1, 8);
- check_set_acc_range(emul, ms, 9, 1, 16);
- check_set_acc_range(emul, ms, 15, 1, 16);
- check_set_acc_range(emul, ms, 16, 1, 16);
- check_set_acc_range(emul, ms, 17, 1, 16);
-}
-
-/**
- * Try to set gyroscope range and check if expected range was set in driver and
- * in emulator.
- */
-static void check_set_gyr_range_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int range,
- int rnd, int exp_range, int line)
-{
- uint8_t exp_range_reg;
- uint8_t range_reg;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, rnd),
- "set_range failed; line: %d", line);
- zassert_equal(exp_range, ms->current_range,
- "Expected range %d, got %d; line %d",
- exp_range, ms->current_range, line);
- range_reg = bmi_emul_get_reg(emul, BMI160_GYR_RANGE);
-
- switch (exp_range) {
- case 125:
- exp_range_reg = BMI160_DPS_SEL_125;
- break;
- case 250:
- exp_range_reg = BMI160_DPS_SEL_250;
- break;
- case 500:
- exp_range_reg = BMI160_DPS_SEL_500;
- break;
- case 1000:
- exp_range_reg = BMI160_DPS_SEL_1000;
- break;
- case 2000:
- exp_range_reg = BMI160_DPS_SEL_2000;
- break;
- default:
- /* Unknown expected range */
- zassert_unreachable(
- "Expected range %d not supported by device; line %d",
- exp_range, line);
- return;
- }
-
- zassert_equal(exp_range_reg, range_reg,
- "Expected range reg 0x%x, got 0x%x; line %d",
- exp_range_reg, range_reg, line);
-}
-#define check_set_gyr_range(emul, ms, range, rnd, exp_range) \
- check_set_gyr_range_f(emul, ms, range, rnd, exp_range, __LINE__)
-
-/** Test set gyroscope range with and without I2C errors */
-ZTEST_USER(bmi160, test_bmi_gyr_set_range)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int start_range;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Setup starting range, shouldn't be changed on error */
- start_range = 250;
- ms->current_range = start_range;
- bmi_emul_set_reg(emul, BMI160_GYR_RANGE, BMI160_DPS_SEL_250);
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_GYR_RANGE);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 125, 0), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI160_DPS_SEL_250,
- bmi_emul_get_reg(emul, BMI160_GYR_RANGE), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 125, 1), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI160_DPS_SEL_250,
- bmi_emul_get_reg(emul, BMI160_GYR_RANGE), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting range with rounding down */
- check_set_gyr_range(emul, ms, 1, 0, 125);
- check_set_gyr_range(emul, ms, 124, 0, 125);
- check_set_gyr_range(emul, ms, 125, 0, 125);
- check_set_gyr_range(emul, ms, 126, 0, 125);
- check_set_gyr_range(emul, ms, 249, 0, 125);
- check_set_gyr_range(emul, ms, 250, 0, 250);
- check_set_gyr_range(emul, ms, 251, 0, 250);
- check_set_gyr_range(emul, ms, 499, 0, 250);
- check_set_gyr_range(emul, ms, 500, 0, 500);
- check_set_gyr_range(emul, ms, 501, 0, 500);
- check_set_gyr_range(emul, ms, 999, 0, 500);
- check_set_gyr_range(emul, ms, 1000, 0, 1000);
- check_set_gyr_range(emul, ms, 1001, 0, 1000);
- check_set_gyr_range(emul, ms, 1999, 0, 1000);
- check_set_gyr_range(emul, ms, 2000, 0, 2000);
- check_set_gyr_range(emul, ms, 2001, 0, 2000);
-
- /* Test setting range with rounding up */
- check_set_gyr_range(emul, ms, 1, 1, 125);
- check_set_gyr_range(emul, ms, 124, 1, 125);
- check_set_gyr_range(emul, ms, 125, 1, 125);
- check_set_gyr_range(emul, ms, 126, 1, 250);
- check_set_gyr_range(emul, ms, 249, 1, 250);
- check_set_gyr_range(emul, ms, 250, 1, 250);
- check_set_gyr_range(emul, ms, 251, 1, 500);
- check_set_gyr_range(emul, ms, 499, 1, 500);
- check_set_gyr_range(emul, ms, 500, 1, 500);
- check_set_gyr_range(emul, ms, 501, 1, 1000);
- check_set_gyr_range(emul, ms, 999, 1, 1000);
- check_set_gyr_range(emul, ms, 1000, 1, 1000);
- check_set_gyr_range(emul, ms, 1001, 1, 2000);
- check_set_gyr_range(emul, ms, 1999, 1, 2000);
- check_set_gyr_range(emul, ms, 2000, 1, 2000);
- check_set_gyr_range(emul, ms, 2001, 1, 2000);
-}
-
-/** Test get resolution of acclerometer and gyroscope sensor */
-ZTEST_USER(bmi160, test_bmi_get_resolution)
-{
- struct motion_sensor_t *ms;
-
- /* Test accelerometer */
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Resolution should be always 16 bits */
- zassert_equal(16, ms->drv->get_resolution(ms), NULL);
-
- /* Test gyroscope */
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Resolution should be always 16 bits */
- zassert_equal(16, ms->drv->get_resolution(ms), NULL);
-}
-
-/**
- * Try to set accelerometer data rate and check if expected rate was set
- * in driver and in emulator.
- */
-static void check_set_acc_rate_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int rate, int rnd,
- int exp_rate, int line)
-{
- uint8_t exp_rate_reg;
- uint8_t rate_reg;
- int drv_rate;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, rnd),
- "set_data_rate failed; line: %d", line);
- drv_rate = ms->drv->get_data_rate(ms);
- zassert_equal(exp_rate, drv_rate, "Expected rate %d, got %d; line %d",
- exp_rate, drv_rate, line);
- rate_reg = bmi_emul_get_reg(emul, BMI160_ACC_CONF);
- rate_reg &= BMI_ODR_MASK;
-
- switch (exp_rate) {
- case 12500:
- exp_rate_reg = 0x5;
- break;
- case 25000:
- exp_rate_reg = 0x6;
- break;
- case 50000:
- exp_rate_reg = 0x7;
- break;
- case 100000:
- exp_rate_reg = 0x8;
- break;
- case 200000:
- exp_rate_reg = 0x9;
- break;
- case 400000:
- exp_rate_reg = 0xa;
- break;
- case 800000:
- exp_rate_reg = 0xb;
- break;
- case 1600000:
- exp_rate_reg = 0xc;
- break;
- default:
- /* Unknown expected rate */
- zassert_unreachable(
- "Expected rate %d not supported by device; line %d",
- exp_rate, line);
- return;
- }
-
- zassert_equal(exp_rate_reg, rate_reg,
- "Expected rate reg 0x%x, got 0x%x; line %d",
- exp_rate_reg, rate_reg, line);
-}
-#define check_set_acc_rate(emul, ms, rate, rnd, exp_rate) \
- check_set_acc_rate_f(emul, ms, rate, rnd, exp_rate, __LINE__)
-
-/** Test set and get accelerometer rate with and without I2C errors */
-ZTEST_USER(bmi160, test_bmi_acc_rate)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t reg_rate;
- int pmu_status;
- int drv_rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Test setting rate with rounding down */
- check_set_acc_rate(emul, ms, 12500, 0, 12500);
- check_set_acc_rate(emul, ms, 12501, 0, 12500);
- check_set_acc_rate(emul, ms, 24999, 0, 12500);
- check_set_acc_rate(emul, ms, 25000, 0, 25000);
- check_set_acc_rate(emul, ms, 25001, 0, 25000);
- check_set_acc_rate(emul, ms, 49999, 0, 25000);
- check_set_acc_rate(emul, ms, 50000, 0, 50000);
- check_set_acc_rate(emul, ms, 50001, 0, 50000);
- check_set_acc_rate(emul, ms, 99999, 0, 50000);
- check_set_acc_rate(emul, ms, 100000, 0, 100000);
- check_set_acc_rate(emul, ms, 100001, 0, 100000);
- check_set_acc_rate(emul, ms, 199999, 0, 100000);
- check_set_acc_rate(emul, ms, 200000, 0, 200000);
- check_set_acc_rate(emul, ms, 200001, 0, 200000);
- check_set_acc_rate(emul, ms, 399999, 0, 200000);
- /*
- * We cannot test frequencies from 400000 to 1600000 because
- * CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ is set to 250000
- */
-
- /* Test setting rate with rounding up */
- check_set_acc_rate(emul, ms, 6251, 1, 12500);
- check_set_acc_rate(emul, ms, 12499, 1, 12500);
- check_set_acc_rate(emul, ms, 12500, 1, 12500);
- check_set_acc_rate(emul, ms, 12501, 1, 25000);
- check_set_acc_rate(emul, ms, 24999, 1, 25000);
- check_set_acc_rate(emul, ms, 25000, 1, 25000);
- check_set_acc_rate(emul, ms, 25001, 1, 50000);
- check_set_acc_rate(emul, ms, 49999, 1, 50000);
- check_set_acc_rate(emul, ms, 50000, 1, 50000);
- check_set_acc_rate(emul, ms, 50001, 1, 100000);
- check_set_acc_rate(emul, ms, 99999, 1, 100000);
- check_set_acc_rate(emul, ms, 100000, 1, 100000);
- check_set_acc_rate(emul, ms, 100001, 1, 200000);
- check_set_acc_rate(emul, ms, 199999, 1, 200000);
- check_set_acc_rate(emul, ms, 200000, 1, 200000);
-
- /* Test out of range rate with rounding down */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 12499, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 2000000, 0), NULL);
-
- /* Test out of range rate with rounding up */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 6250, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 200001, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 2000000, 1), NULL);
-
- /* Current rate shouldn't be changed on error */
- drv_rate = ms->drv->get_data_rate(ms);
- reg_rate = bmi_emul_get_reg(emul, BMI160_ACC_CONF);
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_CONF);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_ACC_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_ACC_CONF), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_ACC_CONF);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_ACC_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_ACC_CONF), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test disabling sensor */
- pmu_status = BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET;
- pmu_status |= BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET;
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, pmu_status);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 0), NULL);
-
- bmi_read8(ms->port, ms->i2c_spi_addr_flags, BMI160_PMU_STATUS,
- &pmu_status);
- zassert_equal(BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET, pmu_status,
- "Gyroscope should be still enabled");
-
- /* Test enabling sensor */
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- bmi_read8(ms->port, ms->i2c_spi_addr_flags, BMI160_PMU_STATUS,
- &pmu_status);
- zassert_equal(BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET, pmu_status,
- "Accelerometer should be enabled");
-}
-
-/**
- * Try to set gyroscope data rate and check if expected rate was set
- * in driver and in emulator.
- */
-static void check_set_gyr_rate_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int rate, int rnd,
- int exp_rate, int line)
-{
- uint8_t exp_rate_reg;
- uint8_t rate_reg;
- int drv_rate;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, rnd),
- "set_data_rate failed; line: %d", line);
- drv_rate = ms->drv->get_data_rate(ms);
- zassert_equal(exp_rate, drv_rate, "Expected rate %d, got %d; line %d",
- exp_rate, drv_rate, line);
- rate_reg = bmi_emul_get_reg(emul, BMI160_GYR_CONF);
- rate_reg &= BMI_ODR_MASK;
-
- switch (exp_rate) {
- case 25000:
- exp_rate_reg = 0x6;
- break;
- case 50000:
- exp_rate_reg = 0x7;
- break;
- case 100000:
- exp_rate_reg = 0x8;
- break;
- case 200000:
- exp_rate_reg = 0x9;
- break;
- case 400000:
- exp_rate_reg = 0xa;
- break;
- case 800000:
- exp_rate_reg = 0xb;
- break;
- case 1600000:
- exp_rate_reg = 0xc;
- break;
- case 3200000:
- exp_rate_reg = 0xc;
- break;
- default:
- /* Unknown expected rate */
- zassert_unreachable(
- "Expected rate %d not supported by device; line %d",
- exp_rate, line);
- return;
- }
-
- zassert_equal(exp_rate_reg, rate_reg,
- "Expected rate reg 0x%x, got 0x%x; line %d",
- exp_rate_reg, rate_reg, line);
-}
-#define check_set_gyr_rate(emul, ms, rate, rnd, exp_rate) \
- check_set_gyr_rate_f(emul, ms, rate, rnd, exp_rate, __LINE__)
-
-/** Test set and get gyroscope rate with and without I2C errors */
-ZTEST_USER(bmi160, test_bmi_gyr_rate)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t reg_rate;
- int pmu_status;
- int drv_rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Test setting rate with rounding down */
- check_set_gyr_rate(emul, ms, 25000, 0, 25000);
- check_set_gyr_rate(emul, ms, 25001, 0, 25000);
- check_set_gyr_rate(emul, ms, 49999, 0, 25000);
- check_set_gyr_rate(emul, ms, 50000, 0, 50000);
- check_set_gyr_rate(emul, ms, 50001, 0, 50000);
- check_set_gyr_rate(emul, ms, 99999, 0, 50000);
- check_set_gyr_rate(emul, ms, 100000, 0, 100000);
- check_set_gyr_rate(emul, ms, 100001, 0, 100000);
- check_set_gyr_rate(emul, ms, 199999, 0, 100000);
- check_set_gyr_rate(emul, ms, 200000, 0, 200000);
- check_set_gyr_rate(emul, ms, 200001, 0, 200000);
- check_set_gyr_rate(emul, ms, 399999, 0, 200000);
- /*
- * We cannot test frequencies from 400000 to 3200000 because
- * CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ is set to 250000
- */
-
- /* Test setting rate with rounding up */
- check_set_gyr_rate(emul, ms, 12501, 1, 25000);
- check_set_gyr_rate(emul, ms, 24999, 1, 25000);
- check_set_gyr_rate(emul, ms, 25000, 1, 25000);
- check_set_gyr_rate(emul, ms, 25001, 1, 50000);
- check_set_gyr_rate(emul, ms, 49999, 1, 50000);
- check_set_gyr_rate(emul, ms, 50000, 1, 50000);
- check_set_gyr_rate(emul, ms, 50001, 1, 100000);
- check_set_gyr_rate(emul, ms, 99999, 1, 100000);
- check_set_gyr_rate(emul, ms, 100000, 1, 100000);
- check_set_gyr_rate(emul, ms, 100001, 1, 200000);
- check_set_gyr_rate(emul, ms, 199999, 1, 200000);
- check_set_gyr_rate(emul, ms, 200000, 1, 200000);
-
- /* Test out of range rate with rounding down */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 24999, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 4000000, 0), NULL);
-
- /* Test out of range rate with rounding up */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 12499, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 200001, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 4000000, 1), NULL);
-
- /* Current rate shouldn't be changed on error */
- drv_rate = ms->drv->get_data_rate(ms);
- reg_rate = bmi_emul_get_reg(emul, BMI160_GYR_CONF);
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_CONF);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_GYR_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_GYR_CONF), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_GYR_CONF);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_GYR_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI160_GYR_CONF), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test disabling sensor */
- pmu_status = BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET;
- pmu_status |= BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET;
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, pmu_status);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 0), NULL);
-
- bmi_read8(ms->port, ms->i2c_spi_addr_flags, BMI160_PMU_STATUS,
- &pmu_status);
- zassert_equal(BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET, pmu_status,
- "Accelerometer should be still enabled");
-
- /* Test enabling sensor */
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- bmi_read8(ms->port, ms->i2c_spi_addr_flags, BMI160_PMU_STATUS,
- &pmu_status);
- zassert_equal(BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET, pmu_status,
- "Gyroscope should be enabled");
-}
-
-/**
- * Test setting and getting scale in accelerometer and gyroscope sensors.
- * Correct appling scale to results is checked in "read" test.
- */
-ZTEST_USER(bmi160, test_bmi_scale)
-{
- struct motion_sensor_t *ms;
- int16_t ret_scale[3];
- int16_t exp_scale[3] = {100, 231, 421};
- int16_t t;
-
- /* Test accelerometer */
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, exp_scale, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->get_scale(ms, ret_scale, &t), NULL);
-
- zassert_equal(t, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- zassert_equal(exp_scale[0], ret_scale[0], NULL);
- zassert_equal(exp_scale[1], ret_scale[1], NULL);
- zassert_equal(exp_scale[2], ret_scale[2], NULL);
-
- /* Test gyroscope */
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, exp_scale, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->get_scale(ms, ret_scale, &t), NULL);
-
- zassert_equal(t, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- zassert_equal(exp_scale[0], ret_scale[0], NULL);
- zassert_equal(exp_scale[1], ret_scale[1], NULL);
- zassert_equal(exp_scale[2], ret_scale[2], NULL);
-}
-
-/** Test reading temperature using accelerometer and gyroscope sensors */
-ZTEST_USER(bmi160, test_bmi_read_temp)
-{
- struct motion_sensor_t *ms_acc, *ms_gyr;
- struct i2c_emul *emul;
- int ret_temp;
- int exp_temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_TEMPERATURE_0);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_TEMPERATURE_1);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Fail on invalid temperature */
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, 0x80);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
-
- /*
- * Test correct values. Both motion sensors should return the same
- * temperature.
- */
- exp_temp = C_TO_K(23);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, 0x00);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(87);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, 0xff);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, 0x7f);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(-41);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, 0x01);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, 0x80);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(47);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, 0x30);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-}
-
-/** Test reading accelerometer sensor data */
-ZTEST_USER(bmi160, test_bmi_acc_read)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t scale[3] = {MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE};
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Set offset 0 to simplify test */
- bmi_emul_set_off(emul, BMI_EMUL_ACC_X, 0);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Y, 0);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Z, 0);
-
- /* Fail on read status */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* When not ready, driver should return saved raw value */
- exp_v[0] = 100;
- exp_v[1] = 200;
- exp_v[2] = 300;
- ms->raw_xyz[0] = exp_v[0];
- ms->raw_xyz[1] = exp_v[1];
- ms->raw_xyz[2] = exp_v[2];
-
- /* Status not ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status only GYR ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, BMI160_DRDY_GYR);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status ACC ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, BMI160_DRDY_ACC);
-
- /* Set input accelerometer values */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- set_emul_acc(emul, exp_v);
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
- /* Set scale */
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, scale, 0), NULL);
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 2, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 2, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 4, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 4, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected vector */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 2, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 2, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 4, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 4, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Fail on read of data registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_X_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_Y_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_Y_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_Z_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_Z_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- ms->rot_standard_ref = NULL;
-}
-
-/** Test reading gyroscope sensor data */
-ZTEST_USER(bmi160, test_bmi_gyr_read)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t scale[3] = {MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE};
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Set offset 0 to simplify test */
- bmi_emul_set_off(emul, BMI_EMUL_GYR_X, 0);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Y, 0);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Z, 0);
-
- /* Fail on read status */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* When not ready, driver should return saved raw value */
- exp_v[0] = 100;
- exp_v[1] = 200;
- exp_v[2] = 300;
- ms->raw_xyz[0] = exp_v[0];
- ms->raw_xyz[1] = exp_v[1];
- ms->raw_xyz[2] = exp_v[2];
-
- /* Status not ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status only ACC ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, BMI160_DRDY_ACC);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status GYR ready */
- bmi_emul_set_reg(emul, BMI160_STATUS, BMI160_DRDY_GYR);
-
- /* Set input accelerometer values */
- exp_v[0] = BMI_EMUL_125_DEG_S / 10;
- exp_v[1] = BMI_EMUL_125_DEG_S / 20;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 30;
- set_emul_gyr(emul, exp_v);
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
- /* Set scale */
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, scale, 0), NULL);
- /* Set range to 125°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 125, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 125, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 1000°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 1000, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 1000, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected vector */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
- /* Set range to 125°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 125, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 125, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 1000°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 1000, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 1000, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Fail on read of data registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_X_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_Y_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_Y_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_Z_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_Z_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- ms->rot_standard_ref = NULL;
-}
-
-/**
- * Custom emulatro read function which always return not ready STATUS register.
- * Used in calibration test.
- */
-static int emul_nrdy(struct i2c_emul *emul, int reg, uint8_t *val, int byte,
- void *data)
-{
- if (reg == BMI160_STATUS) {
- bmi_emul_set_reg(emul, BMI160_STATUS, 0);
- *val = 0;
-
- return 0;
- }
-
- return 1;
-}
-
-/** Test acceleromtere calibration */
-ZTEST_USER(bmi160, test_bmi_acc_perform_calib)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t pmu_status;
- intv3_t start_off;
- intv3_t exp_off;
- intv3_t ret_off;
- int range;
- int rate;
- mat33_fp_t rot = {
- { FLOAT_TO_FP(1), 0, 0},
- { 0, FLOAT_TO_FP(1), 0},
- { 0, 0, FLOAT_TO_FP(-1)}
- };
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Enable sensors */
- pmu_status = BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET;
- pmu_status |= BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET;
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, pmu_status);
-
- /* Range and rate cannot change after calibration */
- range = 4;
- rate = 50000;
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, 0), NULL);
-
- /* Set offset 0 */
- start_off[0] = 0;
- start_off[1] = 0;
- start_off[2] = 0;
- set_emul_acc_offset(emul, start_off);
-
- /* Set input accelerometer values */
- exp_off[0] = BMI_EMUL_1G / 10;
- exp_off[1] = BMI_EMUL_1G / 20;
- exp_off[2] = BMI_EMUL_1G - (int)BMI_EMUL_1G / 30;
- set_emul_acc(emul, exp_off);
-
- /*
- * Expected offset is [-X, -Y, 1G - Z] for no rotation or positive
- * rotation on Z axis
- */
- exp_off[0] = -exp_off[0];
- exp_off[1] = -exp_off[1];
- exp_off[2] = BMI_EMUL_1G - exp_off[2];
-
- /* Test fail on rate set */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_ACC_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on status read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- /* Stop fast offset compensation before next test */
- bmi_emul_set_reg(emul, BMI160_CMD_REG, BMI160_CMD_NOOP);
-
- /* Test fail on data not ready */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_read_func(emul, emul_nrdy, NULL);
- zassert_equal(EC_RES_TIMEOUT, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
- /* Stop fast offset compensation before next test */
- bmi_emul_set_reg(emul, BMI160_CMD_REG, BMI160_CMD_NOOP);
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
- /* Test successful offset compenastion without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_acc_offset(emul, ret_off);
- /*
- * Depending on used range, accelerometer values may be up to 6 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_off, ret_off, 64);
- /* Acelerometer offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_ACC_EN, NULL);
-
- /* Enable rotation with negative value on Z axis */
- ms->rot_standard_ref = &rot;
- /* Expected offset -1G - accelerometer[Z] */
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Z, -(int)BMI_EMUL_1G - 1234);
- exp_off[2] = 1234;
-
- /* Test successful offset compenastion with negative Z rotation */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_acc_offset(emul, ret_off);
- compare_int3v_eps(exp_off, ret_off, 64);
- /* Acelerometer offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_ACC_EN, NULL);
-
- /* Set positive rotation on Z axis */
- rot[2][2] = FLOAT_TO_FP(1);
- /* Expected offset 1G - accelerometer[Z] */
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Z, BMI_EMUL_1G - 1234);
- exp_off[2] = 1234;
-
- /* Test successful offset compenastion with positive Z rotation */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_acc_offset(emul, ret_off);
- compare_int3v_eps(exp_off, ret_off, 64);
- /* Acelerometer offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_ACC_EN, NULL);
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-}
-
-/** Test gyroscope calibration */
-ZTEST_USER(bmi160, test_bmi_gyr_perform_calib)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t pmu_status;
- intv3_t start_off;
- intv3_t exp_off;
- intv3_t ret_off;
- int range;
- int rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Enable sensors */
- pmu_status = BMI160_PMU_NORMAL << BMI160_PMU_ACC_OFFSET;
- pmu_status |= BMI160_PMU_NORMAL << BMI160_PMU_GYR_OFFSET;
- bmi_emul_set_reg(emul, BMI160_PMU_STATUS, pmu_status);
-
- /* Range and rate cannot change after calibration */
- range = 250;
- rate = 50000;
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, 0), NULL);
-
- /* Set offset 0 */
- start_off[0] = 0;
- start_off[1] = 0;
- start_off[2] = 0;
- set_emul_gyr_offset(emul, start_off);
-
- /* Set input accelerometer values */
- exp_off[0] = BMI_EMUL_125_DEG_S / 100;
- exp_off[1] = BMI_EMUL_125_DEG_S / 200;
- exp_off[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- set_emul_gyr(emul, exp_off);
-
- /* Expected offset is [-X, -Y, -Z] */
- exp_off[0] = -exp_off[0];
- exp_off[1] = -exp_off[1];
- exp_off[2] = -exp_off[2];
-
- /* Test success on disabling calibration */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on rate set */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_GYR_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on status read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- /* Stop fast offset compensation before next test */
- bmi_emul_set_reg(emul, BMI160_CMD_REG, BMI160_CMD_NOOP);
-
- /* Test fail on data not ready */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_read_func(emul, emul_nrdy, NULL);
- zassert_equal(EC_RES_TIMEOUT, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
- /* Stop fast offset compensation before next test */
- bmi_emul_set_reg(emul, BMI160_CMD_REG, BMI160_CMD_NOOP);
-
- /* Test successful offset compenastion */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_gyr_offset(emul, ret_off);
- /*
- * Depending on used range, gyroscope values may be up to 4 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_off, ret_off, 32);
- /* Gyroscope offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI160_OFFSET_EN_GYR98) &
- BMI160_OFFSET_GYRO_EN, NULL);
-}
-
-/** Test init function of BMI160 accelerometer and gyroscope sensors */
-ZTEST_USER(bmi160, test_bmi_init)
-{
- struct motion_sensor_t *ms_acc, *ms_gyr;
- struct i2c_emul *emul;
-
- emul = bmi_emul_get(BMI_ORD);
- ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Test successful init */
- zassert_equal(EC_RES_SUCCESS, ms_acc->drv->init(ms_acc), NULL);
-
- zassert_equal(EC_RES_SUCCESS, ms_gyr->drv->init(ms_gyr), NULL);
-}
-
-/** Data for custom emulator read function used in FIFO test */
-struct fifo_func_data {
- uint16_t interrupts;
-};
-
-/**
- * Custom emulator read function used in FIFO test. It sets interrupt registers
- * to value passed as additional data. It sets interrupt registers to 0 after
- * access.
- */
-static int emul_fifo_func(struct i2c_emul *emul, int reg, uint8_t *val,
- int byte, void *data)
-{
- struct fifo_func_data *d = data;
-
- if (reg + byte == BMI160_INT_STATUS_0) {
- bmi_emul_set_reg(emul, BMI160_INT_STATUS_0,
- d->interrupts & 0xff);
- d->interrupts &= 0xff00;
- } else if (reg + byte == BMI160_INT_STATUS_1) {
- bmi_emul_set_reg(emul, BMI160_INT_STATUS_1,
- (d->interrupts >> 8) & 0xff);
- d->interrupts &= 0xff;
- }
-
- return 1;
-}
-
-/**
- * Run irq handler on accelerometer sensor and check if committed data in FIFO
- * match what was set in FIFO frames in emulator.
- */
-static void check_fifo_f(struct motion_sensor_t *ms_acc,
- struct motion_sensor_t *ms_gyr,
- struct bmi_emul_frame *frame,
- int acc_range, int gyr_range,
- int line)
-{
- struct ec_response_motion_sensor_data vector;
- struct bmi_emul_frame *f_acc, *f_gyr;
- uint32_t event = BMI_INT_EVENT;
- uint16_t size;
- intv3_t exp_v;
- intv3_t ret_v;
-
- /* Find first frame of acc and gyr type */
- f_acc = frame;
- while (f_acc != NULL && !(f_acc->type & BMI_EMUL_FRAME_ACC)) {
- f_acc = f_acc->next;
- }
-
- f_gyr = frame;
- while (f_gyr != NULL && !(f_gyr->type & BMI_EMUL_FRAME_GYR)) {
- f_gyr = f_gyr->next;
- }
-
- /* Read FIFO in driver */
- zassert_equal(EC_SUCCESS, ms_acc->drv->irq_handler(ms_acc, &event),
- "Failed to read FIFO in irq handler, line %d", line);
-
- /* Read all data committed to FIFO */
- while (motion_sense_fifo_read(sizeof(vector), 1, &vector, &size)) {
- /* Ignore timestamp frames */
- if (vector.flags == MOTIONSENSE_SENSOR_FLAG_TIMESTAMP) {
- continue;
- }
-
- /* Check acclerometer frames */
- if (ms_acc - motion_sensors == vector.sensor_num) {
- if (f_acc == NULL) {
- zassert_unreachable(
- "Not expected acclerometer data in FIFO, line %d",
- line);
- }
-
- convert_int3v_int16(vector.data, ret_v);
- drv_acc_to_emul(ret_v, acc_range, ret_v);
- exp_v[0] = f_acc->acc_x;
- exp_v[1] = f_acc->acc_y;
- exp_v[2] = f_acc->acc_z;
- compare_int3v_f(exp_v, ret_v, V_EPS, line);
- f_acc = f_acc->next;
- }
-
- /* Check gyroscope frames */
- if (ms_gyr - motion_sensors == vector.sensor_num) {
- if (f_gyr == NULL) {
- zassert_unreachable(
- "Not expected gyroscope data in FIFO, line %d",
- line);
- }
-
- convert_int3v_int16(vector.data, ret_v);
- drv_gyr_to_emul(ret_v, gyr_range, ret_v);
- exp_v[0] = f_gyr->gyr_x;
- exp_v[1] = f_gyr->gyr_y;
- exp_v[2] = f_gyr->gyr_z;
- compare_int3v_f(exp_v, ret_v, V_EPS, line);
- f_gyr = f_gyr->next;
- }
- }
-
- /* Skip frames of different type at the end */
- while (f_acc != NULL && !(f_acc->type & BMI_EMUL_FRAME_ACC)) {
- f_acc = f_acc->next;
- }
-
- while (f_gyr != NULL && !(f_gyr->type & BMI_EMUL_FRAME_GYR)) {
- f_gyr = f_gyr->next;
- }
-
- /* All frames are readed */
- zassert_is_null(f_acc, "Not all accelerometer frames are read, line %d",
- line);
- zassert_is_null(f_gyr, "Not all gyroscope frames are read, line %d",
- line);
-}
-#define check_fifo(ms_acc, ms_gyr, frame, acc_range, gyr_range) \
- check_fifo_f(ms_acc, ms_gyr, frame, acc_range, gyr_range, __LINE__)
-
-/** Test irq handler of accelerometer sensor */
-ZTEST_USER(bmi160, test_bmi_acc_fifo)
-{
- struct motion_sensor_t *ms, *ms_gyr;
- struct fifo_func_data func_data;
- struct bmi_emul_frame f[3];
- struct i2c_emul *emul;
- int gyr_range = 125;
- int acc_range = 2;
- int event;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* init bmi before test */
- zassert_equal(EC_RES_SUCCESS, ms->drv->init(ms), NULL);
- zassert_equal(EC_RES_SUCCESS, ms_gyr->drv->init(ms_gyr), NULL);
-
- /* Need to be set to collect all data in FIFO */
- ms->oversampling_ratio = 1;
- ms_gyr->oversampling_ratio = 1;
- /* Only BMI event should be handled */
- event = 0x1234 & ~BMI_INT_EVENT;
- zassert_equal(EC_ERROR_NOT_HANDLED, ms->drv->irq_handler(ms, &event),
- NULL);
-
- event = BMI_INT_EVENT;
-
- /* Test fail to read interrupt status registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_INT_STATUS_0);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_INT_STATUS_1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test no interrupt */
- bmi_emul_set_reg(emul, BMI160_INT_STATUS_0, 0);
- bmi_emul_set_reg(emul, BMI160_INT_STATUS_1, 0);
-
- /* Enable sensor FIFO */
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, NULL, acc_range, gyr_range);
-
- /* Set custom function for FIFO test */
- i2c_common_emul_set_read_func(emul, emul_fifo_func, &func_data);
- /* Set range */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, acc_range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->set_range(ms_gyr, gyr_range, 0),
- NULL);
- /* Setup single accelerometer frame */
- f[0].type = BMI_EMUL_FRAME_ACC;
- f[0].acc_x = BMI_EMUL_1G / 10;
- f[0].acc_y = BMI_EMUL_1G / 20;
- f[0].acc_z = -(int)BMI_EMUL_1G / 30;
- f[0].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second accelerometer frame */
- f[1].type = BMI_EMUL_FRAME_ACC;
- f[1].acc_x = -(int)BMI_EMUL_1G / 40;
- f[1].acc_y = BMI_EMUL_1G / 50;
- f[1].acc_z = BMI_EMUL_1G / 60;
- f[0].next = &(f[1]);
- f[1].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Enable sensor FIFO */
- zassert_equal(EC_SUCCESS, ms_gyr->drv->set_data_rate(ms_gyr, 50000, 0),
- NULL);
-
- /* Setup first gyroscope frame (after two accelerometer frames) */
- f[2].type = BMI_EMUL_FRAME_GYR;
- f[2].gyr_x = -(int)BMI_EMUL_125_DEG_S / 100;
- f[2].gyr_y = BMI_EMUL_125_DEG_S / 200;
- f[2].gyr_z = BMI_EMUL_125_DEG_S / 300;
- f[1].next = &(f[2]);
- f[2].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second accelerometer frame to by gyroscope frame too */
- f[1].type |= BMI_EMUL_FRAME_GYR;
- f[1].gyr_x = -(int)BMI_EMUL_125_DEG_S / 300;
- f[1].gyr_y = BMI_EMUL_125_DEG_S / 400;
- f[1].gyr_z = BMI_EMUL_125_DEG_S / 500;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Skip frame should be ignored by driver */
- bmi_emul_set_skipped_frames(emul, 8);
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second frame as an config frame */
- f[1].type = BMI_EMUL_FRAME_CONFIG;
- /* Indicate that accelerometer range changed */
- f[1].config = 0x1;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI160_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-/** Test irq handler of gyroscope sensor */
-ZTEST_USER(bmi160, test_bmi_gyr_fifo)
-{
- struct motion_sensor_t *ms;
- uint32_t event;
-
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Interrupt shuldn't be triggered for gyroscope motion sense */
- event = BMI_INT_EVENT;
- zassert_equal(EC_ERROR_NOT_HANDLED, ms->drv->irq_handler(ms, &event),
- NULL);
-}
-
-/** Test reading from compass via `bmi160_sec_raw_read8()` */
-ZTEST_USER(bmi160, test_bmi_sec_raw_read8)
-{
- struct motion_sensor_t *ms = &motion_sensors[BMI_ACC_SENSOR_ID];
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
-
- uint8_t expected_read_value = 0xAA;
- uint8_t requested_reg_addr = 0x55;
- uint8_t actual_reg_addr;
- int actual_read_value;
- int ret;
-
- bmi_emul_set_reg(emul, BMI160_MAG_I2C_READ_DATA, expected_read_value);
-
- ret = bmi160_sec_raw_read8(ms->port, ms->i2c_spi_addr_flags,
- requested_reg_addr, &actual_read_value);
-
- /* Verify return value */
- zassert_equal(ret, EC_RES_SUCCESS, "Expected return code %d but got %d",
- EC_RES_SUCCESS, ret);
-
- /* Verify the correct value was read */
- zassert_equal(expected_read_value, actual_read_value,
- "Read value $%02x but expected to read $%02x",
- actual_read_value, expected_read_value);
-
- /* Verify the intended register address was read */
- actual_reg_addr = bmi_emul_get_reg(emul, BMI160_MAG_I2C_READ_ADDR);
- zassert_equal(requested_reg_addr, actual_reg_addr,
- "Read reg $%02x but expected to read $%02x",
- actual_reg_addr, requested_reg_addr);
-}
-
-/** Test writing to compass via `bmi160_sec_raw_write8()` */
-ZTEST_USER(bmi160, test_bmi_sec_raw_write8)
-{
- struct motion_sensor_t *ms = &motion_sensors[BMI_ACC_SENSOR_ID];
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
-
- uint8_t expected_write_value = 0xAB;
- uint8_t requested_reg_addr = 0x56;
- uint8_t actual_reg_addr;
- int actual_written_value;
- int ret;
-
- ret = bmi160_sec_raw_write8(ms->port, ms->i2c_spi_addr_flags,
- requested_reg_addr, expected_write_value);
-
- /* Verify return value */
- zassert_equal(ret, EC_RES_SUCCESS, "Expected return code %d but got %d",
- EC_RES_SUCCESS, ret);
-
- /* Verify the correct value was written */
- actual_written_value =
- bmi_emul_get_reg(emul, BMI160_MAG_I2C_WRITE_DATA);
- zassert_equal(expected_write_value, actual_written_value,
- "Wrote value $%02x but expected to write $%02x",
- actual_written_value, expected_write_value);
-
- /* Verify the intended register address was used */
- actual_reg_addr = bmi_emul_get_reg(emul, BMI160_MAG_I2C_WRITE_ADDR);
- zassert_equal(requested_reg_addr, actual_reg_addr,
- "Wrote reg $%02x but expected to write $%02x",
- actual_reg_addr, requested_reg_addr);
-}
-
-/** Test setting an offset on an invalid sensor type */
-ZTEST_USER(bmi160, test_bmi_set_offset_invalid_type)
-{
- struct motion_sensor_t ms_fake;
- int ret;
-
- int16_t unused_offset;
- int16_t temp = 0;
-
- /* make a copy of the accel motion sensor so we modify its type */
- memcpy(&ms_fake, &motion_sensors[BMI_ACC_SENSOR_ID], sizeof(ms_fake));
- ms_fake.type = MOTIONSENSE_TYPE_MAX;
-
- ret = ms_fake.drv->set_offset(&ms_fake, &unused_offset, temp);
-
- zassert_equal(ret, EC_RES_INVALID_PARAM,
- "Expected return code of %d but got %d",
- EC_RES_INVALID_PARAM, ret);
-}
-
-/** Test performing a calibration on a magnetometer, which is not supported */
-ZTEST_USER(bmi160, test_bmi_perform_calib_invalid_type)
-{
- struct motion_sensor_t ms_fake;
- int ret;
-
- /* make a copy of the accel motion sensor so we modify its type */
- memcpy(&ms_fake, &motion_sensors[BMI_ACC_SENSOR_ID], sizeof(ms_fake));
- ms_fake.type = MOTIONSENSE_TYPE_MAG;
-
- ret = ms_fake.drv->perform_calib(&ms_fake, 1);
-
- zassert_equal(ret, EC_RES_INVALID_PARAM,
- "Expected return code of %d but got %d",
- EC_RES_INVALID_PARAM, ret);
-}
-
-/** Test reading the onboard temperature sensor */
-ZTEST_USER(bmi160, test_bmi_temp_sensor)
-{
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- int ret;
-
- /* Part 1:
- * Set up the register so we read 300 Kelvin. 0x0000 is 23 deg C, and
- * each LSB is 0.5^9 deg C. See BMI160 datasheet for more details.
- */
- int actual_read_temp_k, expected_temp_k = 300;
- uint16_t temp_reg_value = (K_TO_C(expected_temp_k) - 23) << 9;
-
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, temp_reg_value & 0xFF);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, temp_reg_value >> 8);
-
- /* The output will be in Kelvin */
- ret = bmi160_get_sensor_temp(BMI_ACC_SENSOR_ID, &actual_read_temp_k);
-
- zassert_equal(ret, EC_RES_SUCCESS, "Expected %d but got %d",
- EC_RES_SUCCESS, ret);
- zassert_equal(expected_temp_k, actual_read_temp_k,
- "Expected %dK but got %dK", expected_temp_k,
- actual_read_temp_k);
-
- /* Part 2:
- * Have the chip return an invalid reading.
- */
- temp_reg_value = BMI_INVALID_TEMP;
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_0, temp_reg_value & 0xFF);
- bmi_emul_set_reg(emul, BMI160_TEMPERATURE_1, temp_reg_value >> 8);
-
- ret = bmi160_get_sensor_temp(BMI_ACC_SENSOR_ID, &actual_read_temp_k);
-
- zassert_equal(ret, EC_ERROR_NOT_POWERED, "Expected %d but got %d",
- EC_ERROR_NOT_POWERED, ret);
-}
-
-ZTEST_USER(bmi160, test_bmi_interrupt_handler)
-{
- /* The accelerometer interrupt handler simply sets an event flag for the
- * motion sensing task. Make sure that flag starts cleared, fire the
- * interrupt, and ensure the flag is set.
- */
-
- atomic_t *mask;
-
- mask = task_get_event_bitmap(TASK_ID_MOTIONSENSE);
- zassert_true(mask != NULL,
- "Got a null pointer when getting event bitmap.");
- zassert_true((*mask & CONFIG_ACCELGYRO_BMI160_INT_EVENT) == 0,
- "Event flag is set before firing interrupt");
-
- bmi160_interrupt(0);
-
- mask = task_get_event_bitmap(TASK_ID_MOTIONSENSE);
- zassert_true(mask != NULL,
- "Got a null pointer when getting event bitmap.");
- zassert_true(*mask & CONFIG_ACCELGYRO_BMI160_INT_EVENT,
- "Event flag is not set after firing interrupt");
-}
-
-/* Make an I2C emulator mock wrapped in FFF for use with test_bmi_init_chip_id()
- */
-FAKE_VALUE_FUNC(int, bmi_init_chip_id_mock_write_fn, struct i2c_emul *, int,
- uint8_t, int, void *);
-
-/** Test handling of invalid or unreadable chip IDs in init() */
-ZTEST_USER(bmi160, test_bmi_init_chip_id)
-{
- struct motion_sensor_t *ms = &motion_sensors[BMI_ACC_SENSOR_ID];
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- int ret;
-
- /* Part 1: Cannot read the Chip ID register */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_CHIP_ID);
- ret = ms->drv->init(ms);
-
- zassert_equal(ret, EC_ERROR_UNKNOWN, "Expected %d but got %d",
- EC_ERROR_UNKNOWN, ret);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Part 2: Incorrect chip ID - this triggers a series of writes in an
- * attempt to 'unlock' the chip.
- */
-
- /* Have the mocked write function return 1 so everything is passed
- * through. We only care about using FFF to capture the argument
- * history.
- */
-
- RESET_FAKE(bmi_init_chip_id_mock_write_fn);
- bmi_init_chip_id_mock_write_fn_fake.return_val = 1;
- i2c_common_emul_set_write_func(emul, bmi_init_chip_id_mock_write_fn,
- NULL);
-
- /* Return a phony chip ID */
- bmi_emul_set_reg(emul, BMI160_CHIP_ID, 0xFF);
-
- ret = ms->drv->init(ms);
-
- /* Verify return value */
- zassert_equal(ret, EC_ERROR_ACCESS_DENIED, "Expected %d but got %d",
- EC_ERROR_ACCESS_DENIED, ret);
-
- /* Verify that all expected I2C writes were completed, in order */
- MOCK_ASSERT_I2C_WRITE(bmi_init_chip_id_mock_write_fn, 0, BMI160_CMD_REG,
- BMI160_CMD_EXT_MODE_EN_B0);
- MOCK_ASSERT_I2C_WRITE(bmi_init_chip_id_mock_write_fn, 1, BMI160_CMD_REG,
- BMI160_CMD_EXT_MODE_EN_B1);
- MOCK_ASSERT_I2C_WRITE(bmi_init_chip_id_mock_write_fn, 2, BMI160_CMD_REG,
- BMI160_CMD_EXT_MODE_EN_B2);
- MOCK_ASSERT_I2C_WRITE(bmi_init_chip_id_mock_write_fn, 3,
- BMI160_CMD_EXT_MODE_ADDR, BMI160_CMD_PAGING_EN);
- MOCK_ASSERT_I2C_WRITE(bmi_init_chip_id_mock_write_fn, 4,
- BMI160_CMD_EXT_MODE_ADDR, 0);
-
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-}
-
-ZTEST_SUITE(bmi160, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/bmi260.c b/zephyr/test/drivers/src/bmi260.c
deleted file mode 100644
index abcab72898..0000000000
--- a/zephyr/test/drivers/src/bmi260.c
+++ /dev/null
@@ -1,2195 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <fff.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "i2c.h"
-#include "emul/emul_bmi.h"
-#include "emul/emul_common_i2c.h"
-
-#include "motion_sense_fifo.h"
-#include "driver/accelgyro_bmi260.h"
-#include "driver/accelgyro_bmi_common.h"
-#include "test/drivers/test_mocks.h"
-#include "test/drivers/test_state.h"
-
-#define BMI_ORD DT_DEP_ORD(DT_NODELABEL(accel_bmi260))
-#define BMI_ACC_SENSOR_ID SENSOR_ID(DT_NODELABEL(ms_bmi260_accel))
-#define BMI_GYR_SENSOR_ID SENSOR_ID(DT_NODELABEL(ms_bmi260_gyro))
-#define BMI_INT_EVENT \
- TASK_EVENT_MOTION_SENSOR_INTERRUPT(SENSOR_ID(DT_ALIAS(bmi260_int)))
-
-/** How accurate comparision of vectors should be */
-#define V_EPS 8
-
-/** Convert from one type of vector to another */
-#define convert_int3v_int16(v, r) do { \
- r[0] = v[0]; \
- r[1] = v[1]; \
- r[2] = v[2]; \
- } while (0)
-
-/** Rotation used in some tests */
-static const mat33_fp_t test_rotation = {
- { 0, FLOAT_TO_FP(1), 0},
- { FLOAT_TO_FP(-1), 0, 0},
- { 0, 0, FLOAT_TO_FP(-1)}
-};
-/** Rotate given vector by test rotation */
-static void rotate_int3v_by_test_rotation(intv3_t v)
-{
- int16_t t;
-
- t = v[0];
- v[0] = -v[1];
- v[1] = t;
- v[2] = -v[2];
-}
-
-/** Set emulator accelerometer offset values to intv3_t vector */
-static void set_emul_acc_offset(struct i2c_emul *emul, intv3_t offset)
-{
- bmi_emul_set_off(emul, BMI_EMUL_ACC_X, offset[0]);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Y, offset[1]);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Z, offset[2]);
-}
-
-/** Save emulator accelerometer offset values to intv3_t vector */
-static void get_emul_acc_offset(struct i2c_emul *emul, intv3_t offset)
-{
- offset[0] = bmi_emul_get_off(emul, BMI_EMUL_ACC_X);
- offset[1] = bmi_emul_get_off(emul, BMI_EMUL_ACC_Y);
- offset[2] = bmi_emul_get_off(emul, BMI_EMUL_ACC_Z);
-}
-
-/** Set emulator accelerometer values to intv3_t vector */
-static void set_emul_acc(struct i2c_emul *emul, intv3_t acc)
-{
- bmi_emul_set_value(emul, BMI_EMUL_ACC_X, acc[0]);
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Y, acc[1]);
- bmi_emul_set_value(emul, BMI_EMUL_ACC_Z, acc[2]);
-}
-
-/** Set emulator gyroscope offset values to intv3_t vector */
-static void set_emul_gyr_offset(struct i2c_emul *emul, intv3_t offset)
-{
- bmi_emul_set_off(emul, BMI_EMUL_GYR_X, offset[0]);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Y, offset[1]);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Z, offset[2]);
-}
-
-/** Save emulator gyroscope offset values to intv3_t vector */
-static void get_emul_gyr_offset(struct i2c_emul *emul, intv3_t offset)
-{
- offset[0] = bmi_emul_get_off(emul, BMI_EMUL_GYR_X);
- offset[1] = bmi_emul_get_off(emul, BMI_EMUL_GYR_Y);
- offset[2] = bmi_emul_get_off(emul, BMI_EMUL_GYR_Z);
-}
-
-/** Set emulator gyroscope values to vector of three int16_t */
-static void set_emul_gyr(struct i2c_emul *emul, intv3_t gyr)
-{
- bmi_emul_set_value(emul, BMI_EMUL_GYR_X, gyr[0]);
- bmi_emul_set_value(emul, BMI_EMUL_GYR_Y, gyr[1]);
- bmi_emul_set_value(emul, BMI_EMUL_GYR_Z, gyr[2]);
-}
-
-/** Convert accelerometer read to units used by emulator */
-static void drv_acc_to_emul(intv3_t drv, int range, intv3_t out)
-{
- const int scale = MOTION_SCALING_FACTOR / BMI_EMUL_1G;
-
- out[0] = drv[0] * range / scale;
- out[1] = drv[1] * range / scale;
- out[2] = drv[2] * range / scale;
-}
-
-/** Convert gyroscope read to units used by emulator */
-static void drv_gyr_to_emul(intv3_t drv, int range, intv3_t out)
-{
- const int scale = MOTION_SCALING_FACTOR / BMI_EMUL_125_DEG_S;
-
- range /= 125;
- out[0] = drv[0] * range / scale;
- out[1] = drv[1] * range / scale;
- out[2] = drv[2] * range / scale;
-}
-
-/** Compare two vectors of intv3_t type */
-static void compare_int3v_f(intv3_t exp_v, intv3_t v, int eps, int line)
-{
- int i;
-
- for (i = 0; i < 3; i++) {
- zassert_within(exp_v[i], v[i], eps,
- "Expected [%d; %d; %d], got [%d; %d; %d]; line: %d",
- exp_v[0], exp_v[1], exp_v[2], v[0], v[1], v[2], line);
- }
-}
-#define compare_int3v_eps(exp_v, v, e) compare_int3v_f(exp_v, v, e, __LINE__)
-#define compare_int3v(exp_v, v) compare_int3v_eps(exp_v, v, V_EPS)
-
-/**
- * Custom emulator read function which always return INIT OK status in
- * INTERNAL STATUS register. Used in init test.
- */
-static int emul_init_ok(struct i2c_emul *emul, int reg, uint8_t *val, int byte,
- void *data)
-{
- bmi_emul_set_reg(emul, BMI260_INTERNAL_STATUS, BMI260_INIT_OK);
-
- return 1;
-}
-
-/** Init BMI260 before test */
-static void bmi_init_emul(void)
-{
- struct motion_sensor_t *ms_acc;
- struct motion_sensor_t *ms_gyr;
- struct i2c_emul *emul;
-
- emul = bmi_emul_get(BMI_ORD);
- ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /*
- * Init BMI before test. It is needed custom function to set value of
- * BMI260_INTERNAL_STATUS register, because init function triggers reset
- * which clears value set in this register before test.
- */
- i2c_common_emul_set_read_func(emul, emul_init_ok, NULL);
- zassert_equal(EC_RES_SUCCESS, ms_acc->drv->init(ms_acc), NULL);
- zassert_equal(EC_RES_SUCCESS, ms_gyr->drv->init(ms_gyr), NULL);
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-/** Test get accelerometer offset with and without rotation */
-ZTEST_USER(bmi260, test_bmi_acc_get_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t ret[3];
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Set emulator offset */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- set_emul_acc_offset(emul, exp_v);
- /* BMI driver returns value in mg units */
- exp_v[0] = 1000 / 10;
- exp_v[1] = 1000 / 20;
- exp_v[2] = -1000 / 30;
-
- /* Test fail on offset read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_ACC70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test get offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected offset */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
-
- /* Test get offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v(exp_v, ret_v);
-}
-
-/** Test get gyroscope offset with and without rotation */
-ZTEST_USER(bmi260, test_bmi_gyr_get_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t ret[3];
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set emulator offset */
- exp_v[0] = BMI_EMUL_125_DEG_S / 100;
- exp_v[1] = BMI_EMUL_125_DEG_S / 200;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- set_emul_gyr_offset(emul, exp_v);
- /* BMI driver returns value in mdeg/s units */
- exp_v[0] = 125000 / 100;
- exp_v[1] = 125000 / 200;
- exp_v[2] = -125000 / 300;
-
- /* Test fail on offset read */
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_GYR70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI160_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test get offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
-
- /* Setup rotation and rotate expected offset */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
-
- /* Test get offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->get_offset(ms, ret, &temp),
- NULL);
- zassert_equal(temp, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- convert_int3v_int16(ret, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
-}
-
-/**
- * Test set accelerometer offset with and without rotation. Also test behaviour
- * on I2C error.
- */
-ZTEST_USER(bmi260, test_bmi_acc_set_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t input_v[3];
- int16_t temp = 0;
- intv3_t ret_v;
- intv3_t exp_v;
- uint8_t nv_c;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Test fail on NV CONF register read and write */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_NV_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(emul, BMI260_NV_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on offset write */
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI160_OFFSET_ACC70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup NV_CONF register value */
- bmi_emul_set_reg(emul, BMI260_NV_CONF, 0x7);
- /* Set input offset */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- /* BMI driver accept value in mg units */
- input_v[0] = 1000 / 10;
- input_v[1] = 1000 / 20;
- input_v[2] = -1000 / 30;
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test set offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_acc_offset(emul, ret_v);
- /*
- * Depending on used range, accelerometer values may be up to 6 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_v, ret_v, 64);
- nv_c = bmi_emul_get_reg(emul, BMI260_NV_CONF);
- /* Only ACC_OFFSET_EN bit should be changed */
- zassert_equal(0x7 | BMI260_ACC_OFFSET_EN, nv_c,
- "Expected 0x%x, got 0x%x",
- 0x7 | BMI260_ACC_OFFSET_EN, nv_c);
-
- /* Setup NV_CONF register value */
- bmi_emul_set_reg(emul, BMI260_NV_CONF, 0);
- /* Setup rotation and rotate input for set_offset function */
- ms->rot_standard_ref = &test_rotation;
- convert_int3v_int16(input_v, ret_v);
- rotate_int3v_by_test_rotation(ret_v);
- convert_int3v_int16(ret_v, input_v);
-
- /* Test set offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_acc_offset(emul, ret_v);
- compare_int3v_eps(exp_v, ret_v, 64);
- nv_c = bmi_emul_get_reg(emul, BMI260_NV_CONF);
- /* Only ACC_OFFSET_EN bit should be changed */
- zassert_equal(BMI260_ACC_OFFSET_EN, nv_c, "Expected 0x%x, got 0x%x",
- BMI260_ACC_OFFSET_EN, nv_c);
-}
-
-/**
- * Test set gyroscope offset with and without rotation. Also test behaviour
- * on I2C error.
- */
-ZTEST_USER(bmi260, test_bmi_gyr_set_offset)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int16_t input_v[3];
- int16_t temp = 0;
- intv3_t ret_v;
- intv3_t exp_v;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Test fail on OFFSET EN GYR98 register read and write */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(emul, BMI260_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on offset write */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_OFFSET_GYR70);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI260_OFFSET_GYR70 + 1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, BMI260_OFFSET_GYR70 + 2);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_offset(ms, input_v, temp),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set input offset */
- exp_v[0] = BMI_EMUL_125_DEG_S / 100;
- exp_v[1] = BMI_EMUL_125_DEG_S / 200;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- /* BMI driver accept value in mdeg/s units */
- input_v[0] = 125000 / 100;
- input_v[1] = 125000 / 200;
- input_v[2] = -125000 / 300;
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Test set offset without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_gyr_offset(emul, ret_v);
- /*
- * Depending on used range, gyroscope values may be up to 4 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_v, ret_v, 32);
- /* Gyroscope offset should be enabled */
- zassert_true(bmi_emul_get_reg(emul, BMI260_OFFSET_EN_GYR98) &
- BMI260_OFFSET_GYRO_EN, NULL);
-
- /* Setup rotation and rotate input for set_offset function */
- ms->rot_standard_ref = &test_rotation;
- convert_int3v_int16(input_v, ret_v);
- rotate_int3v_by_test_rotation(ret_v);
- convert_int3v_int16(ret_v, input_v);
-
- /* Test set offset with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->set_offset(ms, input_v, temp), NULL);
- get_emul_gyr_offset(emul, ret_v);
- compare_int3v_eps(exp_v, ret_v, 32);
- zassert_true(bmi_emul_get_reg(emul, BMI260_OFFSET_EN_GYR98) &
- BMI260_OFFSET_GYRO_EN, NULL);
-}
-
-/**
- * Try to set accelerometer range and check if expected range was set
- * in driver and in emulator.
- */
-static void check_set_acc_range_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int range,
- int rnd, int exp_range, int line)
-{
- uint8_t exp_range_reg;
- uint8_t range_reg;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, rnd),
- "set_range failed; line: %d", line);
- zassert_equal(exp_range, ms->current_range,
- "Expected range %d, got %d; line %d",
- exp_range, ms->current_range, line);
- range_reg = bmi_emul_get_reg(emul, BMI260_ACC_RANGE);
-
- switch (exp_range) {
- case 2:
- exp_range_reg = BMI260_GSEL_2G;
- break;
- case 4:
- exp_range_reg = BMI260_GSEL_4G;
- break;
- case 8:
- exp_range_reg = BMI260_GSEL_8G;
- break;
- case 16:
- exp_range_reg = BMI260_GSEL_16G;
- break;
- default:
- /* Unknown expected range */
- zassert_unreachable(
- "Expected range %d not supported by device; line %d",
- exp_range, line);
- return;
- }
-
- zassert_equal(exp_range_reg, range_reg,
- "Expected range reg 0x%x, got 0x%x; line %d",
- exp_range_reg, range_reg, line);
-}
-#define check_set_acc_range(emul, ms, range, rnd, exp_range) \
- check_set_acc_range_f(emul, ms, range, rnd, exp_range, __LINE__)
-
-/** Test set accelerometer range with and without I2C errors */
-ZTEST_USER(bmi260, test_bmi_acc_set_range)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int start_range;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Setup starting range, shouldn't be changed on error */
- start_range = 2;
- ms->current_range = start_range;
- bmi_emul_set_reg(emul, BMI260_ACC_RANGE, BMI260_GSEL_2G);
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_ACC_RANGE);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 12, 0), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI260_GSEL_2G,
- bmi_emul_get_reg(emul, BMI260_ACC_RANGE), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 12, 1), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI260_GSEL_2G,
- bmi_emul_get_reg(emul, BMI260_ACC_RANGE), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting range with rounding down */
- check_set_acc_range(emul, ms, 1, 0, 2);
- check_set_acc_range(emul, ms, 2, 0, 2);
- check_set_acc_range(emul, ms, 3, 0, 2);
- check_set_acc_range(emul, ms, 4, 0, 4);
- check_set_acc_range(emul, ms, 5, 0, 4);
- check_set_acc_range(emul, ms, 6, 0, 4);
- check_set_acc_range(emul, ms, 7, 0, 4);
- check_set_acc_range(emul, ms, 8, 0, 8);
- check_set_acc_range(emul, ms, 9, 0, 8);
- check_set_acc_range(emul, ms, 15, 0, 8);
- check_set_acc_range(emul, ms, 16, 0, 16);
- check_set_acc_range(emul, ms, 17, 0, 16);
-
- /* Test setting range with rounding up */
- check_set_acc_range(emul, ms, 1, 1, 2);
- check_set_acc_range(emul, ms, 2, 1, 2);
- check_set_acc_range(emul, ms, 3, 1, 4);
- check_set_acc_range(emul, ms, 4, 1, 4);
- check_set_acc_range(emul, ms, 5, 1, 8);
- check_set_acc_range(emul, ms, 6, 1, 8);
- check_set_acc_range(emul, ms, 7, 1, 8);
- check_set_acc_range(emul, ms, 8, 1, 8);
- check_set_acc_range(emul, ms, 9, 1, 16);
- check_set_acc_range(emul, ms, 15, 1, 16);
- check_set_acc_range(emul, ms, 16, 1, 16);
- check_set_acc_range(emul, ms, 17, 1, 16);
-}
-
-/**
- * Try to set gyroscope range and check if expected range was set in driver and
- * in emulator.
- */
-static void check_set_gyr_range_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int range,
- int rnd, int exp_range, int line)
-{
- uint8_t exp_range_reg;
- uint8_t range_reg;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, rnd),
- "set_range failed; line: %d", line);
- zassert_equal(exp_range, ms->current_range,
- "Expected range %d, got %d; line %d",
- exp_range, ms->current_range, line);
- range_reg = bmi_emul_get_reg(emul, BMI260_GYR_RANGE);
-
- switch (exp_range) {
- case 125:
- exp_range_reg = BMI260_DPS_SEL_125;
- break;
- case 250:
- exp_range_reg = BMI260_DPS_SEL_250;
- break;
- case 500:
- exp_range_reg = BMI260_DPS_SEL_500;
- break;
- case 1000:
- exp_range_reg = BMI260_DPS_SEL_1000;
- break;
- case 2000:
- exp_range_reg = BMI260_DPS_SEL_2000;
- break;
- default:
- /* Unknown expected range */
- zassert_unreachable(
- "Expected range %d not supported by device; line %d",
- exp_range, line);
- return;
- }
-
- zassert_equal(exp_range_reg, range_reg,
- "Expected range reg 0x%x, got 0x%x; line %d",
- exp_range_reg, range_reg, line);
-}
-#define check_set_gyr_range(emul, ms, range, rnd, exp_range) \
- check_set_gyr_range_f(emul, ms, range, rnd, exp_range, __LINE__)
-
-/** Test set gyroscope range with and without I2C errors */
-ZTEST_USER(bmi260, test_bmi_gyr_set_range)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- int start_range;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Setup starting range, shouldn't be changed on error */
- start_range = 250;
- ms->current_range = start_range;
- bmi_emul_set_reg(emul, BMI260_GYR_RANGE, BMI260_DPS_SEL_250);
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_GYR_RANGE);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 125, 0), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI260_DPS_SEL_250,
- bmi_emul_get_reg(emul, BMI260_GYR_RANGE), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_range(ms, 125, 1), NULL);
- zassert_equal(start_range, ms->current_range, NULL);
- zassert_equal(BMI260_DPS_SEL_250,
- bmi_emul_get_reg(emul, BMI260_GYR_RANGE), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting range with rounding down */
- check_set_gyr_range(emul, ms, 1, 0, 125);
- check_set_gyr_range(emul, ms, 124, 0, 125);
- check_set_gyr_range(emul, ms, 125, 0, 125);
- check_set_gyr_range(emul, ms, 126, 0, 125);
- check_set_gyr_range(emul, ms, 249, 0, 125);
- check_set_gyr_range(emul, ms, 250, 0, 250);
- check_set_gyr_range(emul, ms, 251, 0, 250);
- check_set_gyr_range(emul, ms, 499, 0, 250);
- check_set_gyr_range(emul, ms, 500, 0, 500);
- check_set_gyr_range(emul, ms, 501, 0, 500);
- check_set_gyr_range(emul, ms, 999, 0, 500);
- check_set_gyr_range(emul, ms, 1000, 0, 1000);
- check_set_gyr_range(emul, ms, 1001, 0, 1000);
- check_set_gyr_range(emul, ms, 1999, 0, 1000);
- check_set_gyr_range(emul, ms, 2000, 0, 2000);
- check_set_gyr_range(emul, ms, 2001, 0, 2000);
-
- /* Test setting range with rounding up */
- check_set_gyr_range(emul, ms, 1, 1, 125);
- check_set_gyr_range(emul, ms, 124, 1, 125);
- check_set_gyr_range(emul, ms, 125, 1, 125);
- check_set_gyr_range(emul, ms, 126, 1, 250);
- check_set_gyr_range(emul, ms, 249, 1, 250);
- check_set_gyr_range(emul, ms, 250, 1, 250);
- check_set_gyr_range(emul, ms, 251, 1, 500);
- check_set_gyr_range(emul, ms, 499, 1, 500);
- check_set_gyr_range(emul, ms, 500, 1, 500);
- check_set_gyr_range(emul, ms, 501, 1, 1000);
- check_set_gyr_range(emul, ms, 999, 1, 1000);
- check_set_gyr_range(emul, ms, 1000, 1, 1000);
- check_set_gyr_range(emul, ms, 1001, 1, 2000);
- check_set_gyr_range(emul, ms, 1999, 1, 2000);
- check_set_gyr_range(emul, ms, 2000, 1, 2000);
- check_set_gyr_range(emul, ms, 2001, 1, 2000);
-}
-
-/** Test get resolution of acclerometer and gyroscope sensor */
-ZTEST_USER(bmi260, test_bmi_get_resolution)
-{
- struct motion_sensor_t *ms;
-
- /* Test accelerometer */
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Resolution should be always 16 bits */
- zassert_equal(16, ms->drv->get_resolution(ms), NULL);
-
- /* Test gyroscope */
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Resolution should be always 16 bits */
- zassert_equal(16, ms->drv->get_resolution(ms), NULL);
-}
-
-/**
- * Try to set accelerometer data rate and check if expected rate was set
- * in driver and in emulator.
- */
-static void check_set_acc_rate_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int rate, int rnd,
- int exp_rate, int line)
-{
- uint8_t exp_rate_reg;
- uint8_t rate_reg;
- int drv_rate;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, rnd),
- "set_data_rate failed; line: %d", line);
- drv_rate = ms->drv->get_data_rate(ms);
- zassert_equal(exp_rate, drv_rate, "Expected rate %d, got %d; line %d",
- exp_rate, drv_rate, line);
- rate_reg = bmi_emul_get_reg(emul, BMI260_ACC_CONF);
- rate_reg &= BMI_ODR_MASK;
-
- switch (exp_rate) {
- case 12500:
- exp_rate_reg = 0x5;
- break;
- case 25000:
- exp_rate_reg = 0x6;
- break;
- case 50000:
- exp_rate_reg = 0x7;
- break;
- case 100000:
- exp_rate_reg = 0x8;
- break;
- case 200000:
- exp_rate_reg = 0x9;
- break;
- case 400000:
- exp_rate_reg = 0xa;
- break;
- case 800000:
- exp_rate_reg = 0xb;
- break;
- case 1600000:
- exp_rate_reg = 0xc;
- break;
- default:
- /* Unknown expected rate */
- zassert_unreachable(
- "Expected rate %d not supported by device; line %d",
- exp_rate, line);
- return;
- }
-
- zassert_equal(exp_rate_reg, rate_reg,
- "Expected rate reg 0x%x, got 0x%x; line %d",
- exp_rate_reg, rate_reg, line);
-}
-#define check_set_acc_rate(emul, ms, rate, rnd, exp_rate) \
- check_set_acc_rate_f(emul, ms, rate, rnd, exp_rate, __LINE__)
-
-/** Test set and get accelerometer rate with and without I2C errors */
-ZTEST_USER(bmi260, test_bmi_acc_rate)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t reg_rate;
- uint8_t pwr_ctrl;
- int drv_rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Test setting rate with rounding down */
- check_set_acc_rate(emul, ms, 12500, 0, 12500);
- check_set_acc_rate(emul, ms, 12501, 0, 12500);
- check_set_acc_rate(emul, ms, 24999, 0, 12500);
- check_set_acc_rate(emul, ms, 25000, 0, 25000);
- check_set_acc_rate(emul, ms, 25001, 0, 25000);
- check_set_acc_rate(emul, ms, 49999, 0, 25000);
- check_set_acc_rate(emul, ms, 50000, 0, 50000);
- check_set_acc_rate(emul, ms, 50001, 0, 50000);
- check_set_acc_rate(emul, ms, 99999, 0, 50000);
- check_set_acc_rate(emul, ms, 100000, 0, 100000);
- check_set_acc_rate(emul, ms, 100001, 0, 100000);
- check_set_acc_rate(emul, ms, 199999, 0, 100000);
- check_set_acc_rate(emul, ms, 200000, 0, 200000);
- check_set_acc_rate(emul, ms, 200001, 0, 200000);
- check_set_acc_rate(emul, ms, 399999, 0, 200000);
- /*
- * We cannot test frequencies from 400000 to 1600000 because
- * CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ is set to 250000
- */
-
- /* Test setting rate with rounding up */
- check_set_acc_rate(emul, ms, 6251, 1, 12500);
- check_set_acc_rate(emul, ms, 12499, 1, 12500);
- check_set_acc_rate(emul, ms, 12500, 1, 12500);
- check_set_acc_rate(emul, ms, 12501, 1, 25000);
- check_set_acc_rate(emul, ms, 24999, 1, 25000);
- check_set_acc_rate(emul, ms, 25000, 1, 25000);
- check_set_acc_rate(emul, ms, 25001, 1, 50000);
- check_set_acc_rate(emul, ms, 49999, 1, 50000);
- check_set_acc_rate(emul, ms, 50000, 1, 50000);
- check_set_acc_rate(emul, ms, 50001, 1, 100000);
- check_set_acc_rate(emul, ms, 99999, 1, 100000);
- check_set_acc_rate(emul, ms, 100000, 1, 100000);
- check_set_acc_rate(emul, ms, 100001, 1, 200000);
- check_set_acc_rate(emul, ms, 199999, 1, 200000);
- check_set_acc_rate(emul, ms, 200000, 1, 200000);
-
- /* Test out of range rate with rounding down */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 12499, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 2000000, 0), NULL);
-
- /* Test out of range rate with rounding up */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 6250, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 200001, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 2000000, 1), NULL);
-
- /* Current rate shouldn't be changed on error */
- drv_rate = ms->drv->get_data_rate(ms);
- reg_rate = bmi_emul_get_reg(emul, BMI260_ACC_CONF);
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_CONF);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_ACC_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_ACC_CONF), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_ACC_CONF);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_ACC_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_ACC_CONF), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test disabling sensor */
- bmi_emul_set_reg(emul, BMI260_PWR_CTRL,
- BMI260_AUX_EN | BMI260_GYR_EN | BMI260_ACC_EN);
- bmi_emul_set_reg(emul, BMI260_ACC_CONF, BMI260_FILTER_PERF);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 0), NULL);
-
- pwr_ctrl = bmi_emul_get_reg(emul, BMI260_PWR_CTRL);
- reg_rate = bmi_emul_get_reg(emul, BMI260_ACC_CONF);
- zassert_equal(BMI260_AUX_EN | BMI260_GYR_EN, pwr_ctrl, NULL);
- zassert_true(!(reg_rate & BMI260_FILTER_PERF), NULL);
-
- /* Test enabling sensor */
- bmi_emul_set_reg(emul, BMI260_PWR_CTRL, 0);
- bmi_emul_set_reg(emul, BMI260_ACC_CONF, 0);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- pwr_ctrl = bmi_emul_get_reg(emul, BMI260_PWR_CTRL);
- reg_rate = bmi_emul_get_reg(emul, BMI260_ACC_CONF);
- zassert_equal(BMI260_ACC_EN, pwr_ctrl, NULL);
- zassert_true(reg_rate & BMI260_FILTER_PERF, NULL);
-
- /* Test disabling sensor (by setting rate to 0) but failing. */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_PWR_CTRL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 0, 0),
- "Did not properly handle failed power down.");
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test enabling sensor but failing. (after first disabling it) */
- ms->drv->set_data_rate(ms, 0, 0);
-
- i2c_common_emul_set_write_fail_reg(emul, BMI260_PWR_CTRL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- "Did not properly handle failed power up.");
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-/**
- * Try to set gyroscope data rate and check if expected rate was set
- * in driver and in emulator.
- */
-static void check_set_gyr_rate_f(struct i2c_emul *emul,
- struct motion_sensor_t *ms, int rate, int rnd,
- int exp_rate, int line)
-{
- uint8_t exp_rate_reg;
- uint8_t rate_reg;
- int drv_rate;
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, rnd),
- "set_data_rate failed; line: %d", line);
- drv_rate = ms->drv->get_data_rate(ms);
- zassert_equal(exp_rate, drv_rate, "Expected rate %d, got %d; line %d",
- exp_rate, drv_rate, line);
- rate_reg = bmi_emul_get_reg(emul, BMI260_GYR_CONF);
- rate_reg &= BMI_ODR_MASK;
-
- switch (exp_rate) {
- case 25000:
- exp_rate_reg = 0x6;
- break;
- case 50000:
- exp_rate_reg = 0x7;
- break;
- case 100000:
- exp_rate_reg = 0x8;
- break;
- case 200000:
- exp_rate_reg = 0x9;
- break;
- case 400000:
- exp_rate_reg = 0xa;
- break;
- case 800000:
- exp_rate_reg = 0xb;
- break;
- case 1600000:
- exp_rate_reg = 0xc;
- break;
- case 3200000:
- exp_rate_reg = 0xc;
- break;
- default:
- /* Unknown expected rate */
- zassert_unreachable(
- "Expected rate %d not supported by device; line %d",
- exp_rate, line);
- return;
- }
-
- zassert_equal(exp_rate_reg, rate_reg,
- "Expected rate reg 0x%x, got 0x%x; line %d",
- exp_rate_reg, rate_reg, line);
-}
-#define check_set_gyr_rate(emul, ms, rate, rnd, exp_rate) \
- check_set_gyr_rate_f(emul, ms, rate, rnd, exp_rate, __LINE__)
-
-/** Test set and get gyroscope rate with and without I2C errors */
-ZTEST_USER(bmi260, test_bmi_gyr_rate)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t reg_rate;
- uint8_t pwr_ctrl;
- int drv_rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Test setting rate with rounding down */
- check_set_gyr_rate(emul, ms, 25000, 0, 25000);
- check_set_gyr_rate(emul, ms, 25001, 0, 25000);
- check_set_gyr_rate(emul, ms, 49999, 0, 25000);
- check_set_gyr_rate(emul, ms, 50000, 0, 50000);
- check_set_gyr_rate(emul, ms, 50001, 0, 50000);
- check_set_gyr_rate(emul, ms, 99999, 0, 50000);
- check_set_gyr_rate(emul, ms, 100000, 0, 100000);
- check_set_gyr_rate(emul, ms, 100001, 0, 100000);
- check_set_gyr_rate(emul, ms, 199999, 0, 100000);
- check_set_gyr_rate(emul, ms, 200000, 0, 200000);
- check_set_gyr_rate(emul, ms, 200001, 0, 200000);
- check_set_gyr_rate(emul, ms, 399999, 0, 200000);
- /*
- * We cannot test frequencies from 400000 to 3200000 because
- * CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ is set to 250000
- */
-
- /* Test setting rate with rounding up */
- check_set_gyr_rate(emul, ms, 12501, 1, 25000);
- check_set_gyr_rate(emul, ms, 24999, 1, 25000);
- check_set_gyr_rate(emul, ms, 25000, 1, 25000);
- check_set_gyr_rate(emul, ms, 25001, 1, 50000);
- check_set_gyr_rate(emul, ms, 49999, 1, 50000);
- check_set_gyr_rate(emul, ms, 50000, 1, 50000);
- check_set_gyr_rate(emul, ms, 50001, 1, 100000);
- check_set_gyr_rate(emul, ms, 99999, 1, 100000);
- check_set_gyr_rate(emul, ms, 100000, 1, 100000);
- check_set_gyr_rate(emul, ms, 100001, 1, 200000);
- check_set_gyr_rate(emul, ms, 199999, 1, 200000);
- check_set_gyr_rate(emul, ms, 200000, 1, 200000);
-
- /* Test out of range rate with rounding down */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 24999, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 0), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 4000000, 0), NULL);
-
- /* Test out of range rate with rounding up */
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 1, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 12499, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 200001, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 400000, 1), NULL);
- zassert_equal(EC_RES_INVALID_PARAM,
- ms->drv->set_data_rate(ms, 4000000, 1), NULL);
-
- /* Current rate shouldn't be changed on error */
- drv_rate = ms->drv->get_data_rate(ms);
- reg_rate = bmi_emul_get_reg(emul, BMI260_GYR_CONF);
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_CONF);
-
- /* Test fail on read */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_GYR_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_GYR_CONF), NULL);
-
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup emulator fail on write */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_GYR_CONF);
-
- /* Test fail on write */
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 0),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_GYR_CONF), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 50000, 1),
- NULL);
- zassert_equal(drv_rate, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(reg_rate, bmi_emul_get_reg(emul, BMI260_GYR_CONF), NULL);
-
- /* Do not fail on write */
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test disabling sensor */
- bmi_emul_set_reg(emul, BMI260_PWR_CTRL,
- BMI260_AUX_EN | BMI260_GYR_EN | BMI260_ACC_EN);
- bmi_emul_set_reg(emul, BMI260_GYR_CONF,
- BMI260_FILTER_PERF | BMI260_GYR_NOISE_PERF);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 0), NULL);
-
- pwr_ctrl = bmi_emul_get_reg(emul, BMI260_PWR_CTRL);
- reg_rate = bmi_emul_get_reg(emul, BMI260_GYR_CONF);
- zassert_equal(BMI260_AUX_EN | BMI260_ACC_EN, pwr_ctrl, NULL);
- zassert_true(!(reg_rate & (BMI260_FILTER_PERF | BMI260_GYR_NOISE_PERF)),
- NULL);
-
- /* Test enabling sensor */
- bmi_emul_set_reg(emul, BMI260_PWR_CTRL, 0);
- bmi_emul_set_reg(emul, BMI260_GYR_CONF, 0);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- pwr_ctrl = bmi_emul_get_reg(emul, BMI260_PWR_CTRL);
- reg_rate = bmi_emul_get_reg(emul, BMI260_GYR_CONF);
- zassert_equal(BMI260_GYR_EN, pwr_ctrl, NULL);
- zassert_true(reg_rate & (BMI260_FILTER_PERF | BMI260_GYR_NOISE_PERF),
- NULL);
-}
-
-/**
- * Test setting and getting scale in accelerometer and gyroscope sensors.
- * Correct appling scale to results is checked in "read" test.
- */
-ZTEST_USER(bmi260, test_bmi_scale)
-{
- struct motion_sensor_t *ms;
- int16_t ret_scale[3];
- int16_t exp_scale[3] = {100, 231, 421};
- int16_t t;
-
- /* Test accelerometer */
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, exp_scale, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->get_scale(ms, ret_scale, &t), NULL);
-
- zassert_equal(t, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- zassert_equal(exp_scale[0], ret_scale[0], NULL);
- zassert_equal(exp_scale[1], ret_scale[1], NULL);
- zassert_equal(exp_scale[2], ret_scale[2], NULL);
-
- /* Test gyroscope */
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, exp_scale, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->get_scale(ms, ret_scale, &t), NULL);
-
- zassert_equal(t, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, NULL);
- zassert_equal(exp_scale[0], ret_scale[0], NULL);
- zassert_equal(exp_scale[1], ret_scale[1], NULL);
- zassert_equal(exp_scale[2], ret_scale[2], NULL);
-}
-
-/** Test reading temperature using accelerometer and gyroscope sensors */
-ZTEST_USER(bmi260, test_bmi_read_temp)
-{
- struct motion_sensor_t *ms_acc, *ms_gyr;
- struct i2c_emul *emul;
- int ret_temp;
- int exp_temp;
-
- emul = bmi_emul_get(BMI_ORD);
- ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Setup emulator fail on read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_TEMPERATURE_0);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_TEMPERATURE_1);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
- /* Do not fail on read */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Fail on invalid temperature */
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_1, 0x80);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_acc->drv->read_temp(ms_acc, &ret_temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- ms_gyr->drv->read_temp(ms_gyr, &ret_temp), NULL);
-
- /*
- * Test correct values. Both motion sensors should return the same
- * temperature.
- */
- exp_temp = C_TO_K(23);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_1, 0x00);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(87);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_0, 0xff);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_1, 0x7f);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(-41);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_0, 0x01);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_1, 0x80);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-
- exp_temp = C_TO_K(47);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_0, 0x00);
- bmi_emul_set_reg(emul, BMI260_TEMPERATURE_1, 0x30);
- zassert_equal(EC_SUCCESS, ms_acc->drv->read_temp(ms_acc, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->read_temp(ms_gyr, &ret_temp),
- NULL);
- zassert_equal(exp_temp, ret_temp, NULL);
-}
-
-/** Test reading accelerometer sensor data */
-ZTEST_USER(bmi260, test_bmi_acc_read)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t scale[3] = {MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE};
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Set offset 0 to simplify test */
- bmi_emul_set_off(emul, BMI_EMUL_ACC_X, 0);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Y, 0);
- bmi_emul_set_off(emul, BMI_EMUL_ACC_Z, 0);
-
- /* Fail on read status */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* When not ready, driver should return saved raw value */
- exp_v[0] = 100;
- exp_v[1] = 200;
- exp_v[2] = 300;
- ms->raw_xyz[0] = exp_v[0];
- ms->raw_xyz[1] = exp_v[1];
- ms->raw_xyz[2] = exp_v[2];
-
- /* Status not ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status only GYR ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, BMI260_DRDY_GYR);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status ACC ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, BMI260_DRDY_ACC);
-
- /* Set input accelerometer values */
- exp_v[0] = BMI_EMUL_1G / 10;
- exp_v[1] = BMI_EMUL_1G / 20;
- exp_v[2] = -(int)BMI_EMUL_1G / 30;
- set_emul_acc(emul, exp_v);
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
- /* Set scale */
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, scale, 0), NULL);
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 2, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 2, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 4, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 4, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected vector */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
- /* Set range to 2G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 2, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 2, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 4G */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 4, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_acc_to_emul(ret_v, 4, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Fail on read of data registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_X_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_Y_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_Y_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_Z_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_Z_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- ms->rot_standard_ref = NULL;
-}
-
-/** Test reading gyroscope sensor data */
-ZTEST_USER(bmi260, test_bmi_gyr_read)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t ret_v;
- intv3_t exp_v;
- int16_t scale[3] = {MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE};
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Set offset 0 to simplify test */
- bmi_emul_set_off(emul, BMI_EMUL_GYR_X, 0);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Y, 0);
- bmi_emul_set_off(emul, BMI_EMUL_GYR_Z, 0);
-
- /* Fail on read status */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* When not ready, driver should return saved raw value */
- exp_v[0] = 100;
- exp_v[1] = 200;
- exp_v[2] = 300;
- ms->raw_xyz[0] = exp_v[0];
- ms->raw_xyz[1] = exp_v[1];
- ms->raw_xyz[2] = exp_v[2];
-
- /* Status not ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status only ACC ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, BMI260_DRDY_ACC);
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- compare_int3v(exp_v, ret_v);
-
- /* Status GYR ready */
- bmi_emul_set_reg(emul, BMI260_STATUS, BMI260_DRDY_GYR);
-
- /* Set input accelerometer values */
- exp_v[0] = BMI_EMUL_125_DEG_S / 10;
- exp_v[1] = BMI_EMUL_125_DEG_S / 20;
- exp_v[2] = -(int)BMI_EMUL_125_DEG_S / 30;
- set_emul_gyr(emul, exp_v);
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
- /* Set scale */
- zassert_equal(EC_SUCCESS, ms->drv->set_scale(ms, scale, 0), NULL);
- /* Set range to 125°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 125, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 125, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 1000°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 1000, 0), NULL);
-
- /* Test read without rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 1000, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Setup rotation and rotate expected vector */
- ms->rot_standard_ref = &test_rotation;
- rotate_int3v_by_test_rotation(exp_v);
- /* Set range to 125°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 125, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 125, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Set range to 1000°/s */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 1000, 0), NULL);
-
- /* Test read with rotation */
- zassert_equal(EC_SUCCESS, ms->drv->read(ms, ret_v), NULL);
- drv_gyr_to_emul(ret_v, 1000, ret_v);
- compare_int3v(exp_v, ret_v);
-
- /* Fail on read of data registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_X_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_Y_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_Y_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_Z_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_Z_H_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, ret_v), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- ms->rot_standard_ref = NULL;
-}
-
-/** Test acceleromtere calibration */
-ZTEST_USER(bmi260, test_bmi_acc_perform_calib)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t start_off;
- intv3_t exp_off;
- intv3_t ret_off;
- int range;
- int rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- bmi_init_emul();
-
- /* Disable rotation */
- ms->rot_standard_ref = NULL;
-
- /* Range and rate cannot change after calibration */
- range = 4;
- rate = 50000;
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, 0), NULL);
-
- /* Set offset 0 */
- start_off[0] = 0;
- start_off[1] = 0;
- start_off[2] = 0;
- set_emul_acc_offset(emul, start_off);
-
- /* Set input accelerometer values */
- exp_off[0] = BMI_EMUL_1G / 10;
- exp_off[1] = BMI_EMUL_1G / 20;
- exp_off[2] = BMI_EMUL_1G - (int)BMI_EMUL_1G / 30;
- set_emul_acc(emul, exp_off);
-
- /* Expected offset is [-X, -Y, 1G - Z] */
- exp_off[0] = -exp_off[0];
- exp_off[1] = -exp_off[1];
- exp_off[2] = BMI_EMUL_1G - exp_off[2];
-
- /* Test success on disabling calibration */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on rate read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on status read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on data not ready */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- bmi_emul_set_reg(emul, BMI260_STATUS, 0);
- zassert_equal(EC_ERROR_TIMEOUT, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Setup data status ready for rest of the test */
- bmi_emul_set_reg(emul, BMI260_STATUS, BMI260_DRDY_ACC);
-
- /* Test fail on data read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_ACC_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on setting offset */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_NV_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test successful offset compenastion */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_acc_offset(emul, ret_off);
- /*
- * Depending on used range, accelerometer values may be up to 6 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_off, ret_off, 64);
-}
-
-/** Test gyroscope calibration */
-ZTEST_USER(bmi260, test_bmi_gyr_perform_calib)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- intv3_t start_off;
- intv3_t exp_off;
- intv3_t ret_off;
- int range;
- int rate;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Range and rate cannot change after calibration */
- range = 125;
- rate = 50000;
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, rate, 0), NULL);
-
- /* Set offset 0 */
- start_off[0] = 0;
- start_off[1] = 0;
- start_off[2] = 0;
- set_emul_gyr_offset(emul, start_off);
-
- /* Set input accelerometer values */
- exp_off[0] = BMI_EMUL_125_DEG_S / 100;
- exp_off[1] = BMI_EMUL_125_DEG_S / 200;
- exp_off[2] = -(int)BMI_EMUL_125_DEG_S / 300;
- set_emul_gyr(emul, exp_off);
-
- /* Expected offset is [-X, -Y, -Z] */
- exp_off[0] = -exp_off[0];
- exp_off[1] = -exp_off[1];
- exp_off[2] = -exp_off[2];
-
- /* Test success on disabling calibration */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on rate read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_CONF);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on status read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on data not ready */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- bmi_emul_set_reg(emul, BMI260_STATUS, 0);
- zassert_equal(EC_ERROR_TIMEOUT, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /*
- * Setup data status ready for rest of the test. Gyroscope calibration
- * should check DRDY_GYR bit, but current driver check only for ACC.
- */
- bmi_emul_set_reg(emul, BMI260_STATUS,
- BMI260_DRDY_ACC | BMI260_DRDY_GYR);
-
- /* Test fail on data read */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_GYR_X_L_G);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- /* Test fail on setting offset */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_OFFSET_EN_GYR98);
- zassert_equal(EC_ERROR_INVAL, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
-
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test successful offset compenastion */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(range, ms->current_range, NULL);
- zassert_equal(rate, ms->drv->get_data_rate(ms), NULL);
- get_emul_gyr_offset(emul, ret_off);
- /*
- * Depending on used range, gyroscope values may be up to 4 bits
- * more accurate then offset value resolution.
- */
- compare_int3v_eps(exp_off, ret_off, 32);
-}
-
-/**
- * A custom fake to use with the `init_rom_map` mock that returns the
- * value of `addr`
- */
-static const void *init_rom_map_addr_passthru(const void *addr, int size)
-{
- return addr;
-}
-
-/** Test init function of BMI260 accelerometer and gyroscope sensors */
-ZTEST_USER(bmi260, test_bmi_init)
-{
- struct motion_sensor_t *ms_acc, *ms_gyr;
- struct i2c_emul *emul;
-
- emul = bmi_emul_get(BMI_ORD);
- ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* The mock should return whatever is passed in to its addr param */
- RESET_FAKE(init_rom_map);
- init_rom_map_fake.custom_fake = init_rom_map_addr_passthru;
-
- bmi_init_emul();
-}
-
-/** Data for custom emulator read function used in FIFO test */
-struct fifo_func_data {
- uint16_t interrupts;
-};
-
-/**
- * Custom emulator read function used in FIFO test. It sets interrupt registers
- * to value passed as additional data. It sets interrupt registers to 0 after
- * access.
- */
-static int emul_fifo_func(struct i2c_emul *emul, int reg, uint8_t *val,
- int byte, void *data)
-{
- struct fifo_func_data *d = data;
-
- if (reg + byte == BMI260_INT_STATUS_0) {
- bmi_emul_set_reg(emul, BMI260_INT_STATUS_0,
- d->interrupts & 0xff);
- d->interrupts &= 0xff00;
- } else if (reg + byte == BMI260_INT_STATUS_1) {
- bmi_emul_set_reg(emul, BMI260_INT_STATUS_1,
- (d->interrupts >> 8) & 0xff);
- d->interrupts &= 0xff;
- }
-
- return 1;
-}
-
-/**
- * Run irq handler on accelerometer sensor and check if committed data in FIFO
- * match what was set in FIFO frames in emulator.
- */
-static void check_fifo_f(struct motion_sensor_t *ms_acc,
- struct motion_sensor_t *ms_gyr,
- struct bmi_emul_frame *frame,
- int acc_range, int gyr_range,
- int line)
-{
- struct ec_response_motion_sensor_data vector;
- struct bmi_emul_frame *f_acc, *f_gyr;
- uint32_t event = BMI_INT_EVENT;
- uint16_t size;
- intv3_t exp_v;
- intv3_t ret_v;
-
- /* Find first frame of acc and gyr type */
- f_acc = frame;
- while (f_acc != NULL && !(f_acc->type & BMI_EMUL_FRAME_ACC)) {
- f_acc = f_acc->next;
- }
-
- f_gyr = frame;
- while (f_gyr != NULL && !(f_gyr->type & BMI_EMUL_FRAME_GYR)) {
- f_gyr = f_gyr->next;
- }
-
- /* Read FIFO in driver */
- zassert_equal(EC_SUCCESS, ms_acc->drv->irq_handler(ms_acc, &event),
- "Failed to read FIFO in irq handler, line %d", line);
-
- /* Read all data committed to FIFO */
- while (motion_sense_fifo_read(sizeof(vector), 1, &vector, &size)) {
- /* Ignore timestamp frames */
- if (vector.flags == MOTIONSENSE_SENSOR_FLAG_TIMESTAMP) {
- continue;
- }
-
- /* Check acclerometer frames */
- if (ms_acc - motion_sensors == vector.sensor_num) {
- if (f_acc == NULL) {
- zassert_unreachable(
- "Not expected acclerometer data in FIFO, line %d",
- line);
- }
-
- convert_int3v_int16(vector.data, ret_v);
- drv_acc_to_emul(ret_v, acc_range, ret_v);
- exp_v[0] = f_acc->acc_x;
- exp_v[1] = f_acc->acc_y;
- exp_v[2] = f_acc->acc_z;
- compare_int3v_f(exp_v, ret_v, V_EPS, line);
- f_acc = f_acc->next;
- }
-
- /* Check gyroscope frames */
- if (ms_gyr - motion_sensors == vector.sensor_num) {
- if (f_gyr == NULL) {
- zassert_unreachable(
- "Not expected gyroscope data in FIFO, line %d",
- line);
- }
-
- convert_int3v_int16(vector.data, ret_v);
- drv_gyr_to_emul(ret_v, gyr_range, ret_v);
- exp_v[0] = f_gyr->gyr_x;
- exp_v[1] = f_gyr->gyr_y;
- exp_v[2] = f_gyr->gyr_z;
- compare_int3v_f(exp_v, ret_v, V_EPS, line);
- f_gyr = f_gyr->next;
- }
- }
-
- /* Skip frames of different type at the end */
- while (f_acc != NULL && !(f_acc->type & BMI_EMUL_FRAME_ACC)) {
- f_acc = f_acc->next;
- }
-
- while (f_gyr != NULL && !(f_gyr->type & BMI_EMUL_FRAME_GYR)) {
- f_gyr = f_gyr->next;
- }
-
- /* All frames are readed */
- zassert_is_null(f_acc, "Not all accelerometer frames are read, line %d",
- line);
- zassert_is_null(f_gyr, "Not all gyroscope frames are read, line %d",
- line);
-}
-#define check_fifo(ms_acc, ms_gyr, frame, acc_range, gyr_range) \
- check_fifo_f(ms_acc, ms_gyr, frame, acc_range, gyr_range, __LINE__)
-
-/** Test irq handler of accelerometer sensor */
-ZTEST_USER(bmi260, test_bmi_acc_fifo)
-{
- struct motion_sensor_t *ms, *ms_gyr;
- struct fifo_func_data func_data;
- struct bmi_emul_frame f[3];
- struct i2c_emul *emul;
- int gyr_range = 125;
- int acc_range = 2;
- int event;
-
- emul = bmi_emul_get(BMI_ORD);
- ms = &motion_sensors[BMI_ACC_SENSOR_ID];
- ms_gyr = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- bmi_init_emul();
-
- /* Need to be set to collect all data in FIFO */
- ms->oversampling_ratio = 1;
- ms_gyr->oversampling_ratio = 1;
- /* Only BMI event should be handled */
- event = 0x1234 & ~BMI_INT_EVENT;
- zassert_equal(EC_ERROR_NOT_HANDLED, ms->drv->irq_handler(ms, &event),
- NULL);
-
- event = BMI_INT_EVENT;
-
- /* Test fail to read interrupt status registers */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_INT_STATUS_0);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_INT_STATUS_1);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test no interrupt */
- bmi_emul_set_reg(emul, BMI260_INT_STATUS_0, 0);
- bmi_emul_set_reg(emul, BMI260_INT_STATUS_1, 0);
-
- /* Enable sensor FIFO */
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 50000, 0), NULL);
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, NULL, acc_range, gyr_range);
-
- /* Set custom function for FIFO test */
- i2c_common_emul_set_read_func(emul, emul_fifo_func, &func_data);
- /* Set range */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, acc_range, 0), NULL);
- zassert_equal(EC_SUCCESS, ms_gyr->drv->set_range(ms_gyr, gyr_range, 0),
- NULL);
- /* Setup single accelerometer frame */
- f[0].type = BMI_EMUL_FRAME_ACC;
- f[0].acc_x = BMI_EMUL_1G / 10;
- f[0].acc_y = BMI_EMUL_1G / 20;
- f[0].acc_z = -(int)BMI_EMUL_1G / 30;
- f[0].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second accelerometer frame */
- f[1].type = BMI_EMUL_FRAME_ACC;
- f[1].acc_x = -(int)BMI_EMUL_1G / 40;
- f[1].acc_y = BMI_EMUL_1G / 50;
- f[1].acc_z = BMI_EMUL_1G / 60;
- f[0].next = &(f[1]);
- f[1].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Enable sensor FIFO */
- zassert_equal(EC_SUCCESS, ms_gyr->drv->set_data_rate(ms_gyr, 50000, 0),
- NULL);
-
- /* Setup first gyroscope frame (after two accelerometer frames) */
- f[2].type = BMI_EMUL_FRAME_GYR;
- f[2].gyr_x = -(int)BMI_EMUL_125_DEG_S / 100;
- f[2].gyr_y = BMI_EMUL_125_DEG_S / 200;
- f[2].gyr_z = BMI_EMUL_125_DEG_S / 300;
- f[1].next = &(f[2]);
- f[2].next = NULL;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second accelerometer frame to by gyroscope frame too */
- f[1].type |= BMI_EMUL_FRAME_GYR;
- f[1].gyr_x = -(int)BMI_EMUL_125_DEG_S / 300;
- f[1].gyr_y = BMI_EMUL_125_DEG_S / 400;
- f[1].gyr_z = BMI_EMUL_125_DEG_S / 500;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Skip frame should be ignored by driver */
- bmi_emul_set_skipped_frames(emul, 8);
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Setup second frame as an config frame */
- f[1].type = BMI_EMUL_FRAME_CONFIG;
- /* Indicate that accelerometer range changed */
- f[1].config = 0x1;
- bmi_emul_append_frame(emul, f);
- /* Setup interrupts register */
- func_data.interrupts = BMI260_FWM_INT;
-
- /* Trigger irq handler and check results */
- check_fifo(ms, ms_gyr, f, acc_range, gyr_range);
-
- /* Remove custom emulator read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-/** Test irq handler of gyroscope sensor */
-ZTEST_USER(bmi260, test_bmi_gyr_fifo)
-{
- struct motion_sensor_t *ms;
- uint32_t event;
-
- ms = &motion_sensors[BMI_GYR_SENSOR_ID];
-
- /* Interrupt shuldn't be triggered for gyroscope motion sense */
- event = BMI_INT_EVENT;
- zassert_equal(EC_ERROR_NOT_HANDLED, ms->drv->irq_handler(ms, &event),
- NULL);
-}
-
-ZTEST_USER(bmi260, test_unsupported_configs)
-{
- /*
- * This test checks that we properly handle passing in invalid sensor
- * types or attempting unsupported operations on certain sensor types.
- */
-
- struct motion_sensor_t ms_fake;
-
- /* Part 1:
- * Setting offset on anything that is not an accel or gyro is an error.
- * Make a copy of the accelerometer motion sensor struct and modify its
- * type to magnetometer for this test.
- */
- memcpy(&ms_fake, &motion_sensors[BMI_ACC_SENSOR_ID], sizeof(ms_fake));
- ms_fake.type = MOTIONSENSE_TYPE_MAG;
-
- int16_t offset[3];
- int ret =
- ms_fake.drv->set_offset(&ms_fake, (const int16_t *)&offset, 0);
- zassert_equal(
- ret, EC_RES_INVALID_PARAM,
- "Expected a return code of %d (EC_RES_INVALID_PARAM) but got %d",
- EC_RES_INVALID_PARAM, ret);
-
- /* Part 2:
- * Running a calibration on a magnetometer is also not supported.
- */
- memcpy(&ms_fake, &motion_sensors[BMI_ACC_SENSOR_ID], sizeof(ms_fake));
- ms_fake.type = MOTIONSENSE_TYPE_MAG;
-
- ret = ms_fake.drv->perform_calib(&ms_fake, 1);
- zassert_equal(
- ret, EC_RES_INVALID_PARAM,
- "Expected a return code of %d (EC_RES_INVALID_PARAM) but got %d",
- EC_RES_INVALID_PARAM, ret);
-}
-
-ZTEST_USER(bmi260, test_interrupt_handler)
-{
- /* The accelerometer interrupt handler simply sets an event flag for the
- * motion sensing task. Make sure that flag starts cleared, fire the
- * interrupt, and ensure the flag is set.
- */
-
- atomic_t *mask;
-
- mask = task_get_event_bitmap(TASK_ID_MOTIONSENSE);
- zassert_true(mask != NULL,
- "Got a null pointer when getting event bitmap.");
- zassert_true((*mask & CONFIG_ACCELGYRO_BMI260_INT_EVENT) == 0,
- "Event flag is set before firing interrupt");
-
- bmi260_interrupt(0);
-
- mask = task_get_event_bitmap(TASK_ID_MOTIONSENSE);
- zassert_true(mask != NULL,
- "Got a null pointer when getting event bitmap.");
- zassert_true(*mask & CONFIG_ACCELGYRO_BMI260_INT_EVENT,
- "Event flag is not set after firing interrupt");
-}
-
-ZTEST_USER(bmi260, test_bmi_init_chip_id)
-{
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- struct motion_sensor_t *ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
-
- /* Part 1:
- * Error occurs while reading the chip ID
- */
- i2c_common_emul_set_read_fail_reg(emul, BMI260_CHIP_ID);
- int ret = ms_acc->drv->init(ms_acc);
-
- zassert_equal(ret, EC_ERROR_UNKNOWN,
- "Expected %d (EC_ERROR_UNKNOWN) but got %d",
- EC_ERROR_UNKNOWN, ret);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Part 2:
- * Test cases where the returned chip ID does not match what is
- * expected. This involves overriding values in the motion_sensor
- * struct, so make a copy first.
- */
- struct motion_sensor_t ms_fake;
-
- memcpy(&ms_fake, ms_acc, sizeof(ms_fake));
-
- /* Part 2a: expecting MOTIONSENSE_CHIP_BMI220 but get BMI260's chip ID!
- */
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI260_CHIP_ID_MAJOR);
- ms_fake.chip = MOTIONSENSE_CHIP_BMI220;
-
- ret = ms_fake.drv->init(&ms_fake);
- zassert_equal(ret, EC_ERROR_ACCESS_DENIED,
- "Expected %d (EC_ERROR_ACCESS_DENIED) but got %d",
- EC_ERROR_ACCESS_DENIED, ret);
-
- /* Part 2b: expecting MOTIONSENSE_CHIP_BMI260 but get BMI220's chip ID!
- */
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI220_CHIP_ID_MAJOR);
- ms_fake.chip = MOTIONSENSE_CHIP_BMI260;
-
- ret = ms_fake.drv->init(&ms_fake);
- zassert_equal(ret, EC_ERROR_ACCESS_DENIED,
- "Expected %d (EC_ERROR_ACCESS_DENIED) but got %d",
- EC_ERROR_ACCESS_DENIED, ret);
-
- /* Part 2c: use an invalid expected chip */
- ms_fake.chip = MOTIONSENSE_CHIP_MAX;
-
- ret = ms_fake.drv->init(&ms_fake);
- zassert_equal(ret, EC_ERROR_ACCESS_DENIED,
- "Expected %d (EC_ERROR_ACCESS_DENIED) but got %d",
- EC_ERROR_ACCESS_DENIED, ret);
-}
-
-/* Make an I2C emulator mock wrapped in FFF */
-FAKE_VALUE_FUNC(int, bmi_config_load_no_mapped_flash_mock_read_fn,
- struct i2c_emul *, int, uint8_t *, int, void *);
-static int bmi_config_load_no_mapped_flash_mock_read_fn_helper(
- struct i2c_emul *emul, int reg, uint8_t *val, int bytes, void *data)
-{
- if (reg == BMI260_INTERNAL_STATUS && val) {
- /* We want to force-return a status of 'initialized' when this
- * is read.
- */
- *val = BMI260_INIT_OK;
- return 0;
- }
- /* For other registers, go through the normal emulator route */
- return 1;
-}
-
-ZTEST_USER(bmi260, test_bmi_config_load_no_mapped_flash)
-{
- /* Tests the situation where we load BMI config data when flash memory
- * is not mapped (basically what occurs when `init_rom_map()` in
- * `bmi_config_load()` returns NULL)
- */
-
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- struct motion_sensor_t *ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- int ret, num_status_reg_reads;
-
- /* Force bmi_config_load() to have to manually copy from memory */
- RESET_FAKE(init_rom_map);
- init_rom_map_fake.return_val = NULL;
-
- /* Force init_rom_copy() to succeed */
- RESET_FAKE(init_rom_copy);
- init_rom_copy_fake.return_val = 0;
-
- /* Set proper chip ID and raise the INIT_OK flag to signal that config
- * succeeded.
- */
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI260_CHIP_ID_MAJOR);
- i2c_common_emul_set_read_func(
- emul, bmi_config_load_no_mapped_flash_mock_read_fn, NULL);
- RESET_FAKE(bmi_config_load_no_mapped_flash_mock_read_fn);
- bmi_config_load_no_mapped_flash_mock_read_fn_fake.custom_fake =
- bmi_config_load_no_mapped_flash_mock_read_fn_helper;
-
- /* Part 1: successful path */
- ret = ms_acc->drv->init(ms_acc);
-
- zassert_equal(ret, EC_RES_SUCCESS, "Got %d but expected %d", ret,
- EC_RES_SUCCESS);
-
- /* Check the number of times we accessed BMI260_INTERNAL_STATUS */
- num_status_reg_reads = MOCK_COUNT_CALLS_WITH_ARG_VALUE(
- bmi_config_load_no_mapped_flash_mock_read_fn_fake, 1,
- BMI260_INTERNAL_STATUS);
- zassert_equal(1, num_status_reg_reads,
- "Accessed status reg %d times but expected %d.",
- num_status_reg_reads, 1);
-
- /* Part 2: write to `BMI260_INIT_ADDR_0` fails */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_INIT_ADDR_0);
-
- ret = ms_acc->drv->init(ms_acc);
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Got %d but expected %d",
- ret, EC_ERROR_INVALID_CONFIG);
-
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Part 3: init_rom_copy() fails w/ a non-zero return code of 255. */
- init_rom_copy_fake.return_val = 255;
-
- ret = ms_acc->drv->init(ms_acc);
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Got %d but expected %d",
- ret, EC_ERROR_INVALID_CONFIG);
-
- init_rom_copy_fake.return_val = 0;
-
- /* Part 4: write to `BMI260_INIT_DATA` fails */
- i2c_common_emul_set_write_fail_reg(emul, BMI260_INIT_DATA);
-
- ret = ms_acc->drv->init(ms_acc);
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Got %d but expected %d",
- ret, EC_ERROR_INVALID_CONFIG);
-
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Cleanup */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-ZTEST_USER(bmi260, test_bmi_config_unsupported_chip)
-{
- /* Test what occurs when we try to configure a chip that is
- * turned off in Kconfig (BMI220). This test assumes that
- * CONFIG_ACCELGYRO_BMI220 is NOT defined.
- */
-
-#if defined(CONFIG_ACCELGYRO_BMI220)
-#error "Test test_bmi_config_unsupported_chip will not work properly with " \
- "CONFIG_ACCELGYRO_BMI220 defined."
-#endif
-
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- struct motion_sensor_t ms_fake;
-
- /* Set up struct and emaulator to be a BMI220 chip, which
- * `bmi_config_load()` does not support in the current configuration
- */
-
- memcpy(&ms_fake, &motion_sensors[BMI_ACC_SENSOR_ID], sizeof(ms_fake));
- ms_fake.chip = MOTIONSENSE_CHIP_BMI220;
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI220_CHIP_ID_MAJOR);
-
- int ret = ms_fake.drv->init(&ms_fake);
-
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Expected %d but got %d",
- EC_ERROR_INVALID_CONFIG, ret);
-}
-
-ZTEST_USER(bmi260, test_init_config_read_failure)
-{
- /* Test proper response to a failed read from the register
- * BMI260_INTERNAL_STATUS.
- */
-
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- struct motion_sensor_t *ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- int ret;
-
- /* Set up i2c emulator and mocks */
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI260_CHIP_ID_MAJOR);
- i2c_common_emul_set_read_fail_reg(emul, BMI260_INTERNAL_STATUS);
- RESET_FAKE(init_rom_map);
- init_rom_map_fake.custom_fake = init_rom_map_addr_passthru;
-
- ret = ms_acc->drv->init(ms_acc);
-
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Expected %d but got %d",
- EC_ERROR_INVALID_CONFIG, ret);
-}
-
-/* Mock read function and counter used to test the timeout when
- * waiting for the chip to initialize
- */
-static int timeout_test_status_reg_access_count;
-static int status_timeout_mock_read_fn(struct i2c_emul *emul, int reg,
- uint8_t *val, int bytes, void *data)
-{
- if (reg == BMI260_INTERNAL_STATUS && val) {
- /* We want to force-return a non-OK status each time */
- timeout_test_status_reg_access_count++;
- *val = BMI260_INIT_ERR;
- return 0;
- } else {
- return 1;
- }
-}
-
-ZTEST_USER(bmi260, test_init_config_status_timeout)
-{
- /* We allow up to 15 tries to get a successful BMI260_INIT_OK
- * value from the BMI260_INTERNAL_STATUS register. Make sure
- * we properly handle the case where the chip is not initialized
- * before the timeout.
- */
-
- struct i2c_emul *emul = bmi_emul_get(BMI_ORD);
- struct motion_sensor_t *ms_acc = &motion_sensors[BMI_ACC_SENSOR_ID];
- int ret;
-
- /* Set up i2c emulator and mocks */
- bmi_emul_set_reg(emul, BMI260_CHIP_ID, BMI260_CHIP_ID_MAJOR);
- timeout_test_status_reg_access_count = 0;
- i2c_common_emul_set_read_func(emul, status_timeout_mock_read_fn, NULL);
- RESET_FAKE(init_rom_map);
- init_rom_map_fake.custom_fake = init_rom_map_addr_passthru;
-
- ret = ms_acc->drv->init(ms_acc);
-
- zassert_equal(timeout_test_status_reg_access_count, 15,
- "Expected %d attempts but counted %d", 15,
- timeout_test_status_reg_access_count);
- zassert_equal(ret, EC_ERROR_INVALID_CONFIG, "Expected %d but got %d",
- EC_ERROR_INVALID_CONFIG, ret);
-}
-
-ZTEST_SUITE(bmi260, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/charge_manager.c b/zephyr/test/drivers/src/charge_manager.c
deleted file mode 100644
index 13668924fd..0000000000
--- a/zephyr/test/drivers/src/charge_manager.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "charge_manager.h"
-#include "ec_commands.h"
-#include "test/drivers/test_state.h"
-
-ZTEST_SUITE(charge_manager, drivers_predicate_post_main, NULL, NULL, NULL,
- NULL);
-
-/**
- * Test the default implementation of board_fill_source_power_info(). The fill
- * function should reset all the power info values. If the test binary overrides
- * board_fill_source_power_info(), then this test can be removed.
- */
-ZTEST_USER(charge_manager, test_default_fill_power_info)
-{
- struct ec_response_usb_pd_power_info info = {
- .meas = {
- .voltage_now = 10,
- .voltage_max = 10,
- .current_max = 10,
- .current_lim = 10,
- },
- .max_power = 10,
- };
-
- board_fill_source_power_info(0, &info);
- zassert_equal(info.meas.voltage_now, 0, NULL);
- zassert_equal(info.meas.voltage_max, 0, NULL);
- zassert_equal(info.meas.current_max, 0, NULL);
- zassert_equal(info.meas.current_lim, 0, NULL);
- zassert_equal(info.max_power, 0, NULL);
-}
-
-/**
- * Test the default implementation of board_charge_port_is_connected(). This
- * function should always return 1 regardless of input.
- */
-ZTEST_USER(charge_manager, test_default_charge_port_is_connected)
-{
- zassert_true(board_charge_port_is_connected(-1), NULL);
- zassert_true(board_charge_port_is_connected(0), NULL);
- zassert_true(board_charge_port_is_connected(1), NULL);
- zassert_true(board_charge_port_is_connected(500), NULL);
-}
-
-ZTEST_USER(charge_manager, test_default_charge_port_is_sink)
-{
- zassert_true(board_charge_port_is_sink(-1), NULL);
- zassert_true(board_charge_port_is_sink(0), NULL);
- zassert_true(board_charge_port_is_sink(1), NULL);
- zassert_true(board_charge_port_is_sink(500), NULL);
-}
diff --git a/zephyr/test/drivers/src/chargesplash.c b/zephyr/test/drivers/src/chargesplash.c
deleted file mode 100644
index 3eec11bbe4..0000000000
--- a/zephyr/test/drivers/src/chargesplash.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/kernel.h>
-#include <stdbool.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/shell/shell_uart.h>
-#include <zephyr/sys/__assert.h>
-#include <ztest.h>
-
-#include "chipset.h"
-#include "config.h"
-#include "ec_commands.h"
-#include "extpower.h"
-#include "hooks.h"
-#include "host_command.h"
-#include "lid_switch.h"
-#include "timer.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-/* Do a chargesplash host cmd */
-static enum ec_status
-chargesplash_hostcmd(enum ec_chargesplash_cmd cmd,
- struct ec_response_chargesplash *response)
-{
- struct ec_params_chargesplash params = { .cmd = cmd };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_CHARGESPLASH, 0, *response, params);
-
- return host_command_process(&args);
-}
-
-static bool is_chargesplash_requested(void)
-{
- struct ec_response_chargesplash response;
-
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_GET_STATE, &response),
- NULL);
-
- return response.requested;
-}
-
-static struct k_poll_signal shutdown_complete_signal =
- K_POLL_SIGNAL_INITIALIZER(shutdown_complete_signal);
-static struct k_poll_event shutdown_complete_event = K_POLL_EVENT_INITIALIZER(
- K_POLL_TYPE_SIGNAL, K_POLL_MODE_NOTIFY_ONLY, &shutdown_complete_signal);
-
-static void handle_chipset_shutdown_complete_event(void)
-{
- k_poll_signal_raise(&shutdown_complete_signal, 0);
-}
-DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN_COMPLETE,
- handle_chipset_shutdown_complete_event, HOOK_PRIO_LAST);
-
-static void force_chipset_off(void)
-{
- if (!chipset_in_state(CHIPSET_STATE_ANY_OFF)) {
- k_poll_signal_reset(&shutdown_complete_signal);
- chipset_force_shutdown(CHIPSET_RESET_INIT);
- k_poll(&shutdown_complete_event, 1, K_MSEC(1000));
- }
-
- /*
- * Signal will trigger during S3->S5, but we want to wait until we're
- * actually at S5. Give it a quick sleep if required.
- */
- while (!chipset_in_state(CHIPSET_STATE_ANY_OFF)) {
- msleep(5);
- }
-}
-
-static struct k_poll_signal s0_signal = K_POLL_SIGNAL_INITIALIZER(s0_signal);
-static struct k_poll_event s0_event = K_POLL_EVENT_INITIALIZER(
- K_POLL_TYPE_SIGNAL, K_POLL_MODE_NOTIFY_ONLY, &s0_signal);
-
-static void handle_chipset_s0_event(void)
-{
- k_poll_signal_raise(&s0_signal, 0);
-}
-DECLARE_HOOK(HOOK_CHIPSET_RESUME, handle_chipset_s0_event, HOOK_PRIO_LAST);
-
-static void wait_for_chipset_startup(void)
-{
- if (!chipset_in_state(CHIPSET_STATE_ON)) {
- k_poll_signal_reset(&s0_signal);
- k_poll(&s0_event, 1, K_FOREVER);
- }
-
- /*
- * TODO(b/230362548): We need to give the EC a bit to "calm down"
- * after reaching S0.
- */
- msleep(2000);
-}
-
-#define GPIO_LID_OPEN_EC_NODE DT_NODELABEL(gpio_lid_open_ec)
-#define GPIO_LID_OPEN_EC_CTLR DT_GPIO_CTLR(GPIO_LID_OPEN_EC_NODE, gpios)
-#define GPIO_LID_OPEN_EC_PORT DT_GPIO_PIN(GPIO_LID_OPEN_EC_NODE, gpios)
-
-static void set_lid(bool open, bool inhibit_boot)
-{
- const struct device *lid_switch_dev =
- DEVICE_DT_GET(GPIO_LID_OPEN_EC_CTLR);
-
- __ASSERT(lid_is_open() != open,
- "Lid change was requested, but it's already in that state");
-
- if (!open) {
- __ASSERT(!inhibit_boot,
- "inhibit_boot should not be used with a lid close");
- }
-
- zassume_ok(gpio_emul_input_set(lid_switch_dev, GPIO_LID_OPEN_EC_PORT,
- open),
- "Failed to set lid switch GPIO");
-
- while (lid_is_open() != open) {
- usleep(LID_DEBOUNCE_US + 1);
- }
-
- if (inhibit_boot) {
- wait_for_chipset_startup();
- force_chipset_off();
- }
-}
-
-/* Simulate a regular power button press */
-static void pulse_power_button(void)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "powerbtn"), NULL);
-}
-
-static void reset_state(void *unused)
-{
- force_chipset_off();
-
- if (lid_is_open()) {
- set_lid(false, false);
- }
-
- if (extpower_is_present()) {
- set_ac_enabled(false);
- }
-
- zassume_ok(shell_execute_cmd(get_ec_shell(), "chargesplash reset"),
- "'chargesplash reset' shell command failed");
-}
-
-ZTEST_SUITE(chargesplash, drivers_predicate_post_main, NULL, reset_state, NULL,
- reset_state);
-
-/*
- * When the lid is open and AC is connected, the chargesplash should
- * be requested.
- */
-ZTEST_USER(chargesplash, test_connect_ac)
-{
- set_lid(true, true);
-
- set_ac_enabled(true);
- zassert_true(is_chargesplash_requested(),
- "chargesplash should be requested");
- wait_for_chipset_startup();
-}
-
-/*
- * When AC is not connected and we open the lid, the chargesplash
- * should not be requested.
- */
-ZTEST_USER(chargesplash, test_no_connect_ac)
-{
- set_lid(true, false);
- zassert_false(is_chargesplash_requested(),
- "chargesplash should not be requested");
- wait_for_chipset_startup();
-}
-
-/*
- * When we connect AC with the lid closed, the chargesplash should not
- * be requested.
- */
-ZTEST_USER(chargesplash, test_ac_connect_when_lid_closed)
-{
- set_ac_enabled(true);
- zassert_false(is_chargesplash_requested(),
- "chargesplash should not be requested");
-}
-
-/*
- * Test that, after many repeated requests, the chargesplash
- * feature becomes locked and non-functional. This condition
- * replicates a damaged charger or port which cannot maintain a
- * reliable connection.
- *
- * Then, ensure the lockout clears after the chargesplash period
- * passes.
- */
-ZTEST_USER(chargesplash, test_lockout)
-{
- int i;
-
- set_lid(true, true);
-
- for (i = 0; i < CONFIG_CHARGESPLASH_MAX_REQUESTS_PER_PERIOD; i++) {
- set_ac_enabled(true);
-
- zassert_true(is_chargesplash_requested(),
- "chargesplash should be requested");
- wait_for_chipset_startup();
-
- set_ac_enabled(false);
- force_chipset_off();
- }
-
- set_ac_enabled(true);
- zassert_false(is_chargesplash_requested(),
- "chargesplash should be locked out");
- set_ac_enabled(false);
-
- sleep(CONFIG_CHARGESPLASH_PERIOD);
-
- set_ac_enabled(true);
- zassert_true(is_chargesplash_requested(),
- "lockout should have cleared");
- wait_for_chipset_startup();
-}
-
-/* Test cancel chargesplash request by power button push */
-ZTEST_USER(chargesplash, test_power_button)
-{
- set_lid(true, true);
-
- set_ac_enabled(true);
- zassert_true(is_chargesplash_requested(),
- "chargesplash should be requested");
- wait_for_chipset_startup();
- zassert_true(is_chargesplash_requested(),
- "chargesplash should still be requested");
-
- pulse_power_button();
- zassert_false(is_chargesplash_requested(),
- "chargesplash should be canceled by power button push");
- zassert_true(chipset_in_state(CHIPSET_STATE_ON),
- "chipset should be on");
-}
-
-/* Manually lockout the feature via the shell */
-ZTEST_USER(chargesplash, test_manual_lockout_via_console)
-{
- /*
- * Put an entry in the request log so the lockout has
- * something to wait on to clear.
- */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chargesplash request"),
- NULL);
- zassert_true(is_chargesplash_requested(),
- "chargesplash should be requested");
- wait_for_chipset_startup();
- force_chipset_off();
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chargesplash lockout"),
- NULL);
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chargesplash request"),
- NULL);
- zassert_false(is_chargesplash_requested(),
- "chargesplash should be not requested due to lockout");
-
- sleep(CONFIG_CHARGESPLASH_PERIOD);
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chargesplash request"),
- NULL);
- zassert_true(is_chargesplash_requested(),
- "lockout should have cleared");
- wait_for_chipset_startup();
-}
-
-/* Manually lockout the feature via host command */
-ZTEST_USER(chargesplash, test_manual_lockout_via_hostcmd)
-{
- struct ec_response_chargesplash response;
-
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_REQUEST, &response),
- NULL);
- zassert_true(is_chargesplash_requested(),
- "chargesplash should be requested");
- wait_for_chipset_startup();
- force_chipset_off();
-
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_LOCKOUT, &response),
- NULL);
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_REQUEST, &response),
- NULL);
- zassert_false(is_chargesplash_requested(),
- "chargesplash should be not requested due to lockout");
-
- sleep(CONFIG_CHARGESPLASH_PERIOD);
-
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_REQUEST, &response),
- NULL);
- zassert_true(is_chargesplash_requested(),
- "lockout should have cleared");
- wait_for_chipset_startup();
-}
-
-/* Simulate an actual run of the display loop */
-ZTEST_USER(chargesplash, test_display_loop)
-{
- struct ec_response_chargesplash response;
-
- set_lid(true, true);
- set_ac_enabled(true);
- zassert_true(is_chargesplash_requested(), NULL);
- wait_for_chipset_startup();
-
- zassert_ok(chargesplash_hostcmd(EC_CHARGESPLASH_DISPLAY_READY,
- &response),
- NULL);
-
- zassert_true(is_chargesplash_requested(), NULL);
- pulse_power_button();
- zassert_false(is_chargesplash_requested(), NULL);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelinfo.c b/zephyr/test/drivers/src/console_cmd/accelinfo.c
deleted file mode 100644
index e60d00b596..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelinfo.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "config.h"
-#include "console.h"
-#include "ec_commands.h"
-#include "test/drivers/test_state.h"
-#include "timer.h"
-
-static void console_cmd_accelinfo_after(void *fixture)
-{
- ARG_UNUSED(fixture);
- shell_execute_cmd(get_ec_shell(), "accelinfo off");
-}
-
-ZTEST_SUITE(console_cmd_accelinfo, drivers_predicate_post_main, NULL, NULL,
- console_cmd_accelinfo_after, NULL);
-
-ZTEST_USER(console_cmd_accelinfo, test_too_many_args)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelinfo arg1 arg2");
-
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelinfo, test_print_once)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelinfo"), NULL);
-}
-
-ZTEST_USER(console_cmd_accelinfo, test_invalid_arg)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelinfo bar");
-
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelinfo, test_enable_disable)
-{
- /*
- * There's no way to verify what is being printed to the console yet, so
- * just assert that the command executed and returned 0.
- */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelinfo on"), NULL);
- k_msleep(CONFIG_MOTION_MIN_SENSE_WAIT_TIME * MSEC * 2);
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelinfo off"), NULL);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelinit.c b/zephyr/test/drivers/src/console_cmd/accelinit.c
deleted file mode 100644
index 24538ef648..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelinit.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <fff.h>
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "accelgyro.h"
-#include "console.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-FAKE_VALUE_FUNC(int, mock_init, struct motion_sensor_t *);
-
-struct console_cmd_accelinit_fixture {
- const struct accelgyro_drv *sensor_0_drv;
- struct accelgyro_drv mock_drv;
-};
-
-static void *console_cmd_accelinit_setup(void)
-{
- static struct console_cmd_accelinit_fixture fixture = {
- .mock_drv = {
- .init = mock_init,
- },
- };
- fixture.sensor_0_drv = motion_sensors[0].drv;
-
- return &fixture;
-}
-
-static void console_cmd_accelinit_before(void *fixture)
-{
- ARG_UNUSED(fixture);
- RESET_FAKE(mock_init);
- FFF_RESET_HISTORY();
-}
-static void console_cmd_accelinit_after(void *fixture)
-{
- struct console_cmd_accelinit_fixture *this = fixture;
-
- motion_sensors[0].drv = this->sensor_0_drv;
- motion_sensors[0].drv->init(&motion_sensors[0]);
-}
-
-ZTEST_SUITE(console_cmd_accelinit, drivers_predicate_post_main,
- console_cmd_accelinit_setup, console_cmd_accelinit_before,
- console_cmd_accelinit_after, NULL);
-
-ZTEST_USER(console_cmd_accelinit, test_invalid_sensor_num)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelinit f");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelinit -1");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelinit 100");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelinit, test_state_was_set)
-{
- motion_sensors[0].state = SENSOR_INIT_ERROR;
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelinit 0"), NULL);
- zassert_equal(SENSOR_INITIALIZED, motion_sensors[0].state,
- "Expected %d, but got %d", SENSOR_INITIALIZED,
- motion_sensors[0].state);
-}
-
-ZTEST_USER_F(console_cmd_accelinit, test_fail_3_times)
-{
- mock_init_fake.return_val = 1;
- motion_sensors[0].drv = &this->mock_drv;
- motion_sensors[0].state = SENSOR_INITIALIZED;
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelinit 0"), NULL);
- zassert_equal(3, mock_init_fake.call_count,
- "Expected 3 calls, but got %d",
- mock_init_fake.call_count);
- zassert_equal(SENSOR_INIT_ERROR, motion_sensors[0].state,
- "Expected %d, but got %d", SENSOR_INIT_ERROR,
- motion_sensors[0].state);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelrange.c b/zephyr/test/drivers/src/console_cmd/accelrange.c
deleted file mode 100644
index b78702e486..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelrange.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <zephyr/devicetree.h>
-#include <ztest.h>
-
-#include "console.h"
-#include "driver/accel_bma2x2.h"
-#include "ec_commands.h"
-#include "emul/emul_bma255.h"
-#include "emul/emul_common_i2c.h"
-#include "i2c.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-
-#define EMUL_LABEL DT_NODELABEL(bma_emul)
-
-#define BMA_ORD DT_DEP_ORD(EMUL_LABEL)
-
-static void console_cmd_accelrange_after(void *fixture)
-{
- struct i2c_emul *emul = bma_emul_get(BMA_ORD);
-
- ARG_UNUSED(fixture);
- shell_execute_cmd(get_ec_shell(), "accelrange 0 2");
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_SUITE(console_cmd_accelrange, drivers_predicate_post_main, NULL, NULL,
- console_cmd_accelrange_after, NULL);
-
-ZTEST_USER(console_cmd_accelrange, test_num_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange 0 1 2 3");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_bad_sensor_num)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange t");
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange -1");
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange 100");
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_print_range)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrange 0"), NULL);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_set_invalid_range)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelrange 0 t");
-
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_set_range_round_up_implicit)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrange 0 3"), NULL);
- zassert_equal(motion_sensors[0].current_range, 4,
- "Expected 4, but got %d",
- motion_sensors[0].current_range);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_set_range_round_up_explicit)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrange 0 3 1"), NULL);
- zassert_equal(motion_sensors[0].current_range, 4,
- "Expected 4, but got %d",
- motion_sensors[0].current_range);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_set_range_round_down)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrange 0 5 0"), NULL);
- zassert_equal(motion_sensors[0].current_range, 4,
- "Expected 4, but got %d",
- motion_sensors[0].current_range);
-}
-
-ZTEST_USER(console_cmd_accelrange, test_i2c_error)
-{
- struct i2c_emul *emul = bma_emul_get(BMA_ORD);
- int rv;
-
- i2c_common_emul_set_read_fail_reg(emul, BMA2x2_RANGE_SELECT_ADDR);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrange 0 3");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelrate.c b/zephyr/test/drivers/src/console_cmd/accelrate.c
deleted file mode 100644
index 6ae4b96343..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelrate.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "console.h"
-#include "ec_commands.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-static int original_sensor_0_s0_config_odr;
-
-static void *console_cmd_accelrate_setup(void)
-{
- original_sensor_0_s0_config_odr =
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr;
- return NULL;
-}
-
-static void console_cmd_accelrate_after(void *state)
-{
- ARG_UNUSED(state);
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr =
- original_sensor_0_s0_config_odr;
-}
-
-ZTEST_SUITE(console_cmd_accelrate, drivers_predicate_post_main,
- console_cmd_accelrate_setup, NULL, console_cmd_accelrate_after,
- NULL);
-
-ZTEST_USER(console_cmd_accelrate, test_bad_arg_count)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrate");
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrate 1 2 3 4");
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelrate, test_invalid_sensor_num)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrate f");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrate -1");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelrate 100");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelrate, test_print_rate)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrate 0"), NULL);
-}
-
-ZTEST_USER(console_cmd_accelrate, test_bad_rate_value)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelrate 0 f");
-
- zassert_equal(EC_ERROR_PARAM2, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_accelrate, test_set_ap_rate)
-{
- test_set_chipset_to_s0();
-
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr = 0;
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrate 0 100"), NULL);
- zassert_equal(100 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr,
- "Expected %d, but got %d", 100 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr);
-
- /* Try explicit round up value: 1 */
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr = 0;
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrate 0 100 1"),
- NULL);
- zassert_equal(100 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr,
- "Expected %d, but got %d", 100 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr);
-
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr = 0;
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelrate 0 100 0"),
- NULL);
- zassert_equal(100, motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr,
- "Expected %d, but got %d", 100 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_EC_S0].odr);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelread.c b/zephyr/test/drivers/src/console_cmd/accelread.c
deleted file mode 100644
index 8ab9407dfe..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelread.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <fff.h>
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "accelgyro.h"
-#include "console.h"
-#include "ec_commands.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-FAKE_VALUE_FUNC(int, mock_read, const struct motion_sensor_t *, int *);
-FAKE_VALUE_FUNC(int, mock_set_data_rate, const struct motion_sensor_t *, int,
- int);
-FAKE_VALUE_FUNC(int, mock_get_data_rate, const struct motion_sensor_t *);
-
-struct console_cmd_accelread_fixture {
- const struct accelgyro_drv *sensor_0_drv;
- struct accelgyro_drv mock_drv;
-};
-
-static void *console_cmd_accelread_setup(void)
-{
- static struct console_cmd_accelread_fixture fixture = {
- .mock_drv = {
- .read = mock_read,
- /*
- * Data rate functions are required so that motion_sense
- * task doesn't segfault.
- */
- .set_data_rate = mock_set_data_rate,
- .get_data_rate = mock_get_data_rate,
- },
- };
- fixture.sensor_0_drv = motion_sensors[0].drv;
-
- return &fixture;
-}
-
-static void console_cmd_accelread_before(void *fixture)
-{
- ARG_UNUSED(fixture);
- RESET_FAKE(mock_read);
- RESET_FAKE(mock_set_data_rate);
- RESET_FAKE(mock_get_data_rate);
- FFF_RESET_HISTORY();
-}
-
-static void console_cmd_accelread_after(void *fixture)
-{
- struct console_cmd_accelread_fixture *this = fixture;
-
- motion_sensors[0].drv = this->sensor_0_drv;
-}
-
-ZTEST_SUITE(console_cmd_accelread, drivers_predicate_post_main,
- console_cmd_accelread_setup, console_cmd_accelread_before,
- console_cmd_accelread_after, NULL);
-
-ZTEST_USER(console_cmd_accelread, test_too_few_arguments)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelread");
-
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelread, test_invalid_sensor_num)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelread f");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelread -1");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelread 100");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-static struct console_cmd_accelread_fixture *current_fixture;
-
-int mock_read_call_super(const struct motion_sensor_t *s, int *v)
-{
- return current_fixture->sensor_0_drv->read(s, v);
-}
-
-ZTEST_USER_F(console_cmd_accelread, test_read)
-{
- current_fixture = this;
- mock_read_fake.custom_fake = mock_read_call_super;
- motion_sensors[0].drv = &this->mock_drv;
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelread 0"), NULL);
- zassert_equal(1, mock_read_fake.call_count,
- "Expected only 1 call to read, but got %d",
- mock_read_fake.call_count);
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelread 0 2"), NULL);
- zassert_equal(3, mock_read_fake.call_count,
- "Expected only 3 call to read, but got %d",
- mock_read_fake.call_count);
-}
-
-ZTEST_USER_F(console_cmd_accelread, test_read_fail)
-{
- mock_read_fake.return_val = 1;
- motion_sensors[0].drv = &this->mock_drv;
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelread 0"), NULL);
- zassert_equal(1, mock_read_fake.call_count,
- "Expected only 1 call to read, but got %d",
- mock_read_fake.call_count);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelres.c b/zephyr/test/drivers/src/console_cmd/accelres.c
deleted file mode 100644
index 72b52b1c58..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelres.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <fff.h>
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "accelgyro.h"
-#include "console.h"
-#include "driver/accel_bma2x2.h"
-#include "ec_commands.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-
-FAKE_VALUE_FUNC(int, set_resolution, const struct motion_sensor_t *, int, int);
-
-struct console_cmd_accelres_fixture {
- const struct accelgyro_drv *sensor_0_drv;
- struct accelgyro_drv mock_drv;
-};
-
-void *console_cmd_accelres_setup(void)
-{
- static struct console_cmd_accelres_fixture fixture = {
- .mock_drv = {
- .set_resolution = set_resolution,
- },
- };
-
- fixture.sensor_0_drv = motion_sensors[0].drv;
-
- return &fixture;
-}
-
-void console_cmd_accelres_before(void *fixture)
-{
- ARG_UNUSED(fixture);
- RESET_FAKE(set_resolution);
- FFF_RESET_HISTORY();
-}
-
-void console_cmd_accelres_after(void *fixture)
-{
- struct console_cmd_accelres_fixture *this = fixture;
-
- motion_sensors[0].drv = this->sensor_0_drv;
-}
-
-ZTEST_SUITE(console_cmd_accelres, drivers_predicate_post_main,
- console_cmd_accelres_setup, NULL, console_cmd_accelres_after, NULL);
-
-ZTEST_USER(console_cmd_accelres, test_too_few_args)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelres");
-
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelres, test_too_many_args)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelres 1 2 3 4");
-
- zassert_equal(EC_ERROR_PARAM_COUNT, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelres, test_invalid_sensor_num)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelres f");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelres -1");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelres 100");
- zassert_equal(EC_ERROR_PARAM1, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelres, test_print_res)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelres 0"), NULL);
-}
-
-ZTEST_USER(console_cmd_accelres, test_set_res__invalid_data)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelres 0 f");
-
- zassert_equal(EC_ERROR_PARAM2, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_accelres, test_set_res__no_setter)
-{
- int resolution;
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelres 0 4"), NULL);
- resolution = motion_sensors[0].drv->get_resolution(&motion_sensors[0]);
- zassert_equal(BMA2x2_RESOLUTION, resolution, "Expected %d, but got %d",
- BMA2x2_RESOLUTION, resolution);
-}
-
-ZTEST_USER_F(console_cmd_accelres, test_set_res__bad_res_value)
-{
- int rv;
-
- set_resolution_fake.return_val = EC_ERROR_INVAL;
- motion_sensors[0].drv = &this->mock_drv;
- rv = shell_execute_cmd(get_ec_shell(), "accelres 0 0");
- zassert_equal(EC_ERROR_PARAM2, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_accelres, test_invalid_rounding_arg)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelres 0 12 f");
-
- zassert_equal(EC_ERROR_PARAM3, rv, "Expected %d, but got %d",
- EC_ERROR_PARAM3, rv);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/accelspoof.c b/zephyr/test/drivers/src/console_cmd/accelspoof.c
deleted file mode 100644
index 2d9887a2ab..0000000000
--- a/zephyr/test/drivers/src/console_cmd/accelspoof.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "console.h"
-#include "ec_commands.h"
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-
-static void console_cmd_accelspoof_after(void *fixture)
-{
- ARG_UNUSED(fixture);
- shell_execute_cmd(get_ec_shell(), "accelspoof 0 off");
- motion_sensors[0].spoof_xyz[0] = 0;
- motion_sensors[0].spoof_xyz[1] = 0;
- motion_sensors[0].spoof_xyz[2] = 0;
-}
-
-ZTEST_SUITE(console_cmd_accelspoof, drivers_predicate_post_main, NULL, NULL,
- console_cmd_accelspoof_after, NULL);
-
-ZTEST_USER(console_cmd_accelspoof, test_too_few_args)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelspoof");
-
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_invalid_sensor_id)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "accelspoof -1");
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "accelspoof 100");
- zassert_equal(rv, EC_ERROR_PARAM1, "Expected %d, but got %d",
- EC_ERROR_PARAM1, rv);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_print_mode)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelspoof 0"), NULL);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_invalid_boolean)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelspoof 0 bar");
-
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_enable_disable)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelspoof 0 on"), NULL);
- zassert_true(motion_sensors[0].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- NULL);
-
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelspoof 0 off"), NULL);
- zassert_false(motion_sensors[0].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- NULL);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_wrong_num_axis_args)
-{
- int rv = shell_execute_cmd(get_ec_shell(), "accelspoof 0 on 1");
-
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_enable_explicit_values)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelspoof 0 on 1 2 3"),
- NULL);
- zassert_equal(1, motion_sensors[0].spoof_xyz[0], NULL);
- zassert_equal(2, motion_sensors[0].spoof_xyz[1], NULL);
- zassert_equal(3, motion_sensors[0].spoof_xyz[2], NULL);
-}
-
-ZTEST_USER(console_cmd_accelspoof, test_enable_implicit_values)
-{
- motion_sensors[0].raw_xyz[0] = 4;
- motion_sensors[0].raw_xyz[1] = 5;
- motion_sensors[0].raw_xyz[2] = 6;
- zassert_ok(shell_execute_cmd(get_ec_shell(), "accelspoof 0 on"), NULL);
- zassert_equal(4, motion_sensors[0].spoof_xyz[0], NULL);
- zassert_equal(5, motion_sensors[0].spoof_xyz[1], NULL);
- zassert_equal(6, motion_sensors[0].spoof_xyz[2], NULL);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/charge_manager.c b/zephyr/test/drivers/src/console_cmd/charge_manager.c
deleted file mode 100644
index c6e4821623..0000000000
--- a/zephyr/test/drivers/src/console_cmd/charge_manager.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "charge_manager.h"
-#include "console.h"
-#include "emul/emul_isl923x.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "tcpm/tcpci.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-static void connect_sink_to_port(const struct emul *charger_emul,
- const struct emul *tcpci_emul,
- struct tcpci_partner_data *partner)
-{
- isl923x_emul_set_adc_vbus(charger_emul, 0);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
- tcpci_tcpc_alert(0);
- zassume_ok(tcpci_partner_connect_to_tcpci(partner, tcpci_emul),
- NULL);
-
- /* Wait for PD negotiation and current ramp.
- * TODO(b/213906889): Check message timing and contents.
- */
- k_sleep(K_SECONDS(10));
-}
-
-static inline void disconnect_sink_from_port(const struct emul *tcpci_emul)
-{
- zassume_ok(tcpci_emul_disconnect_partner(tcpci_emul), NULL);
- k_sleep(K_SECONDS(1));
-}
-
-struct console_cmd_charge_manager_fixture {
- struct tcpci_partner_data sink_5v_3a;
- struct tcpci_snk_emul_data sink_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
-};
-
-static void *console_cmd_charge_manager_setup(void)
-{
- static struct console_cmd_charge_manager_fixture test_fixture;
-
- /* Get references for the emulators */
- test_fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- test_fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
- tcpci_emul_set_rev(test_fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Initialized the sink to request 5V and 3A */
- tcpci_partner_init(&test_fixture.sink_5v_3a, PD_REV20);
- test_fixture.sink_5v_3a.extensions =
- tcpci_snk_emul_init(&test_fixture.sink_ext,
- &test_fixture.sink_5v_3a, NULL);
- test_fixture.sink_ext.pdo[1] =
- PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &test_fixture;
-}
-
-static void console_cmd_charge_manager_after(void *state)
-{
- struct console_cmd_charge_manager_fixture *fixture = state;
-
- shell_execute_cmd(get_ec_shell(), "chgoverride -1");
- disconnect_sink_from_port(fixture->tcpci_emul);
-}
-
-ZTEST_SUITE(console_cmd_charge_manager, drivers_predicate_post_main,
- console_cmd_charge_manager_setup, NULL,
- console_cmd_charge_manager_after, NULL);
-
-/**
- * Test the chgsup (charge supplier info) command. This command only prints to
- * console some information which is not yet possible to verify. So just check
- * that the console command ran successfully.
- */
-ZTEST_USER(console_cmd_charge_manager, test_chgsup)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgsup"), NULL);
-}
-
-/**
- * Test chgoverride command with no arguments. This should just print the
- * current override port.
- */
-ZTEST_USER(console_cmd_charge_manager, test_chgoverride_missing_port)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgoverride"), NULL);
-}
-
-ZTEST_USER(console_cmd_charge_manager, test_chgoverride_off_from_off)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgoverride -1"), NULL);
- zassert_equal(charge_manager_get_override(), OVERRIDE_OFF, NULL);
-}
-
-ZTEST_USER(console_cmd_charge_manager, test_chgoverride_disable_from_off)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgoverride -2"), NULL);
- zassert_equal(charge_manager_get_override(), OVERRIDE_DONT_CHARGE,
- NULL);
-}
-
-ZTEST_USER(console_cmd_charge_manager, test_chgoverride_0_from_off)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgoverride 0"), NULL);
- zassert_equal(charge_manager_get_override(), 0, NULL);
-}
-
-ZTEST_USER_F(console_cmd_charge_manager, test_chgoverride_0_from_sink)
-{
- test_set_chipset_to_g3();
- k_sleep(K_SECONDS(1));
-
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
- connect_sink_to_port(this->charger_emul, this->tcpci_emul,
- &this->sink_5v_3a);
- zassert_equal(shell_execute_cmd(get_ec_shell(), "chgoverride 0"),
- EC_ERROR_INVAL, NULL);
-}
-
-ZTEST_USER(console_cmd_charge_manager, test_chgoverride_invalid_port)
-{
- char cmd[256];
-
- zassume_true(sprintf(cmd, "chgoverride %d", CHARGE_PORT_COUNT) > 0,
- NULL);
- zassert_equal(shell_execute_cmd(get_ec_shell(), cmd), EC_ERROR_PARAM1,
- NULL);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/charge_state.c b/zephyr/test/drivers/src/console_cmd/charge_state.c
deleted file mode 100644
index 25c03928d4..0000000000
--- a/zephyr/test/drivers/src/console_cmd/charge_state.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "charge_state.h"
-#include "charge_state_v2.h"
-#include "console.h"
-#include "ec_commands.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-ZTEST_USER(console_cmd_charge_state, test_idle_too_few_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate idle");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_idle_arg_not_a_bool)
-{
- int rv;
-
- /*
- * There are many strings that will fail parse_bool(), just test one to
- * test the code path in the command, other tests for parse_bool are
- * done in the respective unit test.
- */
- rv = shell_execute_cmd(get_ec_shell(), "chgstate idle g");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_idle_on__no_ac)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate idle on");
- zassert_equal(rv, EC_ERROR_NOT_POWERED, "Expected %d, but got %d",
- EC_ERROR_NOT_POWERED, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_discharge_on__no_ac)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge on");
- zassert_equal(rv, EC_ERROR_NOT_POWERED, "Expected %d, but got %d",
- EC_ERROR_NOT_POWERED, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_discharge_too_few_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_discharge_arg_not_a_bool)
-{
- int rv;
-
- /*
- * There are many strings that will fail parse_bool(), just test one to
- * test the code path in the command, other tests for parse_bool are
- * done in the respective unit test.
- */
- rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge g");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_debug_too_few_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate debug");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_debug_arg_not_bool)
-{
- int rv;
-
- /*
- * There are many strings that will fail parse_bool(), just test one to
- * test the code path in the command, other tests for parse_bool are
- * done in the respective unit test.
- */
- rv = shell_execute_cmd(get_ec_shell(), "chgstate debug g");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_debug_on)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate debug on"),
- NULL);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_debug_on_show_charging_progress)
-{
- /*
- * Force reset the previous display charge so the charge state task
- * prints on the next iteration.
- */
- reset_prev_disp_charge();
- charging_progress_displayed();
-
- /* Enable debug printing */
- zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate debug on"),
- NULL);
-
- /* Sleep at least 1 full iteration of the charge state loop */
- k_sleep(K_USEC(CHARGE_MAX_SLEEP_USEC + 1));
-
- zassert_true(charging_progress_displayed(), NULL);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_sustain_too_few_args__2_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate sustain");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_sustain_too_few_args__3_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "chgstate sustain 5");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_sustain_invalid_params)
-{
- /* Verify that lower bound is less than upper bound */
- zassert_equal(shell_execute_cmd(get_ec_shell(),
- "chgstate sustain 50 30"),
- EC_ERROR_INVAL, NULL);
-
- /* Verify that lower bound is at least 0 (when upper bound is given) */
- zassert_equal(shell_execute_cmd(get_ec_shell(),
- "chgstate sustain -5 30"),
- EC_ERROR_INVAL, NULL);
-
- /* Verify that upper bound is at most 100 */
- zassert_equal(shell_execute_cmd(get_ec_shell(),
- "chgstate sustain 50 101"),
- EC_ERROR_INVAL, NULL);
-}
-
-struct console_cmd_charge_state_fixture {
- struct tcpci_partner_data source_5v_3a;
- struct tcpci_src_emul_data source_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
-};
-
-static void *console_cmd_charge_state_setup(void)
-{
- static struct console_cmd_charge_state_fixture fixture;
-
- /* Get references for the emulators */
- fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- /* Initialized the source to supply 5V and 3A */
- tcpci_partner_init(&fixture.source_5v_3a, PD_REV20);
- fixture.source_5v_3a.extensions =
- tcpci_src_emul_init(&fixture.source_ext,
- &fixture.source_5v_3a, NULL);
- fixture.source_ext.pdo[1] =
- PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &fixture;
-}
-
-static void console_cmd_charge_state_after(void *data)
-{
- struct console_cmd_charge_state_fixture *fixture = data;
-
- disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul);
- shell_execute_cmd(get_ec_shell(), "chgstate debug off");
- shell_execute_cmd(get_ec_shell(), "chgstate sustain -1 -1");
-}
-
-ZTEST_SUITE(console_cmd_charge_state, drivers_predicate_post_main,
- console_cmd_charge_state_setup, NULL,
- console_cmd_charge_state_after, NULL);
-
-ZTEST_USER_F(console_cmd_charge_state, test_idle_on_from_normal)
-{
- /* Connect a source so we start charging */
- connect_source_to_port(&this->source_5v_3a, &this->source_ext, 1,
- this->tcpci_emul, this->charger_emul);
-
- /* Verify that we're in "normal" mode */
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-
- /* Move to idle */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle on"), NULL);
- zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_IDLE, NULL);
-}
-
-ZTEST_USER_F(console_cmd_charge_state, test_normal_from_idle)
-{
- /* Connect a source so we start charging */
- connect_source_to_port(&this->source_5v_3a, &this->source_ext, 1,
- this->tcpci_emul, this->charger_emul);
-
- /* Verify that we're in "normal" mode */
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-
- /* Move to idle */
- zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle on"), NULL);
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_IDLE, NULL);
-
- /* Move back to normal */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle off"),
- NULL);
- zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-}
-
-ZTEST_USER_F(console_cmd_charge_state, test_discharge_on)
-{
- /* Connect a source so we start charging */
- connect_source_to_port(&this->source_5v_3a, &this->source_ext, 1,
- this->tcpci_emul, this->charger_emul);
-
- /* Verify that we're in "normal" mode */
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-
- /* Enable discharge */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge on"),
- NULL);
- zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_DISCHARGE, NULL);
-}
-
-ZTEST_USER_F(console_cmd_charge_state, test_discharge_off)
-{
- /* Connect a source so we start charging */
- connect_source_to_port(&this->source_5v_3a, &this->source_ext, 1,
- this->tcpci_emul, this->charger_emul);
-
- /* Verify that we're in "normal" mode */
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-
- /* Enable discharge */
- zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge on"),
- NULL);
- zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_DISCHARGE, NULL);
-
- /* Disable discharge */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge off"),
- NULL);
- zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL);
-}
-
-ZTEST_USER(console_cmd_charge_state, test_sustain)
-{
- struct ec_response_charge_control charge_control_values;
-
- /* Verify that lower bound is less than upper bound */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate sustain 30 50"),
- NULL);
-
- charge_control_values = host_cmd_get_charge_control();
- zassert_equal(charge_control_values.sustain_soc.lower, 30, NULL);
- zassert_equal(charge_control_values.sustain_soc.upper, 50, NULL);
-}
diff --git a/zephyr/test/drivers/src/console_cmd/usb_pd_console.c b/zephyr/test/drivers/src/console_cmd/usb_pd_console.c
deleted file mode 100644
index 4902591c67..0000000000
--- a/zephyr/test/drivers/src/console_cmd/usb_pd_console.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/shell/shell.h>
-#include <ztest.h>
-
-#include "console.h"
-#include "ec_commands.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-static void console_cmd_usb_pd_after(void *fixture)
-{
- ARG_UNUSED(fixture);
-
- /* TODO (b/230059737) */
- test_set_chipset_to_g3();
- k_sleep(K_SECONDS(1));
- test_set_chipset_to_s0();
- k_sleep(K_SECONDS(10));
-}
-
-ZTEST_SUITE(console_cmd_usb_pd, drivers_predicate_post_main, NULL, NULL,
- console_cmd_usb_pd_after, NULL);
-
-ZTEST_USER(console_cmd_usb_pd, test_too_few_args)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_dump)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd dump 0");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd dump 4");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd dump -4");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd dump x");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_trysrc)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 0");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 2");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 5");
- zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
- EC_ERROR_PARAM3, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_version)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd version");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_bad_port)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 5");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 5 tx");
- zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
- EC_ERROR_PARAM2, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_tx)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 tx");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_charger)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 charger");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_dev)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev 20");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev x");
- zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
- EC_ERROR_PARAM3, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_disable)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 disable");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_enable)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 enable");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_hard)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 hard");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_soft)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 soft");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_swap)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap");
- zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
- EC_ERROR_PARAM_COUNT, rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap power");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap data");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap vconn");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap x");
- zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
- EC_ERROR_PARAM3, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_dualrole)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole on");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole off");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole freeze");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole sink");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole source");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole x");
- zassert_equal(rv, EC_ERROR_PARAM4, "Expected %d, but got %d",
- EC_ERROR_PARAM4, rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_state)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 state");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_srccaps)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 srccaps");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
-
-ZTEST_USER(console_cmd_usb_pd, test_timer)
-{
- int rv;
-
- rv = shell_execute_cmd(get_ec_shell(), "pd 0 timer");
- zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
- rv);
-}
diff --git a/zephyr/test/drivers/src/cros_cbi.c b/zephyr/test/drivers/src/cros_cbi.c
deleted file mode 100644
index d0afdaecdb..0000000000
--- a/zephyr/test/drivers/src/cros_cbi.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/device.h>
-#include <ztest.h>
-
-#include "cros_cbi.h"
-#include "test/drivers/test_state.h"
-
-ZTEST(cros_cbi, test_check_match)
-{
- int value;
-
- value = cros_cbi_ssfc_check_match(
- CBI_SSFC_VALUE_ID(DT_NODELABEL(base_sensor_0)));
- zassert_true(value, "Expected cbi ssfc to match base_sensor_0");
-
- value = cros_cbi_ssfc_check_match(
- CBI_SSFC_VALUE_ID(DT_NODELABEL(base_sensor_1)));
- zassert_false(value, "Expected cbi ssfc not to match base_sensor_1");
-
- value = cros_cbi_ssfc_check_match(CBI_SSFC_VALUE_COUNT);
- zassert_false(value, "Expected cbi ssfc to fail on invalid enum");
-}
-
-ZTEST(cros_cbi, test_fail_check_match)
-{
- int value;
-
- value = cros_cbi_ssfc_check_match(CBI_SSFC_VALUE_COUNT);
- zassert_false(value,
- "Expected cbi ssfc to never match CBI_SSFC_VALUE_COUNT");
-}
-
-ZTEST(cros_cbi, test_fw_config)
-{
- uint32_t value;
- int ret;
-
- ret = cros_cbi_get_fw_config(FW_CONFIG_FIELD_1, &value);
- zassert_true(ret == 0,
- "Expected no error return from cros_cbi_get_fw_config");
- zassert_true(value == FW_FIELD_1_B,
- "Expected field value to match FW_FIELD_1_B as default");
-
- ret = cros_cbi_get_fw_config(FW_CONFIG_FIELD_2, &value);
- zassert_true(ret == 0,
- "Expected no error return from cros_cbi_get_fw_config");
- zassert_false(value == FW_FIELD_2_X,
- "Expected field value to not match FW_FIELD_2_X");
-}
-
-ZTEST_SUITE(cros_cbi, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/espi.c b/zephyr/test/drivers/src/espi.c
deleted file mode 100644
index 67fc3c6f90..0000000000
--- a/zephyr/test/drivers/src/espi.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "ec_commands.h"
-#include "host_command.h"
-#include "test/drivers/test_state.h"
-
-
-#define PORT 0
-
-ZTEST_USER(espi, test_host_command_get_protocol_info)
-{
- struct ec_response_get_protocol_info response;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_RESPONSE(EC_CMD_GET_PROTOCOL_INFO, 0,
- response);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
- zassert_equal(response.protocol_versions, BIT(3), NULL);
- zassert_equal(response.max_request_packet_size, EC_LPC_HOST_PACKET_SIZE,
- NULL);
- zassert_equal(response.max_response_packet_size,
- EC_LPC_HOST_PACKET_SIZE, NULL);
- zassert_equal(response.flags, 0, NULL);
-}
-
-ZTEST_USER(espi, test_host_command_usb_pd_power_info)
-{
- /* Only test we've enabled the command */
- struct ec_response_usb_pd_power_info response;
- struct ec_params_usb_pd_power_info params = { .port = PORT };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_USB_PD_POWER_INFO, 0, response, params);
-
- args.params = &params;
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
-}
-
-ZTEST_USER(espi, test_host_command_typec_status)
-{
- /* Only test we've enabled the command */
- struct ec_params_typec_status params = { .port = PORT };
- struct ec_response_typec_status response;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_TYPEC_STATUS, 0, response, params);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
-}
-
-ZTEST_USER(espi, test_host_command_usb_pd_get_amode)
-{
- /* Only test we've enabled the command */
- struct ec_params_usb_pd_get_mode_request params = {
- .port = PORT,
- .svid_idx = 0,
- };
- struct ec_params_usb_pd_get_mode_response response;
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_USB_PD_GET_AMODE, 0, response, params);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- /* Note: with no SVIDs the response size is the size of the svid field.
- * See the usb alt mode test for verifying larger struct sizes
- *
- * TODO(b/219562077): Add the above described test.
- */
- zassert_equal(args.response_size, sizeof(response.svid), NULL);
-}
-
-ZTEST_SUITE(espi, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/gpio.c b/zephyr/test/drivers/src/gpio.c
deleted file mode 100644
index e49222f08f..0000000000
--- a/zephyr/test/drivers/src/gpio.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/**
- * @file
- * @brief Unit Tests for GPIO.
- */
-
-#include <zephyr/device.h>
-
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "gpio.h"
-#include "gpio/gpio.h"
-#include "gpio/gpio_int.h"
-#include "test/drivers/stubs.h"
-#include "util.h"
-#include "test/drivers/test_state.h"
-
-extern bool gpio_test_interrupt_triggered;
-/**
- * @brief TestPurpose: Verify Zephyr to EC GPIO bitmask conversion.
- *
- * @details
- * Validate Zephyr to EC GPIO bitmask conversion.
- *
- * Expected Results
- * - GPIO bitmask conversions are successful
- */
-ZTEST(gpio, test_convert_from_zephyr_flags)
-{
- int retval;
- struct {
- int zephyr_bmask;
- gpio_flags_t expected_ec_bmask;
- } validate[] = {
- { GPIO_DISCONNECTED, GPIO_FLAG_NONE },
- { GPIO_OUTPUT_INIT_LOW, GPIO_LOW },
- { GPIO_OUTPUT_INIT_HIGH, GPIO_HIGH },
- { GPIO_VOLTAGE_1P8, GPIO_SEL_1P8V },
- { GPIO_INT_ENABLE, GPIO_FLAG_NONE },
- { GPIO_INT_ENABLE | GPIO_INT_EDGE, GPIO_FLAG_NONE },
- { GPIO_INT_ENABLE | GPIO_INT_EDGE | GPIO_INT_HIGH_1,
- GPIO_INT_F_RISING },
- { GPIO_INT_ENABLE | GPIO_INT_EDGE | GPIO_INT_LOW_0,
- GPIO_INT_F_FALLING },
- { GPIO_INT_ENABLE | GPIO_INT_HIGH_1, GPIO_INT_F_HIGH },
- { GPIO_INT_ENABLE | GPIO_INT_LOW_0, GPIO_INT_F_LOW },
- { GPIO_OUTPUT_INIT_LOGICAL, 0 },
- { GPIO_OPEN_DRAIN | GPIO_PULL_UP,
- GPIO_OPEN_DRAIN | GPIO_PULL_UP },
- };
- int num_tests = ARRAY_SIZE(validate);
-
- for (int i = 0; i < num_tests; i++) {
- retval = convert_from_zephyr_flags(validate[i].zephyr_bmask);
- zassert_equal(validate[i].expected_ec_bmask, retval,
- "[%d] Expected 0x%08X, returned 0x%08X.", i,
- validate[i].expected_ec_bmask, retval);
- }
-}
-
-/**
- * @brief TestPurpose: Verify EC to Zephyr GPIO bitmask conversion.
- *
- * @details
- * Validate EC to Zephyr GPIO bitmask conversion.
- *
- * Expected Results
- * - GPIO bitmask conversions are successful
- */
-ZTEST(gpio, test_convert_to_zephyr_flags)
-{
- gpio_flags_t retval;
-
- struct {
- gpio_flags_t ec_bmask;
- int expected_zephyr_bmask;
- } validate[] = {
- { GPIO_FLAG_NONE, GPIO_DISCONNECTED },
- { GPIO_LOW, GPIO_OUTPUT_INIT_LOW },
- { GPIO_HIGH, GPIO_OUTPUT_INIT_HIGH },
- { GPIO_INT_F_RISING,
- GPIO_INT_ENABLE | GPIO_INT_EDGE | GPIO_INT_HIGH_1 },
- { GPIO_INT_F_FALLING,
- GPIO_INT_ENABLE | GPIO_INT_EDGE | GPIO_INT_LOW_0 },
- { GPIO_INT_F_LOW, GPIO_INT_ENABLE | GPIO_INT_LOW_0 },
- { GPIO_INT_F_HIGH, GPIO_INT_ENABLE | GPIO_INT_HIGH_1 },
- { GPIO_SEL_1P8V, GPIO_VOLTAGE_1P8 },
- };
- int num_tests = ARRAY_SIZE(validate);
-
- for (int i = 0; i < num_tests; i++) {
- retval = convert_to_zephyr_flags(validate[i].ec_bmask);
- zassert_equal(validate[i].expected_zephyr_bmask, retval,
- "[%d] Expected 0x%08X, returned 0x%08X.", i,
- validate[i].expected_zephyr_bmask, retval);
- }
-}
-
-/**
- * @brief TestPurpose: Verify GPIO signal_is_gpio.
- *
- * @details
- * Validate signal_is_gpio
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_signal_is_gpio)
-{
- zassert_true(signal_is_gpio(
- GPIO_SIGNAL(DT_NODELABEL(gpio_test))), "Expected true");
-}
-
-/**
- * @brief TestPurpose: Verify legacy API GPIO set/get level.
- *
- * @details
- * Validate set/get level for legacy API
- * This tests the legacy API, though no Zepyhr
- * based code should use it.
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_legacy_gpio_get_set_level)
-{
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_test));
- int level;
- /* Test invalid signal */
- gpio_set_level(GPIO_COUNT, 0);
- zassert_equal(0, gpio_get_level(GPIO_COUNT), "Expected level==0");
- /* Test valid signal */
- gpio_set_level(signal, 0);
- zassert_equal(0, gpio_get_level(signal), "Expected level==0");
- gpio_set_level(signal, 1);
- zassert_equal(1, gpio_get_level(signal), "Expected level==1");
- level = gpio_get_ternary(signal);
- gpio_set_level_verbose(CC_CHIPSET, signal, 0);
- zassert_equal(0, gpio_get_level(signal), "Expected level==0");
-}
-
-/**
- * @brief TestPurpose: Verify legacy GPIO enable/disable interrupt.
- *
- * @details
- * Validate gpio_enable_interrupt/gpio_disable_interrupt
- * Uses the legacy API. No Zephyr code should use this API.
- *
- * Expected Results
- * - Success
- */
-
-ZTEST(gpio, test_legacy_gpio_enable_interrupt)
-{
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_test));
-
- gpio_test_interrupt_triggered = false;
-
- /* Test invalid signal */
- zassert_not_equal(EC_SUCCESS, gpio_disable_interrupt(GPIO_COUNT), NULL);
- zassert_not_equal(EC_SUCCESS, gpio_enable_interrupt(GPIO_COUNT), NULL);
- zassert_false(gpio_test_interrupt_triggered, NULL);
-
- /* Test valid signal */
- zassert_ok(gpio_disable_interrupt(signal), NULL);
- gpio_set_level(signal, 0);
- zassert_false(gpio_test_interrupt_triggered, NULL);
- gpio_set_level(signal, 1);
- zassert_false(gpio_test_interrupt_triggered, NULL);
-
- zassert_ok(gpio_enable_interrupt(signal), NULL);
- gpio_set_level(signal, 0);
- zassert_true(gpio_test_interrupt_triggered, NULL);
- gpio_test_interrupt_triggered = false;
- gpio_set_level(signal, 1);
- zassert_true(gpio_test_interrupt_triggered, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify GPIO set/get level.
- *
- * @details
- * Validate set/get level
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_pin_get_set_level)
-{
- const struct gpio_dt_spec *gp = GPIO_DT_FROM_NODELABEL(gpio_test);
-
- /* Test invalid signal */
- zassert_equal(NULL, gpio_get_dt_spec(-1), "Expected NULL ptr");
-
- zassert_false(gp == NULL, "Unexpected NULL ptr");
- /* Test valid signal */
- gpio_pin_set_dt(gp, 0);
- zassert_equal(0, gpio_pin_get_dt(gp), "Expected level==0");
-
- gpio_pin_set_dt(gp, 1);
- zassert_equal(1, gpio_pin_get_dt(gp), "Expected level==1");
-}
-
-/**
- * @brief TestPurpose: Verify GPIO get name.
- *
- * @details
- * Validate gpio_get_name
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_get_name)
-{
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_test));
- const char *signal_name;
-
- /* Test invalid signal */
- signal_name = gpio_get_name(GPIO_COUNT);
- zassert_mem_equal("UNIMPLEMENTED", signal_name, strlen(signal_name),
- "gpio_get_name returned a valid signal \'%s\'",
- signal_name);
-
- /* Test valid signal */
- signal_name = gpio_get_name(signal);
- zassert_mem_equal("test", signal_name, strlen(signal_name),
- "gpio_get_name returned signal \'%s\'", signal_name);
-}
-
-/**
- * @brief Helper function to get GPIO flags
- *
- * @param signal
- * @return gpio_flags_t
- */
-gpio_flags_t gpio_helper_get_flags(enum gpio_signal signal)
-{
- const struct gpio_dt_spec *spec;
- gpio_flags_t flags;
-
- spec = gpio_get_dt_spec(signal);
- gpio_emul_flags_get(spec->port, spec->pin, &flags);
-
- return flags;
-}
-
-/**
- * @brief TestPurpose: Verify GPIO get default flags.
- *
- * @details
- * Validate gpio_get_default_flags
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_get_default_flags)
-{
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_test));
- gpio_flags_t flags;
- gpio_flags_t flags_at_start[GPIO_COUNT];
- int def_flags;
-
- /* Snapshot of GPIO flags before testing */
- for (int i = 0; i < GPIO_COUNT; i++)
- flags_at_start[i] = gpio_helper_get_flags(i);
-
- /* Test invalid signal */
- def_flags = gpio_get_default_flags(GPIO_COUNT);
- zassert_equal(0, def_flags, "Expected 0x0, returned 0x%08X", def_flags);
- gpio_set_flags(GPIO_COUNT, GPIO_INPUT);
-
- /* Verify flags didn't change */
- for (int i = 0; i < GPIO_COUNT; i++) {
- flags = gpio_helper_get_flags(i);
- zassert_equal(flags_at_start[i], flags,
- "%s[%d] flags_at_start=0x%x, flags=0x%x",
- gpio_get_name(i), i, flags_at_start[i], flags);
- }
-
- /* Test valid signal */
- def_flags = gpio_get_default_flags(signal);
- zassert_equal(GPIO_INPUT | GPIO_OUTPUT, def_flags,
- "Expected 0x%08x, returned 0x%08X",
- GPIO_INPUT | GPIO_OUTPUT, def_flags);
-
- gpio_set_flags(signal, GPIO_INPUT);
- flags = gpio_helper_get_flags(signal);
- zassert_equal(flags, GPIO_INPUT, "Flags set 0x%x", flags);
-
- gpio_set_flags(signal, GPIO_OUTPUT);
- flags = gpio_helper_get_flags(signal);
- zassert_equal(flags, GPIO_OUTPUT, "Flags set 0x%x", flags);
-}
-
-
-/**
- * @brief TestPurpose: Verify GPIO no-auto-init.
- *
- * @details
- * Validate no-auto-init device tree property,
- * which will not initialise the GPIO at startup.
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_no_auto_init)
-{
- const struct gpio_dt_spec *gp = GPIO_DT_FROM_NODELABEL(gpio_no_init);
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_no_init));
- gpio_flags_t flags;
-
- flags = gpio_helper_get_flags(signal);
- zassert_equal(0, flags,
- "Expected 0x%08x, returned 0x%08X",
- 0, flags);
-
- /* Configure pin. */
- gpio_pin_configure_dt(gp, GPIO_INPUT | GPIO_OUTPUT);
- flags = gpio_helper_get_flags(signal);
- zassert_equal(flags,
- (GPIO_ACTIVE_LOW | GPIO_OUTPUT | GPIO_INPUT),
- "Flags set 0x%x", flags);
-}
-
-/**
- * @brief TestPurpose: Verify GPIO reset.
- *
- * @details
- * Validate gpio_reset
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_reset)
-{
- enum gpio_signal signal = GPIO_SIGNAL(DT_NODELABEL(gpio_test));
- gpio_flags_t flags;
- gpio_flags_t flags_at_start[GPIO_COUNT];
-
- /* Snapshot of GPIO flags before testing */
- for (int i = 0; i < GPIO_COUNT; i++)
- flags_at_start[i] = gpio_helper_get_flags(i);
-
- /* Test reset on invalid signal */
- gpio_reset(GPIO_COUNT);
-
- /* Verify flags didn't change */
- for (int i = 0; i < GPIO_COUNT; i++) {
- flags = gpio_helper_get_flags(i);
- zassert_equal(flags_at_start[i], flags,
- "%s[%d] flags_at_start=0x%x, flags=0x%x",
- gpio_get_name(i), i, flags_at_start[i], flags);
- }
-
- /* Test reset on valid signal */
- gpio_set_flags(signal, GPIO_OUTPUT);
- flags = gpio_helper_get_flags(signal);
- zassert_equal(flags, GPIO_OUTPUT, "Flags set 0x%x", flags);
-
- gpio_reset(signal);
-
- flags = gpio_helper_get_flags(signal);
- zassert_equal(flags, gpio_get_default_flags(signal), "Flags set 0x%x",
- flags);
-}
-
-/**
- * @brief TestPurpose: Verify GPIO enable/disable interrupt.
- *
- * @details
- * Validate gpio_enable_dt_interrupt
- *
- * Expected Results
- * - Success
- */
-ZTEST(gpio, test_gpio_enable_dt_interrupt)
-{
- const struct gpio_dt_spec *gp = GPIO_DT_FROM_NODELABEL(gpio_test);
- const struct gpio_int_config *intr =
- GPIO_INT_FROM_NODELABEL(int_gpio_test);
-
- gpio_test_interrupt_triggered = false;
-
- /* Test valid signal */
- zassert_ok(gpio_disable_dt_interrupt(intr), NULL);
- gpio_pin_set_dt(gp, 0);
- zassert_false(gpio_test_interrupt_triggered, NULL);
- gpio_pin_set_dt(gp, 1);
- zassert_false(gpio_test_interrupt_triggered, NULL);
-
- zassert_ok(gpio_enable_dt_interrupt(intr), NULL);
- gpio_pin_set_dt(gp, 0);
- zassert_true(gpio_test_interrupt_triggered, NULL);
- gpio_test_interrupt_triggered = false;
- gpio_pin_set_dt(gp, 1);
- zassert_true(gpio_test_interrupt_triggered, NULL);
-}
-
-/**
- * @brief GPIO test setup handler.
- */
-static void gpio_before(void *state)
-{
- ARG_UNUSED(state);
- /** TODO: Reset all signals here. Currently other tests fail when reset
- * for(int i = 0; i < GPIO_COUNT; i++) {
- * gpio_reset(i);
- * }
- */
- gpio_reset(GPIO_SIGNAL(DT_NODELABEL(gpio_test)));
-}
-
-/**
- * @brief Test Suite: Verifies GPIO functionality.
- */
-ZTEST_SUITE(gpio, drivers_predicate_post_main, NULL, gpio_before, NULL, NULL);
diff --git a/zephyr/test/drivers/src/host_cmd/motion_sense.c b/zephyr/test/drivers/src/host_cmd/motion_sense.c
deleted file mode 100644
index 07952ed285..0000000000
--- a/zephyr/test/drivers/src/host_cmd/motion_sense.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <fff.h>
-#include <ztest.h>
-
-#include "atomic.h"
-#include "driver/accel_bma2x2.h"
-#include "motion_sense.h"
-#include "motion_sense_fifo.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-FAKE_VALUE_FUNC(int, mock_set_range, struct motion_sensor_t *, int, int);
-FAKE_VALUE_FUNC(int, mock_set_offset, const struct motion_sensor_t *,
- const int16_t *, int16_t);
-FAKE_VALUE_FUNC(int, mock_get_offset, const struct motion_sensor_t *, int16_t *,
- int16_t *);
-FAKE_VALUE_FUNC(int, mock_set_scale, const struct motion_sensor_t *,
- const uint16_t *, int16_t);
-FAKE_VALUE_FUNC(int, mock_get_scale, const struct motion_sensor_t *, uint16_t *,
- int16_t *);
-FAKE_VALUE_FUNC(int, mock_perform_calib, struct motion_sensor_t *, int);
-
-/**
- * Get the size needed for a struct ec_response_motion_sense
- */
-#define RESPONSE_MOTION_SENSE_BUFFER_SIZE(n) \
- (sizeof(struct ec_response_motion_sense) + \
- n * sizeof(struct ec_response_motion_sensor_data))
-
-#define RESPONSE_SENSOR_FIFO_SIZE(n) \
- (sizeof(struct ec_response_motion_sense) + n * sizeof(uint16_t))
-
-struct host_cmd_motion_sense_fixture {
- const struct accelgyro_drv *sensor_0_drv;
- struct accelgyro_drv mock_drv;
-};
-
-static void *host_cmd_motion_sense_setup(void)
-{
- static struct host_cmd_motion_sense_fixture fixture = {
- .mock_drv = {
- .set_range = mock_set_range,
- .set_offset = mock_set_offset,
- .get_offset = mock_get_offset,
- .set_scale = mock_set_scale,
- .get_scale = mock_get_scale,
- .perform_calib = mock_perform_calib,
- },
- };
-
- fixture.sensor_0_drv = motion_sensors[0].drv;
-
- return &fixture;
-}
-
-static void host_cmd_motion_sense_before(void *fixture)
-{
- ARG_UNUSED(fixture);
- RESET_FAKE(mock_set_range);
- RESET_FAKE(mock_set_offset);
- RESET_FAKE(mock_get_offset);
- RESET_FAKE(mock_set_scale);
- RESET_FAKE(mock_get_scale);
- RESET_FAKE(mock_perform_calib);
- FFF_RESET_HISTORY();
-
- atomic_clear(&motion_sensors[0].flush_pending);
- motion_sensors[0].config[SENSOR_CONFIG_AP].odr = 0;
- motion_sensors[0].config[SENSOR_CONFIG_AP].ec_rate = 1000 * MSEC;
-}
-
-static void host_cmd_motion_sense_after(void *fixture)
-{
- struct host_cmd_motion_sense_fixture *this = fixture;
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = this->sensor_0_drv;
- host_cmd_motion_sense_int_enable(0, &response);
- motion_sensors[0].flags &= ~MOTIONSENSE_FLAG_IN_SPOOF_MODE;
-}
-
-ZTEST_SUITE(host_cmd_motion_sense, drivers_predicate_post_main,
- host_cmd_motion_sense_setup, host_cmd_motion_sense_before,
- host_cmd_motion_sense_after, NULL);
-
-ZTEST_USER(host_cmd_motion_sense, test_dump)
-{
- uint8_t response_buffer[RESPONSE_MOTION_SENSE_BUFFER_SIZE(
- ALL_MOTION_SENSORS)];
- struct ec_response_motion_sense *result =
- (struct ec_response_motion_sense *)response_buffer;
-
- /* Set up the motion sensor data */
- for (int i = 0; i < ALL_MOTION_SENSORS; ++i) {
- motion_sensors[i].xyz[0] = i;
- motion_sensors[i].xyz[1] = i + 1;
- motion_sensors[i].xyz[2] = i + 2;
- }
- host_cmd_motion_sense_dump(ALL_MOTION_SENSORS, result);
-
- zassert_equal(result->dump.module_flags, MOTIONSENSE_MODULE_FLAG_ACTIVE,
- NULL);
- zassert_equal(result->dump.sensor_count, ALL_MOTION_SENSORS, NULL);
-
- /*
- * Test the values returned in the dump. Normally we shouldn't be doing
- * tests in a loop, but since the number of sensors (as well as the
- * order) is adjustable by devicetree, it would be too difficult to hard
- * code here.
- */
- for (int i = 0; i < ALL_MOTION_SENSORS; ++i) {
- zassert_equal(result->dump.sensor[i].flags,
- MOTIONSENSE_SENSOR_FLAG_PRESENT, NULL);
- zassert_equal(result->dump.sensor[i].data[0], i, NULL);
- zassert_equal(result->dump.sensor[i].data[1], i + 1, NULL);
- zassert_equal(result->dump.sensor[i].data[2], i + 2, NULL);
- }
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_dump__large_max_sensor_count)
-{
- uint8_t response_buffer[RESPONSE_MOTION_SENSE_BUFFER_SIZE(
- ALL_MOTION_SENSORS)];
- struct ec_response_motion_sense *result =
- (struct ec_response_motion_sense *)response_buffer;
-
- host_cmd_motion_sense_dump(ALL_MOTION_SENSORS + 1, result);
-
- zassert_equal(result->dump.sensor_count, ALL_MOTION_SENSORS, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_read_data__invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(host_cmd_motion_sense_data(UINT8_MAX, &response),
- EC_RES_INVALID_PARAM, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_read_data)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].xyz[0] = 1;
- motion_sensors[0].xyz[1] = 2;
- motion_sensors[0].xyz[2] = 3;
-
- zassert_ok(host_cmd_motion_sense_data(0, &response), NULL);
- zassert_equal(response.data.flags, 0, NULL);
- zassert_equal(response.data.data[0], 1, NULL);
- zassert_equal(response.data.data[1], 2, NULL);
- zassert_equal(response.data.data[2], 3, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_info__invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(host_cmd_motion_sense_info(/*cmd_version=*/1,
- /*sensor_num=*/UINT8_MAX,
- &response),
- EC_RES_INVALID_PARAM, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_info_v1)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_info(/*cmd_version=*/1,
- /*sensor_num=*/0, &response),
- NULL);
- zassert_equal(response.info.type, motion_sensors[0].type, NULL);
- zassert_equal(response.info.location, motion_sensors[0].location, NULL);
- zassert_equal(response.info.chip, motion_sensors[0].chip, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_info_v3)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_info(/*cmd_version=*/3,
- /*sensor_num=*/0, &response),
- NULL);
- zassert_equal(response.info.type, motion_sensors[0].type, NULL);
- zassert_equal(response.info.location, motion_sensors[0].location, NULL);
- zassert_equal(response.info.chip, motion_sensors[0].chip, NULL);
- zassert_equal(response.info_3.min_frequency,
- motion_sensors[0].min_frequency, NULL);
- zassert_equal(response.info_3.max_frequency,
- motion_sensors[0].max_frequency, NULL);
- zassert_equal(response.info_3.fifo_max_event_count,
- CONFIG_ACCEL_FIFO_SIZE, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_info_v4__no_read_temp)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_info(/*cmd_version=*/4,
- /*sensor_num=*/0, &response),
- NULL);
- zassert_equal(response.info.type, motion_sensors[0].type, NULL);
- zassert_equal(response.info.location, motion_sensors[0].location, NULL);
- zassert_equal(response.info.chip, motion_sensors[0].chip, NULL);
- if (IS_ENABLED(CONFIG_ONLINE_CALIB)) {
- zassert_true(response.info_4.flags &
- MOTION_SENSE_CMD_INFO_FLAG_ONLINE_CALIB,
- NULL);
- } else {
- zassert_false(response.info_4.flags &
- MOTION_SENSE_CMD_INFO_FLAG_ONLINE_CALIB,
- NULL);
- }
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_ec_rate__invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(host_cmd_motion_sense_ec_rate(
- /*sensor_num=*/0xff,
- /*data_rate_ms=*/EC_MOTION_SENSE_NO_VALUE,
- &response),
- EC_RES_INVALID_PARAM, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_ec_rate)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_ec_rate(
- /*sensor_num=*/0,
- /*data_rate_ms=*/EC_MOTION_SENSE_NO_VALUE,
- &response),
- NULL);
- zassert_equal(response.ec_rate.ret, 1000, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_set_ec_rate)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_ec_rate(
- /*sensor_num=*/0, /*data_rate_ms=*/2000, &response),
- NULL);
- /* The command should return the previous rate */
- zassert_equal(response.ec_rate.ret, 1000, "Expected 1000, but got %d",
- response.ec_rate.ret);
- /* The sensor's AP config value should be updated */
- zassert_equal(motion_sensors[0].config[SENSOR_CONFIG_AP].ec_rate,
- 2000 * MSEC, NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_odr_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_odr(
- /*sensor_num=*/0xff,
- /*odr=*/EC_MOTION_SENSE_NO_VALUE,
- /*round_up=*/false, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_odr_get)
-{
- struct ec_response_motion_sense response;
-
- zassume_ok(motion_sensors[0].drv->set_data_rate(&motion_sensors[0],
- 1000000, false),
- NULL);
- zassert_ok(host_cmd_motion_sense_odr(/*sensor_num=*/0,
- /*odr=*/EC_MOTION_SENSE_NO_VALUE,
- /*round_up=*/false, &response),
- NULL);
- zassert_equal(BMA2x2_REG_TO_BW(BMA2x2_BW_1000HZ),
- response.sensor_odr.ret, "Expected %d, but got %d",
- BMA2x2_REG_TO_BW(BMA2x2_BW_1000HZ),
- response.sensor_odr.ret);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_odr_set)
-{
- struct ec_response_motion_sense response;
-
- zassume_ok(motion_sensors[0].drv->set_data_rate(&motion_sensors[0], 0,
- false),
- NULL);
- zassert_ok(host_cmd_motion_sense_odr(/*sensor_num=*/0,
- /*odr=*/1000000,
- /*round_up=*/true, &response),
- NULL);
- /* Check the set value */
- zassert_equal(1000000 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_AP].odr,
- "Expected %d, but got %d", 1000000 | ROUND_UP_FLAG,
- motion_sensors[0].config[SENSOR_CONFIG_AP].odr);
- /* Check the returned value */
- zassert_equal(BMA2x2_REG_TO_BW(BMA2x2_BW_7_81HZ),
- response.sensor_odr.ret, "Expected %d, but got %d",
- BMA2x2_REG_TO_BW(BMA2x2_BW_7_81HZ),
- response.sensor_odr.ret);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_range_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_range(
- /*sensor_num=*/0xff,
- /*range=*/EC_MOTION_SENSE_NO_VALUE,
- /*round_up=*/false, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_range)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_range(
- /*sensor_num=*/0, /*range=*/EC_MOTION_SENSE_NO_VALUE,
- /*round_up=*/false, &response),
- NULL);
- zassert_equal(motion_sensors[0].current_range,
- response.sensor_range.ret, "Expected %d, but got %d",
- motion_sensors[0].current_range,
- response.sensor_range.ret);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_null_set_range_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = { 0 };
-
- motion_sensors[0].drv = &drv;
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_range(/*sensor_num=*/0, /*range=*/4,
- /*round_up=*/false,
- &response),
- NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_set_range_error)
-{
- struct ec_response_motion_sense response;
-
- mock_set_range_fake.return_val = 1;
- motion_sensors[0].drv = &this->mock_drv;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_range(/*sensor_num=*/0, /*range=*/4,
- /*round_up=*/false,
- &response),
- NULL);
- zassert_equal(1, mock_set_range_fake.call_count, NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_set_range)
-{
- struct ec_response_motion_sense response;
-
- mock_set_range_fake.return_val = 0;
- motion_sensors[0].drv = &this->mock_drv;
-
- zassert_ok(host_cmd_motion_sense_range(/*sensor_num=*/0, /*range=*/4,
- /*round_up=*/false, &response),
- NULL);
- zassert_equal(1, mock_set_range_fake.call_count, NULL);
- zassert_equal(4, mock_set_range_fake.arg1_history[0], NULL);
- zassert_equal(0, mock_set_range_fake.arg2_history[0], NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_offset_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_offset(
- /*sensor_num=*/0xff, /*flags=*/0,
- /*temperature=*/0, /*offset_x=*/0,
- /*offset_y=*/0, /*offset_z=*/0, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_offset_missing_get_offset_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = { 0 };
-
- motion_sensors[0].drv = &drv;
-
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_offset(
- /*sensor_num=*/0, /*flags=*/0,
- /*temperature=*/0, /*offset_x=*/0,
- /*offset_y=*/0, /*offset_z=*/0, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_offset_missing_set_offset_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = { 0 };
-
- motion_sensors[0].drv = &drv;
-
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_offset(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/0, /*offset_x=*/0,
- /*offset_y=*/0, /*offset_z=*/0, &response),
- NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_offset_fail_to_set)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_set_offset_fake.return_val = EC_RES_ERROR;
-
- zassert_equal(EC_RES_ERROR,
- host_cmd_motion_sense_offset(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/0, /*offset_x=*/0,
- /*offset_y=*/0, /*offset_z=*/0, &response),
- NULL);
- zassert_equal(1, mock_set_offset_fake.call_count, NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_offset_fail_to_get)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_set_offset_fake.return_val = EC_RES_SUCCESS;
- mock_get_offset_fake.return_val = EC_RES_ERROR;
-
- zassert_equal(EC_RES_ERROR,
- host_cmd_motion_sense_offset(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/0, /*offset_x=*/0,
- /*offset_y=*/0, /*offset_z=*/0, &response),
- NULL);
- zassert_equal(1, mock_set_offset_fake.call_count, NULL);
- zassert_equal(1, mock_get_offset_fake.call_count, NULL);
- zassert_equal((int16_t *)&response.sensor_offset.offset,
- mock_get_offset_fake.arg1_history[0], NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_get_offset)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_get_offset_fake.return_val = EC_RES_SUCCESS;
- mock_set_offset_fake.return_val = EC_RES_SUCCESS;
-
- zassert_ok(host_cmd_motion_sense_offset(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/1, /*offset_x=*/2,
- /*offset_y=*/3, /*offset_z=*/4, &response),
- NULL);
- zassert_equal(1, mock_set_offset_fake.call_count, NULL);
- zassert_equal(1, mock_get_offset_fake.call_count, NULL);
- zassert_equal((int16_t *)&response.sensor_offset.offset,
- mock_get_offset_fake.arg1_history[0], NULL);
- zassert_equal(1, mock_set_offset_fake.arg2_history[0], NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_scale_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_scale(
- /*sensor_num=*/0xff,
- /*flags=*/0,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_get_scale_not_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = *motion_sensors[0].drv;
-
- drv.get_scale = NULL;
- motion_sensors[0].drv = &drv;
-
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_scale(
- /*sensor_num=*/0,
- /*flags=*/0,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_set_scale_not_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = *motion_sensors[0].drv;
-
- drv.set_scale = NULL;
- motion_sensors[0].drv = &drv;
-
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_scale(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_get_scale_fail)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_get_scale_fake.return_val = 1;
-
- zassert_equal(1,
- host_cmd_motion_sense_scale(
- /*sensor_num=*/0,
- /*flags=*/0,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
- zassert_equal(1, mock_get_scale_fake.call_count, NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_set_scale_fail)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_set_scale_fake.return_val = 1;
-
- zassert_equal(1,
- host_cmd_motion_sense_scale(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
- zassert_equal(1, mock_set_scale_fake.call_count, NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_set_get_scale)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_set_scale_fake.return_val = 0;
- mock_get_scale_fake.return_val = 0;
-
- zassert_ok(host_cmd_motion_sense_scale(
- /*sensor_num=*/0,
- /*flags=*/MOTION_SENSE_SET_OFFSET,
- /*temperature=*/1, /*scale_x=*/2,
- /*scale_y=*/3, /*scale_z=*/4, &response),
- NULL);
- zassert_equal(1, mock_set_scale_fake.call_count, NULL);
- zassert_equal(1, mock_get_scale_fake.call_count, NULL);
- zassert_equal(1, mock_set_scale_fake.arg2_history[0], NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_calib_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_calib(/*sensor_num=*/0xff,
- /*enable=*/false, &response),
- NULL);
-}
-
-ZTEST_USER(host_cmd_motion_sense, test_calib_not_in_driver)
-{
- struct ec_response_motion_sense response;
- struct accelgyro_drv drv = { 0 };
-
- motion_sensors[0].drv = &drv;
- zassert_equal(EC_RES_INVALID_COMMAND,
- host_cmd_motion_sense_calib(/*sensor_num=*/0,
- /*enable=*/false, &response),
- NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_calib_fail)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_perform_calib_fake.return_val = 1;
-
- zassert_equal(1,
- host_cmd_motion_sense_calib(/*sensor_num=*/0,
- /*enable=*/false, &response),
- NULL);
- zassert_equal(1, mock_perform_calib_fake.call_count, NULL);
- zassert_false(mock_perform_calib_fake.arg1_history[0], NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_calib_success__fail_get_offset)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_perform_calib_fake.return_val = 0;
- mock_get_offset_fake.return_val = 1;
-
- zassert_equal(1,
- host_cmd_motion_sense_calib(/*sensor_num=*/0,
- /*enable=*/false, &response),
- NULL);
- zassert_equal(1, mock_perform_calib_fake.call_count, NULL);
- zassert_equal(1, mock_get_offset_fake.call_count, NULL);
- zassert_false(mock_perform_calib_fake.arg1_history[0], NULL);
-}
-
-ZTEST_USER_F(host_cmd_motion_sense, test_calib)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].drv = &this->mock_drv;
- mock_perform_calib_fake.return_val = 0;
- mock_get_offset_fake.return_val = 0;
-
- zassert_ok(host_cmd_motion_sense_calib(/*sensor_num=*/0,
- /*enable=*/true, &response),
- NULL);
- zassert_equal(1, mock_perform_calib_fake.call_count, NULL);
- zassert_equal(1, mock_get_offset_fake.call_count, NULL);
- zassert_true(mock_perform_calib_fake.arg1_history[0], NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_fifo_flush__invalid_sensor_num)
-{
- int rv;
- struct ec_response_motion_sense response;
-
- rv = host_cmd_motion_sense_fifo_flush(/*sensor_num=*/0xff, &response);
- zassert_equal(rv, EC_RES_INVALID_PARAM, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_fifo_flush)
-{
- uint8_t response_buffer[RESPONSE_SENSOR_FIFO_SIZE(ALL_MOTION_SENSORS)];
- struct ec_response_motion_sense *response =
- (struct ec_response_motion_sense *)response_buffer;
-
- motion_sensors[0].lost = 5;
- zassert_ok(host_cmd_motion_sense_fifo_flush(/*sensor_num=*/0, response),
- NULL);
- zassert_equal(1, motion_sensors[0].flush_pending, NULL);
- zassert_equal(5, response->fifo_info.lost[0], NULL);
- zassert_equal(0, motion_sensors[0].lost, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_fifo_info)
-{
- uint8_t response_buffer[RESPONSE_SENSOR_FIFO_SIZE(ALL_MOTION_SENSORS)];
- struct ec_response_motion_sense *response =
- (struct ec_response_motion_sense *)response_buffer;
-
- motion_sensors[0].lost = 4;
- zassert_ok(host_cmd_motion_sense_fifo_info(response), NULL);
- zassert_equal(4, response->fifo_info.lost[0], NULL);
- zassert_equal(0, motion_sensors[0].lost, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_fifo_read)
-{
- struct ec_response_motion_sensor_data data;
- uint8_t response_buffer[RESPONSE_MOTION_SENSE_BUFFER_SIZE(2)];
- struct ec_response_motion_sense *response =
- (struct ec_response_motion_sense *)response_buffer;
-
- motion_sensors[0].oversampling_ratio = 1;
- motion_sensors[1].oversampling_ratio = 1;
-
- data = (struct ec_response_motion_sensor_data){
- .flags = 0,
- .sensor_num = 0,
- .data = { 0, 1, 2 },
- };
- motion_sense_fifo_stage_data(&data, &motion_sensors[0], 1, 0);
-
- data = (struct ec_response_motion_sensor_data){
- .flags = 0,
- .sensor_num = 1,
- .data = { 3, 4, 5 },
- };
- motion_sense_fifo_stage_data(&data, &motion_sensors[1], 1, 5);
- motion_sense_fifo_commit_data();
-
- /* Read 2 samples */
- zassert_ok(host_cmd_motion_sense_fifo_read(4, response), NULL);
- zassert_equal(2, response->fifo_read.number_data, NULL);
-
- zassert_equal(MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
- response->fifo_read.data[0].flags, NULL);
- zassert_equal(0, response->fifo_read.data[0].sensor_num, NULL);
- zassert_equal(0, response->fifo_read.data[0].timestamp, NULL);
-
- zassert_equal(0, response->fifo_read.data[1].flags, NULL);
- zassert_equal(0, response->fifo_read.data[1].sensor_num, NULL);
- zassert_equal(0, response->fifo_read.data[1].data[0], NULL);
- zassert_equal(1, response->fifo_read.data[1].data[1], NULL);
- zassert_equal(2, response->fifo_read.data[1].data[2], NULL);
-
- /* Read the next 2 samples */
- zassert_ok(host_cmd_motion_sense_fifo_read(4, response), NULL);
- zassert_equal(2, response->fifo_read.number_data, NULL);
- zassert_equal(MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
- response->fifo_read.data[0].flags, NULL);
- zassert_equal(1, response->fifo_read.data[0].sensor_num, NULL);
- zassert_equal(5, response->fifo_read.data[0].timestamp, NULL);
-
- zassert_equal(0, response->fifo_read.data[1].flags, NULL);
- zassert_equal(1, response->fifo_read.data[1].sensor_num, NULL);
- zassert_equal(3, response->fifo_read.data[1].data[0], NULL);
- zassert_equal(4, response->fifo_read.data[1].data[1], NULL);
- zassert_equal(5, response->fifo_read.data[1].data[2], NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_int_enable)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_int_enable(2, &response), NULL);
-
- /* Make sure we start off disabled */
- zassume_ok(host_cmd_motion_sense_int_enable(0, &response), NULL);
-
- /* Test enable */
- zassert_ok(host_cmd_motion_sense_int_enable(1, &response), NULL);
- zassert_ok(host_cmd_motion_sense_int_enable(EC_MOTION_SENSE_NO_VALUE,
- &response),
- NULL);
- zassert_equal(1, response.fifo_int_enable.ret, NULL);
-
- /* Test disable */
- zassert_ok(host_cmd_motion_sense_int_enable(0, &response), NULL);
- zassert_ok(host_cmd_motion_sense_int_enable(EC_MOTION_SENSE_NO_VALUE,
- &response),
- NULL);
- zassert_equal(0, response.fifo_int_enable.ret, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_spoof_invalid_sensor_num)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_spoof(0xff, 0, 0, 0, 0, &response),
- NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_spoof_disable)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].flags |= MOTIONSENSE_FLAG_IN_SPOOF_MODE;
- zassert_ok(host_cmd_motion_sense_spoof(0,
- MOTIONSENSE_SPOOF_MODE_DISABLE,
- 0, 0, 0, &response),
- NULL);
- zassert_equal(0,
- motion_sensors[0].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- NULL);
-
- zassert_ok(host_cmd_motion_sense_spoof(0, MOTIONSENSE_SPOOF_MODE_QUERY,
- 0, 0, 0, &response),
- NULL);
- zassert_false(response.spoof.ret, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_spoof_custom)
-{
- struct ec_response_motion_sense response;
-
- zassert_ok(host_cmd_motion_sense_spoof(0, MOTIONSENSE_SPOOF_MODE_CUSTOM,
- -8, 16, -32, &response),
- NULL);
- zassert_equal(MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- motion_sensors[0].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- NULL);
- zassert_equal(-8, motion_sensors[0].spoof_xyz[0], NULL);
- zassert_equal(16, motion_sensors[0].spoof_xyz[1], NULL);
- zassert_equal(-32, motion_sensors[0].spoof_xyz[2], NULL);
-
- zassert_ok(host_cmd_motion_sense_spoof(0, MOTIONSENSE_SPOOF_MODE_QUERY,
- 0, 0, 0, &response),
- NULL);
- zassert_true(response.spoof.ret, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_spoof_lock_current)
-{
- struct ec_response_motion_sense response;
-
- motion_sensors[0].raw_xyz[0] = 64;
- motion_sensors[0].raw_xyz[1] = 48;
- motion_sensors[0].raw_xyz[2] = 32;
- zassert_ok(host_cmd_motion_sense_spoof(
- 0, MOTIONSENSE_SPOOF_MODE_LOCK_CURRENT, 0, 0, 0,
- &response),
- NULL);
- zassert_equal(MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- motion_sensors[0].flags & MOTIONSENSE_FLAG_IN_SPOOF_MODE,
- NULL);
- zassert_equal(64, motion_sensors[0].spoof_xyz[0], NULL);
- zassert_equal(48, motion_sensors[0].spoof_xyz[1], NULL);
- zassert_equal(32, motion_sensors[0].spoof_xyz[2], NULL);
-
- zassert_ok(host_cmd_motion_sense_spoof(0, MOTIONSENSE_SPOOF_MODE_QUERY,
- 0, 0, 0, &response),
- NULL);
- zassert_true(response.spoof.ret, NULL);
-}
-
-ZTEST(host_cmd_motion_sense, test_spoof_invalid_mode)
-{
- struct ec_response_motion_sense response;
-
- zassert_equal(EC_RES_INVALID_PARAM,
- host_cmd_motion_sense_spoof(0, 0xff, 0, 0, 0, &response),
- NULL);
-}
diff --git a/zephyr/test/drivers/src/i2c_passthru.c b/zephyr/test/drivers/src/i2c_passthru.c
deleted file mode 100644
index bab6a15b28..0000000000
--- a/zephyr/test/drivers/src/i2c_passthru.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "ec_commands.h"
-#include "host_command.h"
-#include "test/drivers/test_state.h"
-
-ZTEST_USER(i2c_passthru, test_read_without_write)
-{
- uint8_t param_buf[sizeof(struct ec_params_i2c_passthru) +
- sizeof(struct ec_params_i2c_passthru_msg)];
- uint8_t response_buf[sizeof(struct ec_response_i2c_passthru) + 2];
- struct ec_params_i2c_passthru *params =
- (struct ec_params_i2c_passthru *)&param_buf;
- struct ec_response_i2c_passthru *response =
- (struct ec_response_i2c_passthru *)&response_buf;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_SIMPLE(EC_CMD_I2C_PASSTHRU, 0);
-
- params->port = I2C_PORT_VIRTUAL_BATTERY;
- params->num_msgs = 1;
- params->msg[0].addr_flags = VIRTUAL_BATTERY_ADDR_FLAGS |
- EC_I2C_FLAG_READ;
- params->msg[0].len = 1;
- args.params = &param_buf;
- args.params_size = sizeof(param_buf);
- args.response = &response_buf;
- args.response_max = sizeof(response_buf);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(response->i2c_status, EC_I2C_STATUS_NAK, NULL);
- zassert_equal(args.response_size,
- sizeof(struct ec_response_i2c_passthru), NULL);
-}
-
-ZTEST_SUITE(i2c_passthru, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/integration/usbc/usb.c b/zephyr/test/drivers/src/integration/usbc/usb.c
deleted file mode 100644
index 0a6443ded9..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "battery_smart.h"
-#include "ec_commands.h"
-#include "ec_tasks.h"
-#include "driver/tcpm/ps8xxx_public.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_ps8xxx.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "emul/tcpc/emul_tcpci_partner_drp.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "emul/tcpc/emul_tcpci_partner_src.h"
-#include "host_command.h"
-#include "test/drivers/stubs.h"
-#include "tcpm/tcpci.h"
-#include "test/usb_pe.h"
-#include "test/drivers/utils.h"
-#include "test/drivers/test_state.h"
-
-#define TCPCI_EMUL_LABEL DT_NODELABEL(tcpci_emul)
-#define TCPCI_EMUL_LABEL2 DT_NODELABEL(tcpci_ps8xxx_emul)
-
-#define BATTERY_ORD DT_DEP_ORD(DT_NODELABEL(battery))
-
-#define GPIO_AC_OK_PATH DT_PATH(named_gpios, acok_od)
-#define GPIO_AC_OK_PIN DT_GPIO_PIN(GPIO_AC_OK_PATH, gpios)
-
-#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)
-
-static void integration_usb_before(void *state)
-{
- const struct emul *tcpci_emul =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL));
- const struct emul *tcpci_emul2 =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL2));
- const struct emul *charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
- /* Reset vbus to 0mV */
- /* TODO(b/217610871): Remove redundant test state cleanup */
- isl923x_emul_set_adc_vbus(charger_emul, 0);
- struct i2c_emul *i2c_emul;
- struct sbat_emul_bat_data *bat;
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_AC_OK_PATH, gpios));
-
- ARG_UNUSED(state);
- /*
- * TODO(b/217755888): Refactor to using assume API
- */
- zassert_ok(tcpc_config[0].drv->init(0), NULL);
- zassert_ok(tcpc_config[1].drv->init(1), NULL);
- tcpci_emul_set_rev(tcpci_emul, TCPCI_EMUL_REV1_0_VER1_0);
- pd_set_suspend(0, 0);
- pd_set_suspend(1, 0);
- /* Reset to disconnected state. */
- /*
- * TODO(b/217755888): Refactor to using assume API
- */
- zassert_ok(tcpci_emul_disconnect_partner(tcpci_emul), NULL);
- zassert_ok(tcpci_emul_disconnect_partner(tcpci_emul2), NULL);
-
- /* Battery defaults to charging, so reset to not charging. */
- i2c_emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(i2c_emul);
- bat->cur = -5;
-
- /*
- * TODO(b/217755888): Refactor to using assume API
- */
- zassert_ok(gpio_emul_input_set(gpio_dev, GPIO_AC_OK_PIN, 0), NULL);
-}
-
-static void integration_usb_after(void *state)
-{
- const struct emul *tcpci_emul =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL));
- const struct emul *tcpci_emul2 =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL2));
- const struct emul *charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
- ARG_UNUSED(state);
-
- /* TODO: This function should trigger gpios to signal there is nothing
- * attached to the port.
- */
- /*
- * TODO(b/217755888): Refactor to using assume API
- */
- zassert_ok(tcpci_emul_disconnect_partner(tcpci_emul), NULL);
- zassert_ok(tcpci_emul_disconnect_partner(tcpci_emul2), NULL);
- /* Give time to actually disconnect */
- k_sleep(K_SECONDS(1));
-
- /* Reset vbus to 0mV */
- isl923x_emul_set_adc_vbus(charger_emul, 0);
-}
-
-ZTEST(integration_usb, test_attach_drp)
-{
- const struct emul *tcpci_emul =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL));
- struct tcpci_partner_data my_drp;
- struct tcpci_drp_emul_data drp_ext;
- struct tcpci_src_emul_data src_ext;
- struct tcpci_snk_emul_data snk_ext;
-
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
- /* Attach emulated sink */
- tcpci_partner_init(&my_drp, PD_REV20);
- my_drp.extensions =
- tcpci_drp_emul_init(
- &drp_ext, &my_drp, PD_ROLE_SINK,
- tcpci_src_emul_init(&src_ext, &my_drp, NULL),
- tcpci_snk_emul_init(&snk_ext, &my_drp, NULL));
-
- zassert_ok(tcpci_partner_connect_to_tcpci(&my_drp, tcpci_emul),
- NULL);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-
- /*
- * Test that SRC ready is achieved
- * TODO: Change it to examining EC_CMD_TYPEC_STATUS
- */
- zassert_equal(PE_SNK_READY, get_state_pe(USBC_PORT_C0), NULL);
- zassert_ok(tcpci_emul_disconnect_partner(tcpci_emul), NULL);
-}
-
-ZTEST_SUITE(integration_usb, drivers_predicate_post_main, NULL,
- integration_usb_before, integration_usb_after, NULL);
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_20v_3a_pd_charger.c b/zephyr/test/drivers/src/integration/usbc/usb_20v_3a_pd_charger.c
deleted file mode 100644
index 79cbb21b96..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_20v_3a_pd_charger.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "battery_smart.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_tcpci_partner_src.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "usb_pd.h"
-
-#define BATTERY_ORD DT_DEP_ORD(DT_NODELABEL(battery))
-
-struct usb_attach_20v_3a_pd_charger_fixture {
- struct tcpci_partner_data charger_20v;
- struct tcpci_src_emul_data src_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
-};
-
-static inline void
-connect_charger_to_port(struct usb_attach_20v_3a_pd_charger_fixture *fixture)
-{
- set_ac_enabled(true);
- zassume_ok(tcpci_partner_connect_to_tcpci(
- &fixture->charger_20v, fixture->tcpci_emul),
- NULL);
-
- isl923x_emul_set_adc_vbus(
- fixture->charger_emul,
- PDO_FIXED_GET_VOLT(fixture->src_ext.pdo[1]));
-
- /* Wait for PD negotiation and current ramp.
- * TODO(b/213906889): Check message timing and contents.
- */
- k_sleep(K_SECONDS(10));
-}
-
-static inline void disconnect_charger_from_port(
- struct usb_attach_20v_3a_pd_charger_fixture *fixture)
-{
- set_ac_enabled(false);
- zassume_ok(tcpci_emul_disconnect_partner(fixture->tcpci_emul), NULL);
- isl923x_emul_set_adc_vbus(fixture->charger_emul, 0);
- k_sleep(K_SECONDS(1));
-}
-
-static void *usb_attach_20v_3a_pd_charger_setup(void)
-{
- static struct usb_attach_20v_3a_pd_charger_fixture test_fixture;
-
- /* Get references for the emulators */
- test_fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- test_fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- /* Initialized the charger to supply 20V and 3A */
- tcpci_partner_init(&test_fixture.charger_20v, PD_REV20);
- test_fixture.charger_20v.extensions =
- tcpci_src_emul_init(&test_fixture.src_ext,
- &test_fixture.charger_20v, NULL);
- test_fixture.src_ext.pdo[1] =
- PDO_FIXED(20000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &test_fixture;
-}
-
-static void usb_attach_20v_3a_pd_charger_before(void *data)
-{
- connect_charger_to_port(
- (struct usb_attach_20v_3a_pd_charger_fixture *)data);
-}
-
-static void usb_attach_20v_3a_pd_charger_after(void *data)
-{
- disconnect_charger_from_port(
- (struct usb_attach_20v_3a_pd_charger_fixture *)data);
-}
-
-ZTEST_SUITE(usb_attach_20v_3a_pd_charger, drivers_predicate_post_main,
- usb_attach_20v_3a_pd_charger_setup,
- usb_attach_20v_3a_pd_charger_before,
- usb_attach_20v_3a_pd_charger_after, NULL);
-
-ZTEST(usb_attach_20v_3a_pd_charger, test_battery_is_charging)
-{
- struct i2c_emul *i2c_emul = sbat_emul_get_ptr(BATTERY_ORD);
- uint16_t battery_status;
-
- zassume_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, 0,
- "Battery is discharging: %d", battery_status);
-}
-
-ZTEST(usb_attach_20v_3a_pd_charger, test_charge_state)
-{
- struct ec_response_charge_state state = host_cmd_charge_state(0);
-
- zassert_true(state.get_state.ac, "AC_OK not triggered");
- zassert_true(state.get_state.chg_voltage > 0,
- "Expected a charge voltage, but got %dmV",
- state.get_state.chg_voltage);
- zassert_true(state.get_state.chg_current > 0,
- "Expected a charge current, but got %dmA",
- state.get_state.chg_current);
-}
-
-ZTEST(usb_attach_20v_3a_pd_charger, test_typec_status)
-{
- struct ec_response_typec_status status = host_cmd_typec_status(0);
-
- zassert_true(status.pd_enabled, "PD is disabled");
- zassert_true(status.dev_connected, "Device disconnected");
- zassert_true(status.sop_connected, "Charger is not SOP capable");
- zassert_equal(status.source_cap_count, 2,
- "Expected 2 source PDOs, but got %d",
- status.source_cap_count);
- zassert_equal(status.power_role, PD_ROLE_SINK,
- "Expected power role to be %d, but got %d", PD_ROLE_SINK,
- status.power_role);
-}
-
-ZTEST(usb_attach_20v_3a_pd_charger, test_power_info)
-{
- struct ec_response_usb_pd_power_info info = host_cmd_power_info(0);
-
- zassert_equal(info.role, USB_PD_PORT_POWER_SINK,
- "Expected role to be %d, but got %d",
- USB_PD_PORT_POWER_SINK, info.role);
- zassert_equal(info.type, USB_CHG_TYPE_PD,
- "Expected type to be %d, but got %d", USB_CHG_TYPE_PD,
- info.type);
- zassert_equal(info.meas.voltage_max, 20000,
- "Expected charge voltage max of 20000mV, but got %dmV",
- info.meas.voltage_max);
- zassert_within(
- info.meas.voltage_now, 20000, 2000,
- "Charging voltage expected to be near 20000mV, but was %dmV",
- info.meas.voltage_now);
- zassert_equal(info.meas.current_max, 3000,
- "Current max expected to be 3000mV, but was %dmV",
- info.meas.current_max);
- zassert_true(info.meas.current_lim >= 3000,
- "VBUS max is set to 3000mA, but PD is reporting %dmA",
- info.meas.current_lim);
- zassert_equal(info.max_power, 20000 * 3000,
- "Charging expected to be at %duW, but PD max is %duW",
- 20000 * 3000, info.max_power);
-}
-
-ZTEST_F(usb_attach_20v_3a_pd_charger, test_disconnect_battery_not_charging)
-{
- struct i2c_emul *i2c_emul = sbat_emul_get_ptr(BATTERY_ORD);
- uint16_t battery_status;
-
- disconnect_charger_from_port(this);
- zassert_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, STATUS_DISCHARGING,
- "Battery is not discharging: %d", battery_status);
-}
-
-ZTEST_F(usb_attach_20v_3a_pd_charger, test_disconnect_charge_state)
-{
- struct ec_response_charge_state charge_state;
-
- disconnect_charger_from_port(this);
- charge_state = host_cmd_charge_state(0);
-
- zassert_false(charge_state.get_state.ac, "AC_OK not triggered");
- zassert_equal(charge_state.get_state.chg_current, 0,
- "Max charge current expected 0mA, but was %dmA",
- charge_state.get_state.chg_current);
- zassert_equal(charge_state.get_state.chg_input_current,
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- "Charge input current limit expected %dmA, but was %dmA",
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- charge_state.get_state.chg_input_current);
-}
-
-ZTEST_F(usb_attach_20v_3a_pd_charger, test_disconnect_typec_status)
-{
- struct ec_response_typec_status typec_status;
-
- disconnect_charger_from_port(this);
- typec_status = host_cmd_typec_status(0);
-
- zassert_false(typec_status.pd_enabled, NULL);
- zassert_false(typec_status.dev_connected, NULL);
- zassert_false(typec_status.sop_connected, NULL);
- zassert_equal(typec_status.source_cap_count, 0,
- "Expected 0 source caps, but got %d",
- typec_status.source_cap_count);
- zassert_equal(typec_status.power_role, USB_CHG_TYPE_NONE,
- "Expected power role to be %d, but got %d",
- USB_CHG_TYPE_NONE, typec_status.power_role);
-}
-
-ZTEST_F(usb_attach_20v_3a_pd_charger, test_disconnect_power_info)
-{
- struct ec_response_usb_pd_power_info power_info;
-
- disconnect_charger_from_port(this);
- power_info = host_cmd_power_info(0);
-
- zassert_equal(power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Expected power role to be %d, but got %d",
- USB_PD_PORT_POWER_DISCONNECTED, power_info.role);
- zassert_equal(power_info.type, USB_CHG_TYPE_NONE,
- "Expected charger type to be %d, but got %s",
- USB_CHG_TYPE_NONE, power_info.type);
- zassert_equal(power_info.max_power, 0,
- "Expected the maximum power to be 0uW, but got %duW",
- power_info.max_power);
- zassert_equal(power_info.meas.voltage_max, 0,
- "Expected maximum voltage of 0mV, but got %dmV",
- power_info.meas.voltage_max);
- zassert_within(power_info.meas.voltage_now, 5, 5,
- "Expected present voltage near 0mV, but got %dmV",
- power_info.meas.voltage_now);
- zassert_equal(power_info.meas.current_max, 0,
- "Expected maximum current of 0mA, but got %dmA",
- power_info.meas.current_max);
- zassert_true(power_info.meas.current_lim >= 0,
- "Expected the PD current limit to be >= 0, but got %dmA",
- power_info.meas.current_lim);
-}
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c b/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c
deleted file mode 100644
index 1cbdda49b0..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdint.h>
-#include <ztest.h>
-
-#include "battery_smart.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "tcpm/tcpci.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "timer.h"
-#include "usb_common.h"
-#include "usb_pd.h"
-
-struct usb_attach_5v_3a_pd_sink_fixture {
- struct tcpci_partner_data sink_5v_3a;
- struct tcpci_snk_emul_data snk_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
-};
-
-/* Chromebooks only charge PD partners at 5v */
-#define TEST_SRC_PORT_VBUS_MV 5000
-#define TEST_SRC_PORT_TARGET_MA 3000
-
-#define TEST_INITIAL_SINK_CAP \
- PDO_FIXED(TEST_SRC_PORT_VBUS_MV, TEST_SRC_PORT_TARGET_MA, 0)
-/* Only used to verify sink capabilities being received by SRC port */
-#define TEST_ADDITIONAL_SINK_CAP PDO_FIXED(TEST_SRC_PORT_VBUS_MV, 5000, 0)
-
-static void
-connect_sink_to_port(struct usb_attach_5v_3a_pd_sink_fixture *fixture)
-{
- /*
- * TODO(b/221439302) Updating the TCPCI emulator registers, updating the
- * vbus, as well as alerting should all be a part of the connect
- * function.
- */
- isl923x_emul_set_adc_vbus(fixture->charger_emul, 0);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
-
- tcpci_tcpc_alert(0);
- k_sleep(K_SECONDS(1));
-
- zassume_ok(tcpci_partner_connect_to_tcpci(
- &fixture->sink_5v_3a,
- fixture->tcpci_emul),
- NULL);
-
- /* Wait for PD negotiation and current ramp.
- * TODO(b/213906889): Check message timing and contents.
- */
- k_sleep(K_SECONDS(10));
-}
-
-static inline void disconnect_sink_from_port(
- struct usb_attach_5v_3a_pd_sink_fixture *fixture)
-{
- zassume_ok(tcpci_emul_disconnect_partner(fixture->tcpci_emul), NULL);
- k_sleep(K_SECONDS(1));
-}
-
-static void *usb_attach_5v_3a_pd_sink_setup(void)
-{
- static struct usb_attach_5v_3a_pd_sink_fixture test_fixture;
-
- /* Get references for the emulators */
- test_fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- test_fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
- tcpci_emul_set_rev(test_fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- return &test_fixture;
-}
-
-static void usb_attach_5v_3a_pd_sink_before(void *data)
-{
- struct usb_attach_5v_3a_pd_sink_fixture *test_fixture = data;
-
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
- /* Initialized the sink to request 5V and 3A */
- tcpci_partner_init(&test_fixture->sink_5v_3a, PD_REV20);
- test_fixture->sink_5v_3a.extensions =
- tcpci_snk_emul_init(&test_fixture->snk_ext,
- &test_fixture->sink_5v_3a, NULL);
- test_fixture->snk_ext.pdo[0] = TEST_INITIAL_SINK_CAP;
- test_fixture->snk_ext.pdo[1] = TEST_ADDITIONAL_SINK_CAP;
- connect_sink_to_port(test_fixture);
-}
-
-static void usb_attach_5v_3a_pd_sink_after(void *data)
-{
- disconnect_sink_from_port(
- (struct usb_attach_5v_3a_pd_sink_fixture *)data);
-}
-
-ZTEST_SUITE(usb_attach_5v_3a_pd_sink, drivers_predicate_post_main,
- usb_attach_5v_3a_pd_sink_setup,
- usb_attach_5v_3a_pd_sink_before,
- usb_attach_5v_3a_pd_sink_after, NULL);
-
-ZTEST_F(usb_attach_5v_3a_pd_sink, test_partner_pd_completed)
-{
- zassert_true(this->snk_ext.pd_completed, NULL);
-}
-
-ZTEST(usb_attach_5v_3a_pd_sink, test_battery_is_discharging)
-{
- struct i2c_emul *i2c_emul =
- sbat_emul_get_ptr(DT_DEP_ORD(DT_NODELABEL(battery)));
- uint16_t battery_status;
-
- zassume_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, STATUS_DISCHARGING,
- "Battery is not discharging: %d", battery_status);
-}
-
-ZTEST(usb_attach_5v_3a_pd_sink, test_typec_status)
-{
- struct ec_response_typec_status status = host_cmd_typec_status(0);
-
- zassert_true(status.pd_enabled, "PD is disabled");
- zassert_true(status.dev_connected, "Device disconnected");
- zassert_true(status.sop_connected, "Charger is not SOP capable");
- zassert_equal(status.sink_cap_count, 2,
- "Expected 2 sink PDOs, but got %d",
- status.sink_cap_count);
- zassert_equal(status.power_role, PD_ROLE_SOURCE,
- "Expected power role to be %d, but got %d",
- PD_ROLE_SOURCE, status.power_role);
-}
-
-ZTEST(usb_attach_5v_3a_pd_sink, test_power_info)
-{
- struct ec_response_usb_pd_power_info info = host_cmd_power_info(0);
-
- zassert_equal(info.role, USB_PD_PORT_POWER_SOURCE,
- "Expected role to be %d, but got %d",
- USB_PD_PORT_POWER_SOURCE, info.role);
- zassert_equal(info.type, USB_CHG_TYPE_NONE,
- "Expected type to be %d, but got %d", USB_CHG_TYPE_NONE,
- info.type);
- zassert_equal(info.meas.voltage_max, 0,
- "Expected charge voltage max of 0mV, but got %dmV",
- info.meas.voltage_max);
- zassert_within(
- info.meas.voltage_now, TEST_SRC_PORT_VBUS_MV, 500,
- "Charging voltage expected to be near 5000mV, but was %dmV",
- info.meas.voltage_now);
- zassert_equal(info.meas.current_max, TEST_SRC_PORT_TARGET_MA,
- "Current max expected to be 1500mV, but was %dmV",
- info.meas.current_max);
- zassert_equal(info.meas.current_lim, 0,
- "VBUS max is set to 0mA, but PD is reporting %dmA",
- info.meas.current_lim);
- zassert_equal(info.max_power, 0,
- "Charging expected to be at %duW, but PD max is %duW",
- 0, info.max_power);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_sink, test_disconnect_battery_discharging)
-{
- struct i2c_emul *i2c_emul =
- sbat_emul_get_ptr(DT_DEP_ORD(DT_NODELABEL(battery)));
- uint16_t battery_status;
-
- disconnect_sink_from_port(this);
- zassert_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, STATUS_DISCHARGING,
- "Battery is not discharging: %d", battery_status);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_sink, test_disconnect_charge_state)
-{
- struct ec_response_charge_state charge_state;
-
- disconnect_sink_from_port(this);
- charge_state = host_cmd_charge_state(0);
-
- zassert_false(charge_state.get_state.ac, "AC_OK not triggered");
- zassert_equal(charge_state.get_state.chg_current, 0,
- "Max charge current expected 0mA, but was %dmA",
- charge_state.get_state.chg_current);
- zassert_equal(charge_state.get_state.chg_input_current,
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- "Charge input current limit expected %dmA, but was %dmA",
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- charge_state.get_state.chg_input_current);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_sink, test_disconnect_typec_status)
-{
- struct ec_response_typec_status typec_status;
-
- disconnect_sink_from_port(this);
- typec_status = host_cmd_typec_status(0);
-
- zassert_false(typec_status.pd_enabled, NULL);
- zassert_false(typec_status.dev_connected, NULL);
- zassert_false(typec_status.sop_connected, NULL);
- zassert_equal(typec_status.source_cap_count, 0,
- "Expected 0 source caps, but got %d",
- typec_status.source_cap_count);
- zassert_equal(typec_status.power_role, USB_CHG_TYPE_NONE,
- "Expected power role to be %d, but got %d",
- USB_CHG_TYPE_NONE, typec_status.power_role);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_sink, test_disconnect_power_info)
-{
- struct ec_response_usb_pd_power_info power_info;
-
- disconnect_sink_from_port(this);
- power_info = host_cmd_power_info(0);
-
- zassert_equal(power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Expected power role to be %d, but got %d",
- USB_PD_PORT_POWER_DISCONNECTED, power_info.role);
- zassert_equal(power_info.type, USB_CHG_TYPE_NONE,
- "Expected charger type to be %d, but got %s",
- USB_CHG_TYPE_NONE, power_info.type);
- zassert_equal(power_info.max_power, 0,
- "Expected the maximum power to be 0uW, but got %duW",
- power_info.max_power);
- zassert_equal(power_info.meas.voltage_max, 0,
- "Expected maximum voltage of 0mV, but got %dmV",
- power_info.meas.voltage_max);
- zassert_within(power_info.meas.voltage_now, 5, 5,
- "Expected present voltage near 0mV, but got %dmV",
- power_info.meas.voltage_now);
- zassert_equal(power_info.meas.current_max, 0,
- "Expected maximum current of 0mA, but got %dmA",
- power_info.meas.current_max);
- zassert_true(power_info.meas.current_lim >= 0,
- "Expected the PD current limit to be >= 0, but got %dmA",
- power_info.meas.current_lim);
-}
-
-/**
- * @brief TestPurpose: Verify GotoMin message.
- *
- * @details
- * - TCPM is configured initially as Source
- * - Initiate Goto_Min request
- * - Verify emulated sink PD negotiation is completed
- *
- * Expected Results
- * - Sink completes Goto Min PD negotiation
- */
-ZTEST_F(usb_attach_5v_3a_pd_sink, verify_goto_min)
-{
- pd_dpm_request(0, DPM_REQUEST_GOTO_MIN);
- k_sleep(K_SECONDS(1));
-
- zassert_true(this->snk_ext.pd_completed, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify Ping message.
- *
- * @details
- * - TCPM is configured initially as Source
- * - Initiate Ping request
- * - Verify emulated sink received ping message
- *
- * Expected Results
- * - Sink received ping message
- */
-ZTEST_F(usb_attach_5v_3a_pd_sink, verify_ping_msg)
-{
- tcpci_snk_emul_clear_ping_received(&this->snk_ext);
-
- pd_dpm_request(0, DPM_REQUEST_SEND_PING);
- k_sleep(K_USEC(PD_T_SOURCE_ACTIVITY));
-
- zassert_true(this->snk_ext.ping_received, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify Alert message.
- *
- * @details
- * - Clear alert_received in emulated partner
- * - Broadcast PD Alert
- * - Check pd_broadcast_alert_msg can set the ADO and run pd_dpm_request
- * - Check that emulated partner received a PD_DATA_ALERT message
- *
- * Expected Results
- * - EC_SUCCESS returned from pd_broadcast_alert_msg
- * - sink_5v_3a.data.alert_received is true
- */
-ZTEST_F(usb_attach_5v_3a_pd_sink, verify_alert_msg)
-{
- tcpci_snk_emul_clear_alert_received(&this->snk_ext);
- zassert_false(this->snk_ext.alert_received, NULL);
- zassert_equal(pd_broadcast_alert_msg(ADO_OTP_EVENT), EC_SUCCESS, NULL);
-
- k_sleep(K_SECONDS(2));
- zassert_true(this->snk_ext.alert_received, NULL);
-}
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_source.c b/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_source.c
deleted file mode 100644
index 39745dd70b..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_source.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "battery_smart.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_tcpci_partner_src.h"
-#include "hooks.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "usb_pd.h"
-#include "usb_prl_sm.h"
-
-#define BATTERY_ORD DT_DEP_ORD(DT_NODELABEL(battery))
-
-#define TEST_USB_PORT USBC_PORT_C0
-
-struct usb_attach_5v_3a_pd_source_fixture {
- struct tcpci_partner_data source_5v_3a;
- struct tcpci_src_emul_data src_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
-};
-
-static void *usb_attach_5v_3a_pd_source_setup(void)
-{
- static struct usb_attach_5v_3a_pd_source_fixture test_fixture;
-
- /* Get references for the emulators */
- test_fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- test_fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- /* Configure TCPCI revision in board config and emulator */
- tcpc_config[0].flags |= TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(test_fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Initialized the charger to supply 5V and 3A */
- tcpci_partner_init(&test_fixture.source_5v_3a, PD_REV20);
- test_fixture.source_5v_3a.extensions =
- tcpci_src_emul_init(&test_fixture.src_ext,
- &test_fixture.source_5v_3a, NULL);
- test_fixture.src_ext.pdo[1] =
- PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &test_fixture;
-}
-
-static void usb_attach_5v_3a_pd_source_before(void *data)
-{
- struct usb_attach_5v_3a_pd_source_fixture *fixture = data;
-
- connect_source_to_port(&fixture->source_5v_3a, &fixture->src_ext, 1,
- fixture->tcpci_emul, fixture->charger_emul);
-}
-
-static void usb_attach_5v_3a_pd_source_after(void *data)
-{
- struct usb_attach_5v_3a_pd_source_fixture *fixture = data;
-
- disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul);
-}
-
-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);
-
-ZTEST(usb_attach_5v_3a_pd_source, test_battery_is_charging)
-{
- struct i2c_emul *i2c_emul = sbat_emul_get_ptr(BATTERY_ORD);
- uint16_t battery_status;
-
- zassume_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, 0,
- "Battery is discharging: %d", battery_status);
-}
-
-ZTEST(usb_attach_5v_3a_pd_source, test_charge_state)
-{
- struct ec_response_charge_state state = host_cmd_charge_state(0);
-
- zassert_true(state.get_state.ac, "AC_OK not triggered");
- zassert_true(state.get_state.chg_voltage > 0,
- "Expected a charge voltage, but got %dmV",
- state.get_state.chg_voltage);
- zassert_true(state.get_state.chg_current > 0,
- "Expected a charge current, but got %dmA",
- state.get_state.chg_current);
-}
-
-ZTEST(usb_attach_5v_3a_pd_source, test_typec_status)
-{
- struct ec_response_typec_status status = host_cmd_typec_status(0);
-
- zassert_true(status.pd_enabled, "PD is disabled");
- zassert_true(status.dev_connected, "Device disconnected");
- zassert_true(status.sop_connected, "Charger is not SOP capable");
- zassert_equal(status.source_cap_count, 2,
- "Expected 2 source PDOs, but got %d",
- status.source_cap_count);
- zassert_equal(status.power_role, PD_ROLE_SINK,
- "Expected power role to be %d, but got %d", PD_ROLE_SINK,
- status.power_role);
-}
-
-ZTEST(usb_attach_5v_3a_pd_source, test_power_info)
-{
- struct ec_response_usb_pd_power_info info = host_cmd_power_info(0);
-
- zassert_equal(info.role, USB_PD_PORT_POWER_SINK,
- "Expected role to be %d, but got %d",
- USB_PD_PORT_POWER_SINK, info.role);
- zassert_equal(info.type, USB_CHG_TYPE_PD,
- "Expected type to be %d, but got %d", USB_CHG_TYPE_PD,
- info.type);
- zassert_equal(info.meas.voltage_max, 5000,
- "Expected charge voltage max of 5000mV, but got %dmV",
- info.meas.voltage_max);
- zassert_within(
- info.meas.voltage_now, 5000, 500,
- "Charging voltage expected to be near 5000mV, but was %dmV",
- info.meas.voltage_now);
- zassert_equal(info.meas.current_max, 3000,
- "Current max expected to be 3000mV, but was %dmV",
- info.meas.current_max);
- zassert_true(info.meas.current_lim >= 3000,
- "VBUS max is set to 3000mA, but PD is reporting %dmA",
- info.meas.current_lim);
- zassert_equal(info.max_power, 5000 * 3000,
- "Charging expected to be at %duW, but PD max is %duW",
- 5000 * 3000, info.max_power);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_source, test_disconnect_battery_not_charging)
-{
- struct i2c_emul *i2c_emul = sbat_emul_get_ptr(BATTERY_ORD);
- uint16_t battery_status;
-
- disconnect_source_from_port(this->tcpci_emul, this->charger_emul);
- zassert_ok(sbat_emul_get_word_val(i2c_emul, SB_BATTERY_STATUS,
- &battery_status),
- NULL);
- zassert_equal(battery_status & STATUS_DISCHARGING, STATUS_DISCHARGING,
- "Battery is not discharging: %d", battery_status);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_source, test_disconnect_charge_state)
-{
- struct ec_response_charge_state charge_state;
-
- disconnect_source_from_port(this->tcpci_emul, this->charger_emul);
- charge_state = host_cmd_charge_state(0);
-
- zassert_false(charge_state.get_state.ac, "AC_OK not triggered");
- zassert_equal(charge_state.get_state.chg_current, 0,
- "Max charge current expected 0mA, but was %dmA",
- charge_state.get_state.chg_current);
- zassert_equal(charge_state.get_state.chg_input_current,
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- "Charge input current limit expected %dmA, but was %dmA",
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT,
- charge_state.get_state.chg_input_current);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_source, test_disconnect_typec_status)
-{
- struct ec_response_typec_status typec_status;
-
- disconnect_source_from_port(this->tcpci_emul, this->charger_emul);
- typec_status = host_cmd_typec_status(0);
-
- zassert_false(typec_status.pd_enabled, NULL);
- zassert_false(typec_status.dev_connected, NULL);
- zassert_false(typec_status.sop_connected, NULL);
- zassert_equal(typec_status.source_cap_count, 0,
- "Expected 0 source caps, but got %d",
- typec_status.source_cap_count);
- zassert_equal(typec_status.power_role, USB_CHG_TYPE_NONE,
- "Expected power role to be %d, but got %d",
- USB_CHG_TYPE_NONE, typec_status.power_role);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_source, test_disconnect_power_info)
-{
- struct ec_response_usb_pd_power_info power_info;
-
- disconnect_source_from_port(this->tcpci_emul, this->charger_emul);
- power_info = host_cmd_power_info(0);
-
- zassert_equal(power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Expected power role to be %d, but got %d",
- USB_PD_PORT_POWER_DISCONNECTED, power_info.role);
- zassert_equal(power_info.type, USB_CHG_TYPE_NONE,
- "Expected charger type to be %d, but got %s",
- USB_CHG_TYPE_NONE, power_info.type);
- zassert_equal(power_info.max_power, 0,
- "Expected the maximum power to be 0uW, but got %duW",
- power_info.max_power);
- zassert_equal(power_info.meas.voltage_max, 0,
- "Expected maximum voltage of 0mV, but got %dmV",
- power_info.meas.voltage_max);
- zassert_within(power_info.meas.voltage_now, 5, 5,
- "Expected present voltage near 0mV, but got %dmV",
- power_info.meas.voltage_now);
- zassert_equal(power_info.meas.current_max, 0,
- "Expected maximum current of 0mA, but got %dmA",
- power_info.meas.current_max);
- zassert_true(power_info.meas.current_lim >= 0,
- "Expected the PD current limit to be >= 0, but got %dmA",
- power_info.meas.current_lim);
-}
-
-ZTEST_F(usb_attach_5v_3a_pd_source, verify_dock_with_power_button)
-{
- /* Clear Alert and Status receive checks */
- tcpci_src_emul_clear_alert_received(&this->src_ext);
- tcpci_src_emul_clear_status_received(&this->src_ext);
- zassert_false(this->src_ext.alert_received, NULL);
- zassert_false(this->src_ext.status_received, NULL);
-
- /* Setting up revision for the full Status message */
- prl_set_rev(TEST_USB_PORT, TCPCI_MSG_SOP, PD_REV30);
- k_sleep(K_MSEC(10));
- pd_dpm_request(TEST_USB_PORT, DPM_REQUEST_GET_REVISION);
- k_sleep(K_MSEC(10));
-
- /* Suspend and check partner received Alert and Status messages */
- hook_notify(HOOK_CHIPSET_SUSPEND);
- k_sleep(K_SECONDS(2));
- zassert_true(this->src_ext.alert_received, NULL);
- zassert_true(this->src_ext.status_received, NULL);
- tcpci_src_emul_clear_alert_received(&this->src_ext);
- tcpci_src_emul_clear_status_received(&this->src_ext);
- zassert_false(this->src_ext.alert_received, NULL);
- zassert_false(this->src_ext.status_received, NULL);
-
- /* Shutdown and check partner received Alert and Status messages */
- hook_notify(HOOK_CHIPSET_SHUTDOWN);
- k_sleep(K_SECONDS(2));
- zassert_true(this->src_ext.alert_received, NULL);
- zassert_true(this->src_ext.status_received, NULL);
- tcpci_src_emul_clear_alert_received(&this->src_ext);
- tcpci_src_emul_clear_status_received(&this->src_ext);
- zassert_false(this->src_ext.alert_received, NULL);
- zassert_false(this->src_ext.status_received, NULL);
-
- /* Startup and check partner received Alert and Status messages */
- hook_notify(HOOK_CHIPSET_STARTUP);
- k_sleep(K_SECONDS(2));
- zassert_true(this->src_ext.alert_received, NULL);
- zassert_true(this->src_ext.status_received, NULL);
- tcpci_src_emul_clear_alert_received(&this->src_ext);
- tcpci_src_emul_clear_status_received(&this->src_ext);
- zassert_false(this->src_ext.alert_received, NULL);
- zassert_false(this->src_ext.status_received, NULL);
-
- /* Resume and check partner received Alert and Status messages */
- hook_notify(HOOK_CHIPSET_RESUME);
- k_sleep(K_SECONDS(2));
- zassert_true(this->src_ext.alert_received, NULL);
- zassert_true(this->src_ext.status_received, NULL);
- tcpci_src_emul_clear_alert_received(&this->src_ext);
- tcpci_src_emul_clear_status_received(&this->src_ext);
- zassert_false(this->src_ext.alert_received, NULL);
- zassert_false(this->src_ext.status_received, NULL);
-}
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_alt_mode.c b/zephyr/test/drivers/src/integration/usbc/usb_alt_mode.c
deleted file mode 100644
index fadb595e4b..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_alt_mode.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdint.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "ec_commands.h"
-#include "ec_tasks.h"
-#include "emul/emul_isl923x.h"
-#include "emul/tcpc/emul_ps8xxx.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "host_command.h"
-#include "test/drivers/stubs.h"
-#include "tcpm/tcpci.h"
-#include "test/drivers/utils.h"
-#include "test/drivers/test_state.h"
-
-#define TEST_PORT USBC_PORT_C0
-
-struct usbc_alt_mode_fixture {
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
- struct tcpci_partner_data partner;
- struct tcpci_snk_emul_data snk_ext;
-};
-
-static void connect_partner_to_port(struct usbc_alt_mode_fixture *fixture)
-{
- const struct emul *tcpc_emul = fixture->tcpci_emul;
- struct tcpci_partner_data *partner_emul = &fixture->partner;
-
- /* Set VBUS to vSafe0V initially. */
- isl923x_emul_set_adc_vbus(fixture->charger_emul, 0);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
- tcpci_tcpc_alert(0);
- zassume_ok(tcpci_partner_connect_to_tcpci(partner_emul, tcpc_emul),
- NULL);
-
- /* Wait for PD negotiation and current ramp. */
- k_sleep(K_SECONDS(10));
-}
-
-static void disconnect_partner_from_port(struct usbc_alt_mode_fixture *fixture)
-{
- zassume_ok(tcpci_emul_disconnect_partner(fixture->tcpci_emul), NULL);
- isl923x_emul_set_adc_vbus(fixture->charger_emul, 0);
- k_sleep(K_SECONDS(1));
-}
-
-static void *usbc_alt_mode_setup(void)
-{
- static struct usbc_alt_mode_fixture fixture;
- struct tcpci_partner_data *partner = &fixture.partner;
- struct tcpci_snk_emul_data *snk_ext = &fixture.snk_ext;
-
- tcpci_partner_init(partner, PD_REV20);
- partner->extensions = tcpci_snk_emul_init(snk_ext, partner, NULL);
-
- /* Get references for the emulators */
- fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- /* The configured TCPCI rev must match the emulator's supported rev. */
- tcpc_config[TEST_PORT].flags |= TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
- fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- /* Set up SOP discovery responses for DP adapter. */
- partner->identity_vdm[VDO_INDEX_HDR] =
- VDO(USB_SID_PD, /* structured VDM */ true,
- VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_IDENT);
- partner->identity_vdm[VDO_INDEX_IDH] = VDO_IDH(
- /* USB host */ false, /* USB device */ false, IDH_PTYPE_AMA,
- /* modal operation */ true, USB_VID_GOOGLE);
- partner->identity_vdm[VDO_INDEX_CSTAT] = 0xabcdabcd;
- partner->identity_vdm[VDO_INDEX_PRODUCT] = VDO_PRODUCT(0x1234, 0x5678);
- /* Hardware version 1, firmware version 2 */
- partner->identity_vdm[VDO_INDEX_AMA] = 0x12000000;
- partner->identity_vdos = VDO_INDEX_AMA + 1;
-
- /* Support DisplayPort VID. */
- partner->svids_vdm[VDO_INDEX_HDR] =
- VDO(USB_SID_PD, /* structured VDM */ true,
- VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_SVID);
- partner->svids_vdm[VDO_INDEX_HDR + 1] =
- VDO_SVID(USB_SID_DISPLAYPORT, 0);
- partner->svids_vdos = VDO_INDEX_HDR + 2;
-
- /* Support one mode for DisplayPort VID. Copied from Hoho. */
- partner->modes_vdm[VDO_INDEX_HDR] =
- VDO(USB_SID_DISPLAYPORT, /* structured VDM */ true,
- VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_MODES);
- partner->modes_vdm[VDO_INDEX_HDR + 1] = VDO_MODE_DP(
- 0, MODE_DP_PIN_C, 1, CABLE_PLUG, MODE_DP_V13, MODE_DP_SNK);
- partner->modes_vdos = VDO_INDEX_HDR + 2;
-
- /* Sink 5V 3A. */
- snk_ext->pdo[1] = PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &fixture;
-}
-
-static void usbc_alt_mode_before(void *data)
-{
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
- connect_partner_to_port((struct usbc_alt_mode_fixture *)data);
-}
-
-static void usbc_alt_mode_after(void *data)
-{
- disconnect_partner_from_port((struct usbc_alt_mode_fixture *)data);
-}
-
-ZTEST_F(usbc_alt_mode, verify_discovery)
-{
- uint8_t response_buffer[EC_LPC_HOST_PACKET_SIZE];
- struct ec_response_typec_discovery *discovery =
- (struct ec_response_typec_discovery *)response_buffer;
- host_cmd_typec_discovery(TEST_PORT, TYPEC_PARTNER_SOP,
- response_buffer, sizeof(response_buffer));
-
- /* The host command does not count the VDM header in identity_count. */
- zassert_equal(discovery->identity_count,
- this->partner.identity_vdos - 1,
- "Expected %d identity VDOs, got %d",
- this->partner.identity_vdos - 1,
- discovery->identity_count);
- zassert_mem_equal(discovery->discovery_vdo,
- this->partner.identity_vdm + 1,
- discovery->identity_count *
- sizeof(*discovery->discovery_vdo),
- "Discovered SOP identity ACK did not match");
- zassert_equal(discovery->svid_count, 1, "Expected 1 SVID, got %d",
- discovery->svid_count);
- zassert_equal(discovery->svids[0].svid, USB_SID_DISPLAYPORT,
- "Expected SVID 0x%0000x, got 0x%0000x",
- USB_SID_DISPLAYPORT, discovery->svids[0].svid);
- zassert_equal(discovery->svids[0].mode_count, 1,
- "Expected 1 DP mode, got %d",
- discovery->svids[0].mode_count);
- zassert_equal(discovery->svids[0].mode_vdo[0],
- this->partner.modes_vdm[1],
- "DP mode VDOs did not match");
-}
-
-ZTEST_SUITE(usbc_alt_mode, drivers_predicate_post_main, usbc_alt_mode_setup,
- usbc_alt_mode_before, usbc_alt_mode_after, NULL);
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_attach_src_snk.c b/zephyr/test/drivers/src/integration/usbc/usb_attach_src_snk.c
deleted file mode 100644
index 31d5c329b1..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_attach_src_snk.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "ec_commands.h"
-#include "ec_tasks.h"
-#include "driver/tcpm/ps8xxx_public.h"
-#include "emul/emul_isl923x.h"
-#include "emul/tcpc/emul_ps8xxx.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "emul/tcpc/emul_tcpci_partner_src.h"
-#include "host_command.h"
-#include "test/drivers/stubs.h"
-#include "tcpm/tcpci.h"
-#include "test/usb_pe.h"
-#include "test/drivers/utils.h"
-#include "test/drivers/test_state.h"
-
-#define SNK_PORT USBC_PORT_C0
-#define SRC_PORT USBC_PORT_C1
-
-#define TCPCI_EMUL_LABEL DT_NODELABEL(tcpci_emul)
-#define TCPCI_PS8XXX_EMUL_LABEL DT_NODELABEL(tcpci_ps8xxx_emul)
-
-#define DEFAULT_VBUS_MV 5000
-
-/* Determined by CONFIG_PLATFORM_EC_USB_PD_PULLUP */
-#define DEFAULT_VBUS_SRC_PORT_MA 1500
-
-/* SRC TCPCI Emulator attaches as TYPEC_CC_VOLT_RP_3_0 */
-#define DEFAULT_VBUS_SNK_PORT_MA 3000
-
-#define DEFAULT_SINK_SENT_TO_SOURCE_CAP_COUNT 1
-#define DEFAULT_SOURCE_SENT_TO_SINK_CAP_COUNT 1
-
-struct emul_state {
- /* TODO(b/217737667): Remove driver specific code. */
- const struct emul *tcpci_generic_emul;
- const struct emul *tcpci_ps8xxx_emul;
- const struct emul *charger_isl923x_emul;
- struct tcpci_partner_data my_src;
- struct tcpci_src_emul_data src_ext;
- struct tcpci_partner_data my_snk;
- struct tcpci_snk_emul_data snk_ext;
-};
-
-struct integration_usb_attach_src_then_snk_fixture {
- struct emul_state my_emulator_state;
-};
-
-struct integration_usb_attach_snk_then_src_fixture {
- struct emul_state my_emulator_state;
-};
-
-static void integration_usb_setup(struct emul_state *fixture)
-{
- const struct emul *tcpci_emul =
- emul_get_binding(DT_LABEL(TCPCI_EMUL_LABEL));
- const struct emul *tcpci_emul2 =
- emul_get_binding(DT_LABEL(TCPCI_PS8XXX_EMUL_LABEL));
- const struct emul *charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- /* Setting these are required because compiler believes these values are
- * not compile time constants.
- */
- /*
- * TODO(b/217758708): emuls should be identified at compile-time.
- */
- fixture->tcpci_generic_emul = tcpci_emul;
- fixture->tcpci_ps8xxx_emul = tcpci_emul2;
- fixture->charger_isl923x_emul = charger_emul;
-
- tcpci_partner_init(&fixture->my_snk, PD_REV20);
- fixture->my_snk.extensions =
- tcpci_snk_emul_init(&fixture->snk_ext, &fixture->my_snk, NULL);
-
- tcpci_partner_init(&fixture->my_src, PD_REV20);
- fixture->my_src.extensions =
- tcpci_src_emul_init(&fixture->src_ext, &fixture->my_src, NULL);
-
- /*
- * TODO(b/221288815): TCPCI config flags should be compile-time
- * constants
- * TODO(b/209907615): Verify TCPCI rev1 on non-port partner.
- */
- /* Turn TCPCI rev 2 ON */
- tcpc_config[SNK_PORT].flags |= TCPC_FLAGS_TCPCI_REV2_0;
- tcpc_config[SRC_PORT].flags |= TCPC_FLAGS_TCPCI_REV2_0;
-}
-
-static void *integration_usb_src_snk_setup(void)
-{
- static struct integration_usb_attach_src_then_snk_fixture fixture_state;
-
- integration_usb_setup(&fixture_state.my_emulator_state);
-
- return &fixture_state;
-}
-
-static void *integration_usb_snk_src_setup(void)
-{
- static struct integration_usb_attach_snk_then_src_fixture fixture_state;
-
- integration_usb_setup(&fixture_state.my_emulator_state);
-
- return &fixture_state;
-}
-
-static void attach_src_snk_common_before(struct emul_state *my_emul_state)
-{
- const struct emul *tcpci_emul_src = my_emul_state->tcpci_generic_emul;
- const struct emul *tcpci_emul_snk = my_emul_state->tcpci_ps8xxx_emul;
- const struct emul *charger_emul = my_emul_state->charger_isl923x_emul;
-
- /* Reset vbus to 0mV */
- /* TODO(b/217737667): Remove driver specific code. */
- isl923x_emul_set_adc_vbus(charger_emul, 0);
-
- zassume_ok(tcpc_config[SNK_PORT].drv->init(SNK_PORT), NULL);
- /*
- * Arbitrary FW ver. The emulator should really be setting this
- * during its init.
- */
- tcpci_emul_set_reg(tcpci_emul_snk, PS8XXX_REG_FW_REV, 0x31);
-
- zassume_ok(tcpc_config[SRC_PORT].drv->init(SRC_PORT), NULL);
-
- pd_set_suspend(SNK_PORT, false);
- pd_set_suspend(SRC_PORT, false);
-
- /* Reset to disconnected state. */
- zassume_ok(tcpci_emul_disconnect_partner(tcpci_emul_src), NULL);
- zassume_ok(tcpci_emul_disconnect_partner(tcpci_emul_snk), NULL);
-
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-}
-
-static void attach_src_snk_common_after(struct emul_state *my_emul_state)
-{
- const struct emul *tcpci_generic_emul =
- my_emul_state->tcpci_generic_emul;
- const struct emul *tcpci_ps8xxx_emul = my_emul_state->tcpci_ps8xxx_emul;
- const struct emul *charger_emul = my_emul_state->charger_isl923x_emul;
-
- tcpci_emul_disconnect_partner(tcpci_generic_emul);
- tcpci_emul_disconnect_partner(tcpci_ps8xxx_emul);
-
- /* Give time to actually disconnect */
- k_sleep(K_SECONDS(1));
-
- /* Reset vbus to 0mV */
- /* TODO(b/217737667): Remove driver specific code. */
- isl923x_emul_set_adc_vbus(charger_emul, 0);
-}
-
-static void attach_emulated_snk(struct emul_state *my_emul_state)
-{
- const struct emul *tcpci_emul_snk = my_emul_state->tcpci_ps8xxx_emul;
- struct tcpci_partner_data *my_snk = &my_emul_state->my_snk;
- uint16_t power_reg_val;
-
- /* Attach emulated sink */
- tcpci_emul_set_rev(tcpci_emul_snk, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Turn on VBUS detection */
- /*
- * TODO(b/223901282): integration tests should not be setting vbus
- * detection via registers, also this should be turned on by default.
- */
- tcpci_emul_get_reg(tcpci_emul_snk, TCPC_REG_POWER_STATUS,
- &power_reg_val);
- tcpci_emul_set_reg(tcpci_emul_snk, TCPC_REG_POWER_STATUS,
- power_reg_val | TCPC_REG_POWER_STATUS_VBUS_DET);
-
- /* Necessary for TCPCIv2 vSave0V detection on VBUS to reach attached
- * state
- */
- tcpci_emul_set_reg(tcpci_emul_snk, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
-
- zassume_ok(tcpci_partner_connect_to_tcpci(my_snk, tcpci_emul_snk),
- NULL);
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-}
-
-static void attach_emulated_src(struct emul_state *my_emul_state)
-{
- const struct emul *tcpci_emul_src = my_emul_state->tcpci_generic_emul;
- const struct emul *charger_emul = my_emul_state->charger_isl923x_emul;
- struct tcpci_partner_data *my_src = &my_emul_state->my_src;
- uint16_t power_reg_val;
-
- /* Attach emulated charger. */
- tcpci_emul_set_rev(tcpci_emul_src, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Turn on VBUS detection */
- /*
- * TODO(b/223901282): integration tests should not be setting vbus
- * detection via registers, also this should be turned on by default.
- */
- tcpci_emul_get_reg(tcpci_emul_src, TCPC_REG_POWER_STATUS,
- &power_reg_val);
- tcpci_emul_set_reg(tcpci_emul_src, TCPC_REG_POWER_STATUS,
- power_reg_val | TCPC_REG_POWER_STATUS_VBUS_DET);
-
- /* Necessary for TCPCIv2 vSave0V detection on VBUS to reach attached
- * state
- */
- tcpci_emul_set_reg(tcpci_emul_src, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
-
- zassume_ok(tcpci_partner_connect_to_tcpci(my_src, tcpci_emul_src),
- NULL);
- isl923x_emul_set_adc_vbus(charger_emul, DEFAULT_VBUS_MV);
-}
-
-static void integration_usb_attach_snk_then_src_before(void *state)
-{
- struct integration_usb_attach_src_then_snk_fixture *fixture = state;
- struct emul_state *my_state = &fixture->my_emulator_state;
-
- attach_src_snk_common_before(my_state);
-
- /* 1) Attach SINK */
- attach_emulated_snk(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-
- /* 2) Attach SOURCE */
- attach_emulated_src(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-}
-
-static void integration_usb_attach_src_then_snk_before(void *state)
-{
- struct integration_usb_attach_src_then_snk_fixture *fixture = state;
- struct emul_state *my_state = &fixture->my_emulator_state;
-
- attach_src_snk_common_before(my_state);
-
- /* 1) Attach SOURCE */
- attach_emulated_src(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-
- /* 2) Attach SINK */
- attach_emulated_snk(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-}
-
-static void integration_usb_attach_src_then_snk_after(void *state)
-{
- struct integration_usb_attach_src_then_snk_fixture *fixture = state;
-
- attach_src_snk_common_after(&fixture->my_emulator_state);
-}
-
-static void integration_usb_attach_snk_then_src_after(void *state)
-{
- struct integration_usb_attach_snk_then_src_fixture *fixture = state;
-
- attach_src_snk_common_after(&fixture->my_emulator_state);
-}
-
-ZTEST_F(integration_usb_attach_src_then_snk, verify_snk_port_pd_info)
-{
- struct ec_response_usb_pd_power_info response;
-
- response = host_cmd_power_info(SNK_PORT);
-
- /* Assert */
- zassert_equal(response.role, USB_PD_PORT_POWER_SINK,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_SINK, response.role);
- zassert_equal(response.type, USB_CHG_TYPE_PD,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_PD, response.type);
-
- zassert_equal(response.meas.voltage_max, DEFAULT_VBUS_MV,
- "Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_max);
-
- zassert_within(response.meas.voltage_now, DEFAULT_VBUS_MV,
- DEFAULT_VBUS_MV / 10,
- "Actually charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_now);
-
- zassert_equal(response.meas.current_max, DEFAULT_VBUS_SNK_PORT_MA,
- "Charging at VBUS max %dmA, but PD reports %dmA",
- DEFAULT_VBUS_SNK_PORT_MA, response.meas.current_max);
-
- zassert_true(response.meas.current_lim >= DEFAULT_VBUS_SNK_PORT_MA,
- "Charging at VBUS max %dmA, but PD current limit %dmA",
- DEFAULT_VBUS_SNK_PORT_MA, response.meas.current_lim);
-
- zassert_equal(response.max_power,
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- "Charging up to %duW, PD max power %duW",
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- response.max_power);
-}
-
-ZTEST_F(integration_usb_attach_src_then_snk, verify_src_port_pd_info)
-{
- struct ec_response_usb_pd_power_info response;
-
- response = host_cmd_power_info(SRC_PORT);
-
- /* Assert */
- zassert_equal(response.role, USB_PD_PORT_POWER_SOURCE,
- "Power role %d, but PD reports role %d", PD_ROLE_SOURCE,
- response.role);
-
- zassert_equal(response.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, response.type);
-
- /* TODO(b/209907615): Confirm measure value requirements */
- zassert_within(response.meas.voltage_now, DEFAULT_VBUS_MV,
- DEFAULT_VBUS_MV / 10,
- "Expected Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_now);
-
- zassert_equal(response.meas.current_max, DEFAULT_VBUS_SRC_PORT_MA,
- "Charging at VBUS max %dmA, but PD reports %dmA",
- DEFAULT_VBUS_SRC_PORT_MA, response.meas.current_max);
-
- /* Note: We are the source so we skip checking: */
- /* meas.voltage_max */
- /* max_power */
- /* current limit */
-}
-
-ZTEST_F(integration_usb_attach_snk_then_src, verify_snk_port_pd_info)
-{
- struct ec_response_usb_pd_power_info response;
-
- response = host_cmd_power_info(SNK_PORT);
-
- /* Assert */
- zassert_equal(response.role, USB_PD_PORT_POWER_SINK,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_SINK, response.role);
- zassert_equal(response.type, USB_CHG_TYPE_PD,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_PD, response.type);
-
- /* Verify Default 5V and 3A */
- zassert_equal(response.meas.voltage_max, DEFAULT_VBUS_MV,
- "Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_max);
-
- zassert_within(response.meas.voltage_now, DEFAULT_VBUS_MV,
- DEFAULT_VBUS_MV / 10,
- "Actually charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_now);
-
- zassert_equal(response.meas.current_max, DEFAULT_VBUS_SNK_PORT_MA,
- "Charging at VBUS max %dmA, but PD reports %dmA",
- DEFAULT_VBUS_SNK_PORT_MA, response.meas.current_max);
-
- zassert_true(response.meas.current_lim >= DEFAULT_VBUS_SNK_PORT_MA,
- "Charging at VBUS max %dmA, but PD current limit %dmA",
- DEFAULT_VBUS_SNK_PORT_MA, response.meas.current_lim);
-
- zassert_equal(response.max_power,
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- "Charging up to %duW, PD max power %duW",
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- response.max_power);
-}
-
-ZTEST_F(integration_usb_attach_snk_then_src, verify_src_port_pd_info)
-{
- struct ec_response_usb_pd_power_info response;
-
- response = host_cmd_power_info(SRC_PORT);
-
- /* Assert */
- zassert_equal(response.role, USB_PD_PORT_POWER_SOURCE,
- "Power role %d, but PD reports role %d", PD_ROLE_SOURCE,
- response.role);
-
- zassert_equal(response.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, response.type);
-
- /* Verify Default 5V and 3A */
- /* TODO(b/209907615): Confirm measure value requirements */
- zassert_within(response.meas.voltage_now, DEFAULT_VBUS_MV,
- DEFAULT_VBUS_MV / 10,
- "Expected Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, response.meas.voltage_now);
-
- zassert_equal(response.meas.current_max, DEFAULT_VBUS_SRC_PORT_MA,
- "Charging at VBUS max %dmA, but PD reports %dmA",
- DEFAULT_VBUS_SRC_PORT_MA, response.meas.current_max);
-
- /* Note: We are the source so we skip checking: */
- /* meas.voltage_max */
- /* max_power */
- /* current limit */
-}
-
-ZTEST_F(integration_usb_attach_src_then_snk, verify_snk_port_typec_status)
-{
- struct ec_response_typec_status response =
- host_cmd_typec_status(SNK_PORT);
-
- zassert_true(response.pd_enabled, "Source attached but PD disabled");
-
- zassert_true(response.dev_connected,
- "Source attached but device disconnected");
-
- zassert_true(response.sop_connected,
- "Source attached but not SOP capable");
-
- zassert_equal(response.source_cap_count,
- DEFAULT_SOURCE_SENT_TO_SINK_CAP_COUNT,
- "Source received %d source PDOs",
- response.source_cap_count);
-
- /* The source emulator is being attached to a sink port (our policy
- * engine) so it does not send any sink caps, so sink port received no
- * sink caps.
- */
- zassert_equal(response.sink_cap_count, 0, "Port received %d sink PDOs",
- response.sink_cap_count);
-
- zassert_equal(response.power_role, PD_ROLE_SINK,
- "Source attached, but TCPM power role is %d",
- response.power_role);
-}
-
-ZTEST_F(integration_usb_attach_src_then_snk, verify_src_port_typec_status)
-{
- struct ec_response_typec_status response =
- host_cmd_typec_status(SRC_PORT);
-
- zassert_true(response.pd_enabled, "Sink attached but PD disabled");
-
- zassert_true(response.dev_connected,
- "Sink attached but device disconnected");
-
- zassert_true(response.sop_connected,
- "Sink attached but not SOP capable");
-
- /* The sink emulator is being attached to a source port (our policy
- * engine) so it does not send any sink caps, so source port received no
- * sink caps.
- */
- zassert_equal(response.source_cap_count, 0,
- "Port received %d source PDOs",
- response.source_cap_count);
-
- zassert_equal(response.sink_cap_count,
- DEFAULT_SINK_SENT_TO_SOURCE_CAP_COUNT,
- "Port received %d sink PDOs", response.sink_cap_count);
-
- zassert_equal(response.power_role, PD_ROLE_SOURCE,
- "Sink attached, but TCPM power role is %d",
- response.power_role);
-}
-
-ZTEST_F(integration_usb_attach_snk_then_src, verify_snk_port_typec_status)
-{
- struct ec_response_typec_status response =
- host_cmd_typec_status(SNK_PORT);
-
- zassert_true(response.pd_enabled, "Source attached but PD disabled");
-
- zassert_true(response.dev_connected,
- "Source attached but device disconnected");
-
- zassert_true(response.sop_connected,
- "Source attached but not SOP capable");
-
- zassert_equal(response.source_cap_count,
- DEFAULT_SOURCE_SENT_TO_SINK_CAP_COUNT,
- "Source received %d source PDOs",
- response.source_cap_count);
-
- /* The source emulator is being attached to a sink port (our policy
- * engine) so it does not send any sink caps, so sink port received no
- * sink caps.
- */
- zassert_equal(response.sink_cap_count, 0, "Port received %d sink PDOs",
- response.sink_cap_count);
-
- zassert_equal(response.power_role, PD_ROLE_SINK,
- "Source attached, but TCPM power role is %d",
- response.power_role);
-}
-
-ZTEST_F(integration_usb_attach_snk_then_src, verify_src_port_typec_status)
-{
- struct ec_response_typec_status response =
- host_cmd_typec_status(SRC_PORT);
-
- zassert_true(response.pd_enabled, "Sink attached but PD disabled");
-
- zassert_true(response.dev_connected,
- "Sink attached but device disconnected");
-
- zassert_true(response.sop_connected,
- "Sink attached but not SOP capable");
-
- /* The sink emulator is being attached to a source port (our policy
- * engine) so it does not send any sink caps, so source port received no
- * sink caps.
- */
- zassert_equal(response.source_cap_count, 0,
- "Port received %d source PDOs",
- response.source_cap_count);
-
- zassert_equal(response.sink_cap_count,
- DEFAULT_SINK_SENT_TO_SOURCE_CAP_COUNT,
- "Port received %d sink PDOs", response.sink_cap_count);
-
- zassert_equal(response.power_role, PD_ROLE_SOURCE,
- "Sink attached, but TCPM power role is %d",
- response.power_role);
-}
-
-ZTEST_SUITE(integration_usb_attach_src_then_snk, drivers_predicate_post_main,
- integration_usb_src_snk_setup,
- integration_usb_attach_src_then_snk_before,
- integration_usb_attach_src_then_snk_after, NULL);
-
-ZTEST_SUITE(integration_usb_attach_snk_then_src, drivers_predicate_post_main,
- integration_usb_snk_src_setup,
- integration_usb_attach_snk_then_src_before,
- integration_usb_attach_snk_then_src_after, NULL);
-
-struct usb_detach_test_fixture {
- struct emul_state fixture;
-};
-
-static void integration_usb_test_detach(const struct emul *e)
-{
- zassume_ok(tcpci_emul_disconnect_partner(e), NULL);
-}
-
-static void integration_usb_test_sink_detach(struct emul_state *fixture)
-{
- integration_usb_test_detach(fixture->tcpci_ps8xxx_emul);
-}
-
-static void integration_usb_test_source_detach(struct emul_state *fixture)
-{
- integration_usb_test_detach(fixture->tcpci_generic_emul);
-}
-
-void *usb_detach_test_setup(void)
-{
- static struct usb_detach_test_fixture usb_detach_fixture = { 0 };
-
- integration_usb_setup(&usb_detach_fixture.fixture);
-
- return &usb_detach_fixture;
-}
-
-static void usb_detach_test_before(void *state)
-{
- struct usb_detach_test_fixture *fixture = state;
- struct emul_state *my_state = &fixture->fixture;
-
- attach_src_snk_common_before(my_state);
-
- /* 1) Attach SINK */
- attach_emulated_snk(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-
- /* 2) Attach SOURCE */
- attach_emulated_src(my_state);
-
- /* Wait for PD negotiation */
- k_sleep(K_SECONDS(10));
-}
-
-static void usb_detach_test_after(void *state)
-{
- struct usb_detach_test_fixture *fixture = state;
-
- attach_src_snk_common_after(&fixture->fixture);
-}
-
-ZTEST_F(usb_detach_test, verify_detach_src_snk)
-{
- struct emul_state *fixture = &this->fixture;
- struct ec_response_usb_pd_power_info src_power_info = { 0 };
- struct ec_response_usb_pd_power_info snk_power_info = { 0 };
-
- integration_usb_test_source_detach(fixture);
- integration_usb_test_sink_detach(fixture);
-
- k_sleep(K_SECONDS(10));
- isl923x_emul_set_adc_vbus(fixture->charger_isl923x_emul, 0);
-
- snk_power_info = host_cmd_power_info(SNK_PORT);
- src_power_info = host_cmd_power_info(SRC_PORT);
-
- /* Validate Sink power info */
- zassert_equal(snk_power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_DISCONNECTED, snk_power_info.role);
- zassert_equal(snk_power_info.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, snk_power_info.type);
-
- zassert_equal(snk_power_info.meas.voltage_max, 0,
- "Charging at VBUS %dmV, but PD reports %dmV", 0,
- snk_power_info.meas.voltage_max);
-
- zassert_within(snk_power_info.meas.voltage_now, 0, 10,
- "Actually charging at VBUS %dmV, but PD reports %dmV", 0,
- snk_power_info.meas.voltage_now);
-
- zassert_equal(snk_power_info.meas.current_max, 0,
- "Charging at VBUS max %dmA, but PD reports %dmA", 0,
- snk_power_info.meas.current_max);
-
- zassert_true(snk_power_info.meas.current_lim >= 0,
- "Charging at VBUS max %dmA, but PD current limit %dmA", 0,
- snk_power_info.meas.current_lim);
-
- zassert_equal(snk_power_info.max_power, 0,
- "Charging up to %duW, PD max power %duW", 0,
- snk_power_info.max_power);
-
- /* Validate Source power info */
- zassert_equal(src_power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_DISCONNECTED, src_power_info.role);
-
- zassert_equal(src_power_info.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, src_power_info.type);
-
- /* TODO(b/209907615): Confirm measure value requirements */
- zassert_within(src_power_info.meas.voltage_now, 0, 10,
- "Expected Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, src_power_info.meas.voltage_now);
-
- zassert_equal(src_power_info.meas.current_max, 0,
- "Charging at VBUS max %dmA, but PD reports %dmA", 0,
- src_power_info.meas.current_max);
-}
-
-ZTEST_F(usb_detach_test, verify_detach_snk_src)
-{
- struct emul_state *fixture = &this->fixture;
- struct ec_response_usb_pd_power_info src_power_info = { 0 };
- struct ec_response_usb_pd_power_info snk_power_info = { 0 };
-
- integration_usb_test_sink_detach(fixture);
- integration_usb_test_source_detach(fixture);
-
- k_sleep(K_SECONDS(10));
- isl923x_emul_set_adc_vbus(fixture->charger_isl923x_emul, 0);
-
- snk_power_info = host_cmd_power_info(SNK_PORT);
- src_power_info = host_cmd_power_info(SRC_PORT);
-
- /* Validate Sink power info */
- zassert_equal(snk_power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_DISCONNECTED, snk_power_info.role);
- zassert_equal(snk_power_info.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, snk_power_info.type);
-
- zassert_equal(snk_power_info.meas.voltage_max, 0,
- "Charging at VBUS %dmV, but PD reports %dmV", 0,
- snk_power_info.meas.voltage_max);
-
- zassert_within(snk_power_info.meas.voltage_now, 0, 10,
- "Actually charging at VBUS %dmV, but PD reports %dmV", 0,
- snk_power_info.meas.voltage_now);
-
- zassert_equal(snk_power_info.meas.current_max, 0,
- "Charging at VBUS max %dmA, but PD reports %dmA", 0,
- snk_power_info.meas.current_max);
-
- zassert_true(snk_power_info.meas.current_lim >= 0,
- "Charging at VBUS max %dmA, but PD current limit %dmA", 0,
- snk_power_info.meas.current_lim);
-
- zassert_equal(snk_power_info.max_power, 0,
- "Charging up to %duW, PD max power %duW", 0,
- snk_power_info.max_power);
-
- /* Validate Source power info */
- zassert_equal(src_power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_DISCONNECTED, src_power_info.role);
-
- zassert_equal(src_power_info.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, src_power_info.type);
-
- /* TODO(b/209907615): Confirm measure value requirements */
- zassert_within(src_power_info.meas.voltage_now, 0, 10,
- "Expected Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, src_power_info.meas.voltage_now);
-
- zassert_equal(src_power_info.meas.current_max, 0,
- "Charging at VBUS max %dmA, but PD reports %dmA", 0,
- src_power_info.meas.current_max);
-}
-
-ZTEST_F(usb_detach_test, verify_detach_sink)
-{
- struct emul_state *fixture = &this->fixture;
- struct ec_response_usb_pd_power_info pd_power_info = { 0 };
-
- integration_usb_test_sink_detach(fixture);
- k_sleep(K_SECONDS(10));
- isl923x_emul_set_adc_vbus(fixture->charger_isl923x_emul, 0);
-
- pd_power_info = host_cmd_power_info(SNK_PORT);
-
- /* Assert */
- zassert_equal(pd_power_info.role, USB_PD_PORT_POWER_SINK,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_SINK, pd_power_info.role);
- zassert_equal(pd_power_info.type, USB_CHG_TYPE_PD,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_PD, pd_power_info.type);
-
- zassert_equal(pd_power_info.meas.voltage_max, DEFAULT_VBUS_MV,
- "Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, pd_power_info.meas.voltage_max);
-
- zassert_within(pd_power_info.meas.voltage_now, 0, 10,
- "Actually charging at VBUS %dmV, but PD reports %dmV", 0,
- pd_power_info.meas.voltage_now);
-
- zassert_equal(pd_power_info.meas.current_max, DEFAULT_VBUS_SNK_PORT_MA,
- "Charging at VBUS max %dmA, but PD reports %dmA",
- DEFAULT_VBUS_SNK_PORT_MA, pd_power_info.meas.current_max);
-
- zassert_true(pd_power_info.meas.current_lim >= 500,
- "Charging at VBUS max %dmA, but PD current limit %dmA",
- 500, pd_power_info.meas.current_lim);
-
- zassert_equal(pd_power_info.max_power,
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- "Charging up to %duW, PD max power %duW",
- DEFAULT_VBUS_MV * DEFAULT_VBUS_SNK_PORT_MA,
- pd_power_info.max_power);
-}
-
-ZTEST_F(usb_detach_test, verify_detach_source)
-{
- struct emul_state *fixture = &this->fixture;
- struct ec_response_usb_pd_power_info pd_power_info = { SNK_PORT };
-
- integration_usb_test_source_detach(fixture);
- k_sleep(K_SECONDS(10));
- isl923x_emul_set_adc_vbus(fixture->charger_isl923x_emul, 0);
-
- pd_power_info = host_cmd_power_info(SNK_PORT);
-
- /* Assert */
- zassert_equal(pd_power_info.role, USB_PD_PORT_POWER_DISCONNECTED,
- "Power role %d, but PD reports role %d",
- USB_PD_PORT_POWER_DISCONNECTED, pd_power_info.role);
-
- zassert_equal(pd_power_info.type, USB_CHG_TYPE_NONE,
- "Charger type %d, but PD reports type %d",
- USB_CHG_TYPE_NONE, pd_power_info.type);
-
- /* TODO(b/209907615): Confirm measure value requirements */
- zassert_within(pd_power_info.meas.voltage_now, 0, 10,
- "Expected Charging at VBUS %dmV, but PD reports %dmV",
- DEFAULT_VBUS_MV, pd_power_info.meas.voltage_now);
-
- zassert_equal(pd_power_info.meas.current_max, 0,
- "Charging at VBUS max %dmA, but PD reports %dmA", 0,
- pd_power_info.meas.current_max);
-}
-
-ZTEST_SUITE(usb_detach_test, drivers_predicate_post_main,
- integration_usb_src_snk_setup, usb_detach_test_before,
- usb_detach_test_after, NULL);
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_malfunction_sink.c b/zephyr/test/drivers/src/integration/usbc/usb_malfunction_sink.c
deleted file mode 100644
index c3788791e2..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_malfunction_sink.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdint.h>
-#include <zephyr/sys/byteorder.h>
-#include <ztest.h>
-
-#include "battery_smart.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_tcpci_partner_faulty_snk.h"
-#include "emul/tcpc/emul_tcpci_partner_snk.h"
-#include "tcpm/tcpci.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "usb_pd.h"
-
-struct usb_malfunction_sink_fixture {
- struct tcpci_partner_data sink;
- struct tcpci_faulty_snk_emul_data faulty_snk_ext;
- struct tcpci_snk_emul_data snk_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
- struct tcpci_faulty_snk_action actions[2];
-};
-
-static void
-connect_sink_to_port(struct usb_malfunction_sink_fixture *fixture)
-{
- /*
- * TODO(b/221439302) Updating the TCPCI emulator registers, updating the
- * vbus, as well as alerting should all be a part of the connect
- * function.
- */
- isl923x_emul_set_adc_vbus(fixture->charger_emul, 0);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
- tcpci_emul_set_reg(fixture->tcpci_emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
- tcpci_tcpc_alert(0);
- /*
- * TODO(b/226567798) Wait for TCPC init and DRPToggle. It is required,
- * because tcpci_emul_reset_rule_before reset registers including
- * Looking4Connection bit in CC_STATUS register.
- */
- k_sleep(K_SECONDS(1));
- zassume_ok(tcpci_partner_connect_to_tcpci(&fixture->sink,
- fixture->tcpci_emul),
- NULL);
-
- /* Wait for PD negotiation and current ramp.
- * TODO(b/213906889): Check message timing and contents.
- */
- k_sleep(K_SECONDS(10));
-}
-
-static inline void disconnect_sink_from_port(
- struct usb_malfunction_sink_fixture *fixture)
-{
- zassume_ok(tcpci_emul_disconnect_partner(fixture->tcpci_emul), NULL);
- k_sleep(K_SECONDS(1));
-}
-
-static void *usb_malfunction_sink_setup(void)
-{
- static struct usb_malfunction_sink_fixture test_fixture;
-
- /* Get references for the emulators */
- test_fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- test_fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
- tcpci_emul_set_rev(test_fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
- tcpc_config[0].flags = tcpc_config[0].flags |
- TCPC_FLAGS_TCPCI_REV2_0;
-
- /* Initialized the sink to request 5V and 3A */
- tcpci_partner_init(&test_fixture.sink, PD_REV20);
- test_fixture.sink.extensions =
- tcpci_faulty_snk_emul_init(
- &test_fixture.faulty_snk_ext, &test_fixture.sink,
- tcpci_snk_emul_init(&test_fixture.snk_ext,
- &test_fixture.sink, NULL));
- test_fixture.snk_ext.pdo[1] =
- PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
-
- return &test_fixture;
-}
-
-static void usb_malfunction_sink_before(void *data)
-{
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
-}
-
-static void usb_malfunction_sink_after(void *data)
-{
- struct usb_malfunction_sink_fixture *fixture = data;
-
- tcpci_faulty_snk_emul_clear_actions_list(&fixture->faulty_snk_ext);
- disconnect_sink_from_port(fixture);
- tcpci_partner_common_clear_logged_msgs(&fixture->sink);
-}
-
-ZTEST_SUITE(usb_malfunction_sink, drivers_predicate_post_main,
- usb_malfunction_sink_setup,
- usb_malfunction_sink_before,
- usb_malfunction_sink_after, NULL);
-
-ZTEST_F(usb_malfunction_sink, test_fail_source_cap_and_pd_disable)
-{
- struct ec_response_typec_status typec_status;
-
- /*
- * Fail on SourceCapabilities message to make TCPM change PD port state
- * to disabled
- */
- this->actions[0].action_mask = TCPCI_FAULTY_SNK_FAIL_SRC_CAP;
- this->actions[0].count = TCPCI_FAULTY_SNK_INFINITE_ACTION;
- tcpci_faulty_snk_emul_append_action(&this->faulty_snk_ext,
- &this->actions[0]);
-
- connect_sink_to_port(this);
-
- typec_status = host_cmd_typec_status(0);
-
- /* Device is connected, but PD wasn't able to establish contract */
- zassert_true(typec_status.pd_enabled, NULL);
- zassert_true(typec_status.dev_connected, NULL);
- zassert_false(typec_status.sop_connected, NULL);
-}
-
-ZTEST_F(usb_malfunction_sink, test_fail_source_cap_and_pd_connect)
-{
- struct ec_response_usb_pd_power_info info;
- struct ec_response_typec_status typec_status;
-
- /*
- * Fail only few times on SourceCapabilities message to prevent entering
- * PE_SRC_Disabled state by TCPM
- */
- this->actions[0].action_mask = TCPCI_FAULTY_SNK_FAIL_SRC_CAP;
- this->actions[0].count = 3;
- tcpci_faulty_snk_emul_append_action(&this->faulty_snk_ext,
- &this->actions[0]);
-
- connect_sink_to_port(this);
-
- typec_status = host_cmd_typec_status(0);
-
- zassert_true(typec_status.pd_enabled, NULL);
- zassert_true(typec_status.dev_connected, NULL);
- zassert_true(typec_status.sop_connected, NULL);
-
- info = host_cmd_power_info(0);
-
- zassert_equal(info.role, USB_PD_PORT_POWER_SOURCE,
- "Expected role to be %d, but got %d",
- USB_PD_PORT_POWER_SOURCE, info.role);
- zassert_equal(info.type, USB_CHG_TYPE_NONE,
- "Expected type to be %d, but got %d", USB_CHG_TYPE_NONE,
- info.type);
- zassert_equal(info.meas.voltage_max, 0,
- "Expected charge voltage max of 0mV, but got %dmV",
- info.meas.voltage_max);
- zassert_within(
- info.meas.voltage_now, 5000, 500,
- "Charging voltage expected to be near 5000mV, but was %dmV",
- info.meas.voltage_now);
- zassert_equal(info.meas.current_max, 1500,
- "Current max expected to be 1500mV, but was %dmV",
- info.meas.current_max);
- zassert_equal(info.meas.current_lim, 0,
- "VBUS max is set to 0mA, but PD is reporting %dmA",
- info.meas.current_lim);
- zassert_equal(info.max_power, 0,
- "Charging expected to be at %duW, but PD max is %duW",
- 0, info.max_power);
-}
-
-ZTEST_F(usb_malfunction_sink, test_ignore_source_cap)
-{
- struct tcpci_partner_log_msg *msg;
- uint16_t header;
- bool expect_hard_reset = false;
- int msg_cnt = 0;
-
- this->actions[0].action_mask = TCPCI_FAULTY_SNK_IGNORE_SRC_CAP;
- this->actions[0].count = TCPCI_FAULTY_SNK_INFINITE_ACTION;
- tcpci_faulty_snk_emul_append_action(&this->faulty_snk_ext,
- &this->actions[0]);
-
- tcpci_partner_common_enable_pd_logging(&this->sink, true);
- connect_sink_to_port(this);
- tcpci_partner_common_enable_pd_logging(&this->sink, false);
-
- /*
- * If test is failing, printing logged message may be useful to diagnose
- * problem:
- * tcpci_partner_common_print_logged_msgs(&this->sink);
- */
-
- /* Check if SourceCapability message alternate with HardReset */
- SYS_SLIST_FOR_EACH_CONTAINER(&this->sink.msg_log, msg, node) {
- if (expect_hard_reset) {
- zassert_equal(msg->sop, TCPCI_MSG_TX_HARD_RESET,
- "Expected message %d to be hard reset",
- msg_cnt);
- } else {
- header = sys_get_le16(msg->buf);
- zassert_equal(msg->sop, TCPCI_MSG_SOP,
- "Expected message %d to be SOP message, not 0x%x",
- msg_cnt, msg->sop);
- zassert_not_equal(PD_HEADER_CNT(header), 0,
- "Expected message %d to has at least one data object",
- msg_cnt);
- zassert_equal(PD_HEADER_TYPE(header),
- PD_DATA_SOURCE_CAP,
- "Expected message %d to be SourceCapabilities, not 0x%x",
- msg_cnt, PD_HEADER_TYPE(header));
- }
-
- msg_cnt++;
- expect_hard_reset = !expect_hard_reset;
- }
-}
-
-ZTEST_F(usb_malfunction_sink, test_ignore_source_cap_and_pd_disable)
-{
- struct ec_response_typec_status typec_status;
-
- /*
- * Ignore first SourceCapabilities message and discard others by sending
- * different messages. This will lead to PD disable.
- */
- this->actions[0].action_mask = TCPCI_FAULTY_SNK_IGNORE_SRC_CAP;
- this->actions[0].count = 1;
- tcpci_faulty_snk_emul_append_action(&this->faulty_snk_ext,
- &this->actions[0]);
- this->actions[1].action_mask = TCPCI_FAULTY_SNK_DISCARD_SRC_CAP;
- this->actions[1].count = TCPCI_FAULTY_SNK_INFINITE_ACTION;
- tcpci_faulty_snk_emul_append_action(&this->faulty_snk_ext,
- &this->actions[1]);
-
- connect_sink_to_port(this);
-
- typec_status = host_cmd_typec_status(0);
-
- /* Device is connected, but PD wasn't able to establish contract */
- zassert_true(typec_status.pd_enabled, NULL);
- zassert_true(typec_status.dev_connected, NULL);
- zassert_false(typec_status.sop_connected, NULL);
-}
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c b/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c
deleted file mode 100644
index dd4c805590..0000000000
--- a/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdint.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "emul/emul_isl923x.h"
-#include "emul/tcpc/emul_tcpci_partner_drp.h"
-#include "tcpm/tcpci.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "test/usb_pe.h"
-#include "usb_pd.h"
-
-#define TEST_USB_PORT USBC_PORT_C0
-
-#define TCPCI_EMUL_LABEL DT_NODELABEL(tcpci_emul)
-
-#define TEST_ADDED_PDO PDO_FIXED(10000, 3000, PDO_FIXED_UNCONSTRAINED)
-
-struct usb_pd_ctrl_msg_test_fixture {
- struct tcpci_partner_data partner_emul;
- struct tcpci_snk_emul_data snk_ext;
- struct tcpci_src_emul_data src_ext;
- struct tcpci_drp_emul_data drp_ext;
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
- enum pd_power_role drp_partner_pd_role;
-};
-
-struct usb_pd_ctrl_msg_test_sink_fixture {
- struct usb_pd_ctrl_msg_test_fixture fixture;
-};
-
-struct usb_pd_ctrl_msg_test_source_fixture {
- struct usb_pd_ctrl_msg_test_fixture fixture;
-};
-
-static void tcpci_drp_emul_connect_partner(
- struct tcpci_partner_data *partner_emul,
- const struct emul *tcpci_emul,
- const struct emul *charger_emul)
-{
- /*
- * TODO(b/221439302) Updating the TCPCI emulator registers, updating the
- * vbus, as well as alerting should all be a part of the connect
- * function.
- */
- isl923x_emul_set_adc_vbus(charger_emul, 0);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
-
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
-
- tcpci_tcpc_alert(TEST_USB_PORT);
-
- zassume_ok(tcpci_partner_connect_to_tcpci(partner_emul, tcpci_emul),
- NULL);
-}
-
-static void disconnect_partner(struct usb_pd_ctrl_msg_test_fixture *fixture)
-{
- zassume_ok(tcpci_emul_disconnect_partner(fixture->tcpci_emul), NULL);
- k_sleep(K_SECONDS(1));
-}
-
-static void *usb_pd_ctrl_msg_setup_emul(void)
-{
- static struct usb_pd_ctrl_msg_test_fixture fixture;
-
- /* Get references for the emulators */
- fixture.tcpci_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(tcpci_emul)));
- fixture.charger_emul =
- emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)));
-
- tcpci_emul_set_rev(fixture.tcpci_emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- return &fixture;
-}
-
-static void *usb_pd_ctrl_msg_sink_setup(void)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture =
- usb_pd_ctrl_msg_setup_emul();
-
- fixture->drp_partner_pd_role = PD_ROLE_SINK;
-
- return fixture;
-}
-
-static void *usb_pd_ctrl_msg_source_setup(void)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture =
- usb_pd_ctrl_msg_setup_emul();
-
- fixture->drp_partner_pd_role = PD_ROLE_SOURCE;
-
- return fixture;
-}
-
-static void usb_pd_ctrl_msg_before(void *data)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = data;
-
- set_test_runner_tid();
-
- test_set_chipset_to_g3();
- k_sleep(K_SECONDS(1));
-
- /* Set chipset to ON, this will set TCPM to DRP */
- test_set_chipset_to_s0();
-
- /* TODO(b/214401892): Check why need to give time TCPM to spin */
- k_sleep(K_SECONDS(1));
-
- /* Initialized DRP */
- tcpci_partner_init(&fixture->partner_emul, PD_REV20);
- fixture->partner_emul.extensions =
- tcpci_drp_emul_init(&fixture->drp_ext, &fixture->partner_emul,
- fixture->drp_partner_pd_role,
- tcpci_src_emul_init(&fixture->src_ext,
- &fixture->partner_emul,
- NULL),
- tcpci_snk_emul_init(&fixture->snk_ext,
- &fixture->partner_emul,
- NULL));
- /* Add additional Sink PDO to partner to verify
- * PE_DR_SNK_Get_Sink_Cap/PE_SRC_Get_Sink_Cap (these are shared PE
- * states) state was reached
- */
- fixture->snk_ext.pdo[1] = TEST_ADDED_PDO;
-
- /* Turn TCPCI rev 2 ON */
- tcpc_config[TEST_USB_PORT].flags |= TCPC_FLAGS_TCPCI_REV2_0;
-
- tcpci_drp_emul_connect_partner(&fixture->partner_emul,
- fixture->tcpci_emul,
- fixture->charger_emul);
-
- k_sleep(K_SECONDS(10));
-}
-
-static void usb_pd_ctrl_msg_after(void *data)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = data;
-
- disconnect_partner(fixture);
-}
-
-/** ZTEST_SUITE to setup DRP partner_emul as SINK */
-ZTEST_SUITE(usb_pd_ctrl_msg_test_sink, drivers_predicate_post_main,
- usb_pd_ctrl_msg_sink_setup, usb_pd_ctrl_msg_before,
- usb_pd_ctrl_msg_after, NULL);
-
-/** ZTEST_SUITE to setup DRP partner_emul as SOURCE */
-ZTEST_SUITE(usb_pd_ctrl_msg_test_source, drivers_predicate_post_main,
- usb_pd_ctrl_msg_source_setup, usb_pd_ctrl_msg_before,
- usb_pd_ctrl_msg_after, NULL);
-
-ZTEST_F(usb_pd_ctrl_msg_test_sink, verify_vconn_swap)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = &this->fixture;
- struct ec_response_typec_status snk_resp = { 0 };
- int rv = 0;
-
- snk_resp = host_cmd_typec_status(TEST_USB_PORT);
-
- zassert_equal(PD_ROLE_VCONN_SRC, snk_resp.vconn_role,
- "SNK Returned vconn_role=%u", snk_resp.vconn_role);
-
- /* Send VCONN_SWAP request */
- rv = tcpci_partner_send_control_msg(&fixture->partner_emul,
- PD_CTRL_VCONN_SWAP, 0);
- zassert_ok(rv, "Failed to send VCONN_SWAP request, rv=%d", rv);
-
- k_sleep(K_SECONDS(1));
-
- snk_resp = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_VCONN_OFF, snk_resp.vconn_role,
- "SNK Returned vconn_role=%u", snk_resp.vconn_role);
-}
-
-ZTEST_F(usb_pd_ctrl_msg_test_sink, verify_pr_swap)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = &this->fixture;
- struct ec_response_typec_status snk_resp = { 0 };
- int rv = 0;
-
- snk_resp = host_cmd_typec_status(TEST_USB_PORT);
-
- zassert_equal(PD_ROLE_SINK, snk_resp.power_role,
- "SNK Returned power_role=%u", snk_resp.power_role);
-
- /* Ignore ACCEPT in common handler for PR Swap request,
- * causes soft reset
- */
- tcpci_partner_common_handler_mask_msg(&fixture->partner_emul,
- PD_CTRL_ACCEPT, true);
-
- /* Send PR_SWAP request */
- rv = tcpci_partner_send_control_msg(&fixture->partner_emul,
- PD_CTRL_PR_SWAP, 0);
- zassert_ok(rv, "Failed to send PR_SWAP request, rv=%d", rv);
-
- /* Send PS_RDY request */
- rv = tcpci_partner_send_control_msg(&fixture->partner_emul,
- PD_CTRL_PS_RDY, 15);
- zassert_ok(rv, "Failed to send PS_RDY request, rv=%d", rv);
-
- k_sleep(K_MSEC(20));
-
- snk_resp = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_SOURCE, snk_resp.power_role,
- "SNK Returned power_role=%u", snk_resp.power_role);
-}
-
-/**
- * @brief TestPurpose: Verify DR Swap when DRP partner is configured as sink.
- *
- * @details
- * - TCPM is brought up as Sink/UFP
- * - TCPM over time will evaluate and trigger DR Swap to Sink/DFP
- *
- * Expected Results
- * - TypeC status query returns PD_ROLE_DFP
- */
-ZTEST_F(usb_pd_ctrl_msg_test_sink, verify_dr_swap)
-{
- struct ec_response_typec_status typec_status =
- host_cmd_typec_status(TEST_USB_PORT);
-
- zassert_equal(PD_ROLE_DFP, typec_status.data_role,
- "Returned data_role=%u", typec_status.data_role);
-}
-
-/**
- * @brief TestPurpose: Verify DR Swap is rejected when DRP partner is
- * configured as source.
- *
- * @details
- * - TCPM is configured initially as Sink/UFP.
- * - TCPM initiates DR swap according to policy (Sink/DFP)
- * - Partner requests DR Swap.
- * - Verify Request is rejected due the TCPM not being UFP.
- *
- * Expected Results
- * - Data role does not change on TEST_USB_PORT after DR Swap request.
- */
-ZTEST_F(usb_pd_ctrl_msg_test_source, verify_dr_swap_rejected)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = &this->fixture;
- struct ec_response_typec_status typec_status = { 0 };
- int rv = 0;
-
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_DFP, typec_status.data_role,
- "Returned data_role=%u", typec_status.data_role);
-
- /* Send DR_SWAP request */
- rv = tcpci_partner_send_control_msg(&fixture->partner_emul,
- PD_CTRL_DR_SWAP, 0);
- zassert_ok(rv, "Failed to send DR_SWAP request, rv=%d", rv);
-
- k_sleep(K_MSEC(20));
-
- /* Verify DR_Swap request is REJECTED */
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_DFP, typec_status.data_role,
- "Returned data_role=%u", typec_status.data_role);
-}
-
-/**
- * @brief TestPurpose: Verify DR Swap via DPM request when DRP is configured
- * as source
- *
- * @details
- * - TCPM is configured initially as Sink/UFP.
- * - TCPM initiates DR swap according to policy (Sink/DFP)
- * - Test case initiates DPM DR Swap.
- * - Verify DR Swap Request is processed.
- *
- * Expected Results
- * - Data role changes after DPM DR Swap request
- */
-ZTEST_F(usb_pd_ctrl_msg_test_source, verify_dpm_dr_swap)
-{
- struct ec_response_typec_status typec_status = { 0 };
-
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_DFP, typec_status.data_role,
- "Returned data_role=%u", typec_status.data_role);
-
- pd_dpm_request(TEST_USB_PORT, DPM_REQUEST_DR_SWAP);
- k_sleep(K_SECONDS(1));
-
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
- zassert_equal(PD_ROLE_UFP, typec_status.data_role,
- "Returned data_role=%u", typec_status.data_role);
-}
-
-/**
- * @brief TestPurpose: Verify TCPM initiates Get_Sink_Cap message during a typec
- * status host command and receives sink_capabilities message.
- *
- * @details
- * - TCPM is configured initially as Sink
- * - TypeC Status Host Command is Invoked
- *
- * Expected Results
- * - TypeC Status Host Command reveals sink capabilility PDOs.
- */
-ZTEST(usb_pd_ctrl_msg_test_source, verify_dpm_get_sink_cap)
-{
- struct ec_response_typec_status typec_status = { 0 };
-
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
-
- zassert_true(typec_status.sink_cap_count > 1, NULL);
- zassert_equal(typec_status.sink_cap_pdos[1], TEST_ADDED_PDO, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify TCPM initiates Get_Sink_Cap message during a typec
- * status host command and receives sink_capabilities message.
- *
- * @details
- * - TCPM is configured initially as Source
- * - TypeC Status Host Command is Invoked
- *
- * Expected Results
- * - TypeC Status Host Command reveals sink capabilility PDOs.
- */
-ZTEST(usb_pd_ctrl_msg_test_sink, verify_get_sink_cap)
-{
- struct ec_response_typec_status typec_status = { 0 };
-
- typec_status = host_cmd_typec_status(TEST_USB_PORT);
-
- zassert_true(typec_status.sink_cap_count > 1, NULL);
- zassert_equal(typec_status.sink_cap_pdos[1], TEST_ADDED_PDO, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify BIST TX MODE 2.
- *
- * @details
- * - TCPM is configured initially as Sink
- * - Initiate BIST TX
- *
- * Expected Results
- * - BIST occurs and we transition back to READY state
- */
-ZTEST_F(usb_pd_ctrl_msg_test_source, verify_bist_tx_mode2)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = &this->fixture;
- uint32_t bdo = BDO(BDO_MODE_CARRIER2, 0);
-
- tcpci_partner_send_data_msg(&fixture->partner_emul,
- PD_DATA_BIST, &bdo, 1, 0);
-
- pd_dpm_request(TEST_USB_PORT, DPM_REQUEST_BIST_TX);
- k_sleep(K_MSEC(10));
- zassert_equal(get_state_pe(TEST_USB_PORT), PE_BIST_TX, NULL);
-
- k_sleep(K_SECONDS(5));
- zassert_equal(get_state_pe(TEST_USB_PORT), PE_SNK_READY, NULL);
-}
-
-/**
- * @brief TestPurpose: Verify BIST TX TEST DATA.
- *
- * @details
- * - TCPM is configured initially as Sink
- * - Initiate BIST TX
- * - End testing via signaling a Hard Reset
- *
- * Expected Results
- * - Partner remains in BIST_TX state until hard reset is received.
- */
-ZTEST_F(usb_pd_ctrl_msg_test_source, verify_bist_tx_test_data)
-{
- struct usb_pd_ctrl_msg_test_fixture *fixture = &this->fixture;
- uint32_t bdo = BDO(BDO_MODE_TEST_DATA, 0);
-
- tcpci_partner_send_data_msg(&fixture->partner_emul,
- PD_DATA_BIST, &bdo, 1, 0);
-
- pd_dpm_request(TEST_USB_PORT, DPM_REQUEST_BIST_TX);
- k_sleep(K_SECONDS(5));
- zassert_equal(get_state_pe(TEST_USB_PORT), PE_BIST_TX, NULL);
-
- tcpci_partner_common_send_hard_reset(&fixture->partner_emul);
- k_sleep(K_SECONDS(1));
- zassert_equal(get_state_pe(TEST_USB_PORT), PE_SNK_READY, NULL);
-}
diff --git a/zephyr/test/drivers/src/isl923x.c b/zephyr/test/drivers/src/isl923x.c
deleted file mode 100644
index 203a2ed979..0000000000
--- a/zephyr/test/drivers/src/isl923x.c
+++ /dev/null
@@ -1,1107 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/drivers/emul.h>
-#include <fff.h>
-
-#include "battery.h"
-#include "battery_smart.h"
-#include "test/drivers/charger_utils.h"
-#include "driver/charger/isl923x.h"
-#include "driver/charger/isl923x_public.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_isl923x.h"
-#include "system.h"
-#include "test/drivers/test_mocks.h"
-#include "test/drivers/test_state.h"
-
-BUILD_ASSERT(CONFIG_CHARGER_SENSE_RESISTOR == 10 ||
- CONFIG_CHARGER_SENSE_RESISTOR == 5);
-
-BUILD_ASSERT(CONFIG_CHARGER_SENSE_RESISTOR_AC == 20 ||
- CONFIG_CHARGER_SENSE_RESISTOR_AC == 10);
-
-BUILD_ASSERT(IS_ENABLED(CONFIG_CHARGER_ISL9238),
- "Must test on ISL9238; ISL9237, ISL9238c, and RAA489000 are not"
- " yet supported");
-
-#if CONFIG_CHARGER_SENSE_RESISTOR == 10
-#define EXPECTED_CURRENT_MA(n) (n)
-#define EXPECTED_CURRENT_REG(n) (n)
-#else
-#define EXPECTED_CURRENT_MA(n) (n * 2)
-#define EXPECTED_CURRENT_REG(n) (n / 2)
-#endif
-
-#if CONFIG_CHARGER_SENSE_RESISTOR_AC == 20
-#define EXPECTED_INPUT_CURRENT_MA(n) (n)
-#define EXPECTED_INPUT_CURRENT_REG(n) (n)
-#else
-#define EXPECTED_INPUT_CURRENT_MA(n) (n * 2)
-#define EXPECTED_INPUT_CURRENT_REG(n) (n / 2)
-#endif
-
-#define CHARGER_NUM get_charger_num(&isl923x_drv)
-#define ISL923X_EMUL emul_get_binding(DT_LABEL(DT_NODELABEL(isl923x_emul)))
-
-static int mock_write_fn_always_fail(struct i2c_emul *emul, int reg,
- uint8_t val, int bytes, void *data)
-{
- ztest_test_fail();
- return 0;
-}
-
-ZTEST(isl923x, test_isl923x_set_current)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int expected_current_milli_amps[] = {
- EXPECTED_CURRENT_MA(0), EXPECTED_CURRENT_MA(4),
- EXPECTED_CURRENT_MA(8), EXPECTED_CURRENT_MA(16),
- EXPECTED_CURRENT_MA(32), EXPECTED_CURRENT_MA(64),
- EXPECTED_CURRENT_MA(128), EXPECTED_CURRENT_MA(256),
- EXPECTED_CURRENT_MA(512), EXPECTED_CURRENT_MA(1024),
- EXPECTED_CURRENT_MA(2048), EXPECTED_CURRENT_MA(4096)
- };
- int current_milli_amps;
-
- /* Test I2C failure when reading charge current */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CHG_CURRENT);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.get_current(CHARGER_NUM, &current_milli_amps),
- NULL);
-
- /* Reset fail register */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- for (int i = 0; i < ARRAY_SIZE(expected_current_milli_amps); ++i) {
- zassert_ok(isl923x_drv.set_current(
- CHARGER_NUM, expected_current_milli_amps[i]),
- "Failed to set the current to %dmA",
- expected_current_milli_amps[i]);
- zassert_ok(isl923x_drv.get_current(CHARGER_NUM,
- &current_milli_amps),
- "Failed to get current");
- zassert_equal(expected_current_milli_amps[i],
- current_milli_amps,
- "Expected current %dmA but got %dmA",
- expected_current_milli_amps[i],
- current_milli_amps);
- }
-}
-
-ZTEST(isl923x, test_isl923x_set_voltage)
-{
- int expected_voltage_milli_volts[] = { 8, 16, 32, 64,
- 128, 256, 512, 1024,
- 2048, 4096, 8192, 16384 };
- int voltage_milli_volts;
-
- /* Test 0mV first, it's a special case because of voltage_min */
- zassert_ok(isl923x_drv.set_voltage(CHARGER_NUM, 0),
- "Failed to set the voltage to 0mV");
- zassert_ok(isl923x_drv.get_voltage(CHARGER_NUM, &voltage_milli_volts),
- "Failed to get voltage");
- zassert_equal(battery_get_info()->voltage_min, voltage_milli_volts,
- "Expected voltage %dmV but got %dmV",
- battery_get_info()->voltage_min, voltage_milli_volts);
-
- for (int i = 0; i < ARRAY_SIZE(expected_voltage_milli_volts); ++i) {
- zassert_ok(isl923x_drv.set_voltage(
- CHARGER_NUM,
- expected_voltage_milli_volts[i]),
- "Failed to set the voltage to %dmV",
- expected_voltage_milli_volts[i]);
- zassert_ok(isl923x_drv.get_voltage(CHARGER_NUM,
- &voltage_milli_volts),
- "Failed to get voltage");
- zassert_equal(expected_voltage_milli_volts[i],
- voltage_milli_volts,
- "Expected voltage %dmV but got %dmV",
- expected_voltage_milli_volts[i],
- voltage_milli_volts);
- }
-}
-
-ZTEST(isl923x, test_isl923x_set_input_current_limit)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int expected_current_milli_amps[] = {
- EXPECTED_INPUT_CURRENT_MA(0),
- EXPECTED_INPUT_CURRENT_MA(4),
- EXPECTED_INPUT_CURRENT_MA(8),
- EXPECTED_INPUT_CURRENT_MA(16),
- EXPECTED_INPUT_CURRENT_MA(32),
- EXPECTED_INPUT_CURRENT_MA(64),
- EXPECTED_INPUT_CURRENT_MA(128),
- EXPECTED_INPUT_CURRENT_MA(256),
- EXPECTED_INPUT_CURRENT_MA(512),
- EXPECTED_INPUT_CURRENT_MA(1024),
- EXPECTED_INPUT_CURRENT_MA(2048),
- EXPECTED_INPUT_CURRENT_MA(4096) };
- int current_milli_amps;
-
- /* Test failing to write to current limit 1 reg */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- ISL923X_REG_ADAPTER_CURRENT_LIMIT1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.set_input_current_limit(CHARGER_NUM, 0),
- NULL);
-
- /* Test failing to write to current limit 2 reg */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- ISL923X_REG_ADAPTER_CURRENT_LIMIT2);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.set_input_current_limit(CHARGER_NUM, 0),
- NULL);
-
- /* Reset fail register */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test failing to read current limit 1 reg */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- ISL923X_REG_ADAPTER_CURRENT_LIMIT1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &current_milli_amps),
- NULL);
-
- /* Reset fail register */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test normal code path */
- for (int i = 0; i < ARRAY_SIZE(expected_current_milli_amps); ++i) {
- zassert_ok(isl923x_drv.set_input_current_limit(
- CHARGER_NUM, expected_current_milli_amps[i]),
- "Failed to set input current limit to %dmV",
- expected_current_milli_amps[i]);
- zassert_ok(isl923x_drv.get_input_current_limit(
- CHARGER_NUM, &current_milli_amps),
- "Failed to get input current limit");
- zassert_equal(expected_current_milli_amps[i],
- current_milli_amps,
- "Expected input current %dmA but got %dmA",
- expected_current_milli_amps[i],
- current_milli_amps);
- }
-}
-
-ZTEST(isl923x, test_isl923x_psys)
-{
- zassert_ok(shell_execute_cmd(get_ec_shell(), "psys"), NULL);
-}
-
-ZTEST(isl923x, test_manufacturer_id)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int id;
-
- isl923x_emul_set_manufacturer_id(isl923x_emul, 0x1234);
- zassert_ok(isl923x_drv.manufacturer_id(CHARGER_NUM, &id), NULL);
- zassert_equal(0x1234, id, NULL);
-
- /* Test read error */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- ISL923X_REG_MANUFACTURER_ID);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.manufacturer_id(CHARGER_NUM, &id), NULL);
-
- /* Reset fail register */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST(isl923x, test_device_id)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int id;
-
- isl923x_emul_set_device_id(isl923x_emul, 0x5678);
- zassert_ok(isl923x_drv.device_id(CHARGER_NUM, &id), NULL);
- zassert_equal(0x5678, id, NULL);
-
- /* Test read error */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- ISL923X_REG_DEVICE_ID);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.device_id(CHARGER_NUM, &id), NULL);
-
- /* Reset fail register */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST(isl923x, test_options)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint32_t option;
-
- /* Test failed control 0 read */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL0);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.get_option(CHARGER_NUM, &option), NULL);
-
- /* Test failed control 1 read */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.get_option(CHARGER_NUM, &option), NULL);
-
- /* Reset failed read */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test failed control 0 write */
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL0);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.set_option(CHARGER_NUM, option), NULL);
-
- /* Test failed control 1 write */
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.set_option(CHARGER_NUM, option), NULL);
-
- /* Reset failed write */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test normal write/read, note that bits 23 and 0 are always 0 */
- zassert_ok(isl923x_drv.set_option(CHARGER_NUM, 0xffffffff), NULL);
- zassert_ok(isl923x_drv.get_option(CHARGER_NUM, &option), NULL);
- zassert_equal(0xff7ffffe, option,
- "Expected options 0xff7ffffe but got 0x%x", option);
-}
-
-ZTEST(isl923x, test_get_info)
-{
- const struct charger_info *info = isl923x_drv.get_info(CHARGER_NUM);
-
- zassert_ok(strcmp("isl9238", info->name), NULL);
- zassert_equal(ISL9238_SYS_VOLTAGE_REG_MAX, info->voltage_max, NULL);
- zassert_equal(ISL923X_SYS_VOLTAGE_REG_MIN, info->voltage_min, NULL);
- zassert_equal(8, info->voltage_step, NULL);
- zassert_equal(EXPECTED_CURRENT_MA(6080), info->current_max, NULL);
- zassert_equal(EXPECTED_CURRENT_MA(4), info->current_min, NULL);
- zassert_equal(EXPECTED_CURRENT_MA(4), info->current_step, NULL);
- zassert_equal(EXPECTED_INPUT_CURRENT_MA(6080), info->input_current_max,
- NULL);
- zassert_equal(EXPECTED_INPUT_CURRENT_MA(4), info->input_current_min,
- NULL);
- zassert_equal(EXPECTED_INPUT_CURRENT_MA(4), info->input_current_step,
- NULL);
-}
-
-ZTEST(isl923x, test_status)
-{
- int status;
-
- zassert_ok(isl923x_drv.get_status(CHARGER_NUM, &status), NULL);
- zassert_equal(CHARGER_LEVEL_2, status, NULL);
-}
-
-ZTEST(isl923x, test_set_mode)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
-
- /* Enable learn mode and set mode (actual value doesn't matter) */
- zassert_ok(isl923x_drv.discharge_on_ac(CHARGER_NUM, true), NULL);
- zassert_ok(isl923x_drv.set_mode(CHARGER_NUM, 0), NULL);
- /* Learn mode should still be set */
- zassert_true(isl923x_emul_is_learn_mode_enabled(isl923x_emul), NULL);
-
- /* Disable learn mode, but keep the bits */
- zassert_ok(isl923x_drv.discharge_on_ac(CHARGER_NUM, false), NULL);
- isl923x_emul_set_learn_mode_enabled(isl923x_emul, true);
- zassert_ok(isl923x_drv.set_mode(CHARGER_NUM, 0), NULL);
- /* Learn mode should still be off */
- zassert_true(!isl923x_emul_is_learn_mode_enabled(isl923x_emul), NULL);
-}
-
-ZTEST(isl923x, test_post_init)
-{
- zassert_ok(isl923x_drv.post_init(CHARGER_NUM), NULL);
-}
-
-ZTEST(isl923x, test_set_ac_prochot)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- const struct device *i2c_dev = isl923x_emul_get_parent(isl923x_emul);
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t expected_current_milli_amps[] = {
- EXPECTED_INPUT_CURRENT_MA(0),
- EXPECTED_INPUT_CURRENT_MA(128),
- EXPECTED_INPUT_CURRENT_MA(256),
- EXPECTED_INPUT_CURRENT_MA(512),
- EXPECTED_INPUT_CURRENT_MA(1024),
- EXPECTED_INPUT_CURRENT_MA(2048),
- EXPECTED_INPUT_CURRENT_MA(4096)
- };
- uint16_t current_milli_amps;
-
- /* Test can't set current above max */
- zassert_equal(EC_ERROR_INVAL,
- isl923x_set_ac_prochot(
- CHARGER_NUM, ISL923X_AC_PROCHOT_CURRENT_MAX + 1),
- NULL);
-
- /* Test failed I2C write to prochot register */
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_PROCHOT_AC);
- zassert_equal(EC_ERROR_INVAL, isl923x_set_ac_prochot(CHARGER_NUM, 0),
- NULL);
-
- /* Clear write fail reg */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- for (int i = 0; i < ARRAY_SIZE(expected_current_milli_amps); ++i) {
- uint8_t reg_addr = ISL923X_REG_PROCHOT_AC;
-
- /*
- * Due to resistor multiplying the current, the upper end of the
- * test data might be out of bounds (which is already tested
- * above). Skip the test.
- */
- if (expected_current_milli_amps[i] >
- ISL923X_AC_PROCHOT_CURRENT_MAX) {
- continue;
- }
-
- zassert_ok(isl923x_set_ac_prochot(
- CHARGER_NUM, expected_current_milli_amps[i]),
- "Failed to set AC prochot to %dmA",
- expected_current_milli_amps[i]);
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &current_milli_amps,
- sizeof(current_milli_amps)),
- "Failed to read AC prochot register");
- zassert_equal(EXPECTED_INPUT_CURRENT_REG(
- expected_current_milli_amps[i]),
- current_milli_amps,
- "AC prochot expected %dmA but got %dmA",
- EXPECTED_INPUT_CURRENT_REG(
- expected_current_milli_amps[i]),
- current_milli_amps);
- }
-}
-ZTEST(isl923x, test_set_dc_prochot)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- const struct device *i2c_dev = isl923x_emul_get_parent(isl923x_emul);
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t expected_current_milli_amps[] = {
- EXPECTED_CURRENT_MA(256), EXPECTED_CURRENT_MA(512),
- EXPECTED_CURRENT_MA(1024), EXPECTED_CURRENT_MA(2048),
- EXPECTED_CURRENT_MA(4096), EXPECTED_CURRENT_MA(8192)
- };
- uint16_t current_milli_amps;
-
- /* Test can't set current above max */
- zassert_equal(EC_ERROR_INVAL,
- isl923x_set_dc_prochot(
- CHARGER_NUM, ISL923X_DC_PROCHOT_CURRENT_MAX + 1),
- NULL);
-
- /* Test failed I2C write to prochot register */
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_PROCHOT_DC);
- zassert_equal(EC_ERROR_INVAL, isl923x_set_dc_prochot(CHARGER_NUM, 0),
- NULL);
-
- /* Clear write fail reg */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- for (int i = 0; i < ARRAY_SIZE(expected_current_milli_amps); ++i) {
- uint8_t reg_addr = ISL923X_REG_PROCHOT_DC;
-
- /*
- * Due to resistor multiplying the current, the upper end of the
- * test data might be out of bounds (which is already tested
- * above). Skip the test.
- */
- if (expected_current_milli_amps[i] >
- ISL923X_DC_PROCHOT_CURRENT_MAX) {
- continue;
- }
- zassert_ok(isl923x_set_dc_prochot(
- CHARGER_NUM, expected_current_milli_amps[i]),
- "Failed to set DC prochot to %dmA",
- expected_current_milli_amps[i]);
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &current_milli_amps,
- sizeof(current_milli_amps)),
- "Failed to read DC prochot register");
- zassert_equal(
- EXPECTED_CURRENT_REG(expected_current_milli_amps[i]),
- current_milli_amps,
- "AC prochot expected %dmA but got %dmA",
- EXPECTED_CURRENT_REG(expected_current_milli_amps[i]),
- current_milli_amps);
- }
-}
-
-ZTEST(isl923x, test_comparator_inversion)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- const struct device *i2c_dev = isl923x_emul_get_parent(isl923x_emul);
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint8_t reg_addr = ISL923X_REG_CONTROL2;
- uint16_t reg_value;
- uint8_t tx_buf[] = { reg_addr, 0, 0 };
-
- /* Test failed read, should not write */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL2);
- i2c_common_emul_set_write_func(i2c_emul, mock_write_fn_always_fail,
- NULL);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_set_comparator_inversion(CHARGER_NUM, false),
- NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_func(i2c_emul, NULL, NULL);
-
- /* Test failed write */
- zassert_ok(i2c_write(i2c_dev, tx_buf, sizeof(tx_buf), i2c_emul->addr),
- "Failed to clear CTRL2 register");
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL2);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_set_comparator_inversion(CHARGER_NUM, true),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test enable comparator inversion */
- zassert_ok(isl923x_set_comparator_inversion(CHARGER_NUM, true), NULL);
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &reg_value,
- sizeof(reg_value)),
- "Failed to read CTRL 2 register");
- zassert_true((reg_value & ISL923X_C2_INVERT_CMOUT) != 0, NULL);
-
- /* Test disable comparator inversion */
- zassert_ok(isl923x_set_comparator_inversion(CHARGER_NUM, false), NULL);
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &reg_value,
- sizeof(reg_value)),
- "Failed to read CTRL 2 register");
- zassert_true((reg_value & ISL923X_C2_INVERT_CMOUT) == 0, NULL);
-}
-
-ZTEST(isl923x, test_discharge_on_ac)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- const struct device *i2c_dev = isl923x_emul_get_parent(isl923x_emul);
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint8_t reg_addr = ISL923X_REG_CONTROL1;
- uint8_t tx_buf[] = { reg_addr, 0, 0 };
- uint16_t reg_value;
-
- /* Test failure to read CTRL1 register */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.discharge_on_ac(CHARGER_NUM, true), NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set CTRL1 register to 0 */
- zassert_ok(i2c_write(i2c_dev, tx_buf, sizeof(tx_buf), i2c_emul->addr),
- NULL);
-
- /* Test failure to write CTRL1 register */
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL1);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.discharge_on_ac(CHARGER_NUM, true), NULL);
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &reg_value,
- sizeof(reg_value)),
- NULL);
- zassert_equal(0, reg_value, NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test enabling discharge on AC */
- zassert_ok(isl923x_drv.discharge_on_ac(CHARGER_NUM, true), NULL);
-
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &reg_value,
- sizeof(reg_value)),
- NULL);
- zassert_true((reg_value & ISL923X_C1_LEARN_MODE_ENABLE) != 0, NULL);
-
- /* Test disabling discharge on AC */
- zassert_ok(isl923x_drv.discharge_on_ac(CHARGER_NUM, false), NULL);
-
- zassert_ok(i2c_write_read(i2c_dev, i2c_emul->addr, &reg_addr,
- sizeof(reg_addr), &reg_value,
- sizeof(reg_value)),
- NULL);
- zassert_true((reg_value & ISL923X_C1_LEARN_MODE_ENABLE) == 0, NULL);
-}
-
-ZTEST(isl923x, test_get_vbus_voltage)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- /* Standard fixed-power PD source voltages. */
- int test_voltage_mv[] = { 5000, 9000, 15000, 20000 };
- int voltage;
-
- /* Test fail to read the ADC vbus register */
- i2c_common_emul_set_read_fail_reg(i2c_emul, RAA489000_REG_ADC_VBUS);
- zassert_equal(EC_ERROR_INVAL,
- isl923x_drv.get_vbus_voltage(CHARGER_NUM, 0, &voltage),
- NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- for (int i = 0; i < ARRAY_SIZE(test_voltage_mv); ++i) {
- int expected_voltage_mv = test_voltage_mv[i];
-
- isl923x_emul_set_adc_vbus(isl923x_emul, expected_voltage_mv);
- zassert_ok(isl923x_drv.get_vbus_voltage(CHARGER_NUM, 0,
- &voltage),
- NULL);
- /* isl923x_get_vbus_voltage treats the measured voltage as
- * having an effective step size of 96 mV. This is slightly
- * different than the scheme described in the ISL9238 datasheet.
- * Reported VBUS should therefore be within 100 mV of nominal
- * VBUS.
- */
- zassert_within(expected_voltage_mv, voltage, 100,
- "Expected %dmV but got %dmV", expected_voltage_mv,
- voltage);
- }
-}
-
-ZTEST(isl923x, test_init)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int input_current;
-
- /* Test failed CTRL2 register read (prochot debounce) */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL2);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA", input_current);
-
- /* Test failed CTRL2 register write */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL2);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA", input_current);
-
- /* Test failed CTRL 0 read */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL0);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
-
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA",
- input_current);
-
- /* Test failed CTRL 0 write */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL923X_REG_CONTROL0);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
-
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA",
- input_current);
-
- /* Test failed CTRL 3 read */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL9238_REG_CONTROL3);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA", input_current);
-
- /* Test failed CTRL 3 write */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_write_fail_reg(i2c_emul, ISL9238_REG_CONTROL3);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA", input_current);
-
- /* Test failed write adapter current limit */
- isl923x_emul_reset_registers(isl923x_emul);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- ISL923X_REG_ADAPTER_CURRENT_LIMIT1);
- isl923x_drv.init(CHARGER_NUM);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_ok(isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- NULL);
- zassert_equal(0, input_current,
- "Expected input current 0mA but got %dmA", input_current);
-}
-
-ZTEST(isl923x, test_init_late_jump)
-{
- int input_current;
-
- isl923x_drv.init(CHARGER_NUM);
-
- /* Init again with system_jumped_late() returning true and make sure
- * the input current limit is still correct.
- */
-
- system_jumped_late_fake.return_val = 1;
- isl923x_drv.init(CHARGER_NUM);
-
- zassert_equal(EC_SUCCESS,
- isl923x_drv.get_input_current_limit(CHARGER_NUM,
- &input_current),
- "Could not read input current limit.");
- zassert_equal(CONFIG_CHARGER_INPUT_CURRENT, input_current,
- "Input current (%d) not at (%d)", input_current,
- CONFIG_CHARGER_INPUT_CURRENT);
-}
-
-ZTEST(isl923x, test_isl923x_is_acok)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- enum ec_error_list rv;
- bool acok;
-
- /* Part 1: invalid charger number */
- rv = raa489000_is_acok(board_get_charger_chip_count() + 1, &acok);
- zassert_equal(EC_ERROR_INVAL, rv,
- "Invalid charger num, but AC OK check succeeded");
-
- /* Part 2: error accessing register */
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL9238_REG_INFO2);
-
- rv = raa489000_is_acok(CHARGER_NUM, &acok);
- zassert_equal(EC_ERROR_INVAL, rv,
- "Register read failure, but AC OK check succeeded");
-
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Part 3: successful path - ACOK is true */
- raa489000_emul_set_acok_pin(isl923x_emul, 1);
-
- rv = raa489000_is_acok(CHARGER_NUM, &acok);
- zassert_equal(EC_SUCCESS, rv, "AC OK check did not return success");
- zassert_true(acok, "AC OK is false");
-
- /* Part 3: successful path - ACOK is false */
- raa489000_emul_set_acok_pin(isl923x_emul, 0);
-
- rv = raa489000_is_acok(CHARGER_NUM, &acok);
- zassert_equal(EC_SUCCESS, rv, "AC OK check did not return success");
- zassert_false(acok, "AC OK is true");
-}
-
-ZTEST(isl923x, test_isl923x_enable_asgate)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- int rv;
-
- /* Part 1: Try enabling the ASGATE */
- rv = raa489000_enable_asgate(CHARGER_NUM, true);
-
- zassert_equal(EC_SUCCESS, rv, "Expected return code of %d but got %d",
- EC_SUCCESS, rv);
- zassert_true(
- isl923x_emul_peek_reg(i2c_emul, RAA489000_REG_CONTROL8) &
- RAA489000_C8_ASGATE_ON_READY,
- "RAA489000_C8_ASGATE_ON_READY bit not set in Control Reg 8");
-
- /* Part 2: Turn it back off */
- rv = raa489000_enable_asgate(CHARGER_NUM, false);
-
- zassert_equal(EC_SUCCESS, rv, "Expected return code of %d but got %d",
- EC_SUCCESS, rv);
- zassert_false(isl923x_emul_peek_reg(i2c_emul, RAA489000_REG_CONTROL8) &
- RAA489000_C8_ASGATE_ON_READY,
- "RAA489000_C8_ASGATE_ON_READY bit set in Control Reg 8");
-}
-
-/* Mock read and write functions to use in the hibernation test */
-FAKE_VALUE_FUNC(int, hibernate_mock_read_fn, struct i2c_emul *, int, uint8_t *,
- int, void *);
-FAKE_VALUE_FUNC(int, hibernate_mock_write_fn, struct i2c_emul *, int, uint8_t,
- int, void *);
-
-/**
- * @brief Setup function for the hibernate tests.
- */
-static void isl923x_hibernate_before(void *state)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- ARG_UNUSED(state);
-
- /* Reset mocks and make the read/write mocks pass all data through */
- RESET_FAKE(hibernate_mock_read_fn);
- RESET_FAKE(hibernate_mock_write_fn);
- hibernate_mock_read_fn_fake.return_val = 1;
- hibernate_mock_write_fn_fake.return_val = 1;
-
- i2c_common_emul_set_read_func(i2c_emul, hibernate_mock_read_fn, NULL);
- i2c_common_emul_set_write_func(i2c_emul, hibernate_mock_write_fn, NULL);
-
- /* Don't fail on any register access */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-/**
- * @brief Teardown function for the hibernate tests.
- */
-static void isl923x_hibernate_after(void *state)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- ARG_UNUSED(state);
-
- /* Clear the mock read/write functions */
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
- i2c_common_emul_set_write_func(i2c_emul, NULL, NULL);
-
- /* Don't fail on any register access */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__happy_path)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t actual;
-
- raa489000_hibernate(CHARGER_NUM, false);
-
- /* Check ISL923X_REG_CONTROL0 */
- actual = isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL0);
-
- zassert_false(actual & RAA489000_C0_EN_CHG_PUMPS_TO_100PCT,
- "RAA489000_C0_EN_CHG_PUMPS_TO_100PCT should not be set");
- zassert_false(actual & RAA489000_C0_BGATE_FORCE_ON,
- "RAA489000_C0_BGATE_FORCE_ON should not be set");
-
- /* Check ISL923X_REG_CONTROL1 */
- actual = isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1);
-
- zassert_false(actual & RAA489000_C1_ENABLE_SUPP_SUPPORT_MODE,
- "RAA489000_C1_ENABLE_SUPP_SUPPORT_MODE should not be set");
- zassert_false(actual & ISL923X_C1_ENABLE_PSYS,
- "ISL923X_C1_ENABLE_PSYS should not be set");
- zassert_true(actual & RAA489000_C1_BGATE_FORCE_OFF,
- "RAA489000_C1_BGATE_FORCE_OFF should be set");
- zassert_true(actual & ISL923X_C1_DISABLE_MON,
- "ISL923X_C1_DISABLE_MON should be set");
-
- /* Check ISL9238_REG_CONTROL3 (disable_adc = false) */
- actual = isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3);
-
- zassert_true(actual & RAA489000_ENABLE_ADC,
- "RAA489000_ENABLE_ADC should be set");
-
- /* Check ISL9238_REG_CONTROL4 */
- actual = isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL4);
-
- zassert_true(actual & RAA489000_C4_DISABLE_GP_CMP,
- "RAA489000_C4_DISABLE_GP_CMP should be set");
-
- /* Ensure all expected register reads and writes happened */
- int registers[] = { ISL923X_REG_CONTROL0, ISL923X_REG_CONTROL1,
- ISL9238_REG_CONTROL3, ISL9238_REG_CONTROL4 };
-
- for (int i = 0; i < ARRAY_SIZE(registers); i++) {
- /* Each reg has 2 reads and 2 writes because they are 16-bit */
- MOCK_ASSERT_I2C_READ(hibernate_mock_read_fn, i * 2,
- registers[i]);
- MOCK_ASSERT_I2C_READ(hibernate_mock_read_fn, (i * 2) + 1,
- registers[i]);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, i * 2,
- registers[i], MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, (i * 2) + 1,
- registers[i], MOCK_IGNORE_VALUE);
- }
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__invalid_charger_number)
-{
- /* Mocks should just be pass-through */
- RESET_FAKE(hibernate_mock_read_fn);
- RESET_FAKE(hibernate_mock_write_fn);
- hibernate_mock_read_fn_fake.return_val = 1;
- hibernate_mock_write_fn_fake.return_val = 1;
-
- raa489000_hibernate(board_get_charger_chip_count() + 1, false);
-
- /* Make sure no I2C activity happened */
- zassert_equal(hibernate_mock_read_fn_fake.call_count, 0,
- "No I2C reads should have happened");
- zassert_equal(hibernate_mock_write_fn_fake.call_count, 0,
- "No I2C writes should have happened");
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__fail_at_ISL923X_REG_CONTROL0)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL0);
-
- raa489000_hibernate(CHARGER_NUM, false);
-
- /*
- * We have no return codes to check, so instead verify that the first
- * successful I2C write is to CONTROL1 and not CONTROL0.
- */
-
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 0, ISL923X_REG_CONTROL1,
- MOCK_IGNORE_VALUE);
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__fail_at_ISL923X_REG_CONTROL1)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL923X_REG_CONTROL1);
-
- raa489000_hibernate(CHARGER_NUM, false);
-
- /*
- * Ensure we skipped CONTROL1. (NB: due to 16-bit regs, each write takes
- * two calls to the mock_write_fn)
- */
-
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 0, ISL923X_REG_CONTROL0,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 1, ISL923X_REG_CONTROL0,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 2, ISL9238_REG_CONTROL3,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 3, ISL9238_REG_CONTROL3,
- MOCK_IGNORE_VALUE);
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__fail_at_ISL9238_REG_CONTROL3)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL9238_REG_CONTROL3);
-
- raa489000_hibernate(CHARGER_NUM, false);
-
- /*
- * Ensure we skipped CONTROL3. (NB: due to 16-bit regs, each write takes
- * two calls to the mock_write_fn)
- */
-
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 2, ISL923X_REG_CONTROL1,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 3, ISL923X_REG_CONTROL1,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 4, ISL9238_REG_CONTROL4,
- MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 5, ISL9238_REG_CONTROL4,
- MOCK_IGNORE_VALUE);
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__fail_at_ISL9238_REG_CONTROL4)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, ISL9238_REG_CONTROL4);
-
- raa489000_hibernate(CHARGER_NUM, false);
-
- /*
- * Ensure we skipped CONTROL4. (i.e. the last calls should be to write
- * to CONTROL3)
- */
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn,
- hibernate_mock_write_fn_fake.call_count - 2,
- ISL9238_REG_CONTROL3, MOCK_IGNORE_VALUE);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn,
- hibernate_mock_write_fn_fake.call_count - 1,
- ISL9238_REG_CONTROL3, MOCK_IGNORE_VALUE);
-}
-
-ZTEST(isl923x_hibernate, test_isl923x_hibernate__adc_disable)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t expected;
-
- raa489000_hibernate(CHARGER_NUM, true);
-
- /* Check ISL9238_REG_CONTROL3 (disable_adc = true) */
- expected = isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3);
- expected &= ~RAA489000_ENABLE_ADC;
-
- MOCK_ASSERT_I2C_READ(hibernate_mock_read_fn, 4, ISL9238_REG_CONTROL3);
- MOCK_ASSERT_I2C_READ(hibernate_mock_read_fn, 5, ISL9238_REG_CONTROL3);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 4, ISL9238_REG_CONTROL3,
- expected & 0xff);
- MOCK_ASSERT_I2C_WRITE(hibernate_mock_write_fn, 5, ISL9238_REG_CONTROL3,
- expected >> 8);
-}
-
-ZTEST(isl923x_hibernate, test_isl9238c_hibernate)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t control1_expected, control2_expected, control3_expected;
- int rv;
-
- /* Part 1: Happy path */
- control1_expected =
- (isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1) &
- ~ISL923X_C1_ENABLE_PSYS) |
- ISL923X_C1_DISABLE_MON;
- control2_expected =
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2) |
- ISL923X_C2_COMPARATOR;
- control3_expected =
- isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3) |
- ISL9238_C3_BGATE_OFF;
-
- rv = isl9238c_hibernate(CHARGER_NUM);
-
- zassert_equal(EC_SUCCESS, rv, "Expected return code %d but got %d",
- EC_SUCCESS, rv);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1),
- control1_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1),
- control1_expected);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2),
- control2_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2),
- control2_expected);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3),
- control3_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3),
- control3_expected);
-
- /* Part 2: Fail reading each register and check for error code */
- int registers[] = { ISL923X_REG_CONTROL1, ISL923X_REG_CONTROL2,
- ISL9238_REG_CONTROL3 };
-
- for (int i = 0; i < ARRAY_SIZE(registers); i++) {
- i2c_common_emul_set_read_fail_reg(i2c_emul, registers[i]);
-
- rv = isl9238c_hibernate(CHARGER_NUM);
-
- zassert_equal(EC_ERROR_INVAL, rv,
- "Wrong return code. Expected %d but got %d",
- EC_ERROR_INVAL, rv);
- }
-}
-
-ZTEST(isl923x_hibernate, test_isl9238c_resume)
-{
- const struct emul *isl923x_emul = ISL923X_EMUL;
- struct i2c_emul *i2c_emul = isl923x_emul_get_i2c_emul(isl923x_emul);
- uint16_t control1_expected, control2_expected, control3_expected;
- int rv;
-
- /* Part 1: Happy path */
- control1_expected =
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1) |
- ISL923X_C1_ENABLE_PSYS;
- control2_expected =
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2) &
- ~ISL923X_C2_COMPARATOR;
- control3_expected =
- isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3) &
- ~ISL9238_C3_BGATE_OFF;
-
- rv = isl9238c_resume(CHARGER_NUM);
-
- zassert_equal(EC_SUCCESS, rv, "Expected return code %d but got %d",
- EC_SUCCESS, rv);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1),
- control1_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1),
- control1_expected);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2),
- control2_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2),
- control2_expected);
- zassert_equal(isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3),
- control3_expected,
- "Unexpected register value 0x%02x. Should be 0x%02x",
- isl923x_emul_peek_reg(i2c_emul, ISL9238_REG_CONTROL3),
- control3_expected);
-
- /* Part 2: Fail reading each register and check for error code */
- int registers[] = { ISL923X_REG_CONTROL1, ISL923X_REG_CONTROL2,
- ISL9238_REG_CONTROL3 };
-
- for (int i = 0; i < ARRAY_SIZE(registers); i++) {
- i2c_common_emul_set_read_fail_reg(i2c_emul, registers[i]);
-
- rv = isl9238c_resume(CHARGER_NUM);
-
- zassert_equal(EC_ERROR_INVAL, rv,
- "Wrong return code. Expected %d but got %d",
- EC_ERROR_INVAL, rv);
- }
-}
-
-ZTEST_SUITE(isl923x, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
-
-ZTEST_SUITE(isl923x_hibernate, drivers_predicate_post_main, NULL,
- isl923x_hibernate_before, isl923x_hibernate_after, NULL);
diff --git a/zephyr/test/drivers/src/keyboard_scan.c b/zephyr/test/drivers/src/keyboard_scan.c
deleted file mode 100644
index 209c5320e0..0000000000
--- a/zephyr/test/drivers/src/keyboard_scan.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include <ztest.h>
-#include <zephyr/drivers/emul.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <emul/emul_kb_raw.h>
-
-#include "test/drivers/test_state.h"
-
-int emulate_keystate(int row, int col, int pressed)
-{
- const struct device *dev =
- DEVICE_DT_GET(DT_NODELABEL(cros_kb_raw));
-
- return emul_kb_raw_set_kbstate(dev, row, col, pressed);
-}
-
-ZTEST(keyboard_scan, test_press_enter)
-{
- zassert_ok(emulate_keystate(4, 11, true), NULL);
- k_sleep(K_MSEC(100));
- /* TODO(jbettis): Check espi_emul to verify the AP was notified. */
- zassert_ok(emulate_keystate(4, 11, false), NULL);
- k_sleep(K_MSEC(100));
-}
-ZTEST_SUITE(keyboard_scan, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/lid_switch.c b/zephyr/test/drivers/src/lid_switch.c
deleted file mode 100644
index 42d91495f4..0000000000
--- a/zephyr/test/drivers/src/lid_switch.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/drivers/emul.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <lid_switch.h>
-#include <zephyr/shell/shell_dummy.h>
-#include <console.h>
-
-#include "test/drivers/test_state.h"
-#include "ec_commands.h"
-#include "host_command.h"
-
-#define LID_GPIO_PATH DT_PATH(named_gpios, lid_open_ec)
-#define LID_GPIO_PIN DT_GPIO_PIN(LID_GPIO_PATH, gpios)
-
-int emul_lid_open(void)
-{
- const struct device *lid_gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(LID_GPIO_PATH, gpios));
-
- return gpio_emul_input_set(lid_gpio_dev, LID_GPIO_PIN, 1);
-}
-
-int emul_lid_close(void)
-{
- const struct device *lid_gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(LID_GPIO_PATH, gpios));
-
- return gpio_emul_input_set(lid_gpio_dev, LID_GPIO_PIN, 0);
-}
-
-static void cleanup(void *unused)
-{
- struct ec_params_force_lid_open params = {
- .enabled = 0,
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_FORCE_LID_OPEN, 0, params);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
-
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
-}
-
-ZTEST(lid_switch, test_lid_open)
-{
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-}
-
-ZTEST(lid_switch, test_lid_debounce)
-{
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- /* Create interrupts quickly before they can be handled. */
- zassert_ok(emul_lid_open(), NULL);
- zassert_ok(emul_lid_close(), NULL);
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-}
-
-ZTEST(lid_switch, test_lid_close)
-{
- /* Start open. */
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
-
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(200));
- zassert_equal(lid_is_open(), 0, NULL);
-}
-
-ZTEST(lid_switch, test_cmd_lidopen)
-{
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- /* Forced override lid open. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidopen"),
- NULL);
- zassert_equal(lid_is_open(), 1, NULL);
- k_sleep(K_MSEC(100));
-
- printk("GPIO lid open/close\n");
- /* Open & close with gpio. */
- zassert_ok(emul_lid_open(), NULL);
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(500));
- zassert_equal(lid_is_open(), 0, NULL);
-}
-
-ZTEST(lid_switch, test_cmd_lidopen_bounce)
-{
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- printk("Console lid open\n");
- /* Forced override lid open. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidopen"),
- NULL);
- zassert_equal(lid_is_open(), 1, NULL);
- k_sleep(K_MSEC(100));
-
- printk("Console lid open\n");
- /* Forced override lid open. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidopen"),
- NULL);
- zassert_equal(lid_is_open(), 1, NULL);
- k_sleep(K_MSEC(100));
-
- printk("GPIO lid open/close\n");
- /* Open & close with gpio. */
- zassert_ok(emul_lid_open(), NULL);
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(500));
- zassert_equal(lid_is_open(), 0, NULL);
-}
-
-ZTEST(lid_switch, test_cmd_lidclose)
-{
- /* Start open. */
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-
- /* Forced override lid close. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidclose"),
- NULL);
- zassert_equal(lid_is_open(), 0, NULL);
- k_sleep(K_MSEC(100));
-
- printk("GPIO lid close/open\n");
- /* Close & open with gpio. */
- zassert_ok(emul_lid_close(), NULL);
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(500));
- zassert_equal(lid_is_open(), 1, NULL);
-}
-
-ZTEST(lid_switch, test_cmd_lidclose_bounce)
-{
- /* Start open. */
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-
- /* Forced override lid close. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidclose"),
- NULL);
- zassert_equal(lid_is_open(), 0, NULL);
- k_sleep(K_MSEC(100));
-
- /* Forced override lid close. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidclose"),
- NULL);
- zassert_equal(lid_is_open(), 0, NULL);
- k_sleep(K_MSEC(100));
-
- printk("GPIO lid close/open\n");
- /* Close & open with gpio. */
- zassert_ok(emul_lid_close(), NULL);
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(500));
- zassert_equal(lid_is_open(), 1, NULL);
-}
-
-#if defined(CONFIG_SHELL_BACKEND_DUMMY)
-ZTEST(lid_switch, test_cmd_lidstate_open)
-{
- const char *buffer;
- size_t buffer_size;
-
- /* Start open. */
- zassert_ok(emul_lid_open(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-
- /* Read the state with console. */
- shell_backend_dummy_clear_output(get_ec_shell());
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidstate"),
- NULL);
- buffer = shell_backend_dummy_get_output(get_ec_shell(), &buffer_size);
- zassert_true(strcmp(buffer, "\r\nlid state: open\r\n") == 0,
- "Invalid console output %s", buffer);
-}
-
-ZTEST(lid_switch, test_cmd_lidstate_close)
-{
- const char *buffer;
- size_t buffer_size;
-
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- /* Read the state with console. */
- shell_backend_dummy_clear_output(get_ec_shell());
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "lidstate"),
- NULL);
- buffer = shell_backend_dummy_get_output(get_ec_shell(), &buffer_size);
- zassert_true(strcmp(buffer, "\r\nlid state: closed\r\n") == 0,
- "Invalid console output %s", buffer);
-}
-#else
-#error This test requires CONFIG_SHELL_BACKEND_DUMMY
-#endif
-
-ZTEST(lid_switch, test_hc_force_lid_open)
-{
- struct ec_params_force_lid_open params = {
- .enabled = 1,
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_FORCE_LID_OPEN, 0, params);
-
- /* Start closed. */
- zassert_ok(emul_lid_close(), NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 0, NULL);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- k_sleep(K_MSEC(100));
- zassert_equal(lid_is_open(), 1, NULL);
-}
-
-ZTEST_SUITE(lid_switch, drivers_predicate_post_main, NULL, NULL, &cleanup,
- NULL);
diff --git a/zephyr/test/drivers/src/lis2dw12.c b/zephyr/test/drivers/src/lis2dw12.c
deleted file mode 100644
index 56f71cc406..0000000000
--- a/zephyr/test/drivers/src/lis2dw12.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/drivers/emul.h>
-#include "driver/accel_lis2dw12.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_lis2dw12.h"
-#include "test/drivers/test_state.h"
-
-#define LIS2DW12_NODELABEL DT_NODELABEL(ms_lis2dw12_accel)
-#define LIS2DW12_SENSOR_ID SENSOR_ID(LIS2DW12_NODELABEL)
-#define EMUL_LABEL DT_LABEL(DT_NODELABEL(lis2dw12_emul))
-
-#include <stdio.h>
-
-#define CHECK_XYZ_EQUALS(VEC1, VEC2) \
- do { \
- zassert_equal((VEC1)[X], (VEC2)[X], \
- "Got %d for X, expected %d", (VEC1)[X], \
- (VEC2)[X]); \
- zassert_equal((VEC1)[Y], (VEC2)[Y], \
- "Got %d for Y, expected %d", (VEC1)[Y], \
- (VEC2)[Y]); \
- zassert_equal((VEC1)[Z], (VEC2)[Z], \
- "Got %d for Z, expected %d", (VEC1)[Z], \
- (VEC2)[Z]); \
- } while (0)
-
-/** Used with the LIS2DW12 set rate function to control rounding behavior */
-enum lis2dw12_round_mode {
- ROUND_DOWN,
- ROUND_UP,
-};
-
-static inline void lis2dw12_setup(void)
-{
- lis2dw12_emul_reset(emul_get_binding(EMUL_LABEL));
-
- /* Reset certain sensor struct values */
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
-
- ms->current_range = 0;
-}
-
-static void lis2dw12_before(void *state)
-{
- ARG_UNUSED(state);
- lis2dw12_setup();
-}
-
-static void lis2dw12_after(void *state)
-{
- ARG_UNUSED(state);
- lis2dw12_setup();
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_read_who_am_i)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_WHO_AM_I_REG);
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_INVAL, rv, NULL);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_who_am_i)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- lis2dw12_emul_set_who_am_i(emul, ~LIS2DW12_WHO_AM_I);
-
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_ACCESS_DENIED, rv,
- "init returned %d but was expecting %d", rv,
- EC_ERROR_ACCESS_DENIED);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_write_soft_reset)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_write_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_SOFT_RESET_ADDR);
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_INVAL, rv, NULL);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__timeout_read_soft_reset)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_SOFT_RESET_ADDR);
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_TIMEOUT, rv, "init returned %d but expected %d",
- rv, EC_ERROR_TIMEOUT);
-}
-
-static int lis2dw12_test_mock_write_fail_set_bdu(struct i2c_emul *emul, int reg,
- uint8_t val, int bytes,
- void *data)
-{
- if (reg == LIS2DW12_BDU_ADDR && bytes == 1 &&
- (val & LIS2DW12_BDU_MASK) != 0) {
- return -EIO;
- }
- return 1;
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_set_bdu)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_write_func(lis2dw12_emul_to_i2c_emul(emul),
- lis2dw12_test_mock_write_fail_set_bdu,
- NULL);
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_INVAL, rv, "init returned %d but expected %d",
- rv, EC_ERROR_INVAL);
- zassert_true(lis2dw12_emul_get_soft_reset_count(emul) > 0,
- "expected at least one soft reset");
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_set_lir)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_LIR_ADDR);
-
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_INVAL, rv, "init returned %d but expected %d",
- rv, EC_ERROR_INVAL);
- zassert_true(lis2dw12_emul_get_soft_reset_count(emul) > 0,
- "expected at least one soft reset");
-}
-
-static int lis2dw12_test_mock_write_fail_set_power_mode(struct i2c_emul *emul,
- int reg, uint8_t val,
- int bytes, void *data)
-{
- if (reg == LIS2DW12_ACC_LPMODE_ADDR && bytes == 1 &&
- (val & LIS2DW12_ACC_LPMODE_MASK) != 0) {
- /* Cause an error when trying to set the LPMODE */
- return -EIO;
- }
- return 1;
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__fail_set_power_mode)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- i2c_common_emul_set_write_func(
- lis2dw12_emul_to_i2c_emul(emul),
- lis2dw12_test_mock_write_fail_set_power_mode, NULL);
-
- rv = ms->drv->init(ms);
- zassert_equal(EC_ERROR_INVAL, rv, "init returned %d but expected %d",
- rv, EC_ERROR_INVAL);
- zassert_true(lis2dw12_emul_get_soft_reset_count(emul) > 0,
- "expected at least one soft reset");
-}
-
-ZTEST(lis2dw12, test_lis2dw12_init__success)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- struct stprivate_data *drvdata = ms->drv_data;
-
- int rv;
-
- rv = ms->drv->init(ms);
- zassert_equal(EC_SUCCESS, rv, "init returned %d but expected %d", rv,
- EC_SUCCESS);
- zassert_true(lis2dw12_emul_get_soft_reset_count(emul) > 0,
- "expected at least one soft reset");
- zassert_equal(LIS2DW12_RESOLUTION, drvdata->resol,
- "Expected resolution of %d but got %d",
- LIS2DW12_RESOLUTION, drvdata->resol);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_set_power_mode)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- /* Part 1: happy path */
- rv = lis2dw12_set_power_mode(ms, LIS2DW12_LOW_POWER,
- LIS2DW12_LOW_POWER_MODE_2);
- zassert_equal(rv, EC_SUCCESS, "Expected %d but got %d", EC_SUCCESS, rv);
-
- /* Part 2: unimplemented modes */
- rv = lis2dw12_set_power_mode(ms, LIS2DW12_LOW_POWER,
- LIS2DW12_LOW_POWER_MODE_1);
- zassert_equal(rv, EC_ERROR_UNIMPLEMENTED, "Expected %d but got %d",
- EC_ERROR_UNIMPLEMENTED, rv);
-
- /* Part 3: attempt to set mode but cannot modify reg. */
- i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_ACC_MODE_ADDR);
- rv = lis2dw12_set_power_mode(ms, LIS2DW12_LOW_POWER,
- LIS2DW12_LOW_POWER_MODE_2);
- zassert_equal(rv, EC_ERROR_INVAL, "Expected %d but got %d",
- EC_ERROR_INVAL, rv);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_set_range)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- int rv;
-
- /* Part 1: Happy path. Go above the max range; it will be automatically
- * clamped.
- */
-
- rv = ms->drv->set_range(ms, LIS2DW12_ACCEL_FS_MAX_VAL + 1, 0);
- zassert_equal(rv, EC_SUCCESS, "Expected %d but got %d", EC_SUCCESS, rv);
- zassert_equal(ms->current_range, LIS2DW12_ACCEL_FS_MAX_VAL,
- "Expected %d but got %d", LIS2DW12_ACCEL_FS_MAX_VAL,
- ms->current_range);
-
- /* Part 2: Error accessing register */
- i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
- LIS2DW12_FS_ADDR);
- rv = ms->drv->set_range(ms, LIS2DW12_ACCEL_FS_MAX_VAL, 0);
- zassert_equal(rv, EC_ERROR_INVAL, "Expected %d but got %d",
- EC_ERROR_INVAL, rv);
-}
-
-ZTEST(lis2dw12, test_lis2dw12_set_rate)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct i2c_emul *i2c_emul = lis2dw12_emul_to_i2c_emul(emul);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- struct stprivate_data *drv_data = ms->drv_data;
- int rv;
-
- /* Part 1: Turn off sensor with rate=0 */
- rv = ms->drv->set_data_rate(ms, 0, 0);
-
- zassert_equal(lis2dw12_emul_peek_odr(i2c_emul),
- LIS2DW12_ODR_POWER_OFF_VAL,
- "Output data rate should be %d but got %d",
- LIS2DW12_ODR_POWER_OFF_VAL,
- lis2dw12_emul_peek_odr(i2c_emul));
- zassert_equal(drv_data->base.odr, LIS2DW12_ODR_POWER_OFF_VAL,
- "Output data rate should be %d but got %d",
- LIS2DW12_ODR_POWER_OFF_VAL, drv_data->base.odr);
- zassert_equal(rv, EC_SUCCESS, "Returned %d but expected %d", rv,
- EC_SUCCESS);
-
- /* Part 2: Set some output data rates. We will request a certain rate
- * and make sure the closest supported rate is used.
- */
-
- static const struct {
- int requested_rate; /* millihertz */
- enum lis2dw12_round_mode round;
- int expected_norm_rate; /* millihertz */
- uint8_t expected_reg_val;
- } test_params[] = {
- { 1000, ROUND_DOWN, LIS2DW12_ODR_MIN_VAL,
- LIS2DW12_ODR_12HZ_VAL },
- { 12501, ROUND_DOWN, 12500, LIS2DW12_ODR_12HZ_VAL },
- { 25001, ROUND_DOWN, 25000, LIS2DW12_ODR_25HZ_VAL },
- { 50001, ROUND_DOWN, 50000, LIS2DW12_ODR_50HZ_VAL },
- { 100001, ROUND_DOWN, 100000, LIS2DW12_ODR_100HZ_VAL },
- { 200001, ROUND_DOWN, 200000, LIS2DW12_ODR_200HZ_VAL },
- { 400001, ROUND_DOWN, 400000, LIS2DW12_ODR_400HZ_VAL },
- { 800001, ROUND_DOWN, 800000, LIS2DW12_ODR_800HZ_VAL },
- { 1600001, ROUND_DOWN, 1600000, LIS2DW12_ODR_1_6kHZ_VAL },
- { 3200001, ROUND_DOWN, LIS2DW12_ODR_MAX_VAL,
- LIS2DW12_ODR_1_6kHZ_VAL },
-
- { 1000, ROUND_UP, LIS2DW12_ODR_MIN_VAL, LIS2DW12_ODR_12HZ_VAL },
- { 12501, ROUND_UP, 25000, LIS2DW12_ODR_25HZ_VAL },
- { 25001, ROUND_UP, 50000, LIS2DW12_ODR_50HZ_VAL },
- { 50001, ROUND_UP, 100000, LIS2DW12_ODR_100HZ_VAL },
- { 100001, ROUND_UP, 200000, LIS2DW12_ODR_200HZ_VAL },
- { 200001, ROUND_UP, 400000, LIS2DW12_ODR_400HZ_VAL },
- { 400001, ROUND_UP, 800000, LIS2DW12_ODR_800HZ_VAL },
- { 800001, ROUND_UP, 1600000, LIS2DW12_ODR_1_6kHZ_VAL },
- { 1600001, ROUND_UP, LIS2DW12_ODR_MAX_VAL,
- LIS2DW12_ODR_1_6kHZ_VAL },
- };
-
- for (size_t i = 0; i < ARRAY_SIZE(test_params); i++) {
- /* For each test vector in the above array */
- drv_data->base.odr = -1;
- rv = ms->drv->set_data_rate(ms, test_params[i].requested_rate,
- test_params[i].round);
-
- /* Check the normalized rate the driver chose */
- zassert_equal(
- drv_data->base.odr, test_params[i].expected_norm_rate,
- "For requested rate %d, output data rate should be %d but got %d",
- test_params[i].requested_rate,
- test_params[i].expected_norm_rate, drv_data->base.odr);
-
- /* Read ODR and mode bits back from CTRL1 register */
- uint8_t odr_bits = lis2dw12_emul_peek_odr(i2c_emul);
-
- zassert_equal(
- odr_bits, test_params[i].expected_reg_val,
- "For requested rate %d, ODR bits should be 0x%x but got 0x%x - %d",
- test_params[i].requested_rate,
- test_params[i].expected_reg_val, odr_bits,
- LIS2DW12_ODR_MAX_VAL);
-
- /* Check if high performance mode was enabled if rate >
- * 200,000mHz
- */
-
- uint8_t mode_bits = lis2dw12_emul_peek_mode(i2c_emul);
- uint8_t lpmode_bits = lis2dw12_emul_peek_lpmode(i2c_emul);
-
- if (odr_bits > LIS2DW12_ODR_200HZ_VAL) {
- /* High performance mode, LP mode immaterial */
- zassert_equal(mode_bits, LIS2DW12_HIGH_PERF,
- "MODE[1:0] should be 0x%x, but got 0x%x",
- LIS2DW12_HIGH_PERF, mode_bits);
-
- } else {
- /* Low power mode, LP mode 2 */
- zassert_equal(mode_bits, LIS2DW12_LOW_POWER,
- "MODE[1:0] should be 0x%x, but got 0x%x",
- LIS2DW12_LOW_POWER, mode_bits);
-
- zassert_equal(
- lpmode_bits, LIS2DW12_LOW_POWER_MODE_2,
- "LPMODE[1:0] should be 0x%x, but got 0x%x",
- LIS2DW12_LOW_POWER_MODE_2, lpmode_bits);
- }
- }
-}
-
-ZTEST(lis2dw12, test_lis2dw12_read)
-{
- const struct emul *emul = emul_get_binding(EMUL_LABEL);
- struct i2c_emul *i2c_emul = lis2dw12_emul_to_i2c_emul(emul);
- struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
- struct stprivate_data *drvdata = ms->drv_data;
- intv3_t sample = { 0, 0, 0 };
- int rv;
-
- /* Reading requires a range to be set. Use 1 so it has no effect
- * when scaling samples. Also need to set the sensor resolution
- * manually.
- */
-
- ms->drv->set_range(ms, 1, 0);
- drvdata->resol = LIS2DW12_RESOLUTION;
-
- /* Part 1: Try to read from sensor, but cannot check status register for
- * ready bit
- */
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LIS2DW12_STATUS_REG);
-
- rv = ms->drv->read(ms, sample);
-
- zassert_equal(rv, EC_ERROR_INVAL,
- "Expected return val of %d but got %d", EC_ERROR_INVAL,
- rv);
-
- /* Part 2: Try to read sensor, but no new data is available. In this
- * case, the driver should return the reading in from `ms->raw_xyz`
- */
-
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- lis2dw12_emul_clear_accel_reading(emul);
- ms->raw_xyz[X] = 123;
- ms->raw_xyz[Y] = 456;
- ms->raw_xyz[Z] = 789;
-
- rv = ms->drv->read(ms, sample);
-
- zassert_equal(rv, EC_SUCCESS, "Expected return val of %d but got %d",
- EC_SUCCESS, rv);
- CHECK_XYZ_EQUALS(sample, ms->raw_xyz);
-
- /* Part 3: Read from sensor w/ data ready, but an error occurs during
- * read.
- */
- intv3_t fake_sample = { 100, 200, 300 };
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LIS2DW12_OUT_X_L_ADDR);
- lis2dw12_emul_set_accel_reading(emul, fake_sample);
-
- rv = ms->drv->read(ms, sample);
-
- zassert_equal(rv, EC_ERROR_INVAL,
- "Expected return val of %d but got %d", EC_ERROR_INVAL,
- rv);
-
- /* Part 4: Success */
-
- intv3_t expected_sample;
-
- for (int i = 0; i < ARRAY_SIZE(expected_sample); i++) {
- /* The read routine will normalize `fake_sample` to use the full
- * range of INT16, so we need to compensate in our expected
- * output
- */
-
- expected_sample[i] = fake_sample[i] *
- (1 << (16 - LIS2DW12_RESOLUTION));
- }
-
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- lis2dw12_emul_set_accel_reading(emul, fake_sample);
-
- rv = ms->drv->read(ms, sample);
-
- zassert_equal(rv, EC_SUCCESS, "Expected return val of %d but got %d",
- EC_SUCCESS, rv);
- CHECK_XYZ_EQUALS(sample, expected_sample);
-}
-
-ZTEST_SUITE(lis2dw12, drivers_predicate_post_main, NULL, lis2dw12_before,
- lis2dw12_after, NULL);
diff --git a/zephyr/test/drivers/src/ln9310.c b/zephyr/test/drivers/src/ln9310.c
deleted file mode 100644
index e4bf37c4bd..0000000000
--- a/zephyr/test/drivers/src/ln9310.c
+++ /dev/null
@@ -1,695 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/drivers/emul.h>
-#include <zephyr/kernel.h>
-#include <ztest_assert.h>
-#include <zephyr/drivers/i2c_emul.h>
-
-#include "driver/ln9310.h"
-#include "emul/emul_ln9310.h"
-#include "emul/emul_common_i2c.h"
-#include "timer.h"
-#include "test/drivers/test_state.h"
-
-/*
- * TODO(b/201420132): Implement approach for tests to immediately schedule work
- * to avoid any sleeping
- */
-#define TEST_DELAY_MS 50
-
-/*
- * Chip revisions below LN9310_BC_STS_C_CHIP_REV_FIXED require an alternative
- * software startup to properly initialize and power up.
- */
-#define REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV \
- (LN9310_BC_STS_C_CHIP_REV_FIXED - 1)
-
-ZTEST(ln9310, test_ln9310_read_chip_fails)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LN9310_REG_BC_STS_C);
-
- zassert_true(ln9310_init() != 0, NULL);
- zassert_false(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST(ln9310, test_ln9310_2s_powers_up)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- ln9310_software_enable(true);
-
- k_msleep(TEST_DELAY_MS);
- zassert_true(ln9310_power_good(), NULL);
-}
-
-ZTEST(ln9310, test_ln9310_3s_powers_up)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_3S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- ln9310_software_enable(true);
-
- k_msleep(TEST_DELAY_MS);
- zassert_true(ln9310_power_good(), NULL);
-}
-
-struct startup_workaround_data {
- bool startup_workaround_attempted;
- bool startup_workaround_should_fail;
-};
-
-static int mock_write_fn_intercept_startup_workaround(struct i2c_emul *emul,
- int reg, uint8_t val,
- int bytes, void *data)
-{
- struct startup_workaround_data *test_data = data;
-
- uint8_t startup_workaround_val =
- (LN9310_TEST_MODE_CTRL_FORCE_SC_OUT_PRECHARGE_ON |
- LN9310_TEST_MODE_CTRL_FORCE_SC_OUT_PREDISCHARGE_ON);
-
- test_data->startup_workaround_attempted =
- test_data->startup_workaround_attempted ||
- ((reg == LN9310_REG_TEST_MODE_CTRL) &&
- (val == startup_workaround_val));
-
- if (test_data->startup_workaround_should_fail)
- return -1;
-
- return 1;
-}
-
-ZTEST(ln9310, test_ln9310_2s_cfly_precharge_startup)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
-
- struct i2c_emul *emul = ln9310_emul_get_i2c_emul(emulator);
-
- struct startup_workaround_data test_data = {
- .startup_workaround_attempted = false,
- .startup_workaround_should_fail = false,
- };
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator,
- REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(
- emul, mock_write_fn_intercept_startup_workaround, &test_data);
-
- ln9310_software_enable(true);
- zassert_true(test_data.startup_workaround_attempted, NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_true(ln9310_power_good(), NULL);
-
- ln9310_software_enable(false);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_3s_cfly_precharge_startup)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *emul = ln9310_emul_get_i2c_emul(emulator);
-
- struct startup_workaround_data test_data = {
- .startup_workaround_attempted = false,
- .startup_workaround_should_fail = false,
- };
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_3S);
- ln9310_emul_set_version(emulator,
- REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(
- emul, mock_write_fn_intercept_startup_workaround, &test_data);
-
- ln9310_software_enable(true);
- zassert_true(test_data.startup_workaround_attempted, NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_true(ln9310_power_good(), NULL);
-
- ln9310_software_enable(false);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_cfly_precharge_exceeds_retries)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
-
- struct i2c_emul *emul = ln9310_emul_get_i2c_emul(emulator);
-
- struct startup_workaround_data test_data = {
- .startup_workaround_attempted = false,
- .startup_workaround_should_fail = true,
- };
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /*
- * Battery and chip rev won't matter for statement
- * coverage here so only testing one pair.
- */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator,
- REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(
- emul, mock_write_fn_intercept_startup_workaround, &test_data);
-
- ln9310_software_enable(true);
- zassert_true(test_data.startup_workaround_attempted, NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_battery_unknown)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
-
- zassert_not_null(emulator, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /*
- * Chip rev won't matter for statement
- * cov so only testing one version.
- */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_UNKNOWN);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_true(ln9310_init() != 0, NULL);
- zassert_false(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- ln9310_software_enable(true);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-}
-
-ZTEST(ln9310, test_ln9310_2s_battery_read_fails)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
-
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LN9310_REG_BC_STS_B);
-
- zassert_true(ln9310_init() != 0, NULL);
- zassert_false(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- /* For Battery 2S Versions: Test Read Battery Voltage Failure Too */
- ln9310_emul_reset(emulator);
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LN9310_REG_TRACK_CTRL);
-
- zassert_false(ln9310_init() == 0, NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST(ln9310, test_ln9310_lion_ctrl_reg_fails)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery won't matter here so only testing one version */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, LN9310_REG_LION_CTRL);
-
- zassert_true(ln9310_init() != 0, NULL);
- zassert_false(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- ln9310_software_enable(true);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-
-struct precharge_timeout_data {
- timestamp_t time_to_mock;
- bool handled_clearing_standby_en_bit_timeout;
-};
-
-static int mock_intercept_startup_ctrl_reg(struct i2c_emul *emul, int reg,
- uint8_t val, int bytes, void *data)
-{
- struct precharge_timeout_data *test_data = data;
-
- if (reg == LN9310_REG_STARTUP_CTRL &&
- test_data->handled_clearing_standby_en_bit_timeout == false) {
- if (val == 0) {
- timestamp_t time = get_time();
-
- time.val += 1 + LN9310_CFLY_PRECHARGE_TIMEOUT;
- test_data->time_to_mock = time;
- get_time_mock = &test_data->time_to_mock;
- } else {
- /* ln9310 aborts a startup attempt */
- test_data->handled_clearing_standby_en_bit_timeout =
- true;
- get_time_mock = NULL;
- }
- }
- return 1;
-}
-
-ZTEST(ln9310, test_ln9310_cfly_precharge_timesout)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct precharge_timeout_data test_data = {
- .time_to_mock = {
- .val = -1,
- .le = {
- .lo = -1,
- .hi = -1,
- },
- },
- .handled_clearing_standby_en_bit_timeout = false,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator,
- REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(
- i2c_emul, mock_intercept_startup_ctrl_reg, &test_data);
-
- ln9310_software_enable(true);
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_true(test_data.handled_clearing_standby_en_bit_timeout, NULL);
- /* It only times out on one attempt, it should subsequently startup */
- zassert_true(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_write_func(i2c_emul, NULL, NULL);
-}
-
-struct reg_to_fail_data {
- int reg_access_to_fail;
- int reg_access_fail_countdown;
-};
-
-static int mock_read_intercept_reg_to_fail(struct i2c_emul *emul, int reg,
- uint8_t *val, int bytes, void *data)
-{
- struct reg_to_fail_data *test_data = data;
-
- if (reg == test_data->reg_access_to_fail) {
- test_data->reg_access_fail_countdown--;
- if (test_data->reg_access_fail_countdown <= 0)
- return -1;
- }
- return 1;
-}
-
-ZTEST(ln9310, test_ln9310_interrupt_reg_fail)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct reg_to_fail_data test_data = {
- .reg_access_to_fail = 0,
- .reg_access_fail_countdown = 0,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- i2c_common_emul_set_read_func(
- i2c_emul, mock_read_intercept_reg_to_fail, &test_data);
-
- /* Fail in beginning of software enable */
- test_data.reg_access_to_fail = LN9310_REG_INT1;
- test_data.reg_access_fail_countdown = 1;
-
- ln9310_software_enable(true);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
- zassert_true(test_data.reg_access_fail_countdown <= 0, NULL);
-
- /* Fail in irq interrupt handler */
- test_data.reg_access_fail_countdown = 2;
-
- ln9310_software_enable(true);
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
- zassert_false(ln9310_power_good(), NULL);
- zassert_true(test_data.reg_access_fail_countdown <= 0, NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_sys_sts_reg_fail)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct reg_to_fail_data test_data = {
- .reg_access_to_fail = 0,
- .reg_access_fail_countdown = 0,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- i2c_common_emul_set_read_func(
- i2c_emul, &mock_read_intercept_reg_to_fail, &test_data);
-
- /* Register only read once and in the interrupt handler */
- test_data.reg_access_to_fail = LN9310_REG_SYS_STS;
- test_data.reg_access_fail_countdown = 1;
-
- ln9310_software_enable(1);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
-
- zassert_false(ln9310_power_good(), NULL);
- zassert_true(test_data.reg_access_fail_countdown <= 0, NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
-}
-
-struct reg_to_intercept {
- int reg;
- uint8_t replace_val;
-};
-
-static int mock_read_interceptor(struct i2c_emul *emul, int reg, uint8_t *val,
- int bytes, void *data)
-{
- struct reg_to_intercept *test_data = data;
-
- if (test_data->reg == reg) {
- *val = test_data->replace_val;
- return 0;
- }
-
- return 1;
-}
-
-ZTEST(ln9310, test_ln9310_reset_explicit_detected_startup)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct reg_to_intercept test_data = {
- .reg = LN9310_REG_LION_CTRL,
- .replace_val = 0,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, &mock_read_interceptor,
- &test_data);
-
- ln9310_software_enable(true);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
-
- zassert_true(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_update_startup_seq_fails)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct reg_to_fail_data test_data = {
- .reg_access_to_fail = LN9310_REG_CFG_4,
- .reg_access_fail_countdown = 1,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- /* Requires older version of chip */
- ln9310_emul_set_version(emulator,
- REQUIRES_CFLY_PRECHARGE_STARTUP_CHIP_REV);
-
- i2c_common_emul_set_read_func(
- i2c_emul, &mock_read_intercept_reg_to_fail, &test_data);
-
- zassert_false(ln9310_init() == 0, NULL);
- zassert_false(ln9310_emul_is_init(emulator), NULL);
-
- ln9310_software_enable(true);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
-
- zassert_false(ln9310_power_good(), NULL);
- zassert_true(test_data.reg_access_fail_countdown <= 0, NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
-}
-
-ZTEST(ln9310, test_ln9310_state_change_only_on_mode_change_interrupt)
-{
- const struct emul *emulator =
- emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310)));
- struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator);
- struct reg_to_intercept test_data = {
- .reg = LN9310_REG_INT1,
- .replace_val = 0,
- };
-
- zassert_not_null(emulator, NULL);
- zassert_not_null(i2c_emul, NULL);
-
- ln9310_emul_set_context(emulator);
- ln9310_emul_reset(emulator);
- /* Battery and chip rev won't matter here so only testing one pair */
- ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S);
- ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED);
-
- zassert_ok(ln9310_init(), NULL);
- zassert_true(ln9310_emul_is_init(emulator), NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, &mock_read_interceptor,
- &test_data);
-
- ln9310_software_enable(true);
-
- /* TODO(b/201420132) */
- k_msleep(TEST_DELAY_MS);
-
- zassert_false(ln9310_power_good(), NULL);
-
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
-}
-
-static inline void reset_ln9310_state(void)
-{
- ln9310_reset_to_initial_state();
- get_time_mock = NULL;
-}
-
-static void ln9310_before(void *state)
-{
- ARG_UNUSED(state);
- reset_ln9310_state();
-}
-
-static void ln9310_after(void *state)
-{
- ARG_UNUSED(state);
- reset_ln9310_state();
-}
-
-ZTEST_SUITE(ln9310, drivers_predicate_post_main, NULL, ln9310_before,
- ln9310_after, NULL);
diff --git a/zephyr/test/drivers/src/main.c b/zephyr/test/drivers/src/main.c
deleted file mode 100644
index 319d42e3ad..0000000000
--- a/zephyr/test/drivers/src/main.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include "ec_app_main.h"
-#include "test/drivers/test_state.h"
-
-bool drivers_predicate_pre_main(const void *state)
-{
- return ((struct test_state *)state)->ec_app_main_run == false;
-}
-
-bool drivers_predicate_post_main(const void *state)
-{
- return !drivers_predicate_pre_main(state);
-}
-
-void test_main(void)
-{
- struct test_state state = {
- .ec_app_main_run = false,
- };
-
- /* Run all the suites that depend on main not being called yet */
- ztest_run_test_suites(&state);
-
- ec_app_main();
- state.ec_app_main_run = true;
-
- /* Run all the suites that depend on main being called */
- ztest_run_test_suites(&state);
-
- /* Check that every suite ran */
- ztest_verify_all_test_suites_ran();
-}
diff --git a/zephyr/test/drivers/src/motion_sense/motion_sense.c b/zephyr/test/drivers/src/motion_sense/motion_sense.c
deleted file mode 100644
index 5b6839bbae..0000000000
--- a/zephyr/test/drivers/src/motion_sense/motion_sense.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "motion_sense.h"
-#include "test/drivers/test_state.h"
-
-ZTEST_SUITE(motion_sense, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
-
-ZTEST_USER(motion_sense, ec_motion_sensor_fill_values)
-{
- struct ec_response_motion_sensor_data dst = {
- .data = { 1, 2, 3 },
- };
- const int32_t v[] = { 4, 5, 6 };
-
- ec_motion_sensor_fill_values(&dst, v);
- zassert_equal(dst.data[0], v[0], NULL);
- zassert_equal(dst.data[1], v[1], NULL);
- zassert_equal(dst.data[2], v[2], NULL);
-}
-
-ZTEST_USER(motion_sense, ec_motion_sensor_clamp_i16)
-{
- zassert_equal(ec_motion_sensor_clamp_i16(0), 0, NULL);
- zassert_equal(ec_motion_sensor_clamp_i16(200), 200, NULL);
- zassert_equal(ec_motion_sensor_clamp_i16(-512), -512, NULL);
- zassert_equal(ec_motion_sensor_clamp_i16(INT16_MAX + 1), INT16_MAX,
- NULL);
- zassert_equal(ec_motion_sensor_clamp_i16(INT16_MIN - 1), INT16_MIN,
- NULL);
-}
diff --git a/zephyr/test/drivers/src/panic.c b/zephyr/test/drivers/src/panic.c
deleted file mode 100644
index 2615c22156..0000000000
--- a/zephyr/test/drivers/src/panic.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/**
- * @file
- * @brief Unit Tests for panic.
- */
-
-#include <zephyr/device.h>
-
-#include <zephyr/logging/log.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "panic.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/test_state.h"
-
-/**
- * @brief Test Suite: Verifies panic functionality.
- */
-ZTEST_SUITE(panic, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
-
-/**
- * @brief TestPurpose: Verify panic set/get reason.
- *
- * @details
- * Validate panic set/get reason.
- *
- * Expected Results
- * - Success
- */
-ZTEST(panic, test_panic_reason)
-{
- uint32_t reason;
- uint32_t info;
- uint8_t exception;
- struct panic_data *pdata = panic_get_data();
-
- zassert_is_null(pdata, NULL);
- panic_set_reason(PANIC_SW_WATCHDOG, 0, 0);
-
- panic_get_reason(&reason, &info, &exception);
-
- zassert_equal(PANIC_SW_WATCHDOG, reason, NULL);
- zassert_equal(0, info, NULL);
- zassert_equal(0, exception, NULL);
-
- pdata = panic_get_data();
- zassert_not_null(pdata, NULL);
- zassert_equal(pdata->struct_version, 2, NULL);
- zassert_equal(pdata->magic, PANIC_DATA_MAGIC, NULL);
- zassert_equal(pdata->struct_size, CONFIG_PANIC_DATA_SIZE, NULL);
-
- panic_data_print(pdata);
-}
diff --git a/zephyr/test/drivers/src/power_common.c b/zephyr/test/drivers/src/power_common.c
deleted file mode 100644
index 03832b6c0c..0000000000
--- a/zephyr/test/drivers/src/power_common.c
+++ /dev/null
@@ -1,661 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/shell/shell_uart.h>
-
-#include "chipset.h"
-#include "common.h"
-#include "extpower.h"
-#include "hooks.h"
-#include "host_command.h"
-#include "power.h"
-#include "test/drivers/stubs.h"
-#include "task.h"
-#include "ec_tasks.h"
-#include "test/drivers/test_state.h"
-
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_smart_battery.h"
-
-#include "battery.h"
-#include "battery_smart.h"
-#include "test/drivers/utils.h"
-
-#define BATTERY_ORD DT_DEP_ORD(DT_NODELABEL(battery))
-
-/* Description of all power states with chipset state masks */
-static struct {
- /* Power state */
- enum power_state p_state;
- /*
- * CHIPSET_STATE_* to which this state transition (the same as
- * transition_from for static states)
- */
- int transition_to;
- /* CHIPSET_STATE_* from which this state transition */
- int transition_from;
-} test_power_state_desc[] = {
- {
- .p_state = POWER_G3,
- .transition_to = CHIPSET_STATE_HARD_OFF,
- .transition_from = CHIPSET_STATE_HARD_OFF,
- },
- {
- .p_state = POWER_G3S5,
- .transition_to = CHIPSET_STATE_SOFT_OFF,
- .transition_from = CHIPSET_STATE_HARD_OFF,
- },
- {
- .p_state = POWER_S5G3,
- .transition_to = CHIPSET_STATE_HARD_OFF,
- .transition_from = CHIPSET_STATE_SOFT_OFF,
- },
- {
- .p_state = POWER_S5,
- .transition_to = CHIPSET_STATE_SOFT_OFF,
- .transition_from = CHIPSET_STATE_SOFT_OFF,
- },
- {
- .p_state = POWER_S5S3,
- .transition_to = CHIPSET_STATE_SUSPEND,
- .transition_from = CHIPSET_STATE_SOFT_OFF,
- },
- {
- .p_state = POWER_S3S5,
- .transition_to = CHIPSET_STATE_SOFT_OFF,
- .transition_from = CHIPSET_STATE_SUSPEND,
- },
- {
- .p_state = POWER_S3,
- .transition_to = CHIPSET_STATE_SUSPEND,
- .transition_from = CHIPSET_STATE_SUSPEND,
- },
- {
- .p_state = POWER_S3S0,
- .transition_to = CHIPSET_STATE_ON,
- .transition_from = CHIPSET_STATE_SUSPEND,
- },
- {
- .p_state = POWER_S0S3,
- .transition_to = CHIPSET_STATE_SUSPEND,
- .transition_from = CHIPSET_STATE_ON,
- },
- {
- .p_state = POWER_S0,
- .transition_to = CHIPSET_STATE_ON,
- .transition_from = CHIPSET_STATE_ON,
- },
-};
-
-/*
- * Chipset state masks used by chipset_in_state and
- * chipset_in_or_transitioning_to_state tests
- */
-static int in_state_test_masks[] = {
- CHIPSET_STATE_HARD_OFF,
- CHIPSET_STATE_SOFT_OFF,
- CHIPSET_STATE_SUSPEND,
- CHIPSET_STATE_ON,
- CHIPSET_STATE_STANDBY,
- CHIPSET_STATE_ANY_OFF,
- CHIPSET_STATE_ANY_SUSPEND,
- CHIPSET_STATE_ANY_SUSPEND | CHIPSET_STATE_SOFT_OFF,
-};
-
-/** Test chipset_in_state() for each state */
-ZTEST(power_common_no_tasks, test_power_chipset_in_state)
-{
- bool expected_in_state;
- bool transition_from;
- bool transition_to;
- bool in_state;
- int mask;
-
- for (int i = 0; i < ARRAY_SIZE(test_power_state_desc); i++) {
- /* Set given power state */
- power_set_state(test_power_state_desc[i].p_state);
- /* Test with selected state masks */
- for (int j = 0; j < ARRAY_SIZE(in_state_test_masks); j++) {
- mask = in_state_test_masks[j];
- /*
- * Currently tested mask match with state if it match
- * with transition_to and from chipset states
- */
- transition_to = mask &
- test_power_state_desc[i].transition_to;
- transition_from =
- mask & test_power_state_desc[i].transition_from;
- expected_in_state = transition_to && transition_from;
- in_state = chipset_in_state(mask);
- zassert_equal(expected_in_state, in_state,
- "Wrong chipset_in_state() == %d, "
- "should be %d; mask 0x%x; power state %d "
- "in test case %d",
- in_state, expected_in_state, mask,
- test_power_state_desc[i].p_state, i);
- }
- }
-}
-
-/** Test chipset_in_or_transitioning_to_state() for each state */
-ZTEST(power_common_no_tasks, test_power_chipset_in_or_transitioning_to_state)
-{
- bool expected_in_state;
- bool in_state;
- int mask;
-
- for (int i = 0; i < ARRAY_SIZE(test_power_state_desc); i++) {
- /* Set given power state */
- power_set_state(test_power_state_desc[i].p_state);
- /* Test with selected state masks */
- for (int j = 0; j < ARRAY_SIZE(in_state_test_masks); j++) {
- mask = in_state_test_masks[j];
- /*
- * Currently tested mask match with state if it match
- * with transition_to chipset state
- */
- expected_in_state =
- mask & test_power_state_desc[i].transition_to;
- in_state = chipset_in_or_transitioning_to_state(mask);
- zassert_equal(expected_in_state, in_state,
- "Wrong "
- "chipset_in_or_transitioning_to_state() "
- "== %d, should be %d; mask 0x%x; "
- "power state %d in test case %d",
- in_state, expected_in_state, mask,
- test_power_state_desc[i].p_state, i);
- }
- }
-}
-
-/* Test using chipset_exit_hard_off() in different power states. The only
- * way to test the value of want_g3_exit is to set the power state to G3
- * and then to see if test_power_common_state() transitions to G3S5 or not.
- */
-ZTEST(power_common_no_tasks, test_power_exit_hard_off)
-{
- /*
- * Every test runs in a new thread, we need to add this thread to the
- * dynamic shimmed tasks or this test will fail.
- */
- set_test_runner_tid();
-
- /* Force initial state */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3, power_get_state(), NULL);
-
- /* Test after exit hard off, we reach G3S5 */
- chipset_exit_hard_off();
- test_power_common_state();
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-
- /* Go back to G3 and check we stay there */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3, power_get_state(), NULL);
-
- /* Exit G3 again */
- chipset_exit_hard_off();
- test_power_common_state();
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-
- /* Go to S5G3 */
- power_set_state(POWER_S5G3);
- test_power_common_state();
- zassert_equal(POWER_S5G3, power_get_state(), NULL);
-
- /* Test exit hard off in S5G3 -- should set want_g3_exit */
- chipset_exit_hard_off();
- /* Go back to G3 and check we exit it to G3S5 */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-
- /* Test exit hard off is cleared on entering S5 */
- chipset_exit_hard_off();
- power_set_state(POWER_S5);
- test_power_common_state();
- zassert_equal(POWER_S5, power_get_state(), NULL);
-
- /* Go back to G3 and check we stay in G3 */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3, power_get_state(), NULL);
-
- /* Test exit hard off doesn't work on other states */
- power_set_state(POWER_S5S3);
- test_power_common_state();
- zassert_equal(POWER_S5S3, power_get_state(), NULL);
- chipset_exit_hard_off();
- test_power_common_state();
-
- /* Go back to G3 and check we stay in G3 */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3, power_get_state(), NULL);
-}
-
-/* Test reboot ap on g3 host command is triggering reboot */
-ZTEST(power_common_no_tasks, test_power_reboot_ap_at_g3)
-{
- struct ec_params_reboot_ap_on_g3_v1 params;
- struct host_cmd_handler_args args = {
- .command = EC_CMD_REBOOT_AP_ON_G3,
- .version = 0,
- .send_response = stub_send_response_callback,
- .params = &params,
- .params_size = sizeof(params),
- };
- int delay_ms;
- int64_t before_time;
-
- /*
- * Every test runs in a new thread, we need to add this thread to the
- * dynamic shimmed tasks or this test will fail.
- */
- set_test_runner_tid();
-
- /* Force initial state S0 */
- power_set_state(POWER_S0);
- test_power_common_state();
- zassert_equal(POWER_S0, power_get_state(), NULL);
-
- /* Test version 0 (no delay argument) */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- /* Go to G3 and check if reboot is triggered */
- power_set_state(POWER_G3);
- test_power_common_state();
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-
- /* Test version 1 (with delay argument) */
- args.version = 1;
- delay_ms = 3000;
- params.reboot_ap_at_g3_delay = delay_ms / 1000; /* in seconds */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- /* Go to G3 and check if reboot is triggered after delay */
- power_set_state(POWER_G3);
- before_time = k_uptime_get();
- test_power_common_state();
- zassert_true(k_uptime_delta(&before_time) >= 3000, NULL);
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-}
-
-/** Test setting cutoff and stay-up battery levels through host command */
-ZTEST(power_common, test_power_hc_smart_discharge)
-{
- struct ec_response_smart_discharge response;
- struct ec_params_smart_discharge params;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_SMART_DISCHARGE, 0, response, params);
- struct i2c_emul *emul;
- int hours_to_zero;
- int hibern_drate;
- int cutoff_drate;
- int stayup_cap;
- int cutoff_cap;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
-
- /* Set up host command parameters */
- params.flags = EC_SMART_DISCHARGE_FLAGS_SET;
-
- /* Test fail when battery capacity is not available */
- i2c_common_emul_set_read_fail_reg(emul, SB_FULL_CHARGE_CAPACITY);
- zassert_equal(EC_RES_UNAVAILABLE, host_command_process(&args), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup discharge rates */
- params.drate.hibern = 10;
- params.drate.cutoff = 100;
- /* Test fail on higher discahrge in hibernation than cutoff */
- zassert_equal(EC_RES_INVALID_PARAM, host_command_process(&args), NULL);
-
- /* Setup discharge rates */
- params.drate.hibern = 10;
- params.drate.cutoff = 0;
- /* Test fail on only one discharge rate set to 0 */
- zassert_equal(EC_RES_INVALID_PARAM, host_command_process(&args), NULL);
-
- /* Setup correct parameters */
- hours_to_zero = 1000;
- hibern_drate = 100; /* uA */
- cutoff_drate = 10; /* uA */
- /* Need at least 100 mA capacity to stay 1000h using 0.1mAh */
- stayup_cap = hibern_drate * hours_to_zero / 1000;
- /* Need at least 10 mA capacity to stay 1000h using 0.01mAh */
- cutoff_cap = cutoff_drate * hours_to_zero / 1000;
-
- params.drate.hibern = hibern_drate;
- params.drate.cutoff = cutoff_drate;
- params.hours_to_zero = hours_to_zero;
-
- /* Test if correct values are set */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- zassert_equal(hibern_drate, response.drate.hibern, NULL);
- zassert_equal(cutoff_drate, response.drate.cutoff, NULL);
- zassert_equal(hours_to_zero, response.hours_to_zero, NULL);
- zassert_equal(stayup_cap, response.dzone.stayup, NULL);
- zassert_equal(cutoff_cap, response.dzone.cutoff, NULL);
-
- /* Setup discharge rate to 0 */
- params.drate.hibern = 0;
- params.drate.cutoff = 0;
- /* Update hours to zero */
- hours_to_zero = 2000;
- params.hours_to_zero = hours_to_zero;
- /* Need at least 200 mA capacity to stay 2000h using 0.1mAh */
- stayup_cap = hibern_drate * hours_to_zero / 1000;
- /* Need at least 20 mA capacity to stay 2000h using 0.01mAh */
- cutoff_cap = cutoff_drate * hours_to_zero / 1000;
-
- /* Test that command doesn't change drate but apply new hours to zero */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- zassert_equal(hibern_drate, response.drate.hibern, NULL);
- zassert_equal(cutoff_drate, response.drate.cutoff, NULL);
- zassert_equal(hours_to_zero, response.hours_to_zero, NULL);
- zassert_equal(stayup_cap, response.dzone.stayup, NULL);
- zassert_equal(cutoff_cap, response.dzone.cutoff, NULL);
-
- /* Setup any parameters != 0 */
- params.drate.hibern = 1000;
- params.drate.cutoff = 1000;
- /* Clear set flag */
- params.flags = 0;
-
- /* Test that command doesn't change drate and dzone */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- zassert_equal(hibern_drate, response.drate.hibern, NULL);
- zassert_equal(cutoff_drate, response.drate.cutoff, NULL);
- zassert_equal(hours_to_zero, response.hours_to_zero, NULL);
- zassert_equal(stayup_cap, response.dzone.stayup, NULL);
- zassert_equal(cutoff_cap, response.dzone.cutoff, NULL);
-}
-
-/**
- * Test if default board_system_is_idle() recognize cutoff and stay-up
- * levels correctly.
- */
-ZTEST(power_common, test_power_board_system_is_idle)
-{
- struct ec_response_smart_discharge response;
- struct ec_params_smart_discharge params;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_SMART_DISCHARGE, 0, response, params);
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- uint64_t last_shutdown_time = 0;
- uint64_t target;
- uint64_t now;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Set up host command parameters */
- params.drate.hibern = 100; /* uA */
- params.drate.cutoff = 10; /* uA */
- params.hours_to_zero = 1000; /* h */
- params.flags = EC_SMART_DISCHARGE_FLAGS_SET;
- /* Set stay-up and cutoff zones */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- /* Test shutdown ignore is send when target time is in future */
- target = 1125;
- now = 1000;
- zassert_equal(CRITICAL_SHUTDOWN_IGNORE,
- board_system_is_idle(last_shutdown_time, &target, now),
- NULL);
-
- /* Set "now" time after target time */
- now = target + 30;
-
- /*
- * Test hibernation is requested when battery remaining capacity
- * is not available
- */
- i2c_common_emul_set_read_fail_reg(emul, SB_REMAINING_CAPACITY);
- zassert_equal(CRITICAL_SHUTDOWN_HIBERNATE,
- board_system_is_idle(last_shutdown_time, &target, now),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Setup remaining capacity to trigger cutoff */
- bat->cap = response.dzone.cutoff - 5;
- zassert_equal(CRITICAL_SHUTDOWN_CUTOFF,
- board_system_is_idle(last_shutdown_time, &target, now),
- NULL);
-
- /* Setup remaining capacity to trigger stay-up and ignore shutdown */
- bat->cap = response.dzone.stayup - 5;
- zassert_equal(CRITICAL_SHUTDOWN_IGNORE,
- board_system_is_idle(last_shutdown_time, &target, now),
- NULL);
-
- /* Setup remaining capacity to be in safe zone to hibernate */
- bat->cap = response.dzone.stayup + 5;
- zassert_equal(CRITICAL_SHUTDOWN_HIBERNATE,
- board_system_is_idle(last_shutdown_time, &target, now),
- NULL);
-}
-
-/**
- * Common setup for hibernation delay tests. Smart discharge zone is setup,
- * battery is set in safe zone (which trigger hibernation), power state is
- * set to G3 and AC is disabled. system_hibernate mock is reset.
- */
-static void setup_hibernation_delay(void *state)
-{
- struct ec_response_smart_discharge response;
- struct ec_params_smart_discharge params;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_SMART_DISCHARGE, 0, response, params);
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- ARG_UNUSED(state);
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Setup smart discharge zone and set capacity to safe zone */
- params.drate.hibern = 100; /* uA */
- params.drate.cutoff = 10; /* uA */
- params.hours_to_zero = 10000; /* h */
- params.flags = EC_SMART_DISCHARGE_FLAGS_SET;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- /*
- * Make sure that battery is in safe zone in good condition to
- * not trigger hibernate in charge_state_v2.c
- */
- bat->cap = response.dzone.stayup + 5;
- bat->volt = battery_get_info()->voltage_normal;
-
- /* Force initial state */
- test_set_chipset_to_g3();
-
- /* Disable AC */
- set_ac_enabled(false);
-
- RESET_FAKE(system_hibernate);
-}
-
-/** Test setting hibernation delay through host command */
-ZTEST(power_common_hibernation, test_power_hc_hibernation_delay)
-{
- struct ec_response_hibernation_delay response;
- struct ec_params_hibernation_delay params;
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_HIBERNATION_DELAY, 0, response, params);
- uint32_t h_delay;
- int sleep_time;
-
- /* Ensure the lid is closed so AC connect does not boot system */
- zassert_ok(shell_execute_cmd(get_ec_shell(), "lidclose"), NULL);
-
- zassert_equal(power_get_state(), POWER_G3,
- "Power state is %d, expected G3", power_get_state());
- /* This is a no-op, but it will reset the last_shutdown_time. */
- power_set_state(POWER_G3);
-
- /* Set hibernate delay */
- h_delay = 9;
- params.seconds = h_delay;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- zassert_equal(0, response.time_g3, "Time from last G3 enter %d != 0",
- response.time_g3);
- zassert_equal(h_delay, response.time_remaining,
- "Time to hibernation %d != %d", response.time_remaining,
- h_delay);
- zassert_equal(h_delay, response.hibernate_delay,
- "Hibernation delay %d != %d", h_delay,
- response.hibernate_delay);
-
- /* Kick chipset task to process new hibernation delay */
- task_wake(TASK_ID_CHIPSET);
- /* Wait some arbitrary time less than hibernate delay */
- sleep_time = 6;
- k_msleep(sleep_time * 1000);
-
- /* Get hibernate delay */
- params.seconds = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- zassert_equal(sleep_time, response.time_g3,
- "Time from last G3 enter %d != %d", response.time_g3,
- sleep_time);
- zassert_equal(h_delay - sleep_time, response.time_remaining,
- "Time to hibernation %d != %d", response.time_remaining,
- h_delay - sleep_time);
- zassert_equal(h_delay, response.hibernate_delay,
- "Hibernation delay %d != %d", h_delay,
- response.hibernate_delay);
- zassert_equal(0, system_hibernate_fake.call_count,
- "system_hibernate() shouldn't be called before delay");
-
- /* Wait to end of the hibenate delay */
- k_msleep((h_delay - sleep_time) * 1000);
-
- /* Get hibernate delay */
- params.seconds = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- zassert_equal(h_delay, response.time_g3,
- "Time from last G3 enter %d != %d", response.time_g3,
- h_delay);
- zassert_equal(0, response.time_remaining, "Time to hibernation %d != 0",
- response.time_remaining);
- zassert_equal(h_delay, response.hibernate_delay,
- "Hibernation delay %d != %d", h_delay,
- response.hibernate_delay);
- zassert_equal(1, system_hibernate_fake.call_count,
- "system_hibernate() should be called after delay %d",
- system_hibernate_fake.call_count);
-
- /* Wait some more time */
- k_msleep(2000);
-
- /* Get hibernate delay */
- params.seconds = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- /* After hibernation, remaining time shouldn't be negative */
- zassert_equal(0, response.time_remaining, "Time to hibernation %d != 0",
- response.time_remaining);
-
- /* Enable AC */
- set_ac_enabled(true);
-
- /* Reset system_hibernate fake to check that it is not called on AC */
- RESET_FAKE(system_hibernate);
- /* Allow chipset task to spin with enabled AC */
- task_wake(TASK_ID_CHIPSET);
- k_msleep(1);
-
- /* Get hibernate delay */
- params.seconds = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- zassert_equal(0, response.time_g3,
- "Time from last G3 enter %d should be 0 on AC",
- response.time_g3);
- zassert_equal(0, system_hibernate_fake.call_count,
- "system_hibernate() shouldn't be called on AC");
-
- /* Disable AC */
- set_ac_enabled(false);
-
- /* Go to different state */
- power_set_state(POWER_G3S5);
- zassert_equal(POWER_G3S5, power_get_state(), NULL);
-
- /* Get hibernate delay */
- params.seconds = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
-
- zassert_equal(0, response.time_g3,
- "Time from last G3 enter %d should be 0 on state != G3",
- response.time_g3);
-}
-
-/** Test setting hibernation delay through UART command */
-ZTEST(power_common_hibernation, test_power_cmd_hibernation_delay)
-{
- uint32_t h_delay;
- int sleep_time;
-
- zassert_equal(power_get_state(), POWER_G3,
- "Power state is %d, expected G3", power_get_state());
- /* This is a no-op, but it will reset the last_shutdown_time. */
- power_set_state(POWER_G3);
-
- /* Test success on call without argument */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "hibdelay"),
- NULL);
-
- /* Test error on hibernation delay argument that is not a number */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "hibdelay test1"),
- NULL);
-
- /* Set hibernate delay */
- h_delay = 3;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "hibdelay 3"),
- NULL);
-
- /* Kick chipset task to process new hibernation delay */
- task_wake(TASK_ID_CHIPSET);
- /* Wait some arbitrary time less than hibernate delay */
- sleep_time = 2;
- k_msleep(sleep_time * 1000);
-
- zassert_equal(0, system_hibernate_fake.call_count,
- "system_hibernate() shouldn't be called before delay");
-
- /* Wait to end of the hibenate delay */
- k_msleep((h_delay - sleep_time) * 1000);
-
- zassert_equal(1, system_hibernate_fake.call_count,
- "system_hibernate() should be called after delay %d",
- system_hibernate_fake.call_count);
-}
-
-ZTEST_SUITE(power_common_no_tasks, drivers_predicate_pre_main, NULL, NULL, NULL,
- NULL);
-
-ZTEST_SUITE(power_common, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
-
-ZTEST_SUITE(power_common_hibernation, drivers_predicate_post_main, NULL,
- setup_hibernation_delay, NULL, NULL);
diff --git a/zephyr/test/drivers/src/ppc_sn5s330.c b/zephyr/test/drivers/src/ppc_sn5s330.c
deleted file mode 100644
index bd38f874f7..0000000000
--- a/zephyr/test/drivers/src/ppc_sn5s330.c
+++ /dev/null
@@ -1,688 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/kernel.h>
-#include <zephyr/device.h>
-#include <zephyr/devicetree.h>
-#include <zephyr/drivers/emul.h>
-#include <ztest.h>
-#include <fff.h>
-
-#include "driver/ppc/sn5s330.h"
-#include "driver/ppc/sn5s330_public.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_sn5s330.h"
-#include "usbc_ppc.h"
-#include "test/drivers/test_mocks.h"
-#include "test/drivers/test_state.h"
-
-/** This must match the index of the sn5s330 in ppc_chips[] */
-#define SN5S330_PORT 0
-#define EMUL emul_get_binding(DT_LABEL(DT_NODELABEL(sn5s330_emul)))
-#define FUNC_SET1_ILIMPP1_MSK 0x1F
-#define SN5S330_INTERRUPT_DELAYMS 15
-
-FAKE_VOID_FUNC(sn5s330_emul_interrupt_set_stub);
-
-/*
- * TODO(b/203364783): Exclude other threads from interacting with the emulator
- * to avoid test flakiness
- */
-
-struct intercept_write_data {
- int reg_to_intercept;
- uint8_t val_intercepted;
-};
-
-struct intercept_read_data {
- int reg_to_intercept;
- bool replace_reg_val;
- uint8_t replacement_val;
-};
-
-static int intercept_read_func(struct i2c_emul *emul, int reg, uint8_t *val,
- int bytes, void *data)
-{
- struct intercept_read_data *test_data = data;
-
- if (test_data->reg_to_intercept && test_data->replace_reg_val)
- *val = test_data->replacement_val;
-
- return EC_SUCCESS;
-}
-
-static int intercept_write_func(struct i2c_emul *emul, int reg, uint8_t val,
- int bytes, void *data)
-{
- struct intercept_write_data *test_data = data;
-
- if (test_data->reg_to_intercept == reg)
- test_data->val_intercepted = val;
-
- return 1;
-}
-
-static int fail_until_write_func(struct i2c_emul *emul, int reg, uint8_t val,
- int bytes, void *data)
-{
- uint32_t *count = data;
-
- if (*count != 0) {
- *count -= 1;
- return -EIO;
- }
- return 1;
-}
-
-ZTEST(ppc_sn5s330, test_fail_once_func_set1)
-{
- const struct emul *emul = EMUL;
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(emul);
- uint32_t count = 1;
- uint8_t func_set1_value;
-
- i2c_common_emul_set_write_func(i2c_emul, fail_until_write_func, &count);
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
- zassert_equal(count, 0, NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET1, &func_set1_value);
- zassert_true((func_set1_value & SN5S330_ILIM_1_62) != 0, NULL);
- i2c_common_emul_set_write_func(i2c_emul, NULL, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_dead_battery_boot_force_pp2_fets_set)
-{
- const struct emul *emul = EMUL;
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(emul);
- struct intercept_write_data test_write_data = {
- .reg_to_intercept = SN5S330_FUNC_SET3,
- .val_intercepted = 0,
- };
- struct intercept_read_data test_read_data = {
- .reg_to_intercept = SN5S330_INT_STATUS_REG4,
- .replace_reg_val = true,
- .replacement_val = SN5S330_DB_BOOT,
- };
-
- i2c_common_emul_set_write_func(i2c_emul, intercept_write_func,
- &test_write_data);
- i2c_common_emul_set_read_func(i2c_emul, intercept_read_func,
- &test_read_data);
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /*
- * Although the device enables PP2_FET on dead battery boot by setting
- * the PP2_EN bit, the driver also force sets this bit during dead
- * battery boot by writing that bit to the FUNC_SET3 reg.
- *
- * TODO(b/207034759): Verify need or remove redundant PP2 set.
- */
- zassert_true(test_write_data.val_intercepted & SN5S330_PP2_EN, NULL);
- zassert_false(sn5s330_drv.is_sourcing_vbus(SN5S330_PORT), NULL);
-}
-
-ZTEST(ppc_sn5s330, test_enter_low_power_mode)
-{
- const struct emul *emul = EMUL;
-
- uint8_t func_set2_reg;
- uint8_t func_set3_reg;
- uint8_t func_set4_reg;
- uint8_t func_set9_reg;
-
- /*
- * Requirements were extracted from TI's recommended changes for octopus
- * to lower power use during hibernate as well as the follow up changes
- * we made to allow the device to wake up from hibernate.
- *
- * For Reference: b/111006203#comment35
- */
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
- zassert_ok(sn5s330_drv.enter_low_power_mode(SN5S330_PORT), NULL);
-
- /* 1) Verify VBUS power paths are off */
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_equal(func_set3_reg & SN5S330_PP1_EN, 0, NULL);
- zassert_equal(func_set3_reg & SN5S330_PP2_EN, 0, NULL);
-
- /* 2) Verify VCONN power path is off */
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET4, &func_set4_reg);
- zassert_not_equal(func_set4_reg & SN5S330_CC_EN, 0, NULL);
- zassert_equal(func_set4_reg & SN5S330_VCONN_EN, 0, NULL);
-
- /* 3) Verify SBU FET is off */
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET2, &func_set2_reg);
- zassert_equal(func_set2_reg & SN5S330_SBU_EN, 0, NULL);
-
- /* 4) Verify VBUS and SBU OVP comparators are off */
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET9, &func_set9_reg);
- zassert_equal(func_set9_reg & SN5S330_FORCE_OVP_EN_SBU, 0, NULL);
- zassert_equal(func_set9_reg & SN5S330_PWR_OVR_VBUS, 0, NULL);
- zassert_not_equal(func_set9_reg & SN5S330_OVP_EN_CC, 0, NULL);
- zassert_equal(func_set9_reg & SN5S330_FORCE_ON_VBUS_OVP, 0, NULL);
- zassert_equal(func_set9_reg & SN5S330_FORCE_ON_VBUS_UVP, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_vbus_source_sink_enable)
-{
- const struct emul *emul = EMUL;
- uint8_t func_set3_reg;
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /* Test enable/disable VBUS source FET */
- zassert_ok(sn5s330_drv.vbus_source_enable(SN5S330_PORT, true), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_not_equal(func_set3_reg & SN5S330_PP1_EN, 0, NULL);
-
- zassert_ok(sn5s330_drv.vbus_source_enable(SN5S330_PORT, false), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_equal(func_set3_reg & SN5S330_PP1_EN, 0, NULL);
-
- /* Test enable/disable VBUS sink FET */
- zassert_ok(sn5s330_drv.vbus_sink_enable(SN5S330_PORT, true), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_not_equal(func_set3_reg & SN5S330_PP2_EN, 0, NULL);
-
- zassert_ok(sn5s330_drv.vbus_sink_enable(SN5S330_PORT, false), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_equal(func_set3_reg & SN5S330_PP2_EN, 0, NULL);
-}
-
-/* This test depends on EC GIPO initialization happening before I2C */
-BUILD_ASSERT(
- CONFIG_PLATFORM_EC_GPIO_INIT_PRIORITY < CONFIG_I2C_INIT_PRIORITY,
- "GPIO initialization must happen before I2C");
-ZTEST(ppc_sn5s330, test_vbus_discharge)
-{
- const struct emul *emul = EMUL;
- uint8_t func_set3_reg;
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /* Test enable/disable VBUS discharging */
- zassert_ok(sn5s330_drv.discharge_vbus(SN5S330_PORT, true), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_not_equal(func_set3_reg & SN5S330_VBUS_DISCH_EN, 0, NULL);
-
- zassert_ok(sn5s330_drv.discharge_vbus(SN5S330_PORT, false), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET3, &func_set3_reg);
- zassert_equal(func_set3_reg & SN5S330_VBUS_DISCH_EN, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_set_vbus_source_current_limit)
-{
- const struct emul *emul = EMUL;
- uint8_t func_set1_reg;
-
- /* Test every TCPC Pull Resistance Value */
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /* USB */
- zassert_ok(sn5s330_drv.set_vbus_source_current_limit(SN5S330_PORT,
- TYPEC_RP_USB),
- NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET1, &func_set1_reg);
- zassert_equal(func_set1_reg & FUNC_SET1_ILIMPP1_MSK, SN5S330_ILIM_0_63,
- NULL);
-
- /* 1.5A */
- zassert_ok(sn5s330_drv.set_vbus_source_current_limit(SN5S330_PORT,
- TYPEC_RP_1A5),
- NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET1, &func_set1_reg);
- zassert_equal(func_set1_reg & FUNC_SET1_ILIMPP1_MSK, SN5S330_ILIM_1_62,
- NULL);
-
- /* 3.0A */
- zassert_ok(sn5s330_drv.set_vbus_source_current_limit(SN5S330_PORT,
- TYPEC_RP_3A0),
- NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET1, &func_set1_reg);
- zassert_equal(func_set1_reg & FUNC_SET1_ILIMPP1_MSK, SN5S330_ILIM_3_06,
- NULL);
-
- /* Unknown/Reserved - We set result as USB */
- zassert_ok(sn5s330_drv.set_vbus_source_current_limit(SN5S330_PORT,
- TYPEC_RP_RESERVED),
- NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET1, &func_set1_reg);
- zassert_equal(func_set1_reg & FUNC_SET1_ILIMPP1_MSK, SN5S330_ILIM_0_63,
- NULL);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_set_sbu)
-#ifdef CONFIG_USBC_PPC_SBU
-{
- const struct emul *emul = EMUL;
- uint8_t func_set2_reg;
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /* Verify driver enables SBU FET */
- zassert_ok(sn5s330_drv.set_sbu(SN5S330_PORT, true), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET2, &func_set2_reg);
- zassert_not_equal(func_set2_reg & SN5S330_SBU_EN, 0, NULL);
-
- /* Verify driver disables SBU FET */
- zassert_ok(sn5s330_drv.set_sbu(SN5S330_PORT, false), NULL);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET2, &func_set2_reg);
- zassert_equal(func_set2_reg & SN5S330_SBU_EN, 0, NULL);
-}
-#else
-{
- ztest_test_skip();
-}
-#endif /* CONFIG_USBC_PPC_SBU */
-
-ZTEST(ppc_sn5s330, test_sn5s330_vbus_overcurrent)
-{
- const struct emul *emul = EMUL;
- uint8_t int_trip_rise_reg1;
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- sn5s330_emul_make_vbus_overcurrent(emul);
- /*
- * TODO(b/201420132): Replace arbitrary sleeps.
- */
- /* Make sure interrupt happens first. */
- k_msleep(SN5S330_INTERRUPT_DELAYMS);
- zassert_true(sn5s330_emul_interrupt_set_stub_fake.call_count > 0, NULL);
-
- /*
- * Verify we cleared vbus overcurrent interrupt trip rise bit so the
- * driver can detect future overcurrent clamping interrupts.
- */
- sn5s330_emul_peek_reg(emul, SN5S330_INT_TRIP_RISE_REG1,
- &int_trip_rise_reg1);
- zassert_equal(int_trip_rise_reg1 & SN5S330_ILIM_PP1_MASK, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_vbus_overcurrent_late_jump)
-{
- const struct emul *emul = EMUL;
- uint8_t int_trip_rise_reg1;
-
- /* Simulate the system jumping late. The second call to init() will
- * skip certain interrupt setup work. Make sure the interrupt continues
- * to function.
- */
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
- system_jumped_late_fake.return_val = 1;
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- sn5s330_emul_make_vbus_overcurrent(emul);
- /*
- * TODO(b/201420132): Replace arbitrary sleeps.
- */
- /* Make sure interrupt happens first. */
- k_msleep(SN5S330_INTERRUPT_DELAYMS);
- zassert_true(sn5s330_emul_interrupt_set_stub_fake.call_count > 0, NULL);
-
- /*
- * Verify we cleared vbus overcurrent interrupt trip rise bit so the
- * driver can detect future overcurrent clamping interrupts.
- */
- sn5s330_emul_peek_reg(emul, SN5S330_INT_TRIP_RISE_REG1,
- &int_trip_rise_reg1);
- zassert_equal(int_trip_rise_reg1 & SN5S330_ILIM_PP1_MASK, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_disable_vbus_low_interrupt)
-{
- const struct emul *emul = EMUL;
-
- /* Interrupt disabled here */
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
- /* Would normally cause a vbus low interrupt */
- sn5s330_emul_lower_vbus_below_minv(emul);
- zassert_equal(sn5s330_emul_interrupt_set_stub_fake.call_count, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_disable_vbus_low_interrupt_late_jump)
-{
- const struct emul *emul = EMUL;
-
- /* Simulate the system jumping late. The second call to init() will
- * skip certain interrupt setup work. Make sure the interrupt continues
- * to function.
- */
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
- system_jumped_late_fake.return_val = 1;
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- /* Would normally cause a vbus low interrupt */
- sn5s330_emul_lower_vbus_below_minv(emul);
- zassert_equal(sn5s330_emul_interrupt_set_stub_fake.call_count, 0, NULL);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_set_vconn_fet)
-{
- if (!IS_ENABLED(CONFIG_USBC_PPC_VCONN)) {
- ztest_test_skip();
- return;
- }
-
- const struct emul *emul = EMUL;
- uint8_t func_set4_reg;
-
- zassert_ok(sn5s330_drv.init(SN5S330_PORT), NULL);
-
- sn5s330_drv.set_vconn(SN5S330_PORT, false);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET4, &func_set4_reg);
- zassert_equal(func_set4_reg & SN5S330_VCONN_EN, 0, NULL);
-
- sn5s330_drv.set_vconn(SN5S330_PORT, true);
- sn5s330_emul_peek_reg(emul, SN5S330_FUNC_SET4, &func_set4_reg);
- zassert_not_equal(func_set4_reg & SN5S330_VCONN_EN, 0, NULL);
-}
-
-/* Make an I2C emulator mock read func wrapped in FFF */
-FAKE_VALUE_FUNC(int, dump_read_fn, struct i2c_emul *, int, uint8_t *, int,
- void *);
-
-ZTEST(ppc_sn5s330, test_dump)
-{
- int ret;
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
-
- /* Set up our fake read function to pass through to the real emul */
- RESET_FAKE(dump_read_fn);
- dump_read_fn_fake.return_val = 1;
- i2c_common_emul_set_read_func(i2c_emul, dump_read_fn, NULL);
-
- ret = sn5s330_drv.reg_dump(SN5S330_PORT);
-
- zassert_equal(EC_SUCCESS, ret, "Expected EC_SUCCESS, got %d", ret);
-
- /* Check that all the expected I2C reads were performed. */
- MOCK_ASSERT_I2C_READ(dump_read_fn, 0, SN5S330_FUNC_SET1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 1, SN5S330_FUNC_SET2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 2, SN5S330_FUNC_SET3);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 3, SN5S330_FUNC_SET4);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 4, SN5S330_FUNC_SET5);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 5, SN5S330_FUNC_SET6);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 6, SN5S330_FUNC_SET7);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 7, SN5S330_FUNC_SET8);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 8, SN5S330_FUNC_SET9);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 9, SN5S330_FUNC_SET10);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 10, SN5S330_FUNC_SET11);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 11, SN5S330_FUNC_SET12);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 12, SN5S330_INT_STATUS_REG1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 13, SN5S330_INT_STATUS_REG2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 14, SN5S330_INT_STATUS_REG3);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 15, SN5S330_INT_STATUS_REG4);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 16, SN5S330_INT_TRIP_RISE_REG1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 17, SN5S330_INT_TRIP_RISE_REG2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 18, SN5S330_INT_TRIP_RISE_REG3);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 19, SN5S330_INT_TRIP_FALL_REG1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 20, SN5S330_INT_TRIP_FALL_REG2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 21, SN5S330_INT_TRIP_FALL_REG3);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 22, SN5S330_INT_MASK_RISE_REG1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 23, SN5S330_INT_MASK_RISE_REG2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 24, SN5S330_INT_MASK_RISE_REG3);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 25, SN5S330_INT_MASK_FALL_REG1);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 26, SN5S330_INT_MASK_FALL_REG2);
- MOCK_ASSERT_I2C_READ(dump_read_fn, 27, SN5S330_INT_MASK_FALL_REG3);
-}
-
-enum i2c_operation {
- I2C_WRITE,
- I2C_READ,
-};
-
-#define INIT_I2C_FAIL_HELPER(EMUL, RW, REG) \
- do { \
- if ((RW) == I2C_READ) { \
- i2c_common_emul_set_read_fail_reg((EMUL), (REG)); \
- i2c_common_emul_set_write_fail_reg( \
- (EMUL), I2C_COMMON_EMUL_NO_FAIL_REG); \
- } else if ((RW) == I2C_WRITE) { \
- i2c_common_emul_set_read_fail_reg( \
- (EMUL), I2C_COMMON_EMUL_NO_FAIL_REG); \
- i2c_common_emul_set_write_fail_reg((EMUL), (REG)); \
- } else { \
- zassert_true(false, "Invalid I2C operation"); \
- } \
- zassert_equal( \
- EC_ERROR_INVAL, sn5s330_drv.init(SN5S330_PORT), \
- "Did not get EC_ERROR_INVAL when reg %s (0x%02x)" \
- "could not be %s", \
- #REG, (REG), \
- ((RW) == I2C_READ) ? "read" : "written"); \
- } while (0)
-
-ZTEST(ppc_sn5s330, test_init_reg_fails)
-{
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
-
- /* Fail on each of the I2C operations the init function does to ensure
- * we get the correct return value. This includes operations made by
- * clr_flags() and set_flags().
- */
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET5);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_FUNC_SET6);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET6);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET2);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET9);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET11);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_FUNC_SET8);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET8);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_FUNC_SET4);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET4);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_FUNC_SET3);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET3);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_FUNC_SET10);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_FUNC_SET10);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_STATUS_REG4);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_RISE_REG1);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_FALL_REG1);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_RISE_REG2);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_FALL_REG2);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_RISE_REG3);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_MASK_FALL_REG3);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_READ, SN5S330_INT_STATUS_REG4);
-
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_RISE_REG1);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_RISE_REG2);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_RISE_REG3);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_FALL_REG1);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_FALL_REG2);
- INIT_I2C_FAIL_HELPER(i2c_emul, I2C_WRITE, SN5S330_INT_TRIP_FALL_REG3);
-}
-
-static int pp_fet_test_mock_read_fn(struct i2c_emul *emul, int reg,
- uint8_t *val, int bytes, void *data)
-{
- int *counter = data;
-
- zassert_true(counter, "data cannot be a NULL pointer");
-
- /* Pretend to be in dead battery mode (needed for part 2 of the test) */
- if (reg == SN5S330_INT_STATUS_REG4) {
- *val = SN5S330_DB_BOOT;
- return 0;
- }
-
- /* Fail if we try to read SN5S330_FUNC_SET3 after the counter hits 0 */
- if (reg == SN5S330_FUNC_SET3 && (*counter)-- <= 0) {
- printf("Failing\n");
- return -EIO;
- }
-
- return 1;
-}
-
-ZTEST(ppc_sn5s330, test_pp_fet_enable_fail)
-{
- /* We attempt to enable the PP (power path) FET at two points during
- * the init function, constituting the second and third accesses to the
- * FUNC_SET3 register. We need to allow the first N reads/writes to
- * succeed to test failure handling of each call to
- * sn5s330_pp_fet_enable(). The second call requires us to be in dead
- * battery mode, which we take care of in the mock read function.
- */
-
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
- int counter;
- int ret;
-
- i2c_common_emul_set_read_func(i2c_emul, pp_fet_test_mock_read_fn,
- &counter);
-
- /* Allow only the first access to the reg to succeed. This tests the
- * error handling of the first call to sn5s330_pp_fet_enable().
- */
-
- counter = 1;
- ret = sn5s330_drv.init(SN5S330_PORT);
-
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-
- /* Allow only the first two accesses to succeed. This tests the error
- * handling of the second call to sn5s330_pp_fet_enable().
- */
-
- counter = 2;
- ret = sn5s330_drv.init(SN5S330_PORT);
-
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-}
-
-ZTEST(ppc_sn5s330, test_set_polarity)
-{
- int ret;
- uint8_t reg_val;
-
- /* Ensure flags start cleared */
- sn5s330_emul_peek_reg(EMUL, SN5S330_FUNC_SET4, &reg_val);
- zassert_false(reg_val & SN5S330_CC_POLARITY,
- "Polarity flags should not be set after reset.");
-
- /* Set polarity flags */
- ret = sn5s330_drv.set_polarity(SN5S330_PORT, 1);
- zassert_equal(EC_SUCCESS, ret, "Expected EC_SUCCESS but got %d", ret);
-
- sn5s330_emul_peek_reg(EMUL, SN5S330_FUNC_SET4, &reg_val);
- zassert_true(reg_val & SN5S330_CC_POLARITY,
- "Polarity flags should be set.");
-
- /* Clear polarity flags */
- ret = sn5s330_drv.set_polarity(SN5S330_PORT, 0);
- zassert_equal(EC_SUCCESS, ret, "Expected EC_SUCCESS but got %d", ret);
-
- sn5s330_emul_peek_reg(EMUL, SN5S330_FUNC_SET4, &reg_val);
- zassert_false(reg_val & SN5S330_CC_POLARITY,
- "Polarity flags should be cleared.");
-}
-
-ZTEST(ppc_sn5s330, test_set_vbus_source_current_limit_fail)
-{
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
- int ret;
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET1);
-
- ret = sn5s330_drv.set_vbus_source_current_limit(SN5S330_PORT,
- TYPEC_RP_3A0);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_discharge_vbus_fail)
-{
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
- int ret;
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET3);
-
- ret = sn5s330_drv.discharge_vbus(SN5S330_PORT, false);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-}
-
-ZTEST(ppc_sn5s330, test_low_power_mode_fail)
-{
- /* Test failed I2C operations in the enter low power mode function */
-
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
- int ret;
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET3);
- ret = sn5s330_drv.enter_low_power_mode(SN5S330_PORT);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET4);
- ret = sn5s330_drv.enter_low_power_mode(SN5S330_PORT);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET2);
- ret = sn5s330_drv.enter_low_power_mode(SN5S330_PORT);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET9);
- ret = sn5s330_drv.enter_low_power_mode(SN5S330_PORT);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-}
-
-ZTEST(ppc_sn5s330, test_sn5s330_set_vconn_fail)
-{
- /* Test failed I2C operations in the set Vconn function */
-
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
- int ret;
-
- i2c_common_emul_set_read_fail_reg(i2c_emul, SN5S330_FUNC_SET4);
- ret = sn5s330_drv.set_vconn(SN5S330_PORT, 0);
- zassert_equal(EC_ERROR_INVAL, ret, "Expected EC_ERROR_INVAL but got %d",
- ret);
-}
-
-static inline void reset_sn5s330_state(void)
-{
- struct i2c_emul *i2c_emul = sn5s330_emul_to_i2c_emul(EMUL);
-
- i2c_common_emul_set_write_func(i2c_emul, NULL, NULL);
- i2c_common_emul_set_read_func(i2c_emul, NULL, NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- sn5s330_emul_reset(EMUL);
- RESET_FAKE(sn5s330_emul_interrupt_set_stub);
-}
-
-static void ppc_sn5s330_before(void *state)
-{
- ARG_UNUSED(state);
- reset_sn5s330_state();
-}
-
-static void ppc_sn5s330_after(void *state)
-{
- ARG_UNUSED(state);
- reset_sn5s330_state();
-}
-
-ZTEST_SUITE(ppc_sn5s330, drivers_predicate_post_main, NULL, ppc_sn5s330_before,
- ppc_sn5s330_after, NULL);
diff --git a/zephyr/test/drivers/src/ppc_syv682x.c b/zephyr/test/drivers/src/ppc_syv682x.c
deleted file mode 100644
index aa08c26745..0000000000
--- a/zephyr/test/drivers/src/ppc_syv682x.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/device.h>
-#include <zephyr/devicetree/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <zephyr/drivers/gpio.h>
-#include <fff.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <ztest_assert.h>
-
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_syv682x.h"
-#include "test/drivers/stubs.h"
-#include "syv682x.h"
-#include "timer.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-#include "usbc_ppc.h"
-
-#define SYV682X_ORD DT_DEP_ORD(DT_NODELABEL(syv682x_emul))
-#define GPIO_USB_C1_FRS_EN_PATH DT_PATH(named_gpios, usb_c1_frs_en)
-
-struct ppc_syv682x_fixture {
- struct i2c_emul *ppc_emul;
- const struct device *frs_en_gpio_port;
- int frs_en_gpio_pin;
-};
-
-/* Configuration for a mock I2C access function that sometimes fails. */
-struct reg_to_fail_data {
- int reg_access_to_fail;
- int reg_access_fail_countdown;
-};
-
-static const int syv682x_port = 1;
-
-static void *syv682x_test_setup(void)
-{
- static struct ppc_syv682x_fixture fixture;
-
- fixture.ppc_emul = syv682x_emul_get(SYV682X_ORD);
- zassume_not_null(fixture.ppc_emul, NULL);
- fixture.frs_en_gpio_port =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_USB_C1_FRS_EN_PATH, gpios));
- zassume_not_null(fixture.frs_en_gpio_port, NULL);
- fixture.frs_en_gpio_pin = DT_GPIO_PIN(GPIO_USB_C1_FRS_EN_PATH, gpios);
-
- return &fixture;
-}
-
-static void syv682x_test_after(void *data)
-{
- struct ppc_syv682x_fixture *fixture = data;
- struct i2c_emul *emul = fixture->ppc_emul;
-
- /* Disable the power path and clear interrupt conditions. */
- zassume_ok(syv682x_emul_set_reg(emul, SYV682X_CONTROL_1_REG,
- SYV682X_CONTROL_1_PWR_ENB),
- NULL);
- syv682x_emul_set_condition(emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_NONE);
-
- /* Clear the mock read/write functions */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
- i2c_common_emul_set_write_func(emul, NULL, NULL);
-
- /* Don't fail on any register access */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_SUITE(ppc_syv682x, drivers_predicate_post_main, syv682x_test_setup, NULL,
- syv682x_test_after, NULL);
-
-ZTEST_F(ppc_syv682x, test_syv682x_board_is_syv682c)
-{
- /*
- * The SYV682x driver should assume a version-C part in the absence of a
- * board override.
- */
- zassert_true(syv682x_board_is_syv682c(syv682x_port), NULL);
-}
-
-static void check_control_1_default_init(uint8_t control_1)
-{
- /*
- * During init, when not in dead battery mode, the driver should
- * configure the high-voltage channel as sink but leave the power path
- * disabled. The driver should set the current limits according to
- * configuration.
- */
- int ilim;
-
- zassert_true(control_1 & SYV682X_CONTROL_1_PWR_ENB,
- "Default init, but power path enabled");
- ilim = (control_1 & SYV682X_HV_ILIM_MASK) >> SYV682X_HV_ILIM_BIT_SHIFT;
- zassert_equal(ilim, CONFIG_PLATFORM_EC_USBC_PPC_SYV682X_HV_ILIM,
- "Default init, but HV current limit set to %d", ilim);
- zassert_false(control_1 & SYV682X_CONTROL_1_HV_DR,
- "Default init, but source mode selected");
- zassert_true(control_1 & SYV682X_CONTROL_1_CH_SEL,
- "Default init, but 5V power path selected");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_init_dead_battery)
-{
- uint8_t reg;
-
- /*
- * With a dead battery, the device powers up sinking VBUS, and the
- * driver should keep that going.
- */
- zassume_ok(syv682x_emul_set_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- SYV682X_CONTROL_1_CH_SEL),
- NULL);
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_VSAFE_5V,
- SYV682X_CONTROL_4_NONE);
- zassert_ok(ppc_init(syv682x_port), "PPC init failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
- zassert_true(reg & SYV682X_CONTROL_1_CH_SEL,
- "Dead battery init, but CH_SEL set to 5V power path");
- zassert_false(reg & (SYV682X_CONTROL_1_PWR_ENB |
- SYV682X_CONTROL_1_HV_DR),
- "Dead battery init, but CONTROL_1 is 0x%x", reg);
- zassert_false(ppc_is_sourcing_vbus(syv682x_port),
- "Dead battery init, but VBUS source enabled");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_init_vsafe0v)
-{
- uint8_t reg;
-
- /* With VBUS at vSafe0V, init should set the default configuration. */
- zassume_ok(syv682x_emul_set_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- SYV682X_CONTROL_1_PWR_ENB),
- NULL);
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_VSAFE_0V,
- SYV682X_CONTROL_4_NONE);
- zassert_ok(ppc_init(syv682x_port), "PPC init failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
- check_control_1_default_init(reg);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_init_sink_disabled)
-{
- uint8_t reg;
-
- /* With sink disabled, init should do the same thing. */
- zassume_ok(syv682x_emul_set_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- SYV682X_CONTROL_1_CH_SEL),
- NULL);
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_VSAFE_0V,
- SYV682X_CONTROL_4_NONE);
- zassert_ok(ppc_init(syv682x_port), "PPC init failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
- check_control_1_default_init(reg);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_init_common)
-{
- uint8_t reg;
- int ilim;
-
- zassert_ok(ppc_init(syv682x_port), "PPC init failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
-
- /*
- * Any init sequence should also disable the FRS GPIO, set the 5V
- * current limit according to configuration, set over-current, over-
- * voltage, and discharge parameters appropriately, and enable CC lines.
- */
- zassert_equal(gpio_emul_output_get(this->frs_en_gpio_port,
- this->frs_en_gpio_pin),
- 0, "FRS enabled, but FRS GPIO not asserted");
- ilim = (reg & SYV682X_5V_ILIM_MASK) >> SYV682X_5V_ILIM_BIT_SHIFT;
- zassert_equal(ilim, CONFIG_PLATFORM_EC_USB_PD_PULLUP,
- "Default init, but 5V current limit set to %d", ilim);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_2_REG,
- &reg),
- NULL);
- zassert_equal(reg,
- (SYV682X_OC_DELAY_10MS << SYV682X_OC_DELAY_SHIFT) |
- (SYV682X_DSG_RON_200_OHM
- << SYV682X_DSG_RON_SHIFT) |
- (SYV682X_DSG_TIME_50MS << SYV682X_DSG_TIME_SHIFT),
- "Default init, but CONTROL_2 is 0x%x", reg);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_3_REG,
- &reg),
- NULL);
- zassert_equal(reg,
- (SYV682X_OVP_23_7 << SYV682X_OVP_BIT_SHIFT) |
- SYV682X_RVS_MASK,
- "Default init, but CONTROL_3 is 0x%x", reg);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- NULL);
- zassert_equal(reg & ~SYV682X_CONTROL_4_INT_MASK,
- SYV682X_CONTROL_4_CC1_BPS | SYV682X_CONTROL_4_CC2_BPS,
- "Default init, but CONTROL_4 is 0x%x", reg);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_source_enable)
-{
- uint8_t reg;
-
- zassert_ok(ppc_vbus_source_enable(syv682x_port, true),
- "VBUS enable failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- zassert_equal(reg & SYV682X_CONTROL_1_PWR_ENB, 0,
- "VBUS sourcing enabled but power path disabled");
- zassert_true(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is not sourcing VBUS after VBUS enabled");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_source_disable)
-{
- zassert_ok(ppc_vbus_source_enable(syv682x_port, false),
- "VBUS disable failed");
- zassert_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC sourcing VBUS after disable");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_source_oc)
-{
- zassume_ok(ppc_vbus_source_enable(syv682x_port, true),
- "VBUS enable failed");
- /* An OC event less than 100 ms should not cause VBUS to turn off. */
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_OC_5V,
- SYV682X_CONTROL_4_NONE);
- msleep(50);
- zassert_true(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is not sourcing VBUS after 50 ms OC");
- /* But one greater than 100 ms should. */
- msleep(60);
- zassert_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is sourcing VBUS after 100 ms OC");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_tsd)
-{
- /*
- * A TSD event should cause the driver to disable source and sink paths.
- * (The device will have already physically disabled them.) The state of
- * the sink path is not part of the driver's API.
- */
- zassume_ok(ppc_vbus_source_enable(syv682x_port, true),
- "Source enable failed");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_TSD,
- SYV682X_CONTROL_4_NONE);
- msleep(1);
- zassert_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is sourcing power after TSD");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_vbus_ovp)
-{
- /* An OVP event should cause the driver to disable the source path. */
- zassume_ok(ppc_vbus_source_enable(syv682x_port, true),
- "Source enable failed");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_OVP,
- SYV682X_CONTROL_4_NONE);
- msleep(1);
- zassert_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is sourcing power after OVP");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_vbus_hv_oc)
-{
- uint8_t reg;
-
- /*
- * A high-voltage OC while sinking should cause the driver to try to
- * re-enable the sink path until the OC count limit is reached, at which
- * point the driver should leave it disabled.
- */
- zassume_ok(ppc_vbus_sink_enable(syv682x_port, true),
- "Sink enable failed");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_OC_HV,
- SYV682X_CONTROL_4_NONE);
- msleep(1);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- zassert_equal(reg & SYV682X_CONTROL_1_PWR_ENB, 0,
- "Power path disabled after HV_OC handled");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_OC_HV,
- SYV682X_CONTROL_4_NONE);
- /* Alert GPIO doesn't change so wait for delayed syv682x interrupt */
- msleep(15);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- zassert_equal(reg & SYV682X_CONTROL_1_PWR_ENB, 0,
- "Power path disabled after HV_OC handled");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_OC_HV,
- SYV682X_CONTROL_4_NONE);
- /* Alert GPIO doesn't change so wait for delayed syv682x interrupt */
- msleep(15);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- zassert_equal(reg & SYV682X_CONTROL_1_PWR_ENB,
- SYV682X_CONTROL_1_PWR_ENB,
- "Power path enabled after HV_OC handled 3 times");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_vconn_oc)
-{
- uint8_t reg;
-
- /*
- * A VCONN OC event less than 100 ms should not cause the driver to turn
- * VCONN off.
- */
- ppc_set_vconn(syv682x_port, true);
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_VCONN_OCP);
- msleep(1);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_true(reg & (SYV682X_CONTROL_4_VCONN1 |
- SYV682X_CONTROL_4_VCONN2),
- "VCONN disabled after initial VCONN OC");
- msleep(50);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_true(reg & (SYV682X_CONTROL_4_VCONN1 |
- SYV682X_CONTROL_4_VCONN2),
- "VCONN disabled after short VCONN OC");
- /*
- * But if the event keeps going for over 100 ms continuously, the driver
- * should turn VCONN off.
- */
- msleep(60);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_false(reg & (SYV682X_CONTROL_4_VCONN1 |
- SYV682X_CONTROL_4_VCONN2),
- "VCONN enabled after long VCONN OC");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_interrupt_vconn_ov)
-{
- uint8_t reg;
-
- /*
- * A VCONN over-voltage (VBAT_OVP) event will cause the device to
- * disconnect CC and VCONN. The driver should then reinitialize the
- * device, which will enable both CC lines but leave VCONN disabled. The
- * driver should then run generic CC over-voltage handling.
- */
- ppc_set_vconn(syv682x_port, true);
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_VBAT_OVP);
- msleep(1);
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_true(reg & SYV682X_CONTROL_4_CC1_BPS,
- "CC1 disabled after handling VBAT_OVP");
- zassert_true(reg & SYV682X_CONTROL_4_CC2_BPS,
- "CC2 disabled after handling VBAT_OVP");
- zassert_false(reg & (SYV682X_CONTROL_4_VCONN1 |
- SYV682X_CONTROL_4_VCONN2),
- "VCONN enabled after handling VBAT_OVP");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_frs_enable)
-{
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_USB_C1_FRS_EN_PATH, gpios));
- uint8_t reg;
-
- /*
- * Enabling FRS should enable only the appropriate CC line based on
- * polarity. Disabling FRS should enable both CC lines.
- */
- ppc_vbus_sink_enable(syv682x_port, true);
- zassume_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is sourcing VBUS after sink enabled");
- ppc_set_polarity(syv682x_port, 0 /* CC1 */);
- ppc_set_frs_enable(syv682x_port, true);
- zassert_equal(gpio_emul_output_get(gpio_dev, this->frs_en_gpio_pin), 1,
- "FRS enabled, but FRS GPIO not asserted");
- zassert_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_equal(
- reg & (SYV682X_CONTROL_4_CC1_BPS | SYV682X_CONTROL_4_CC2_BPS),
- SYV682X_CONTROL_4_CC1_BPS,
- "FRS enabled with CC1 polarity, but CONTROL_4 is 0x%x", reg);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_frs_disable)
-{
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_USB_C1_FRS_EN_PATH, gpios));
- uint8_t reg;
-
- ppc_vbus_sink_enable(syv682x_port, true);
- zassume_false(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is sourcing VBUS after sink enabled");
- ppc_set_polarity(syv682x_port, 0 /* CC1 */);
-
- ppc_set_frs_enable(syv682x_port, false);
- zassert_equal(gpio_emul_output_get(gpio_dev, this->frs_en_gpio_pin), 0,
- "FRS disabled, but FRS GPIO not deasserted");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_4_REG,
- &reg),
- "Reading CONTROL_4 failed");
- zassert_equal(
- reg & (SYV682X_CONTROL_4_CC1_BPS | SYV682X_CONTROL_4_CC2_BPS),
- SYV682X_CONTROL_4_CC1_BPS | SYV682X_CONTROL_4_CC2_BPS,
- "FRS disabled with CC1 polarity, but CONTROL_4 is 0x%x", reg);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_frs_trigger)
-{
- /*
- * An FRS event when the PPC is Sink should cause the PPC to switch from
- * Sink to Source.
- */
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_FRS,
- SYV682X_CONTROL_4_NONE);
- msleep(1);
- zassert_true(ppc_is_sourcing_vbus(syv682x_port),
- "PPC is not sourcing VBUS after FRS signal handled");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_NONE);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_source_current_limit_usb_default)
-{
- uint8_t reg;
- int ilim_val;
-
- zassert_ok(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_USB),
- "Could not set source current limit");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- ilim_val = (reg & SYV682X_5V_ILIM_MASK) >> SYV682X_5V_ILIM_BIT_SHIFT;
- zassert_equal(reg & SYV682X_5V_ILIM_MASK, SYV682X_5V_ILIM_1_25,
- "Set USB Rp value, but 5V_ILIM is %d", ilim_val);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_source_current_limit_1500ma)
-{
- uint8_t reg;
- int ilim_val;
-
- zassert_ok(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_1A5),
- "Could not set source current limit");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- ilim_val = (reg & SYV682X_5V_ILIM_MASK) >> SYV682X_5V_ILIM_BIT_SHIFT;
- zassert_equal(ilim_val, SYV682X_5V_ILIM_1_75,
- "Set 1.5A Rp value, but 5V_ILIM is %d", ilim_val);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_source_current_limit_3000ma)
-{
- uint8_t reg;
- int ilim_val;
-
- zassert_ok(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_3A0),
- "Could not set source current limit");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- "Reading CONTROL_1 failed");
- ilim_val = (reg & SYV682X_5V_ILIM_MASK) >> SYV682X_5V_ILIM_BIT_SHIFT;
- zassert_equal(ilim_val, SYV682X_5V_ILIM_3_30,
- "Set 3.0A Rp value, but 5V_ILIM is %d", ilim_val);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_write_busy)
-{
- /*
- * Writes should fail while the BUSY bit is set, except that writes to
- * CONTROL_4 should succeed on the SYV682C. 1000 reads is intentionally
- * many more than the driver is expected to make before reaching its
- * timeout. It is not a goal of this test to verify the frequency of
- * polling or the exact value of the timeout.
- */
- syv682x_emul_set_busy_reads(this->ppc_emul, 1000);
- zassert_equal(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_USB),
- EC_ERROR_TIMEOUT, "SYV682 busy, but write completed");
- zassert_ok(ppc_set_frs_enable(syv682x_port, false),
- "Could not set CONTROL_4 while busy on SYV682C");
-
- /*
- * If the busy bit clears before the driver reaches its timeout, the
- * write should succeed.
- */
- syv682x_emul_set_busy_reads(this->ppc_emul, 1);
- zassert_equal(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_USB),
- 0, "SYV682 not busy, but write failed");
-
- syv682x_emul_set_busy_reads(this->ppc_emul, 0);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_dev_is_connected)
-{
- uint8_t reg;
-
- zassert_ok(ppc_dev_is_connected(syv682x_port, PPC_DEV_SRC),
- "Could not connect device as source");
- zassert_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_2_REG,
- &reg),
- "Reading CONTROL_2 failed");
- zassert_false(reg & SYV682X_CONTROL_2_FDSG,
- "Connected as source, but force discharge enabled");
-
- zassert_ok(ppc_dev_is_connected(syv682x_port, PPC_DEV_DISCONNECTED),
- "Could not disconnect device");
- zassert_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_2_REG,
- &reg),
- "Reading CONTROL_2 failed");
- zassert_true(reg & SYV682X_CONTROL_2_FDSG,
- "Disconnected, but force discharge disabled");
-
- zassert_ok(ppc_dev_is_connected(syv682x_port, PPC_DEV_SNK),
- "Could not connect device as source");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_sink_enable_trivial)
-{
- /*
- * If VBUS source is already enabled, disabling VBUS sink should
- * trivially succeed.
- */
- zassume_ok(ppc_vbus_source_enable(syv682x_port, true),
- "VBUS enable failed");
- zassert_ok(ppc_vbus_sink_enable(syv682x_port, false),
- "Sink disable failed");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_sink_enable_power_path)
-{
- uint8_t reg;
- int ilim;
-
- /*
- * After enabling VBUS sink, the HV power path should be enabled in sink
- * mode with the configured current limit.
- */
- zassume_ok(ppc_vbus_source_enable(syv682x_port, false),
- "VBUS enable failed");
- zassert_ok(ppc_vbus_sink_enable(syv682x_port, true),
- "Sink disable failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
- zassert_true(reg & SYV682X_CONTROL_1_CH_SEL,
- "Sink enabled, but CH_SEL set to 5V power path");
- zassert_false(reg & SYV682X_CONTROL_1_PWR_ENB,
- "Sink enabled, but power path disabled");
- zassert_false(reg & SYV682X_CONTROL_1_HV_DR,
- "Sink enabled, but high-voltage path in source mode");
- ilim = (reg & SYV682X_HV_ILIM_MASK) >> SYV682X_HV_ILIM_BIT_SHIFT;
- zassert_equal(ilim, CONFIG_PLATFORM_EC_USBC_PPC_SYV682X_HV_ILIM,
- "Sink enabled, but HV current limit set to %d", ilim);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_sink_disable)
-{
- uint8_t reg;
-
- zassume_ok(ppc_vbus_source_enable(syv682x_port, false),
- "VBUS enable failed");
- zassert_ok(ppc_vbus_sink_enable(syv682x_port, true),
- "Sink disable failed");
-
- zassert_ok(ppc_vbus_sink_enable(syv682x_port, false),
- "Sink disable failed");
- zassume_ok(syv682x_emul_get_reg(this->ppc_emul, SYV682X_CONTROL_1_REG,
- &reg),
- NULL);
- zassert_true(reg & SYV682X_CONTROL_1_PWR_ENB,
- "Sink disabled, but power path enabled");
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_vbus_sink_oc_limit)
-{
- 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(this->ppc_emul, SYV682X_STATUS_OC_HV,
- SYV682X_CONTROL_4_NONE);
- msleep(15);
- }
- syv682x_emul_set_condition(this->ppc_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_F(ppc_syv682x, test_syv682x_set_vconn)
-{
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_VBAT_OVP);
- zassert_not_equal(ppc_set_vconn(syv682x_port, true), EC_SUCCESS,
- "VBAT OVP, but ppc_set_vconn succeeded");
-}
-
-ZTEST(ppc_syv682x, test_syv682x_ppc_dump)
-{
- /*
- * The ppc_dump command should succeed for this port. Don't check the
- * output, since there are no standard requirements for that.
- */
- const struct ppc_drv *drv = ppc_chips[syv682x_port].drv;
-
- zassert_ok(drv->reg_dump(syv682x_port), "ppc_dump command failed");
-}
-
-/* Intercepts I2C reads as a mock. Fails to read for the register at offset
- * reg_access_to_fail on read number N, where N is the initial value of
- * reg_access_fail_countdown.
- */
-static int mock_read_intercept_reg_fail(struct i2c_emul *emul, int reg,
- uint8_t *val, int bytes, void *data)
-{
- struct reg_to_fail_data *test_data = data;
-
- if (reg == test_data->reg_access_to_fail) {
- test_data->reg_access_fail_countdown--;
- if (test_data->reg_access_fail_countdown <= 0)
- return -1;
- }
- return 1;
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_i2c_error_status)
-{
- /* Failed STATUS read should cause init to fail. */
- i2c_common_emul_set_read_fail_reg(this->ppc_emul, SYV682X_STATUS_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "STATUS read error, but init succeeded");
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_i2c_error_control_1)
-{
- const struct ppc_drv *drv = ppc_chips[syv682x_port].drv;
- struct reg_to_fail_data reg_fail = {
- .reg_access_to_fail = 0,
- .reg_access_fail_countdown = 0,
- };
-
- /* Failed CONTROL_1 read */
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_1_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_1 read error, but init succeeded");
- zassert_not_equal(ppc_vbus_source_enable(syv682x_port, true),
- EC_SUCCESS,
- "CONTROL_1 read error, but VBUS source enable "
- "succeeded");
- zassert_not_equal(ppc_vbus_sink_enable(syv682x_port, true), EC_SUCCESS,
- "CONTROL_1 read error, but VBUS sink enable "
- "succeeded");
- zassert_not_equal(ppc_set_vbus_source_current_limit(syv682x_port,
- TYPEC_RP_USB),
- EC_SUCCESS,
- "CONTROL_1 read error, but set current limit "
- "succeeded");
- zassert_ok(drv->reg_dump(syv682x_port),
- "CONTROL_1 read error, and ppc_dump failed");
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Init reads CONTROL_1 several times. The 3rd read happens while
- * setting the source current limit. Check that init fails when that
- * read fails.
- */
- i2c_common_emul_set_read_func(this->ppc_emul,
- &mock_read_intercept_reg_fail, &reg_fail);
- reg_fail.reg_access_to_fail = SYV682X_CONTROL_1_REG;
- reg_fail.reg_access_fail_countdown = 3;
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_1 read error, but init succeeded");
- i2c_common_emul_set_read_func(this->ppc_emul, NULL, NULL);
-
- /* Failed CONTROL_1 write */
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_1_REG);
-
- /* During init, the driver will write CONTROL_1 either to disable all
- * power paths (normal case) or to enable the sink path (dead battery
- * case). vSafe0V in STATUS is one indication of the normal case.
- */
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_VSAFE_0V,
- SYV682X_CONTROL_4_NONE);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_1 write error, but init succeeded");
- syv682x_emul_set_condition(this->ppc_emul, SYV682X_STATUS_NONE,
- SYV682X_CONTROL_4_NONE);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_1 write error, but init succeeded");
-
- zassert_not_equal(ppc_vbus_source_enable(syv682x_port, true),
- EC_SUCCESS,
- "CONTROL_1 write error, but VBUS source "
- "enable succeeded");
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_i2c_error_control_2)
-{
- /* Failed CONTROL_2 read */
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_2_REG);
- zassert_not_equal(ppc_discharge_vbus(syv682x_port, true), EC_SUCCESS,
- "CONTROL_2 read error, but VBUS discharge succeeded");
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Failed CONTROL_2 write */
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_2_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_2 write error, but init succeeded");
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_i2c_error_control_3)
-{
- /* Failed CONTROL_3 read */
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_3_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_3 read error, but VBUS discharge succeeded");
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Failed CONTROL_3 write */
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_3_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_3 write error, but init succeeded");
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
-
-ZTEST_F(ppc_syv682x, test_syv682x_i2c_error_control_4)
-{
- /* Failed CONTROL_4 read */
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_4_REG);
- zassert_not_equal(ppc_set_vconn(syv682x_port, true), EC_SUCCESS,
- "CONTROL_2 read error, but VCONN set succeeded");
- i2c_common_emul_set_read_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Failed CONTROL_4 write */
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- SYV682X_CONTROL_4_REG);
- zassert_not_equal(ppc_init(syv682x_port), EC_SUCCESS,
- "CONTROL_4 write error, but init succeeded");
- zassert_not_equal(ppc_set_vconn(syv682x_port, true), EC_SUCCESS,
- "CONTROL_4 write error, but VCONN set succeeded");
- i2c_common_emul_set_write_fail_reg(this->ppc_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-}
diff --git a/zephyr/test/drivers/src/ps8xxx.c b/zephyr/test/drivers/src/ps8xxx.c
deleted file mode 100644
index dc1695d793..0000000000
--- a/zephyr/test/drivers/src/ps8xxx.c
+++ /dev/null
@@ -1,1255 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "emul/tcpc/emul_ps8xxx.h"
-#include "timer.h"
-#include "i2c.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/tcpci_test_common.h"
-
-#include "tcpm/tcpci.h"
-#include "driver/tcpm/ps8xxx.h"
-#include "driver/tcpm/ps8xxx_public.h"
-#include "test/drivers/test_state.h"
-
-#define PS8XXX_EMUL_LABEL DT_LABEL(DT_NODELABEL(ps8xxx_emul))
-
-/** Test PS8xxx init fail conditions common for all PS8xxx devices */
-static void test_ps8xxx_init_fail(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
-
- /* Test fail on FW reg read */
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul, PS8XXX_REG_FW_REV);
- zassert_equal(EC_ERROR_TIMEOUT, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on FW reg set to 0 */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x0);
- zassert_equal(EC_ERROR_TIMEOUT, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
-
- /* Set arbitrary FW reg value != 0 for rest of the test */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x31);
-
- /* Test fail on TCPCI init */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_UNINIT);
- zassert_equal(EC_ERROR_TIMEOUT, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
-}
-
-ZTEST(ps8805, test_init_fail)
-{
- test_ps8xxx_init_fail();
-}
-
-ZTEST(ps8815, test_init_fail)
-{
- test_ps8xxx_init_fail();
-}
-
-/**
- * Test PS8805 init and indirectly ps8705_dci_disable which is
- * used by PS8805
- */
-ZTEST(ps8805, test_ps8805_init)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *p1_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_1);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
-
- /* Set arbitrary FW reg value != 0 for this test */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x31);
- /* Set correct power status for this test */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, 0x0);
-
- /* Test fail on read I2C debug reg */
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- PS8XXX_REG_I2C_DEBUGGING_ENABLE);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on read DCI reg */
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- PS8XXX_P1_REG_MUX_USB_DCI_CFG);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test successful init */
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
- check_tcpci_reg(tcpci_emul, PS8XXX_REG_I2C_DEBUGGING_ENABLE,
- PS8XXX_REG_I2C_DEBUGGING_ENABLE_ON);
- zassert_equal(PS8XXX_REG_MUX_USB_DCI_CFG_MODE_OFF,
- ps8xxx_emul_get_dci_cfg(ps8xxx_emul) &
- PS8XXX_REG_MUX_USB_DCI_CFG_MODE_MASK, NULL);
-}
-
-/** Test PS8815 init */
-ZTEST(ps8815, test_ps8815_init)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *p1_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_1);
-
- /* Set arbitrary FW reg value != 0 for this test */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x31);
- /* Set correct power status for rest of the test */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, 0x0);
-
- /* Test fail on reading HW revision register */
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- PS8815_P1_REG_HW_REVISION);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.init(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test successful init */
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-}
-
-/** Test PS8xxx release */
-static void test_ps8xxx_release(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
- uint64_t start_ms;
-
- /* Test successful release with correct FW reg read */
- start_ms = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.release(USBC_PORT_C1),
- NULL);
- zassert_true(k_uptime_get() - start_ms < 10,
- "release on correct FW reg read shouldn't wait for chip");
-
- /* Test delay on FW reg read fail */
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul, PS8XXX_REG_FW_REV);
- start_ms = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.release(USBC_PORT_C1),
- NULL);
- zassert_true(k_uptime_get() - start_ms >= 10,
- "release on FW reg read fail should wait for chip");
-}
-
-ZTEST(ps8805, test_release)
-{
- test_ps8xxx_release();
-}
-
-ZTEST(ps8815, test_release)
-{
- test_ps8xxx_release();
-}
-
-/**
- * Check if PS8815 set_cc write correct value to ROLE_CTRL register and if
- * PS8815 specific workaround is applied to RP_DETECT_CONTROL.
- */
-static void check_ps8815_set_cc(enum tcpc_rp_value rp, enum tcpc_cc_pull cc,
- uint16_t rp_detect_ctrl, const char *test_case)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- uint16_t reg_val, exp_role_ctrl;
-
- /* Clear RP detect register to see if it is set after test */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_RP_DETECT_CONTROL, 0);
-
- exp_role_ctrl = TCPC_REG_ROLE_CTRL_SET(TYPEC_NO_DRP, rp, cc, cc);
-
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.select_rp_value(USBC_PORT_C1, rp),
- "Failed to set RP for case: %s", test_case);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.set_cc(USBC_PORT_C1, cc),
- "Failed to set CC for case: %s", test_case);
-
- zassert_ok(tcpci_emul_get_reg(tcpci_emul, TCPC_REG_ROLE_CTRL, &reg_val),
- "Failed tcpci_emul_get_reg() for case: %s", test_case);
- zassert_equal(exp_role_ctrl, reg_val,
- "0x%x != (role_ctrl = 0x%x) for case: %s", exp_role_ctrl,
- reg_val, test_case);
- zassert_ok(tcpci_emul_get_reg(tcpci_emul, PS8XXX_REG_RP_DETECT_CONTROL,
- &reg_val),
- "Failed tcpci_emul_get_reg() for case: %s", test_case);
- zassert_equal(rp_detect_ctrl, reg_val,
- "0x%x != (rp detect = 0x%x) for case: %s", rp_detect_ctrl,
- reg_val, test_case);
-}
-
-/** Test PS8815 set cc and device specific workarounds */
-ZTEST(ps8815, test_ps8815_set_cc)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- int64_t start_time;
- int64_t delay;
-
- /* Set firmware version <= 0x10 to set "disable rp detect" workaround */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x8);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, RP_DETECT_DISABLE,
- "fw rev 0x8 \"disable rp detect\" workaround");
-
- /* First call to set_cc should disarm workaround */
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, 0,
- "second call without workaround");
-
- /* drp_toggle should rearm "disable rp detect" workaround */
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, RP_DETECT_DISABLE,
- "drp_toggle rearm workaround");
-
- /*
- * Set firmware version <= 0x10 to set "disable rp detect" workaround
- * again
- */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0xa);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- /* CC RD shouldn't trigger "disable rp detect" workaround */
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RD, 0,
- "CC RD not trigger workaround");
-
- /*
- * Set firmware version > 0x10 to unset "disable rp detect"
- * workaround
- */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x12);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- /* Firmware > 0x10 shouldn't trigger "disable rp detect" workaround */
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, 0,
- "fw rev > 0x10 not trigger workaround");
-
- /*
- * Set hw revision 0x0a00 to enable workaround for b/171430855 (delay
- * 1 ms on role control reg update)
- */
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, 0x0a00);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- start_time = k_uptime_get();
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, 0,
- "delay on HW rev 0x0a00");
- delay = k_uptime_delta(&start_time);
- zassert_true(delay >= 1,
- "expected delay on HW rev 0x0a00 (delay %lld)", delay);
-
- /*
- * Set hw revision 0x0a01 to enable workaround for b/171430855 (delay
- * 1 ms on role control reg update)
- */
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, 0x0a01);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
- start_time = k_uptime_get();
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, 0,
- "delay on HW rev 0x0a01");
- delay = k_uptime_delta(&start_time);
- zassert_true(delay >= 1,
- "expected delay on HW rev 0x0a01 (delay %lld)", delay);
-
- /*
- * Set other hw revision to disable workaround for b/171430855 (delay
- * 1 ms on role control reg update)
- */
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, 0x0a02);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
- start_time = k_uptime_get();
- check_ps8815_set_cc(TYPEC_RP_1A5, TYPEC_CC_RP, 0,
- "no delay on other HW rev");
- delay = k_uptime_delta(&start_time);
- zassert_true(delay == 0,
- "unexpected delay on HW rev 0x0a02 (delay %lld)", delay);
-}
-
-/** Test PS8xxx set vconn */
-static void test_ps8xxx_set_vconn(void)
-{
- uint64_t start_ms;
-
- /* Test vconn enable */
- start_ms = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.set_vconn(USBC_PORT_C1, 1),
- NULL);
- zassert_true(k_uptime_get() - start_ms < 10,
- "VCONN enable should be without delay");
-
- /* Test vconn disable */
- start_ms = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.set_vconn(USBC_PORT_C1, 0),
- NULL);
- /* Delay for VCONN disable is required because of issue b/185202064 */
- zassert_true(k_uptime_get() - start_ms >= 10,
- "VCONN disable require minimum 10ms delay");
-}
-
-ZTEST(ps8805, test_set_vconn)
-{
- test_ps8xxx_set_vconn();
-}
-
-ZTEST(ps8815, test_set_vconn)
-{
- test_ps8xxx_set_vconn();
-}
-
-/** Test PS8xxx transmitting message from TCPC */
-static void test_ps8xxx_transmit(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
- struct tcpci_emul_msg *msg;
- uint64_t exp_cnt, cnt;
- uint16_t reg_val;
-
- msg = tcpci_emul_get_tx_msg(tcpci_emul);
-
- /* Test fail on transmitting BIST MODE 2 message */
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul, TCPC_REG_TRANSMIT);
- zassert_equal(EC_ERROR_INVAL,
- ps8xxx_tcpm_drv.transmit(USBC_PORT_C1,
- TCPCI_MSG_TX_BIST_MODE_2, 0,
- NULL), NULL);
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test sending BIST MODE 2 message */
- exp_cnt = PS8751_BIST_COUNTER;
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.transmit(USBC_PORT_C1,
- TCPCI_MSG_TX_BIST_MODE_2, 0,
- NULL), NULL);
- check_tcpci_reg(tcpci_emul, PS8XXX_REG_BIST_CONT_MODE_CTR, 0);
- zassert_equal(TCPCI_MSG_TX_BIST_MODE_2, msg->type, NULL);
-
- /* Check BIST counter value */
- zassert_ok(tcpci_emul_get_reg(tcpci_emul,
- PS8XXX_REG_BIST_CONT_MODE_BYTE2,
- &reg_val), NULL);
- cnt = reg_val;
- cnt <<= 8;
- zassert_ok(tcpci_emul_get_reg(tcpci_emul,
- PS8XXX_REG_BIST_CONT_MODE_BYTE1,
- &reg_val), NULL);
- cnt |= reg_val;
- cnt <<= 8;
- zassert_ok(tcpci_emul_get_reg(tcpci_emul,
- PS8XXX_REG_BIST_CONT_MODE_BYTE0,
- &reg_val), NULL);
- cnt |= reg_val;
- zassert_equal(exp_cnt, cnt, "0x%llx != 0x%llx", exp_cnt, cnt);
-}
-
-ZTEST(ps8805, test_transmit)
-{
- test_ps8xxx_transmit();
-}
-
-ZTEST(ps8815, test_transmit)
-{
- test_ps8xxx_transmit();
-}
-
-/** Test PS8805 and PS8815 drp toggle */
-static void test_ps88x5_drp_toggle(bool delay_expected)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
- uint16_t exp_role_ctrl;
- int64_t start_time;
- int64_t delay;
-
- /* Test fail on command write */
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul, TCPC_REG_COMMAND);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
-
- /* Test fail on role control write */
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul, TCPC_REG_ROLE_CTRL);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on CC status read */
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul, TCPC_REG_CC_STATUS);
- zassert_equal(EC_ERROR_INVAL, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set CC status as snk, CC lines set arbitrary */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_CC_STATUS,
- TCPC_REG_CC_STATUS_SET(1, TYPEC_CC_VOLT_OPEN,
- TYPEC_CC_VOLT_RA));
-
- /*
- * TODO(b/203858808): PS8815 sleep here if specific FW rev.
- * Find way to test 1 ms delay
- */
- /* Test drp toggle when CC is snk. Role control CC lines should be RP */
- exp_role_ctrl = TCPC_REG_ROLE_CTRL_SET(TYPEC_DRP, TYPEC_RP_USB,
- TYPEC_CC_RP, TYPEC_CC_RP);
- start_time = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
- delay = k_uptime_delta(&start_time);
- if (delay_expected) {
- zassert_true(delay >= 1, "expected delay (%lld ms)", delay);
- } else {
- zassert_true(delay == 0, "unexpected delay (%lld ms)", delay);
- }
- check_tcpci_reg(tcpci_emul, TCPC_REG_ROLE_CTRL, exp_role_ctrl);
- check_tcpci_reg(tcpci_emul, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_LOOK4CONNECTION);
-
- /* Set CC status as src, CC lines set arbitrary */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_CC_STATUS,
- TCPC_REG_CC_STATUS_SET(0, TYPEC_CC_VOLT_OPEN,
- TYPEC_CC_VOLT_RA));
-
- /* Test drp toggle when CC is src. Role control CC lines should be RD */
- exp_role_ctrl = TCPC_REG_ROLE_CTRL_SET(TYPEC_DRP, TYPEC_RP_USB,
- TYPEC_CC_RD, TYPEC_CC_RD);
- start_time = k_uptime_get();
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.drp_toggle(USBC_PORT_C1),
- NULL);
- delay = k_uptime_delta(&start_time);
- if (delay_expected) {
- zassert_true(delay >= 1, "expected delay (%lld ms)", delay);
- } else {
- zassert_true(delay == 0, "unexpected delay (%lld ms)", delay);
- }
- check_tcpci_reg(tcpci_emul, TCPC_REG_ROLE_CTRL, exp_role_ctrl);
- check_tcpci_reg(tcpci_emul, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_LOOK4CONNECTION);
-}
-
-/** Test PS8815 drp toggle */
-ZTEST(ps8815, test_ps8815_drp_toggle)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
-
- /*
- * Set hw revision 0x0a00 to enable workaround for b/171430855 (delay
- * 1 ms on role control reg update)
- */
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, 0x0a00);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
- test_ps88x5_drp_toggle(true);
-
- /*
- * Set other hw revision to disable workaround for b/171430855 (delay
- * 1 ms on role control reg update)
- */
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, 0x0a02);
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
- test_ps88x5_drp_toggle(false);
-}
-
-/** Test PS8805 drp toggle */
-ZTEST(ps8805, test_drp_toggle)
-{
- test_ps88x5_drp_toggle(false);
-}
-
-/** Test PS8xxx get chip info code used by all PS8xxx devices */
-static void test_ps8xxx_get_chip_info(uint16_t current_product_id)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
- struct ec_response_pd_chip_info_v1 info;
- uint16_t vendor, product, device_id, fw_rev;
-
- /* Setup chip info */
- vendor = PS8XXX_VENDOR_ID;
- /* Get currently used product ID */
- product = current_product_id;
- /* Arbitrary choose device ID that doesn't require fixing */
- device_id = 0x2;
- /* Arbitrary revision */
- fw_rev = 0x32;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_PRODUCT_ID, product);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_BCD_DEV, device_id);
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, fw_rev);
-
- /* Test fail on reading FW revision */
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul, PS8XXX_REG_FW_REV);
- zassert_equal(EC_ERROR_INVAL,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test reading chip info */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
- zassert_equal(vendor, info.vendor_id, NULL);
- zassert_equal(product, info.product_id, NULL);
- zassert_equal(device_id, info.device_id, NULL);
- zassert_equal(fw_rev, info.fw_version_number, NULL);
-
- /* Test fail on wrong vendor id */
- vendor = 0x0;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /* Set correct vendor id */
- vendor = PS8XXX_VENDOR_ID;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
-
- /* Set firmware revision to 0 */
- fw_rev = 0x0;
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, fw_rev);
-
- /*
- * Test fail on firmware revision equals to 0 when getting chip info
- * from live device
- */
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /*
- * Test if firmware revision 0 is accepted when getting chip info from
- * not live device
- */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 0, &info),
- NULL);
- zassert_equal(vendor, info.vendor_id, NULL);
- zassert_equal(product, info.product_id, NULL);
- zassert_equal(device_id, info.device_id, NULL);
- zassert_equal(fw_rev, info.fw_version_number, NULL);
-
- /* Set wrong vendor id */
- vendor = 0;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
-
- /* Test fail on vendor id mismatch on live device */
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /* Test that vendor id is fixed on not live device */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 0, &info),
- NULL);
- zassert_equal(PS8XXX_VENDOR_ID, info.vendor_id, NULL);
- zassert_equal(product, info.product_id, NULL);
- zassert_equal(device_id, info.device_id, NULL);
- zassert_equal(fw_rev, info.fw_version_number, NULL);
-
- /* Set correct vendor id */
- vendor = PS8XXX_VENDOR_ID;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
-
- /* Set wrong product id */
- product = 0;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_PRODUCT_ID, product);
-
- /* Test fail on product id mismatch on live device */
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /* Test that product id is fixed on not live device */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 0, &info),
- NULL);
- zassert_equal(vendor, info.vendor_id, NULL);
- zassert_equal(board_get_ps8xxx_product_id(USBC_PORT_C1),
- info.product_id, NULL);
- zassert_equal(device_id, info.device_id, NULL);
- zassert_equal(fw_rev, info.fw_version_number, NULL);
-
- zassert_equal(false, check_ps8755_chip(USBC_PORT_C1), NULL);
-}
-
-ZTEST(ps8805, test_ps8805_get_chip_info)
-{
- test_ps8xxx_get_chip_info(PS8805_PRODUCT_ID);
-}
-
-ZTEST(ps8815, test_ps8815_get_chip_info)
-{
- test_ps8xxx_get_chip_info(PS8815_PRODUCT_ID);
-}
-
-/** Test PS8805 get chip info and indirectly ps8805_make_device_id */
-ZTEST(ps8805, test_ps8805_get_chip_info_fix_dev_id)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *p0_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_0);
- struct ec_response_pd_chip_info_v1 info;
- uint16_t vendor, product, device_id, fw_rev;
- uint16_t chip_rev;
-
- struct {
- uint16_t exp_dev_id;
- uint16_t chip_rev;
- } test_param[] = {
- /* Test A3 chip revision */
- {
- .exp_dev_id = 0x2,
- .chip_rev = 0xa0,
- },
- /* Test A2 chip revision */
- {
- .exp_dev_id = 0x1,
- .chip_rev = 0x0,
- },
- };
-
- /* Setup chip info */
- vendor = PS8XXX_VENDOR_ID;
- product = PS8805_PRODUCT_ID;
- /* Arbitrary revision */
- fw_rev = 0x32;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_PRODUCT_ID, product);
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, fw_rev);
-
- /* Set correct power status for this test */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, 0x0);
- /* Init to allow access to "hidden" I2C ports */
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- /* Set device id which requires fixing */
- device_id = 0x1;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_BCD_DEV, device_id);
-
- /* Test error on fixing device id because of fail chip revision read */
- i2c_common_emul_set_read_fail_reg(p0_i2c_emul,
- PS8805_P0_REG_CHIP_REVISION);
- zassert_equal(EC_ERROR_INVAL,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
- i2c_common_emul_set_read_fail_reg(p0_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set wrong chip revision */
- chip_rev = 0x32;
- ps8xxx_emul_set_chip_rev(ps8xxx_emul, chip_rev);
-
- /* Test error on fixing device id */
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /* Test fixing device id for specific chip revisions */
- for (int i = 0; i < ARRAY_SIZE(test_param); i++) {
- ps8xxx_emul_set_chip_rev(ps8xxx_emul, test_param[i].chip_rev);
-
- /* Test correct device id after fixing */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1,
- &info),
- "Failed to get chip info in test case %d (chip_rev 0x%x)",
- i, test_param[i].chip_rev);
- zassert_equal(vendor, info.vendor_id,
- "0x%x != (vendor = 0x%x) in test case %d (chip_rev 0x%x)",
- vendor, info.vendor_id,
- i, test_param[i].chip_rev);
- zassert_equal(product, info.product_id,
- "0x%x != (product = 0x%x) in test case %d (chip_rev 0x%x)",
- product, info.product_id,
- i, test_param[i].chip_rev);
- zassert_equal(test_param[i].exp_dev_id, info.device_id,
- "0x%x != (device = 0x%x) in test case %d (chip_rev 0x%x)",
- test_param[i].exp_dev_id, info.device_id,
- i, test_param[i].chip_rev);
- zassert_equal(fw_rev, info.fw_version_number,
- "0x%x != (FW rev = 0x%x) in test case %d (chip_rev 0x%x)",
- fw_rev, info.fw_version_number,
- i, test_param[i].chip_rev);
- }
-}
-
-/** Test PS8815 get chip info and indirectly ps8815_make_device_id */
-ZTEST(ps8815, test_ps8815_get_chip_info_fix_dev_id)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *p1_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_1);
- struct ec_response_pd_chip_info_v1 info;
- uint16_t vendor, product, device_id, fw_rev;
- uint16_t hw_rev;
-
- struct {
- uint16_t exp_dev_id;
- uint16_t hw_rev;
- } test_param[] = {
- /* Test A0 HW revision */
- {
- .exp_dev_id = 0x1,
- .hw_rev = 0x0a00,
- },
- /* Test A1 HW revision */
- {
- .exp_dev_id = 0x2,
- .hw_rev = 0x0a01,
- },
- /* Test A2 HW revision */
- {
- .exp_dev_id = 0x3,
- .hw_rev = 0x0a02,
- },
- };
-
- /* Setup chip info */
- vendor = PS8XXX_VENDOR_ID;
- product = PS8815_PRODUCT_ID;
- /* Arbitrary revision */
- fw_rev = 0x32;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_VENDOR_ID, vendor);
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_PRODUCT_ID, product);
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, fw_rev);
-
- /* Set device id which requires fixing */
- device_id = 0x1;
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_BCD_DEV, device_id);
-
- /* Test error on fixing device id because of fail hw revision read */
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- PS8815_P1_REG_HW_REVISION);
- zassert_equal(EC_ERROR_INVAL,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set wrong hw revision */
- hw_rev = 0x32;
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, hw_rev);
-
- /* Test error on fixing device id */
- zassert_equal(EC_ERROR_UNKNOWN,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1, &info),
- NULL);
-
- /* Test fixing device id for specific HW revisions */
- for (int i = 0; i < ARRAY_SIZE(test_param); i++) {
- ps8xxx_emul_set_hw_rev(ps8xxx_emul, test_param[i].hw_rev);
-
- /* Test correct device id after fixing */
- zassert_equal(EC_SUCCESS,
- ps8xxx_tcpm_drv.get_chip_info(USBC_PORT_C1, 1,
- &info),
- "Failed to get chip info in test case %d (hw_rev 0x%x)",
- i, test_param[i].hw_rev);
- zassert_equal(vendor, info.vendor_id,
- "0x%x != (vendor = 0x%x) in test case %d (hw_rev 0x%x)",
- vendor, info.vendor_id, i, test_param[i].hw_rev);
- zassert_equal(product, info.product_id,
- "0x%x != (product = 0x%x) in test case %d (hw_rev 0x%x)",
- product, info.product_id,
- i, test_param[i].hw_rev);
- zassert_equal(test_param[i].exp_dev_id, info.device_id,
- "0x%x != (device = 0x%x) in test case %d (hw_rev 0x%x)",
- test_param[i].exp_dev_id, info.device_id,
- i, test_param[i].hw_rev);
- zassert_equal(fw_rev, info.fw_version_number,
- "0x%x != (FW rev = 0x%x) in test case %d (hw_rev 0x%x)",
- fw_rev, info.fw_version_number,
- i, test_param[i].hw_rev);
- }
-}
-
-/** Test PS8805 get/set gpio */
-ZTEST(ps8805, test_ps8805_gpio)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *gpio_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_GPIO);
- uint8_t exp_ctrl, gpio_ctrl;
- int level;
-
- struct {
- enum ps8805_gpio signal;
- uint16_t gpio_reg;
- int level;
- } test_param[] = {
- /* Chain of set and unset GPIO to test */
- {
- .gpio_reg = PS8805_REG_GPIO_0,
- .signal = PS8805_GPIO_0,
- .level = 1,
- },
- {
- .gpio_reg = PS8805_REG_GPIO_1,
- .signal = PS8805_GPIO_1,
- .level = 1,
- },
- {
- .gpio_reg = PS8805_REG_GPIO_2,
- .signal = PS8805_GPIO_2,
- .level = 1,
- },
- /* Test setting GPIO 0 which is already set */
- {
- .gpio_reg = PS8805_REG_GPIO_0,
- .signal = PS8805_GPIO_0,
- .level = 1,
- },
- /* Test clearing GPIOs */
- {
- .gpio_reg = PS8805_REG_GPIO_0,
- .signal = PS8805_GPIO_0,
- .level = 0,
- },
- {
- .gpio_reg = PS8805_REG_GPIO_1,
- .signal = PS8805_GPIO_1,
- .level = 0,
- },
- {
- .gpio_reg = PS8805_REG_GPIO_2,
- .signal = PS8805_GPIO_2,
- .level = 0,
- },
- /* Test clearing GPIO 0 which is already unset */
- {
- .gpio_reg = PS8805_REG_GPIO_0,
- .signal = PS8805_GPIO_0,
- .level = 1,
- },
- };
-
- /* Set arbitrary FW reg value != 0 for this test */
- tcpci_emul_set_reg(tcpci_emul, PS8XXX_REG_FW_REV, 0x31);
- /* Set correct power status for this test */
- tcpci_emul_set_reg(tcpci_emul, TCPC_REG_POWER_STATUS, 0x0);
- /* Init to allow access to "hidden" I2C ports */
- zassert_equal(EC_SUCCESS, ps8xxx_tcpm_drv.init(USBC_PORT_C1), NULL);
-
- /* Test fail on invalid signal for gpio control reg */
- zassert_equal(EC_ERROR_INVAL,
- ps8805_gpio_set_level(USBC_PORT_C1, PS8805_GPIO_NUM, 1),
- NULL);
- zassert_equal(EC_ERROR_INVAL,
- ps8805_gpio_get_level(USBC_PORT_C1, PS8805_GPIO_NUM,
- &level), NULL);
-
- /* Setup fail on gpio control reg read */
- i2c_common_emul_set_read_fail_reg(gpio_i2c_emul,
- PS8805_REG_GPIO_CONTROL);
-
- /* Test fail on reading gpio control reg */
- zassert_equal(EC_ERROR_INVAL,
- ps8805_gpio_set_level(USBC_PORT_C1, PS8805_GPIO_0, 1),
- NULL);
- zassert_equal(EC_ERROR_INVAL,
- ps8805_gpio_get_level(USBC_PORT_C1, PS8805_GPIO_0,
- &level), NULL);
-
- /* Do not fail on gpio control reg read */
- i2c_common_emul_set_read_fail_reg(gpio_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on writing gpio control reg */
- i2c_common_emul_set_write_fail_reg(gpio_i2c_emul,
- PS8805_REG_GPIO_CONTROL);
- zassert_equal(EC_ERROR_INVAL,
- ps8805_gpio_set_level(USBC_PORT_C1, PS8805_GPIO_0, 1),
- NULL);
- i2c_common_emul_set_write_fail_reg(gpio_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Clear gpio control reg */
- ps8xxx_emul_set_gpio_ctrl(ps8xxx_emul, 0x0);
- exp_ctrl = 0;
-
- /* Test set and unset GPIO */
- for (int i = 0; i < ARRAY_SIZE(test_param); i++) {
- if (test_param[i].level) {
- exp_ctrl |= test_param[i].gpio_reg;
- } else {
- exp_ctrl &= ~test_param[i].gpio_reg;
- }
- zassert_equal(EC_SUCCESS,
- ps8805_gpio_set_level(USBC_PORT_C1,
- test_param[i].signal,
- test_param[i].level),
- "Failed gpio_set in test case %d (gpio %d, level %d)",
- i, test_param[i].signal, test_param[i].level);
- zassert_equal(EC_SUCCESS,
- ps8805_gpio_get_level(USBC_PORT_C1,
- test_param[i].signal,
- &level),
- "Failed gpio_get in test case %d (gpio %d, level %d)",
- i, test_param[i].signal, test_param[i].level);
- zassert_equal(test_param[i].level, level,
- "%d != (gpio_get_level = %d) in test case %d (gpio %d, level %d)",
- test_param[i].level, level, i,
- test_param[i].signal, test_param[i].level);
- gpio_ctrl = ps8xxx_emul_get_gpio_ctrl(ps8xxx_emul);
- zassert_equal(exp_ctrl, gpio_ctrl,
- "0x%x != (gpio_ctrl = 0x%x) in test case %d (gpio %d, level %d)",
- exp_ctrl, gpio_ctrl, i, test_param[i].signal,
- test_param[i].level);
- }
-}
-
-/** Test TCPCI init and vbus level */
-static void test_ps8xxx_tcpci_init(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_init(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_init)
-{
- test_ps8xxx_tcpci_init();
-}
-
-ZTEST(ps8815, test_tcpci_init)
-{
- test_ps8xxx_tcpci_init();
-}
-
-/** Test TCPCI release */
-static void test_ps8xxx_tcpci_release(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_release(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_release)
-{
- test_ps8xxx_tcpci_release();
-}
-
-ZTEST(ps8815, test_tcpci_release)
-{
- test_ps8xxx_tcpci_release();
-}
-
-/** Test TCPCI get cc */
-static void test_ps8xxx_tcpci_get_cc(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_get_cc(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_get_cc)
-{
- test_ps8xxx_tcpci_get_cc();
-}
-
-ZTEST(ps8815, test_tcpci_get_cc)
-{
- test_ps8xxx_tcpci_get_cc();
-}
-
-/** Test TCPCI set cc */
-static void test_ps8xxx_tcpci_set_cc(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_set_cc(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_set_cc)
-{
- test_ps8xxx_tcpci_set_cc();
-}
-
-ZTEST(ps8815, test_tcpci_set_cc)
-{
- test_ps8xxx_tcpci_set_cc();
-}
-
-/** Test TCPCI set polarity */
-static void test_ps8xxx_tcpci_set_polarity(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_set_polarity(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_set_polarity)
-{
- test_ps8xxx_tcpci_set_polarity();
-}
-
-ZTEST(ps8815, test_tcpci_set_polarity)
-{
- test_ps8xxx_tcpci_set_polarity();
-}
-
-/** Test TCPCI set vconn */
-static void test_ps8xxx_tcpci_set_vconn(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_set_vconn(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_set_vconn)
-{
- test_ps8xxx_tcpci_set_vconn();
-}
-
-ZTEST(ps8815, test_tcpci_set_vconn)
-{
- test_ps8xxx_tcpci_set_vconn();
-}
-
-/** Test TCPCI set msg header */
-static void test_ps8xxx_tcpci_set_msg_header(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_set_msg_header(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_set_msg_header)
-{
- test_ps8xxx_tcpci_set_msg_header();
-}
-
-ZTEST(ps8815, test_tcpci_set_msg_header)
-{
- test_ps8xxx_tcpci_set_msg_header();
-}
-
-/** Test TCPCI get raw message */
-static void test_ps8xxx_tcpci_get_rx_message_raw(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_get_rx_message_raw(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_get_rx_message_raw)
-{
- test_ps8xxx_tcpci_get_rx_message_raw();
-}
-
-ZTEST(ps8815, test_tcpci_get_rx_message_raw)
-{
- test_ps8xxx_tcpci_get_rx_message_raw();
-}
-
-/** Test TCPCI transmitting message */
-static void test_ps8xxx_tcpci_transmit(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_transmit(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_transmit)
-{
- test_ps8xxx_tcpci_transmit();
-}
-
-ZTEST(ps8815, test_tcpci_transmit)
-{
- test_ps8xxx_tcpci_transmit();
-}
-
-/** Test TCPCI alert */
-static void test_ps8xxx_tcpci_alert(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_alert(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_alert)
-{
- test_ps8xxx_tcpci_alert();
-}
-
-ZTEST(ps8815, test_tcpci_alert)
-{
- test_ps8xxx_tcpci_alert();
-}
-
-/** Test TCPCI alert RX message */
-static void test_ps8xxx_tcpci_alert_rx_message(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_alert_rx_message(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_alert_rx_message)
-{
- test_ps8xxx_tcpci_alert_rx_message();
-}
-
-ZTEST(ps8815, test_tcpci_alert_rx_message)
-{
- test_ps8xxx_tcpci_alert_rx_message();
-}
-
-/** Test TCPCI enter low power mode */
-static void test_ps8xxx_tcpci_low_power_mode(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- /*
- * PS8751/PS8815 has the auto sleep function that enters
- * low power mode on its own in ~2 seconds. Other chips
- * don't have it. Stub it out for PS8751/PS8815.
- */
- if (board_get_ps8xxx_product_id(USBC_PORT_C1) == PS8751_PRODUCT_ID ||
- board_get_ps8xxx_product_id(USBC_PORT_C1) == PS8815_PRODUCT_ID)
- return;
- test_tcpci_low_power_mode(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_low_power_mode)
-{
- test_ps8xxx_tcpci_low_power_mode();
-}
-
-ZTEST(ps8815, test_tcpci_low_power_mode)
-{
- test_ps8xxx_tcpci_low_power_mode();
-}
-
-/** Test TCPCI set bist test mode */
-static void test_ps8xxx_tcpci_set_bist_mode(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
-
- test_tcpci_set_bist_mode(tcpci_emul, USBC_PORT_C1);
-}
-
-ZTEST(ps8805, test_tcpci_set_bist_mode)
-{
- test_ps8xxx_tcpci_set_bist_mode();
-}
-
-ZTEST(ps8815, test_tcpci_set_bist_mode)
-{
- test_ps8xxx_tcpci_set_bist_mode();
-}
-
-/* Setup no fail for all I2C devices associated with PS8xxx emulator */
-static void setup_no_fail_all(void)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- const struct emul *tcpci_emul = ps8xxx_emul_get_tcpci(ps8xxx_emul);
- struct i2c_emul *tcpci_i2c_emul = tcpci_emul_get_i2c_emul(tcpci_emul);
- struct i2c_emul *p0_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_0);
- struct i2c_emul *p1_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_1);
- struct i2c_emul *gpio_i2c_emul =
- ps8xxx_emul_get_i2c_emul(ps8xxx_emul, PS8XXX_EMUL_PORT_GPIO);
-
- i2c_common_emul_set_read_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(tcpci_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- if (p0_i2c_emul != NULL) {
- i2c_common_emul_set_read_fail_reg(p0_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(p0_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- }
-
- if (p1_i2c_emul != NULL) {
- i2c_common_emul_set_read_fail_reg(p1_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(p1_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- }
-
- if (gpio_i2c_emul != NULL) {
- i2c_common_emul_set_read_fail_reg(gpio_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- i2c_common_emul_set_write_fail_reg(gpio_i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- }
-}
-
-/**
- * Setup PS8xxx emulator to mimic PS8805 and setup no fail for all I2C devices
- * associated with PS8xxx emulator
- */
-static void ps8805_before(void *state)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- ARG_UNUSED(state);
-
- board_set_ps8xxx_product_id(PS8805_PRODUCT_ID);
- ps8xxx_emul_set_product_id(ps8xxx_emul, PS8805_PRODUCT_ID);
- setup_no_fail_all();
-}
-
-/**
- * Setup PS8xxx emulator to mimic PS8815 and setup no fail for all I2C devices
- * associated with PS8xxx emulator
- */
-static void ps8815_before(void *state)
-{
- const struct emul *ps8xxx_emul = emul_get_binding(PS8XXX_EMUL_LABEL);
- ARG_UNUSED(state);
-
- board_set_ps8xxx_product_id(PS8815_PRODUCT_ID);
- ps8xxx_emul_set_product_id(ps8xxx_emul, PS8815_PRODUCT_ID);
- setup_no_fail_all();
-}
-
-
-ZTEST_SUITE(ps8805, drivers_predicate_post_main, NULL, ps8805_before, NULL,
- NULL);
-
-ZTEST_SUITE(ps8815, drivers_predicate_post_main, NULL, ps8815_before, NULL,
- NULL);
diff --git a/zephyr/test/drivers/src/smart.c b/zephyr/test/drivers/src/smart.c
deleted file mode 100644
index 3628a68d3e..0000000000
--- a/zephyr/test/drivers/src/smart.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/shell/shell_uart.h>
-
-#include "common.h"
-#include "console.h"
-#include "i2c.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/emul_smart_battery.h"
-
-#include "battery.h"
-#include "battery_smart.h"
-#include "test/drivers/test_state.h"
-
-#define BATTERY_ORD DT_DEP_ORD(DT_NODELABEL(battery))
-
-/** Test all simple getters */
-ZTEST_USER(smart_battery, test_battery_getters)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- char block[32];
- int expected;
- int word;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- zassert_equal(EC_SUCCESS, battery_get_mode(&word), NULL);
- zassert_equal(bat->mode, word, "%d != %d", bat->mode, word);
-
- expected = 100 * bat->cap / bat->design_cap;
- zassert_equal(EC_SUCCESS, battery_state_of_charge_abs(&word), NULL);
- zassert_equal(expected, word, "%d != %d", expected, word);
-
- zassert_equal(EC_SUCCESS, battery_cycle_count(&word), NULL);
- zassert_equal(bat->cycle_count, word, "%d != %d",
- bat->cycle_count, word);
- zassert_equal(EC_SUCCESS, battery_design_voltage(&word), NULL);
- zassert_equal(bat->design_mv, word, "%d != %d", bat->design_mv, word);
- zassert_equal(EC_SUCCESS, battery_serial_number(&word), NULL);
- zassert_equal(bat->sn, word, "%d != %d", bat->sn, word);
- zassert_equal(EC_SUCCESS, get_battery_manufacturer_name(block, 32),
- NULL);
- zassert_mem_equal(block, bat->mf_name, bat->mf_name_len,
- "%s != %s", block, bat->mf_name);
- zassert_equal(EC_SUCCESS, battery_device_name(block, 32), NULL);
- zassert_mem_equal(block, bat->dev_name, bat->dev_name_len,
- "%s != %s", block, bat->dev_name);
- zassert_equal(EC_SUCCESS, battery_device_chemistry(block, 32), NULL);
- zassert_mem_equal(block, bat->dev_chem, bat->dev_chem_len,
- "%s != %s", block, bat->dev_chem);
- word = battery_get_avg_current();
- zassert_equal(bat->avg_cur, word, "%d != %d", bat->avg_cur, word);
- word = battery_get_avg_voltage();
- zassert_equal(bat->volt, word, "%d != %d", bat->volt, word);
-
- bat->avg_cur = 200;
- expected = (bat->full_cap - bat->cap) * 60 / bat->avg_cur;
- zassert_equal(EC_SUCCESS, battery_time_to_full(&word), NULL);
- zassert_equal(expected, word, "%d != %d", expected, word);
-
- bat->cur = -200;
- expected = bat->cap * 60 / (-bat->cur);
- zassert_equal(EC_SUCCESS, battery_run_time_to_empty(&word), NULL);
- zassert_equal(expected, word, "%d != %d", expected, word);
-
- bat->avg_cur = -200;
- expected = bat->cap * 60 / (-bat->avg_cur);
- zassert_equal(EC_SUCCESS, battery_time_to_empty(&word), NULL);
- zassert_equal(expected, word, "%d != %d", expected, word);
-}
-
-/** Test getting capacity. These functions should force mAh mode */
-ZTEST_USER(smart_battery, test_battery_get_capacity)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- int word;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Test fail when checking battery mode */
- i2c_common_emul_set_read_fail_reg(emul, SB_BATTERY_MODE);
- zassert_equal(EC_ERROR_INVAL, battery_remaining_capacity(&word), NULL);
- zassert_equal(EC_ERROR_INVAL, battery_full_charge_capacity(&word),
- NULL);
- zassert_equal(EC_ERROR_INVAL, battery_design_capacity(&word), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test getting remaining capacity and if mAh mode is forced */
- bat->mode |= MODE_CAPACITY;
- zassert_equal(EC_SUCCESS, battery_remaining_capacity(&word), NULL);
- zassert_equal(bat->cap, word, "%d != %d", bat->cap, word);
- zassert_false(bat->mode & MODE_CAPACITY, "mAh mode not forced");
-
- /* Test getting full charge capacity and if mAh mode is forced */
- bat->mode |= MODE_CAPACITY;
- zassert_equal(EC_SUCCESS, battery_full_charge_capacity(&word), NULL);
- zassert_equal(bat->full_cap, word, "%d != %d", bat->full_cap, word);
- zassert_false(bat->mode & MODE_CAPACITY, "mAh mode not forced");
-
- /* Test getting design capacity and if mAh mode is forced */
- bat->mode |= MODE_CAPACITY;
- zassert_equal(EC_SUCCESS, battery_design_capacity(&word), NULL);
- zassert_equal(bat->design_cap, word, "%d != %d", bat->design_cap, word);
- zassert_false(bat->mode & MODE_CAPACITY, "mAh mode not forced");
-}
-
-
-/** Test battery status */
-ZTEST_USER(smart_battery, test_battery_status)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- int expected;
- int status;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- bat->status = 0;
- bat->cur = -200;
- bat->cap_alarm = 0;
- bat->time_alarm = 0;
- bat->cap = bat->full_cap / 2;
- bat->error_code = STATUS_CODE_OVERUNDERFLOW;
-
- expected = 0;
- expected |= STATUS_DISCHARGING;
- expected |= STATUS_CODE_OVERUNDERFLOW;
-
- zassert_equal(EC_SUCCESS, battery_status(&status), NULL);
- zassert_equal(expected, status, "%d != %d", expected, status);
-}
-
-/** Test wait for stable function */
-ZTEST_USER(smart_battery, test_battery_wait_for_stable)
-{
- struct i2c_emul *emul;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
-
- /* Should fail when read function always fail */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_FAIL_ALL_REG);
- zassert_equal(EC_ERROR_NOT_POWERED, battery_wait_for_stable(), NULL);
-
- /* Should be ok with default handler */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_equal(EC_SUCCESS, battery_wait_for_stable(), NULL);
-}
-
-/** Test manufacture date */
-ZTEST_USER(smart_battery, test_battery_manufacture_date)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- int day, month, year;
- int exp_month = 5;
- int exp_year = 2018;
- int exp_day = 19;
- uint16_t date;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- date = sbat_emul_date_to_word(exp_day, exp_month, exp_year);
- bat->mf_date = date;
-
- zassert_equal(EC_SUCCESS, battery_manufacture_date(&year, &month, &day),
- NULL);
- zassert_equal(exp_day, day, "%d != %d", exp_day, day);
- zassert_equal(exp_month, month, "%d != %d", exp_month, month);
- zassert_equal(exp_year, year, "%d != %d", exp_year, year);
-}
-
-/** Test time at rate */
-ZTEST_USER(smart_battery, test_battery_time_at_rate)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- int expect_time;
- int minutes;
- int rate;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Test fail on rate 0 */
- rate = 0;
- zassert_equal(EC_ERROR_INVAL, battery_time_at_rate(rate, &minutes),
- NULL);
-
- /* 10mAh at rate 6000mA will be discharged in 6s */
- bat->cap = 10;
- rate = -6000;
-
- /* Test fail on writing at rate register */
- i2c_common_emul_set_write_fail_reg(emul, SB_AT_RATE);
- zassert_equal(EC_ERROR_INVAL, battery_time_at_rate(rate, &minutes),
- NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on reading at rate ok register */
- i2c_common_emul_set_read_fail_reg(emul, SB_AT_RATE_OK);
- zassert_equal(EC_ERROR_INVAL, battery_time_at_rate(rate, &minutes),
- NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /*
- * Expected discharging rate is less then 10s,
- * so AtRateOk() register should return 0
- */
- zassert_equal(EC_ERROR_TIMEOUT, battery_time_at_rate(rate, &minutes),
- NULL);
-
- /* 3000mAh at rate 300mA will be discharged in 10h */
- bat->cap = 3000;
- rate = -300;
- expect_time = 600;
-
- zassert_equal(EC_SUCCESS, battery_time_at_rate(rate, &minutes), NULL);
- zassert_equal(expect_time, minutes, "%d != %d", expect_time, minutes);
-
- /* 1000mAh at rate 1000mA will be charged in 1h */
- bat->cap = bat->full_cap - 1000;
- rate = 1000;
- /* battery_time_at_rate report time to full as negative number */
- expect_time = -60;
-
- zassert_equal(EC_SUCCESS, battery_time_at_rate(rate, &minutes), NULL);
- zassert_equal(expect_time, minutes, "%d != %d", expect_time, minutes);
-}
-
-/** Test battery get params */
-ZTEST_USER(smart_battery, test_battery_get_params)
-{
- struct sbat_emul_bat_data *bat;
- struct batt_params batt;
- struct i2c_emul *emul;
- int flags;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Fail temperature read */
- i2c_common_emul_set_read_fail_reg(emul, SB_TEMPERATURE);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_TEMPERATURE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail state of charge read; want charge cannot be set */
- i2c_common_emul_set_read_fail_reg(emul, SB_RELATIVE_STATE_OF_CHARGE);
- flags = BATT_FLAG_RESPONSIVE | BATT_FLAG_BAD_STATE_OF_CHARGE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail voltage read */
- i2c_common_emul_set_read_fail_reg(emul, SB_VOLTAGE);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_VOLTAGE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail current read */
- i2c_common_emul_set_read_fail_reg(emul, SB_CURRENT);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_CURRENT;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail average current read */
- i2c_common_emul_set_read_fail_reg(emul, SB_AVERAGE_CURRENT);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_AVERAGE_CURRENT;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail charging voltage read; want charge cannot be set */
- i2c_common_emul_set_read_fail_reg(emul, SB_CHARGING_VOLTAGE);
- flags = BATT_FLAG_RESPONSIVE | BATT_FLAG_BAD_DESIRED_VOLTAGE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail charging voltage read; want charge cannot be set */
- i2c_common_emul_set_read_fail_reg(emul, SB_CHARGING_CURRENT);
- flags = BATT_FLAG_RESPONSIVE | BATT_FLAG_BAD_DESIRED_CURRENT;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail remaining capacity read */
- i2c_common_emul_set_read_fail_reg(emul, SB_REMAINING_CAPACITY);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_REMAINING_CAPACITY;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail full capacity read */
- i2c_common_emul_set_read_fail_reg(emul, SB_FULL_CHARGE_CAPACITY);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_FULL_CAPACITY;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail status read */
- i2c_common_emul_set_read_fail_reg(emul, SB_BATTERY_STATUS);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_STATUS;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Fail all */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_FAIL_ALL_REG);
- flags = BATT_FLAG_BAD_ANY;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-
- /* Use default handler, everything should be ok */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
-}
-
-struct mfgacc_data {
- int reg;
- uint8_t *buf;
- int len;
-};
-
-static int mfgacc_read_func(struct i2c_emul *emul, int reg, uint8_t *val,
- int bytes, void *data)
-{
- struct mfgacc_data *conf = data;
-
- if (bytes == 0 && conf->reg == reg) {
- sbat_emul_set_response(emul, reg, conf->buf, conf->len, false);
- }
-
- return 1;
-}
-
-/** Test battery manufacturer access */
-ZTEST_USER(smart_battery, test_battery_mfacc)
-{
- struct sbat_emul_bat_data *bat;
- struct mfgacc_data mfacc_conf;
- struct i2c_emul *emul;
- uint8_t recv_buf[10];
- uint8_t mf_data[10];
- uint16_t cmd;
- int len;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Select arbitrary command number for the test */
- cmd = 0x1234;
-
- /* Test fail on to short receive buffer */
- len = 2;
- zassert_equal(EC_ERROR_INVAL,
- sb_read_mfgacc(cmd, SB_ALT_MANUFACTURER_ACCESS, recv_buf,
- len), NULL);
-
- /* Set correct length for rest of the test */
- len = 10;
-
- /* Test fail on writing SB_MANUFACTURER_ACCESS register */
- i2c_common_emul_set_write_fail_reg(emul, SB_MANUFACTURER_ACCESS);
- zassert_equal(EC_ERROR_INVAL,
- sb_read_mfgacc(cmd, SB_ALT_MANUFACTURER_ACCESS, recv_buf,
- len), NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on reading manufacturer data (custom handler is not set) */
- zassert_equal(EC_ERROR_INVAL,
- sb_read_mfgacc(cmd, SB_ALT_MANUFACTURER_ACCESS, recv_buf,
- len), NULL);
-
- /* Set arbitrary manufacturer data */
- for (int i = 1; i < len; i++) {
- mf_data[i] = i;
- }
- /* Set first byte of message as length */
- mf_data[0] = len;
-
- /* Setup custom handler */
- mfacc_conf.reg = SB_ALT_MANUFACTURER_ACCESS;
- mfacc_conf.len = len;
- mfacc_conf.buf = mf_data;
- i2c_common_emul_set_read_func(emul, mfgacc_read_func, &mfacc_conf);
-
- /* Test error when mf_data doesn't start with command */
- zassert_equal(EC_ERROR_UNKNOWN,
- sb_read_mfgacc(cmd, SB_ALT_MANUFACTURER_ACCESS, recv_buf,
- len), NULL);
-
- /* Set beginning of the manufacturer data */
- mf_data[1] = cmd & 0xff;
- mf_data[2] = (cmd >> 8) & 0xff;
-
- /* Test successful manufacturer data read */
- zassert_equal(EC_SUCCESS,
- sb_read_mfgacc(cmd, SB_ALT_MANUFACTURER_ACCESS, recv_buf,
- len), NULL);
- /* Compare received data ignoring length byte */
- zassert_mem_equal(mf_data + 1, recv_buf, len - 1, NULL);
-
- /* Disable custom read function */
- i2c_common_emul_set_read_func(emul, NULL, NULL);
-}
-
-/** Test battery fake charge level set and read */
-ZTEST_USER(smart_battery, test_battery_fake_charge)
-{
- struct sbat_emul_bat_data *bat;
- struct batt_params batt;
- struct i2c_emul *emul;
- int remaining_cap;
- int fake_charge;
- int charge;
- int flags;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Success on command with no argument */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "battfake"), NULL);
-
- /* Fail on command with argument which is not a number */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "battfake test"), NULL);
-
- /* Fail on command with charge level above 100% */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "battfake 123"), NULL);
-
- /* Fail on command with charge level below 0% */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "battfake -23"), NULL);
-
- /* Set fake charge level */
- fake_charge = 65;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "battfake 65"), NULL);
-
- /* Test that fake charge level is applied */
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
- zassert_equal(fake_charge, batt.state_of_charge, "%d%% != %d%%",
- fake_charge, batt.state_of_charge);
- remaining_cap = bat->full_cap * fake_charge / 100;
- zassert_equal(remaining_cap, batt.remaining_capacity, "%d != %d",
- remaining_cap, batt.remaining_capacity);
-
- /* Test fake remaining capacity when full capacity is not available */
- i2c_common_emul_set_read_fail_reg(emul, SB_FULL_CHARGE_CAPACITY);
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE |
- BATT_FLAG_BAD_FULL_CAPACITY;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
- zassert_equal(fake_charge, batt.state_of_charge, "%d%% != %d%%",
- fake_charge, batt.state_of_charge);
- remaining_cap = bat->design_cap * fake_charge / 100;
- zassert_equal(remaining_cap, batt.remaining_capacity, "%d != %d",
- remaining_cap, batt.remaining_capacity);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Disable fake charge level */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "battfake -1"), NULL);
-
- /* Test that fake charge level is not applied */
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
- charge = 100 * bat->cap / bat->full_cap;
- zassert_equal(charge, batt.state_of_charge, "%d%% != %d%%",
- charge, batt.state_of_charge);
- zassert_equal(bat->cap, batt.remaining_capacity, "%d != %d",
- bat->cap, batt.remaining_capacity);
-}
-
-/** Test battery fake temperature set and read */
-ZTEST_USER(smart_battery, test_battery_fake_temperature)
-{
- struct sbat_emul_bat_data *bat;
- struct batt_params batt;
- struct i2c_emul *emul;
- int fake_temp;
- int flags;
-
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /* Success on command with no argument */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake"), NULL);
-
- /* Fail on command with argument which is not a number */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake test"), NULL);
-
- /* Fail on command with too high temperature (above 500.0 K) */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake 5001"), NULL);
-
- /* Fail on command with too low temperature (below 0 K) */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake -23"), NULL);
-
- /* Set fake temperature */
- fake_temp = 2840;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake 2840"), NULL);
-
- /* Test that fake temperature is applied */
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
- zassert_equal(fake_temp, batt.temperature, "%d != %d",
- fake_temp, batt.temperature);
-
- /* Disable fake temperature */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "batttempfake -1"), NULL);
-
- /* Test that fake temperature is not applied */
- flags = BATT_FLAG_WANT_CHARGE | BATT_FLAG_RESPONSIVE;
- battery_get_params(&batt);
- zassert_equal(flags, batt.flags, "0x%x != 0x%x", flags, batt.flags);
- zassert_equal(bat->temp, batt.temperature, "%d != %d",
- bat->temp, batt.temperature);
-}
-
-ZTEST_SUITE(smart_battery, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/stm_mems_common.c b/zephyr/test/drivers/src/stm_mems_common.c
deleted file mode 100644
index fef0766c7d..0000000000
--- a/zephyr/test/drivers/src/stm_mems_common.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-#include <zephyr/device.h>
-#include <zephyr/devicetree.h>
-#include <errno.h>
-
-#include "common.h"
-#include "driver/stm_mems_common.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/i2c_mock.h"
-#include "i2c/i2c.h"
-#include "test/drivers/test_state.h"
-
-#define MOCK_EMUL emul_get_binding(DT_LABEL(DT_NODELABEL(i2c_mock)))
-
-struct mock_properties {
- /* Incremented by the mock function every time it is called */
- int call_count;
-};
-
-static int mock_read_fn(struct i2c_emul *emul, int reg, uint8_t *val, int bytes,
- void *data)
-{
- ztest_check_expected_value(reg);
- ztest_check_expected_value(bytes);
- if (val != NULL) {
- /* Allow passing a mocked read byte through the output param */
- ztest_copy_return_data(val, sizeof(*val));
- }
- return ztest_get_return_value();
-}
-
-static int mock_write_fn(struct i2c_emul *emul, int reg, uint8_t val, int bytes,
- void *data)
-{
- struct mock_properties *props = (struct mock_properties *)data;
-
- if (props)
- props->call_count++;
-
- ztest_check_expected_value(reg);
- ztest_check_expected_value(val);
- ztest_check_expected_value(bytes);
- return ztest_get_return_value();
-}
-
-ZTEST(stm_mems_common, test_st_raw_read_n)
-{
- const struct emul *emul = MOCK_EMUL;
- struct i2c_emul *i2c_emul = i2c_mock_to_i2c_emul(emul);
- int rv;
-
- i2c_common_emul_set_read_func(i2c_emul, mock_read_fn, NULL);
- /*
- * Ensure the MSb (auto-increment bit) in the register address gets
- * set, but also return an error condition
- */
- ztest_expect_value(mock_read_fn, reg, 0x80);
- ztest_expect_value(mock_read_fn, bytes, 0);
- ztest_returns_value(mock_read_fn, -EIO);
-
- rv = st_raw_read_n(I2C_PORT_POWER, i2c_mock_get_addr(emul), 0, NULL, 2);
- /* The shim layer translates -EIO to EC_ERROR_INVAL. */
- zassert_equal(rv, EC_ERROR_INVAL, "rv was %d but expected %d", rv,
- EC_ERROR_INVAL);
-}
-
-ZTEST(stm_mems_common, test_st_raw_read_n_noinc)
-{
- const struct emul *emul = MOCK_EMUL;
- struct i2c_emul *i2c_emul = i2c_mock_to_i2c_emul(emul);
- int rv;
-
- i2c_common_emul_set_read_func(i2c_emul, mock_read_fn, NULL);
- /*
- * Unlike `st_raw_read_n`, the MSb (auto-increment bit) in the register
- * address should NOT be automatically set. Also return an error.
- */
- ztest_expect_value(mock_read_fn, reg, 0x00);
- ztest_expect_value(mock_read_fn, bytes, 0);
- ztest_returns_value(mock_read_fn, -EIO);
-
- rv = st_raw_read_n_noinc(I2C_PORT_POWER, i2c_mock_get_addr(emul), 0,
- NULL, 2);
- /* The shim layer translates -EIO to EC_ERROR_INVAL. */
- zassert_equal(rv, EC_ERROR_INVAL, "rv was %d but expected %d", rv,
- EC_ERROR_INVAL);
-}
-
-ZTEST(stm_mems_common, test_st_write_data_with_mask)
-{
- const struct emul *emul = MOCK_EMUL;
- struct i2c_emul *i2c_emul = i2c_mock_to_i2c_emul(emul);
- int rv;
-
- const struct motion_sensor_t sensor = {
- .port = I2C_PORT_POWER,
- .i2c_spi_addr_flags = i2c_mock_get_addr(emul),
- };
-
- /* Arbitrary named test parameters */
- uint8_t test_addr = 0xAA;
- uint8_t initial_value = 0x55;
- uint8_t test_mask = 0xF0;
- uint8_t test_data = 0xFF;
- uint8_t expected_new_value = (initial_value & ~test_mask) |
- (test_data & test_mask);
-
- /* Part 1: error occurs when reading initial value from sensor */
- i2c_common_emul_set_read_func(i2c_emul, mock_read_fn, NULL);
- ztest_expect_value(mock_read_fn, reg, test_addr);
- ztest_expect_value(mock_read_fn, bytes, 0);
- /* Value is immaterial but ztest has no way to explicitly ignore it */
- ztest_return_data(mock_read_fn, val, &initial_value);
- ztest_returns_value(mock_read_fn, -EIO);
-
- rv = st_write_data_with_mask(&sensor, test_addr, test_mask, test_data);
- /* The shim layer translates -EIO to EC_ERROR_INVAL. */
- zassert_equal(rv, EC_ERROR_INVAL, "rv was %d but expected %d", rv,
- EC_ERROR_INVAL);
-
- /*
- * Part 2: initial read succeeds, but the initial value already
- * matches the new value, so no write happens.
- */
- ztest_expect_value(mock_read_fn, reg, test_addr);
- ztest_expect_value(mock_read_fn, bytes, 0);
- ztest_return_data(mock_read_fn, val, &expected_new_value);
- ztest_returns_value(mock_read_fn, 0);
-
- struct mock_properties write_fn_props = {
- .call_count = 0,
- };
-
- i2c_common_emul_set_write_func(i2c_emul, mock_write_fn,
- &write_fn_props);
-
- rv = st_write_data_with_mask(&sensor, test_addr, test_mask, test_data);
- zassert_equal(rv, EC_SUCCESS, "rv was %d but expected %d", rv,
- EC_SUCCESS);
- zassert_equal(write_fn_props.call_count, 0,
- "mock_write_fn was called.");
-
- /*
- * Part 3: this time a write is required, but it fails. This also
- * tests the masking logic.
- */
- ztest_expect_value(mock_read_fn, reg, test_addr);
- ztest_expect_value(mock_read_fn, bytes, 0);
- ztest_return_data(mock_read_fn, val, &initial_value);
- ztest_returns_value(mock_read_fn, 0);
-
- write_fn_props.call_count = 0; /* Reset call count */
- ztest_expect_value(mock_write_fn, reg, test_addr);
- ztest_expect_value(mock_write_fn, bytes, 1);
- ztest_expect_value(mock_write_fn, val, expected_new_value);
- ztest_returns_value(mock_write_fn, -EIO);
-
- rv = st_write_data_with_mask(&sensor, test_addr, test_mask, test_data);
- /* The shim layer translates -EIO to EC_ERROR_INVAL. */
- zassert_equal(rv, EC_ERROR_INVAL, "rv was %d but expected %d", rv,
- EC_ERROR_INVAL);
- zassert_equal(write_fn_props.call_count, 1,
- "mock_write_fn was not called.");
-}
-
-ZTEST(stm_mems_common, test_st_get_resolution)
-{
- int expected_resolution = 123;
- int rv;
-
- struct stprivate_data driver_data = {
- .resol = expected_resolution,
- };
-
- const struct motion_sensor_t sensor = {
- .drv_data = &driver_data,
- };
-
- rv = st_get_resolution(&sensor);
- zassert_equal(rv, expected_resolution, "rv is %d but expected %d", rv,
- expected_resolution);
-}
-
-ZTEST(stm_mems_common, test_st_set_offset)
-{
- int16_t expected_offset[3] = { 123, 456, 789 };
-
- struct stprivate_data driver_data;
- const struct motion_sensor_t sensor = {
- .drv_data = &driver_data,
- };
-
- int rv = st_set_offset(&sensor, expected_offset, 0);
-
- zassert_equal(rv, EC_SUCCESS, "rv as %d but expected %d", rv,
- EC_SUCCESS);
- zassert_equal(driver_data.offset[X], expected_offset[X],
- "X offset is %d but expected %d", driver_data.offset[X],
- expected_offset[X]);
- zassert_equal(driver_data.offset[Y], expected_offset[Y],
- "Y offset is %d but expected %d", driver_data.offset[Y],
- expected_offset[Y]);
- zassert_equal(driver_data.offset[Z], expected_offset[Z],
- "Z offset is %d but expected %d", driver_data.offset[Z],
- expected_offset[Z]);
-}
-
-ZTEST(stm_mems_common, test_st_get_offset)
-{
- struct stprivate_data driver_data = {
- .offset = { [X] = 123, [Y] = 456, [Z] = 789 },
- };
- const struct motion_sensor_t sensor = {
- .drv_data = &driver_data,
- };
-
- int16_t temp_out = 0;
- int16_t actual_offset[3] = { 0, 0, 0 };
-
- int rv = st_get_offset(&sensor, actual_offset, &temp_out);
-
- zassert_equal(rv, EC_SUCCESS, "rv as %d but expected %d", rv,
- EC_SUCCESS);
- zassert_equal(
- temp_out, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP,
- "temp is %d but should be %d (EC_MOTION_SENSE_INVALID_CALIB_TEMP)",
- temp_out, (int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP);
-
- zassert_equal(actual_offset[X], driver_data.offset[X],
- "X offset is %d but expected %d", actual_offset[X],
- driver_data.offset[X]);
- zassert_equal(actual_offset[Y], driver_data.offset[Y],
- "Y offset is %d but expected %d", actual_offset[Y],
- driver_data.offset[Y]);
- zassert_equal(actual_offset[Z], driver_data.offset[Z],
- "Z offset is %d but expected %d", actual_offset[Z],
- driver_data.offset[Z]);
-}
-
-ZTEST(stm_mems_common, test_st_get_data_rate)
-{
- int expected_data_rate = 456;
- int rv;
-
- struct stprivate_data driver_data = {
- .base = {
- .odr = expected_data_rate,
- },
- };
-
- const struct motion_sensor_t sensor = {
- .drv_data = &driver_data,
- };
-
- rv = st_get_data_rate(&sensor);
- zassert_equal(rv, expected_data_rate, "rv is %d but expected %d", rv,
- expected_data_rate);
-}
-
-ZTEST(stm_mems_common, test_st_normalize)
-{
- struct stprivate_data driver_data = {
- .resol = 12, /* 12 bits of useful data (arbitrary) */
- .offset = { /* Arbitrary offsets */
- [X] = -100,
- [Y] = 200,
- [Z] = 100,
- },
- };
- /* Fixed-point identity matrix that performs no rotation. */
- const mat33_fp_t identity_rot_matrix = {
- { INT_TO_FP(1), INT_TO_FP(0), INT_TO_FP(0) },
- { INT_TO_FP(0), INT_TO_FP(1), INT_TO_FP(0) },
- { INT_TO_FP(0), INT_TO_FP(0), INT_TO_FP(1) },
- };
- const struct motion_sensor_t sensor = {
- .drv_data = &driver_data,
- .rot_standard_ref = &identity_rot_matrix,
- .current_range = 32, /* used to scale offsets (arbitrary) */
- };
-
- /* Accelerometer data is passed in with the format:
- * (lower address) (higher address)
- * [X LSB] [X MSB] [Y LSB] [Y MSB] [Z LSB] [Z MSB]
- *
- * The LSB are left-aligned and contain noise/junk data
- * in their least-significant bit positions. When interpreted
- * as int16 samples, the `driver_data.resol`-count most
- * significant bits are what we actually use. For this test, we
- * set `resol` to 12, so there will be 12 useful bits and 4 noise
- * bits. This test (and the EC code) assume we are compiling on
- * a little-endian machine. The samples themselvesare unsigned and
- * biased at 2^12/2 = 2^11.
- */
- uint16_t input_reading[] = {
- ((BIT(11) - 100) << 4) | 0x000a,
- ((BIT(11) + 0) << 4) | 0x000b,
- ((BIT(11) + 100) << 4) | 0x000c,
- };
-
- /* Expected outputs w/ noise bits suppressed and offsets applied.
- * Note that the data stays left-aligned.
- */
- intv3_t expected_output = {
- ((BIT(11) - 100) << 4) + driver_data.offset[X],
- ((BIT(11) + 0) << 4) + driver_data.offset[Y],
- ((BIT(11) + 100) << 4) + driver_data.offset[Z],
- };
-
- intv3_t actual_output = { 0 };
-
- st_normalize(&sensor, (int *)&actual_output, (uint8_t *)input_reading);
-
- zassert_within(actual_output[X], expected_output[X], 0.5f,
- "X output is %d but expected %d", actual_output[X],
- expected_output[X]);
- zassert_within(actual_output[Y], expected_output[Y], 0.5f,
- "Y output is %d but expected %d", actual_output[Y],
- expected_output[Y]);
- zassert_within(actual_output[Z], expected_output[Z], 0.5f,
- "Z output is %d but expected %d", actual_output[Z],
- expected_output[Z]);
-}
-
-static void stm_mems_common_before(void *state)
-{
- ARG_UNUSED(state);
- i2c_mock_reset(MOCK_EMUL);
-}
-
-ZTEST_SUITE(stm_mems_common, drivers_predicate_post_main, NULL,
- stm_mems_common_before, NULL, NULL);
diff --git a/zephyr/test/drivers/src/stubs.c b/zephyr/test/drivers/src/stubs.c
deleted file mode 100644
index 84ae387fb4..0000000000
--- a/zephyr/test/drivers/src/stubs.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "battery.h"
-#include "battery_fuel_gauge.h"
-#include "bc12/pi3usb9201_public.h"
-#include "charge_ramp.h"
-#include "charger.h"
-#include "charger/isl923x_public.h"
-#include "charger/isl9241_public.h"
-#include "config.h"
-#include "fff.h"
-#include "gpio/gpio_int.h"
-#include "hooks.h"
-#include "i2c/i2c.h"
-#include "power.h"
-#include "ppc/sn5s330_public.h"
-#include "ppc/syv682x_public.h"
-#include "retimer/bb_retimer_public.h"
-#include "test/drivers/stubs.h"
-#include "tcpm/ps8xxx_public.h"
-#include "tcpm/tcpci.h"
-#include "usb_mux.h"
-#include "usb_pd_tcpm.h"
-#include "usbc_ppc.h"
-#include "charge_state_v2.h"
-
-#include <zephyr/logging/log.h>
-LOG_MODULE_REGISTER(stubs);
-
-#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args)
-
-/* All of these definitions are just to get the test to link. None of these
- * functions are useful or behave as they should. Please remove them once the
- * real code is able to be added. Most of the things here should either be
- * in emulators or in the native_posix board-specific code or part of the
- * device tree.
- */
-
-/* BC1.2 charger detect configuration */
-const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = {
- [USBC_PORT_C0] = {
- .i2c_port = I2C_PORT_USB_C0,
- .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
- },
- [USBC_PORT_C1] = {
- .i2c_port = I2C_PORT_USB_C1,
- .i2c_addr_flags = PI3USB9201_I2C_ADDR_1_FLAGS,
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT);
-
-int board_set_active_charge_port(int port)
-{
- int is_real_port = (port >= 0 &&
- port < CONFIG_USB_PD_PORT_MAX_COUNT);
- int i;
-
- if (!is_real_port && port != CHARGE_PORT_NONE)
- return EC_ERROR_INVAL;
-
- if (port == CHARGE_PORT_NONE) {
- CPRINTS("Disabling all charging port");
-
- /* Disable all ports. */
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- /*
- * Do not return early if one fails otherwise we can
- * get into a boot loop assertion failure.
- */
- if (board_vbus_sink_enable(i, 0))
- CPRINTS("Disabling p%d sink path failed.", i);
- }
-
- return EC_SUCCESS;
- }
-
- /* Check if the port is sourcing VBUS. */
- if (board_is_sourcing_vbus(port)) {
- CPRINTS("Skip enable p%d", port);
- return EC_ERROR_INVAL;
- }
-
-
- CPRINTS("New charge port: p%d", port);
-
- /*
- * Turn off the other ports' sink path FETs, before enabling the
- * requested charge port.
- */
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- if (i == port)
- continue;
-
- if (board_vbus_sink_enable(i, 0))
- CPRINTS("p%d: sink path disable failed.", i);
- }
-
- /* Enable requested charge port. */
- if (board_vbus_sink_enable(port, 1)) {
- CPRINTS("p%d: sink path enable failed.", port);
- return EC_ERROR_UNKNOWN;
- }
-
- return EC_SUCCESS;
-}
-
-int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
-{
- return 0;
-}
-
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
-struct tcpc_config_t tcpc_config[] = {
- [USBC_PORT_C0] = {
- .bus_type = EC_BUS_TYPE_I2C,
- .i2c_info = {
- .port = I2C_PORT_USB_C0,
- .addr_flags = DT_REG_ADDR(DT_NODELABEL(tcpci_emul)),
- },
- .drv = &tcpci_tcpm_drv,
- },
- [USBC_PORT_C1] = {
- .bus_type = EC_BUS_TYPE_I2C,
- .i2c_info = {
- .port = I2C_PORT_USB_C1,
- .addr_flags = DT_REG_ADDR(DT_NODELABEL(
- tcpci_ps8xxx_emul)),
- },
- .drv = &ps8xxx_tcpm_drv,
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT);
-BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
-
-static uint16_t ps8xxx_product_id = PS8805_PRODUCT_ID;
-
-uint16_t board_get_ps8xxx_product_id(int port)
-{
- if (port != USBC_PORT_C1) {
- return 0;
- }
-
- return ps8xxx_product_id;
-}
-
-void board_set_ps8xxx_product_id(uint16_t product_id)
-{
- ps8xxx_product_id = product_id;
-}
-
-int board_vbus_sink_enable(int port, int enable)
-{
- /* Both ports are controlled by PPC SN5S330 */
- return ppc_vbus_sink_enable(port, enable);
-}
-
-int board_is_sourcing_vbus(int port)
-{
- /* Both ports are controlled by PPC SN5S330 */
- return ppc_is_sourcing_vbus(port);
-}
-
-struct usb_mux usbc0_virtual_usb_mux = {
- .usb_port = USBC_PORT_C0,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-
-struct usb_mux usbc1_virtual_usb_mux = {
- .usb_port = USBC_PORT_C1,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-
-struct usb_mux usb_muxes[] = {
- [USBC_PORT_C0] = {
- .usb_port = USBC_PORT_C0,
- .driver = &tcpci_tcpm_usb_mux_driver,
- .next_mux = &usbc0_virtual_usb_mux,
- .i2c_port = I2C_PORT_USB_C0,
- .i2c_addr_flags = DT_REG_ADDR(DT_NODELABEL(tcpci_emul)),
- },
- [USBC_PORT_C1] = {
- .usb_port = USBC_PORT_C1,
- .driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
- .next_mux = &usbc1_virtual_usb_mux,
- .i2c_port = I2C_PORT_USB_C1,
- .i2c_addr_flags = DT_REG_ADDR(DT_NODELABEL(
- usb_c1_bb_retimer_emul)),
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT);
-
-struct bb_usb_control bb_controls[] = {
- [USBC_PORT_C0] = {
- /* USB-C port 0 doesn't have a retimer */
- },
- [USBC_PORT_C1] = {
- .usb_ls_en_gpio = GPIO_SIGNAL(DT_NODELABEL(usb_c1_ls_en)),
- .retimer_rst_gpio =
- GPIO_SIGNAL(DT_NODELABEL(usb_c1_rt_rst_odl)),
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(bb_controls) == USBC_PORT_COUNT);
-
-void pd_power_supply_reset(int port)
-{
-}
-
-int pd_check_vconn_swap(int port)
-{
- return 0;
-}
-
-int pd_set_power_supply_ready(int port)
-{
- return EC_SUCCESS;
-}
-
-/* USBC PPC configuration */
-struct ppc_config_t ppc_chips[] = {
- [USBC_PORT_C0] = {
- .i2c_port = I2C_PORT_USB_C0,
- .i2c_addr_flags = SN5S330_ADDR0_FLAGS,
- .drv = &sn5s330_drv,
- },
- [USBC_PORT_C1] = {
- .i2c_port = I2C_PORT_USB_C1,
- .i2c_addr_flags = SYV682X_ADDR1_FLAGS,
- .frs_en = GPIO_SIGNAL(DT_NODELABEL(gpio_usb_c1_frs_en)),
- .drv = &syv682x_drv,
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
-unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
-
-DEFINE_FAKE_VOID_FUNC(system_hibernate, uint32_t, uint32_t);
-
-uint16_t tcpc_get_alert_status(void)
-{
- uint16_t status = 0;
-
- /*
- * Check which port has the ALERT line set and ignore if that TCPC has
- * its reset line active.
- */
- if (!gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(usb_c0_tcpc_int_odl))) {
- if (gpio_pin_get_dt(
- GPIO_DT_FROM_NODELABEL(usb_c0_tcpc_rst_l)) != 0)
- status |= PD_STATUS_TCPC_ALERT_0;
- }
-
- if (!gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(usb_c1_tcpc_int_odl))) {
- if (gpio_pin_get_dt(
- GPIO_DT_FROM_NODELABEL(usb_c1_tcpc_rst_l)) != 0)
- status |= PD_STATUS_TCPC_ALERT_1;
- }
-
- return status;
-}
-
-void tcpc_alert_event(enum gpio_signal signal)
-{
- int port;
-
- switch (signal) {
- case GPIO_SIGNAL(DT_NODELABEL(usb_c0_tcpc_int_odl)):
- port = 0;
- break;
- case GPIO_SIGNAL(DT_NODELABEL(usb_c1_tcpc_int_odl)):
- port = 1;
- break;
- default:
- return;
- }
-
- schedule_deferred_pd_interrupt(port);
-}
-
-void ppc_alert(enum gpio_signal signal)
-{
- switch (signal) {
- case GPIO_SIGNAL(DT_NODELABEL(gpio_usb_c0_ppc_int)):
- ppc_chips[USBC_PORT_C0].drv->interrupt(USBC_PORT_C0);
- break;
- case GPIO_SIGNAL(DT_NODELABEL(gpio_usb_c1_ppc_int)):
- ppc_chips[USBC_PORT_C1].drv->interrupt(USBC_PORT_C1);
- break;
- default:
- return;
- }
-}
-
-/* TODO: This code should really be generic, and run based on something in
- * the dts.
- */
-static void stubs_interrupt_init(void)
-{
- /* Enable TCPC interrupts. */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0));
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c1));
-
- cprints(CC_USB, "Resetting TCPCs...");
- cflush();
-
- /* Reset generic TCPCI on port 0. */
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(usb_c0_tcpc_rst_l), 0);
- msleep(1);
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(usb_c0_tcpc_rst_l), 1);
-
- /* Reset PS8XXX on port 1. */
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(usb_c1_tcpc_rst_l), 0);
- msleep(PS8XXX_RESET_DELAY_MS);
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(usb_c1_tcpc_rst_l), 1);
-
- /* Enable PPC interrupts. */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_ppc));
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c1_ppc));
-
- /* Enable SwitchCap interrupt */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_switchcap_pg));
-}
-DECLARE_HOOK(HOOK_INIT, stubs_interrupt_init, HOOK_PRIO_POST_I2C);
-
-void board_set_switchcap_power(int enable)
-{
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_switchcap_on), enable);
- /* TODO(b/217554681): So, the ln9310 emul should probably be setting
- * this instead of setting it here.
- */
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_src_vph_pwr_pg), enable);
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_mb_power_good), enable);
-}
-
-int board_is_switchcap_enabled(void)
-{
- return gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_switchcap_on));
-}
-
-int board_is_switchcap_power_good(void)
-{
- return gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_src_vph_pwr_pg));
-}
-
-void sys_arch_reboot(int type)
-{
- ARG_UNUSED(type);
-}
-
-/* GPIO TEST interrupt handler */
-bool gpio_test_interrupt_triggered;
-void gpio_test_interrupt(enum gpio_signal signal)
-{
- ARG_UNUSED(signal);
- printk("%s called\n", __func__);
- gpio_test_interrupt_triggered = true;
-}
-
-int clock_get_freq(void)
-{
- return 16000000;
-}
diff --git a/zephyr/test/drivers/src/tcpci.c b/zephyr/test/drivers/src/tcpci.c
deleted file mode 100644
index 167744f3a9..0000000000
--- a/zephyr/test/drivers/src/tcpci.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "hooks.h"
-#include "i2c.h"
-#include "test/drivers/stubs.h"
-#include "test/drivers/tcpci_test_common.h"
-
-#include "tcpm/tcpci.h"
-#include "test/drivers/test_state.h"
-
-#define EMUL_LABEL DT_NODELABEL(tcpci_emul)
-
-/** Test TCPCI init and vbus level */
-ZTEST(tcpci, test_generic_tcpci_init)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_init(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI release */
-ZTEST(tcpci, test_generic_tcpci_release)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_release(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI get cc */
-ZTEST(tcpci, test_generic_tcpci_get_cc)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_get_cc(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI set cc */
-ZTEST(tcpci, test_generic_tcpci_set_cc)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_cc(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI set polarity */
-ZTEST(tcpci, test_generic_tcpci_set_polarity)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_polarity(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI set vconn */
-ZTEST(tcpci, test_generic_tcpci_set_vconn)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_vconn(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI set msg header */
-ZTEST(tcpci, test_generic_tcpci_set_msg_header)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_msg_header(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI rx and sop prime enable */
-ZTEST(tcpci, test_generic_tcpci_set_rx_detect)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_rx_detect(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI get raw message from TCPC revision 2.0 */
-ZTEST(tcpci, test_generic_tcpci_get_rx_message_raw_rev2)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- tcpc_config[USBC_PORT_C0].flags = TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- test_tcpci_get_rx_message_raw(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI get raw message from TCPC revision 1.0 */
-ZTEST(tcpci, test_generic_tcpci_get_rx_message_raw_rev1)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- tcpc_config[USBC_PORT_C0].flags = 0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV1_0_VER1_0);
-
- test_tcpci_get_rx_message_raw(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI transmitting message from TCPC revision 2.0 */
-ZTEST(tcpci, test_generic_tcpci_transmit_rev2)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- tcpc_config[USBC_PORT_C0].flags = TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- test_tcpci_transmit(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI transmitting message from TCPC revision 1.0 */
-ZTEST(tcpci, test_generic_tcpci_transmit_rev1)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- tcpc_config[USBC_PORT_C0].flags = 0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV1_0_VER1_0);
-
- test_tcpci_transmit(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI alert */
-ZTEST(tcpci, test_generic_tcpci_alert)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_alert(emul, USBC_PORT_C0);
-}
-
-
-/** Test TCPCI alert RX message */
-ZTEST(tcpci, test_generic_tcpci_alert_rx_message)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_alert_rx_message(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI auto discharge on disconnect */
-ZTEST(tcpci, test_generic_tcpci_auto_discharge)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_auto_discharge(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI drp toggle */
-ZTEST(tcpci, test_generic_tcpci_drp_toggle)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_drp_toggle(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI get chip info */
-ZTEST(tcpci, test_generic_tcpci_get_chip_info)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_get_chip_info(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI enter low power mode */
-ZTEST(tcpci, test_generic_tcpci_low_power_mode)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_low_power_mode(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI set bist test mode */
-ZTEST(tcpci, test_generic_tcpci_set_bist_mode)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
-
- test_tcpci_set_bist_mode(emul, USBC_PORT_C0);
-}
-
-/** Test TCPCI discharge vbus */
-ZTEST(tcpci, test_generic_tcpci_discharge_vbus)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- uint8_t exp_ctrl, initial_ctrl;
-
- /* Set initial value for POWER ctrl register. Chosen arbitrary. */
- initial_ctrl = TCPC_REG_POWER_CTRL_VBUS_VOL_MONITOR_DIS |
- TCPC_REG_POWER_CTRL_VOLT_ALARM_DIS;
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_CTRL, initial_ctrl);
-
- /* Test discharge enable */
- exp_ctrl = initial_ctrl | TCPC_REG_POWER_CTRL_FORCE_DISCHARGE;
- tcpci_tcpc_discharge_vbus(USBC_PORT_C0, 1);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-
- /* Test discharge disable */
- exp_ctrl = initial_ctrl & ~TCPC_REG_POWER_CTRL_FORCE_DISCHARGE;
- tcpci_tcpc_discharge_vbus(USBC_PORT_C0, 0);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-}
-
-/** Test TCPC xfer */
-ZTEST(tcpci, test_tcpc_xfer)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- uint16_t val, exp_val;
- uint8_t reg;
-
- /* Set value to register (value and register chosen arbitrary) */
- exp_val = 0x7fff;
- reg = TCPC_REG_ALERT_MASK;
- tcpci_emul_set_reg(emul, reg, exp_val);
-
- /* Test reading value using tcpc_xfer() function */
- zassert_equal(EC_SUCCESS,
- tcpc_xfer(USBC_PORT_C0, &reg, 1, (uint8_t *)&val, 2),
- NULL);
- zassert_equal(exp_val, val, "0x%x != 0x%x", exp_val, val);
-}
-
-/** Test TCPCI debug accessory enable/disable */
-ZTEST(tcpci, test_generic_tcpci_debug_accessory)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- uint8_t exp_val, initial_val;
-
- /* Set initial value for STD output register. Chosen arbitrary. */
- initial_val = TCPC_REG_CONFIG_STD_OUTPUT_AUDIO_CONN_N |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB |
- TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED |
- TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N;
- tcpci_emul_set_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, initial_val);
-
- /* Test debug accessory connect */
- exp_val = initial_val & ~TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N;
- tcpci_tcpc_debug_accessory(USBC_PORT_C0, 1);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
-
- /* Test debug accessory disconnect */
- exp_val = initial_val | TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N;
- tcpci_tcpc_debug_accessory(USBC_PORT_C0, 0);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
-}
-
-/* Setup TCPCI usb mux to behave as it is used only for usb mux */
-static void set_usb_mux_not_tcpc(void)
-{
- usb_muxes[USBC_PORT_C0].flags = USB_MUX_FLAG_NOT_TCPC;
-}
-
-/* Setup TCPCI usb mux to behave as it is used for usb mux and TCPC */
-static void set_usb_mux_tcpc(void)
-{
- usb_muxes[USBC_PORT_C0].flags = 0;
-}
-
-/** Test TCPCI mux init */
-ZTEST(tcpci, test_generic_tcpci_mux_init)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct usb_mux *tcpci_usb_mux = &usb_muxes[USBC_PORT_C0];
-
- /* Set as usb mux with TCPC for first init call */
- set_usb_mux_tcpc();
-
- /* Make sure that TCPC is not accessed */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_FAIL_ALL_REG);
- zassert_equal(EC_SUCCESS, tcpci_tcpm_mux_init(tcpci_usb_mux),
- NULL);
-
- /* Set as only usb mux without TCPC for rest of the test */
- set_usb_mux_not_tcpc();
-
- /* Test fail on power status read */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_POWER_STATUS);
- zassert_equal(EC_ERROR_INVAL, tcpci_tcpm_mux_init(tcpci_usb_mux),
- NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on uninitialised bit set */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_UNINIT);
- zassert_equal(EC_ERROR_TIMEOUT,
- tcpci_tcpm_mux_init(tcpci_usb_mux), NULL);
-
- /* Set default power status for rest of the test */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
-
- /* Test fail on alert mask write fail */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_ALERT_MASK);
- zassert_equal(EC_ERROR_UNKNOWN,
- tcpci_tcpm_mux_init(tcpci_usb_mux), NULL);
-
- /* Test fail on alert write fail */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_ALERT);
- zassert_equal(EC_ERROR_UNKNOWN,
- tcpci_tcpm_mux_init(tcpci_usb_mux), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set arbitrary value to alert and alert mask registers */
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, 0xffff);
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT_MASK, 0xffff);
-
- /* Test success init */
- zassert_equal(EC_SUCCESS, tcpci_tcpm_mux_init(tcpci_usb_mux),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, 0);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0);
-}
-
-/** Test TCPCI mux enter low power mode */
-ZTEST(tcpci, test_generic_tcpci_mux_enter_low_power)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct usb_mux *tcpci_usb_mux = &usb_muxes[USBC_PORT_C0];
-
- /* Set as usb mux with TCPC for first enter_low_power call */
- set_usb_mux_tcpc();
-
- /* Make sure that TCPC is not accessed */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_FAIL_ALL_REG);
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_enter_low_power(tcpci_usb_mux),
- NULL);
-
- /* Set as only usb mux without TCPC for rest of the test */
- set_usb_mux_not_tcpc();
-
- /* Test error on failed command set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_COMMAND);
- zassert_equal(EC_ERROR_INVAL,
- tcpci_tcpm_mux_enter_low_power(tcpci_usb_mux),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test correct command is issued */
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_enter_low_power(tcpci_usb_mux),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_COMMAND, TCPC_REG_COMMAND_I2CIDLE);
-}
-
-/** Test TCPCI mux set and get */
-static void test_generic_tcpci_mux_set_get(void)
-{
- const struct emul *emul = emul_get_binding(DT_LABEL(EMUL_LABEL));
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct usb_mux *tcpci_usb_mux = &usb_muxes[USBC_PORT_C0];
- mux_state_t mux_state, mux_state_get;
- uint16_t exp_val, initial_val;
- bool ack;
-
- mux_state = USB_PD_MUX_NONE;
-
- /* Test fail on standard output config register read */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_CONFIG_STD_OUTPUT);
- zassert_equal(EC_ERROR_INVAL,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- zassert_equal(EC_ERROR_INVAL,
- tcpci_tcpm_mux_get(tcpci_usb_mux, &mux_state_get),
- NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on standard output config register write */
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- TCPC_REG_CONFIG_STD_OUTPUT);
- zassert_equal(EC_ERROR_INVAL,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set initial value for STD output register. Chosen arbitrary. */
- initial_val = TCPC_REG_CONFIG_STD_OUTPUT_AUDIO_CONN_N |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB |
- TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED |
- TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N;
- tcpci_emul_set_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, initial_val);
-
- /* Test setting/getting no MUX connection without polarity inverted */
- exp_val = (initial_val & ~TCPC_REG_CONFIG_STD_OUTPUT_MUX_MASK) |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_NONE;
- exp_val &= ~TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED;
- mux_state = USB_PD_MUX_NONE;
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
- zassert_false(ack, "Ack from host shouldn't be required");
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_get(tcpci_usb_mux, &mux_state_get),
- NULL);
- zassert_equal(mux_state, mux_state_get, "Expected state 0x%x, got 0x%x",
- mux_state, mux_state_get);
-
- /* Test setting/getting MUX DP with polarity inverted */
- exp_val = (initial_val & ~TCPC_REG_CONFIG_STD_OUTPUT_MUX_MASK) |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_DP |
- TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED;
- mux_state = USB_PD_MUX_DP_ENABLED | USB_PD_MUX_POLARITY_INVERTED;
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
- zassert_false(ack, "Ack from host shouldn't be required");
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_get(tcpci_usb_mux, &mux_state_get),
- NULL);
- zassert_equal(mux_state, mux_state_get, "Expected state 0x%x, got 0x%x",
- mux_state, mux_state_get);
-
- /* Test setting/getting MUX USB without polarity inverted */
- exp_val = (initial_val & ~TCPC_REG_CONFIG_STD_OUTPUT_MUX_MASK) |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB;
- exp_val &= ~TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED;
- mux_state = USB_PD_MUX_USB_ENABLED;
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
- zassert_false(ack, "Ack from host shouldn't be required");
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_get(tcpci_usb_mux, &mux_state_get),
- NULL);
- zassert_equal(mux_state, mux_state_get, "Expected state 0x%x, got 0x%x",
- mux_state, mux_state_get);
-
- /* Test setting/getting MUX USB and DP with polarity inverted */
- exp_val = (initial_val & ~TCPC_REG_CONFIG_STD_OUTPUT_MUX_MASK) |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_DP |
- TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB |
- TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED;
- mux_state = USB_PD_MUX_USB_ENABLED | USB_PD_MUX_DP_ENABLED |
- USB_PD_MUX_POLARITY_INVERTED;
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_set(tcpci_usb_mux, mux_state, &ack),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_CONFIG_STD_OUTPUT, exp_val);
- zassert_false(ack, "Ack from host shouldn't be required");
- zassert_equal(EC_SUCCESS,
- tcpci_tcpm_mux_get(tcpci_usb_mux, &mux_state_get),
- NULL);
- zassert_equal(mux_state, mux_state_get, "Expected state 0x%x, got 0x%x",
- mux_state, mux_state_get);
-}
-
-ZTEST(tcpci, test_generic_tcpci_mux_set_get)
-{
- test_generic_tcpci_mux_set_get();
-}
-
-ZTEST(tcpci, test_generic_tcpci_mux_set_get__not_tcpc)
-{
- set_usb_mux_not_tcpc();
- test_generic_tcpci_mux_set_get();
- set_usb_mux_tcpc();
-}
-
-static void *tcpci_setup(void)
-{
- /* This test suite assumes that first usb mux for port C0 is TCPCI */
- __ASSERT(usb_muxes[USBC_PORT_C0].driver == &tcpci_tcpm_usb_mux_driver,
- "Invalid config of usb_muxes in test/drivers/src/stubs.c");
-
- return NULL;
-}
-
-ZTEST_SUITE(tcpci, drivers_predicate_post_main, tcpci_setup, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/tcpci_test_common.c b/zephyr/test/drivers/src/tcpci_test_common.c
deleted file mode 100644
index ccd250e11f..0000000000
--- a/zephyr/test/drivers/src/tcpci_test_common.c
+++ /dev/null
@@ -1,999 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "emul/emul_common_i2c.h"
-#include "emul/tcpc/emul_tcpci.h"
-#include "test/drivers/tcpci_test_common.h"
-
-#include "tcpm/tcpci.h"
-
-/** Check TCPC register value */
-void check_tcpci_reg_f(const struct emul *emul, int reg, uint16_t exp_val,
- int line)
-{
- uint16_t reg_val;
-
- zassert_ok(tcpci_emul_get_reg(emul, reg, &reg_val),
- "Failed tcpci_emul_get_reg(); line: %d", line);
- zassert_equal(exp_val, reg_val, "Expected 0x%x, got 0x%x; line: %d",
- exp_val, reg_val, line);
-}
-
-/** Check TCPC register value with mask */
-void check_tcpci_reg_with_mask_f(const struct emul *emul, int reg,
- uint16_t exp_val, uint16_t mask, int line)
-{
- uint16_t reg_val;
-
- zassert_ok(tcpci_emul_get_reg(emul, reg, &reg_val),
- "Failed tcpci_emul_get_reg(); line: %d", line);
- zassert_equal(exp_val & mask, reg_val & mask,
- "Expected 0x%x, got 0x%x, mask 0x%x; line: %d",
- exp_val, reg_val, mask, line);
-}
-
-/** Test TCPCI init and vbus level */
-void test_tcpci_init(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- uint16_t exp_mask;
-
- tcpc_config[port].flags = TCPC_FLAGS_TCPCI_REV2_0 &
- TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Test fail on power status read */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_POWER_STATUS);
- zassert_equal(EC_ERROR_INVAL, drv->init(port), NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test fail on uninitialised bit set */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_UNINIT);
- zassert_equal(EC_ERROR_TIMEOUT, drv->init(port), NULL);
-
- /*
- * Set expected alert mask. It is used in test until vSafe0V tcpc
- * config flag is revmoved.
- */
- exp_mask = TCPC_REG_ALERT_TX_SUCCESS | TCPC_REG_ALERT_TX_FAILED |
- TCPC_REG_ALERT_TX_DISCARDED | TCPC_REG_ALERT_RX_STATUS |
- TCPC_REG_ALERT_RX_HARD_RST | TCPC_REG_ALERT_CC_STATUS |
- TCPC_REG_ALERT_FAULT | TCPC_REG_ALERT_POWER_STATUS;
-
- /* Set TCPCI emulator VBUS to safe0v (disconnected) */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
-
- /* Test init with VBUS safe0v without vSafe0V tcpc config flag */
- zassert_equal(EC_SUCCESS, drv->init(port), NULL);
- zassert_true(drv->check_vbus_level(port, VBUS_SAFE0V), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_PRESENT), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK,
- TCPC_REG_POWER_STATUS_VBUS_PRES);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-
- /* Set TCPCI emulator VBUS to present (connected, above 4V) */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_PRES |
- TCPC_REG_POWER_STATUS_VBUS_DET);
-
- /* Test init with VBUS present without vSafe0V tcpc config flag */
- zassert_equal(EC_SUCCESS, drv->init(port), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_SAFE0V), NULL);
- zassert_true(drv->check_vbus_level(port, VBUS_PRESENT), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK,
- TCPC_REG_POWER_STATUS_VBUS_PRES);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-
- /* Disable vSafe0V tcpc config flag and update expected alert mask */
- exp_mask |= TCPC_REG_ALERT_EXT_STATUS;
- tcpc_config[port].flags = TCPC_FLAGS_TCPCI_REV2_0;
-
- /* Test init with VBUS present with vSafe0V tcpc config flag */
- zassert_equal(EC_SUCCESS, drv->init(port), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_SAFE0V), NULL);
- zassert_true(drv->check_vbus_level(port, VBUS_PRESENT), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK,
- TCPC_REG_POWER_STATUS_VBUS_PRES);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-
- /* Set TCPCI emulator VBUS to safe0v (disconnected) */
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_STATUS,
- TCPC_REG_POWER_STATUS_VBUS_DET);
- tcpci_emul_set_reg(emul, TCPC_REG_EXT_STATUS,
- TCPC_REG_EXT_STATUS_SAFE0V);
-
- /* Test init with VBUS safe0v with vSafe0V tcpc config flag */
- zassert_equal(EC_SUCCESS, drv->init(port), NULL);
- zassert_true(drv->check_vbus_level(port, VBUS_SAFE0V), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_PRESENT), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK,
- TCPC_REG_POWER_STATUS_VBUS_PRES);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-
- /*
- * Set TCPCI emulator VBUS to disconnected but not at vSafe0V
- * (VBUS in 0.8V - 3.5V range)
- */
- tcpci_emul_set_reg(emul, TCPC_REG_EXT_STATUS, 0);
-
- /* Test init with VBUS not safe0v with vSafe0V tcpc config flag */
- zassert_equal(EC_SUCCESS, drv->init(port), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_SAFE0V), NULL);
- zassert_false(drv->check_vbus_level(port, VBUS_PRESENT), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK,
- TCPC_REG_POWER_STATUS_VBUS_PRES);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-}
-
-/** Test TCPCI release */
-void test_tcpci_release(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
-
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, 0xffff);
-
- zassert_equal(EC_SUCCESS, drv->release(port), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_STATUS_MASK, 0);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, 0);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0);
-}
-
-/** Test TCPCI get cc */
-void test_tcpci_get_cc(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- enum tcpc_cc_voltage_status cc1, cc2;
- uint16_t cc_status, role_ctrl;
-
- struct {
- /* TCPCI CC status register */
- enum tcpc_cc_voltage_status cc[2];
- bool connect_result;
- /* TCPCI ROLE ctrl register */
- enum tcpc_cc_pull role_cc[2];
- enum tcpc_drp drp;
- } test_param[] = {
- /* Test DRP with open state */
- {
- .cc = {TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_OPEN},
- .connect_result = false,
- .drp = TYPEC_DRP,
- },
- /* Test DRP with cc1 open state, cc2 src RA */
- {
- .cc = {TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RA},
- .connect_result = false,
- .drp = TYPEC_DRP,
- },
- /* Test DRP with cc1 src RA, cc2 src RD */
- {
- .cc = {TYPEC_CC_VOLT_RA, TYPEC_CC_VOLT_RD},
- .connect_result = false,
- .drp = TYPEC_DRP,
- },
- /* Test DRP with cc1 snk open, cc2 snk default */
- {
- .cc = {TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RP_DEF},
- .connect_result = true,
- .drp = TYPEC_DRP,
- },
- /* Test DRP with cc1 snk 1.5, cc2 snk 3.0 */
- {
- .cc = {TYPEC_CC_VOLT_RP_1_5, TYPEC_CC_VOLT_RP_3_0},
- .connect_result = true,
- .drp = TYPEC_DRP,
- },
- /* Test no DRP with cc1 src open, cc2 src RA */
- {
- .cc = {TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RA},
- .connect_result = false,
- .drp = TYPEC_NO_DRP,
- .role_cc = {TYPEC_CC_RP, TYPEC_CC_RP},
- },
- /* Test no DRP with cc1 src RD, cc2 snk default */
- {
- .cc = {TYPEC_CC_VOLT_RD, TYPEC_CC_VOLT_RP_DEF},
- .connect_result = false,
- .drp = TYPEC_NO_DRP,
- .role_cc = {TYPEC_CC_RP, TYPEC_CC_RD},
- },
- /* Test no DRP with cc1 snk default, cc2 snk open */
- {
- .cc = {TYPEC_CC_VOLT_RP_DEF, TYPEC_CC_VOLT_OPEN},
- .connect_result = false,
- .drp = TYPEC_NO_DRP,
- .role_cc = {TYPEC_CC_RD, TYPEC_CC_RD},
- },
- /* Test no DRP with cc1 snk 3.0, cc2 snk 1.5 */
- {
- .cc = {TYPEC_CC_VOLT_RP_3_0, TYPEC_CC_VOLT_RP_1_5},
- .connect_result = false,
- .drp = TYPEC_NO_DRP,
- .role_cc = {TYPEC_CC_RD, TYPEC_CC_RD},
- },
- };
-
- for (int i = 0; i < ARRAY_SIZE(test_param); i++) {
- role_ctrl = TCPC_REG_ROLE_CTRL_SET(test_param[i].drp, 0,
- test_param[i].role_cc[0],
- test_param[i].role_cc[1]);
- /* If CC status is TYPEC_CC_VOLT_RP_*, then BIT(2) is ignored */
- cc_status = TCPC_REG_CC_STATUS_SET(test_param[i].connect_result,
- test_param[i].cc[0],
- test_param[i].cc[1]);
- tcpci_emul_set_reg(emul, TCPC_REG_ROLE_CTRL, role_ctrl);
- tcpci_emul_set_reg(emul, TCPC_REG_CC_STATUS, cc_status);
- zassert_equal(EC_SUCCESS, drv->get_cc(port, &cc1, &cc2),
- "Failed to get CC in test case %d (CC 0x%x, role 0x%x)",
- i, cc_status, role_ctrl);
- zassert_equal(test_param[i].cc[0], cc1,
- "0x%x != (cc1 = 0x%x) in test case %d (CC 0x%x, role 0x%x)",
- test_param[i].cc[0], cc1, i, cc_status,
- role_ctrl);
- zassert_equal(test_param[i].cc[1], cc2,
- "0x%x != (cc2 = 0x%x) in test case %d (CC 0x%x, role 0x%x)",
- test_param[i].cc[0], cc1, i, cc_status,
- role_ctrl);
- }
-}
-
-/** Test TCPCI set cc */
-void test_tcpci_set_cc(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- enum tcpc_rp_value rp;
- enum tcpc_cc_pull cc;
-
- /* Test setting default RP and cc open */
- rp = TYPEC_RP_USB;
- cc = TYPEC_CC_OPEN;
- zassert_equal(EC_SUCCESS, drv->select_rp_value(port, rp), NULL);
- zassert_equal(EC_SUCCESS, drv->set_cc(port, cc), NULL);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL,
- TCPC_REG_ROLE_CTRL_SET(TYPEC_NO_DRP, rp, cc, cc));
-
- /* Test error on failed role ctrl set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_ROLE_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->set_cc(port, TYPEC_CC_OPEN), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting 1.5 RP and cc RD */
- rp = TYPEC_RP_1A5;
- cc = TYPEC_CC_RD;
- zassert_equal(EC_SUCCESS, drv->select_rp_value(port, rp), NULL);
- zassert_equal(EC_SUCCESS, drv->set_cc(port, cc), NULL);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL,
- TCPC_REG_ROLE_CTRL_SET(TYPEC_NO_DRP, rp, cc, cc));
-
- /* Test setting 3.0 RP and cc RP */
- rp = TYPEC_RP_3A0;
- cc = TYPEC_CC_RP;
- zassert_equal(EC_SUCCESS, drv->select_rp_value(port, rp), NULL);
- zassert_equal(EC_SUCCESS, drv->set_cc(port, cc), NULL);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL,
- TCPC_REG_ROLE_CTRL_SET(TYPEC_NO_DRP, rp, cc, cc));
-
- /*
- * Test setting 3.0 RP and cc RA. drv->select_rp_value() is
- * intentionally not called to check if selected rp is persistent.
- */
- cc = TYPEC_CC_RA;
- zassert_equal(EC_SUCCESS, drv->set_cc(port, cc), NULL);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL,
- TCPC_REG_ROLE_CTRL_SET(TYPEC_NO_DRP, rp, cc, cc));
-}
-
-/** Test TCPCI set polarity */
-void test_tcpci_set_polarity(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- uint8_t initial_ctrl;
- uint8_t exp_ctrl;
-
- /* Set initial value for TCPC ctrl register. Chosen arbitrary. */
- initial_ctrl = TCPC_REG_TCPC_CTRL_DEBUG_ACC_CONTROL |
- TCPC_REG_TCPC_CTRL_BIST_TEST_MODE;
- tcpci_emul_set_reg(emul, TCPC_REG_TCPC_CTRL, initial_ctrl);
-
- /* Test error on failed polarity set */
- exp_ctrl = initial_ctrl;
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_TCPC_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->set_polarity(port, POLARITY_CC2),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
-
- /* Test setting polarity CC2 */
- exp_ctrl = initial_ctrl | TCPC_REG_TCPC_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_polarity(port, POLARITY_CC2), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
-
- /* Test setting polarity CC1 */
- exp_ctrl = initial_ctrl & ~TCPC_REG_TCPC_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_polarity(port, POLARITY_CC1), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
-
- /* Test setting polarity CC2 DTS */
- exp_ctrl = initial_ctrl | TCPC_REG_TCPC_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_polarity(port, POLARITY_CC2_DTS),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
-
- /* Test setting polarity CC1 DTS */
- exp_ctrl = initial_ctrl & ~TCPC_REG_TCPC_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_polarity(port, POLARITY_CC1_DTS),
- NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
-}
-
-/** Test TCPCI set vconn */
-void test_tcpci_set_vconn(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- uint8_t initial_ctrl;
- uint8_t exp_ctrl;
-
- /* Set initial value for POWER ctrl register. Chosen arbitrary. */
- initial_ctrl = TCPC_REG_POWER_CTRL_VBUS_VOL_MONITOR_DIS |
- TCPC_REG_POWER_CTRL_FORCE_DISCHARGE;
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_CTRL, initial_ctrl);
-
- /* Test error on failed vconn set */
- exp_ctrl = initial_ctrl;
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_POWER_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->set_vconn(port, 1), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-
- /* Test vconn enable */
- exp_ctrl = initial_ctrl | TCPC_REG_POWER_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_vconn(port, 1), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-
- /* Test vconn disable */
- exp_ctrl = initial_ctrl & ~TCPC_REG_POWER_CTRL_SET(1);
- zassert_equal(EC_SUCCESS, drv->set_vconn(port, 0), NULL);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-}
-
-/** Test TCPCI set msg header */
-void test_tcpci_set_msg_header(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
-
- /* Test error on failed header set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_MSG_HDR_INFO);
- zassert_equal(EC_ERROR_INVAL, drv->set_msg_header(port, PD_ROLE_SINK,
- PD_ROLE_UFP), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting sink UFP */
- zassert_equal(EC_SUCCESS, drv->set_msg_header(port, PD_ROLE_SINK,
- PD_ROLE_UFP), NULL);
- check_tcpci_reg(emul, TCPC_REG_MSG_HDR_INFO,
- TCPC_REG_MSG_HDR_INFO_SET(PD_ROLE_UFP, PD_ROLE_SINK));
-
- /* Test setting sink DFP */
- zassert_equal(EC_SUCCESS, drv->set_msg_header(port, PD_ROLE_SINK,
- PD_ROLE_DFP), NULL);
- check_tcpci_reg(emul, TCPC_REG_MSG_HDR_INFO,
- TCPC_REG_MSG_HDR_INFO_SET(PD_ROLE_DFP, PD_ROLE_SINK));
-
- /* Test setting source UFP */
- zassert_equal(EC_SUCCESS, drv->set_msg_header(port, PD_ROLE_SOURCE,
- PD_ROLE_UFP), NULL);
- check_tcpci_reg(emul, TCPC_REG_MSG_HDR_INFO,
- TCPC_REG_MSG_HDR_INFO_SET(PD_ROLE_UFP, PD_ROLE_SOURCE));
-
- /* Test setting source DFP */
- zassert_equal(EC_SUCCESS, drv->set_msg_header(port, PD_ROLE_SOURCE,
- PD_ROLE_DFP), NULL);
- check_tcpci_reg(emul, TCPC_REG_MSG_HDR_INFO,
- TCPC_REG_MSG_HDR_INFO_SET(PD_ROLE_DFP, PD_ROLE_SOURCE));
-}
-
-/** Test TCPCI rx and sop prime enable */
-void test_tcpci_set_rx_detect(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
-
- /* Test error from rx_enable on rx detect set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_RX_DETECT);
- zassert_equal(EC_ERROR_INVAL, drv->set_rx_enable(port, 1), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test rx disable */
- zassert_equal(EC_SUCCESS, drv->set_rx_enable(port, 0), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT, 0x0);
-
- /* Test setting sop prime with rx disable doesn't change RX_DETECT */
- zassert_equal(EC_SUCCESS, drv->sop_prime_enable(port, 1), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT, 0x0);
-
- /* Test that enabling rx after sop prime will set RX_DETECT properly */
- zassert_equal(EC_SUCCESS, drv->set_rx_enable(port, 1), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT,
- TCPC_REG_RX_DETECT_SOP_SOPP_SOPPP_HRST_MASK);
-
- /* Test error from sop_prime on rx detect set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_RX_DETECT);
- zassert_equal(EC_ERROR_INVAL, drv->sop_prime_enable(port, 0), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test disabling sop prime with rx enabled does change RX_DETECT */
- zassert_equal(EC_SUCCESS, drv->sop_prime_enable(port, 0), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT,
- TCPC_REG_RX_DETECT_SOP_HRST_MASK);
-
- /* Test that enabling rx after disabling sop prime set RX_DETECT */
- zassert_equal(EC_SUCCESS, drv->set_rx_enable(port, 0), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT, 0x0);
- zassert_equal(EC_SUCCESS, drv->set_rx_enable(port, 1), NULL);
- check_tcpci_reg(emul, TCPC_REG_RX_DETECT,
- TCPC_REG_RX_DETECT_SOP_HRST_MASK);
-}
-
-/** Test TCPCI get raw message from TCPC */
-void test_tcpci_get_rx_message_raw(const struct emul *emul,
- enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct tcpci_emul_msg msg;
- uint32_t payload[7];
- uint16_t rx_mask;
- uint8_t buf[32];
- int exp_head;
- int i, head;
- int size;
-
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, 0x0);
- tcpci_emul_set_reg(emul, TCPC_REG_DEV_CAP_2,
- TCPC_REG_DEV_CAP_2_LONG_MSG);
- tcpci_emul_set_reg(emul, TCPC_REG_RX_DETECT,
- TCPC_REG_RX_DETECT_SOP | TCPC_REG_RX_DETECT_SOPP);
-
- for (i = 0; i < 32; i++) {
- buf[i] = i + 1;
- }
- msg.buf = buf;
- msg.cnt = 31;
- msg.type = TCPCI_MSG_SOP;
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg, true),
- "Failed to setup emulator message");
-
- /* Test fail on reading byte count */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_RX_BUFFER);
- zassert_equal(EC_ERROR_UNKNOWN,
- drv->get_message_raw(port, payload, &head), NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- /* Get raw message should always clean RX alerts */
- rx_mask = TCPC_REG_ALERT_RX_BUF_OVF | TCPC_REG_ALERT_RX_STATUS;
- check_tcpci_reg_with_mask(emul, TCPC_REG_ALERT, 0x0, rx_mask);
-
- /* Test too short message */
- msg.cnt = 1;
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg, true),
- "Failed to setup emulator message");
- zassert_equal(EC_ERROR_UNKNOWN,
- drv->get_message_raw(port, payload, &head), NULL);
- check_tcpci_reg_with_mask(emul, TCPC_REG_ALERT, 0x0, rx_mask);
-
- /* Test too long message */
- msg.cnt = 31;
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg, true),
- "Failed to setup emulator message");
- zassert_equal(EC_ERROR_UNKNOWN,
- drv->get_message_raw(port, payload, &head), NULL);
- check_tcpci_reg_with_mask(emul, TCPC_REG_ALERT, 0x0, rx_mask);
-
- /* Test alert register and message payload on success */
- size = 28;
- msg.cnt = size + 2;
- msg.type = TCPCI_MSG_SOP_PRIME;
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg, true),
- "Failed to setup emulator message");
- zassert_equal(EC_SUCCESS, drv->get_message_raw(port, payload, &head),
- NULL);
- check_tcpci_reg_with_mask(emul, TCPC_REG_ALERT, 0x0, rx_mask);
- /*
- * Type is in bits 31-28 of header, buf[0] is in bits 7-0,
- * buf[1] is in bits 15-8
- */
- exp_head = (TCPCI_MSG_SOP_PRIME << 28) | (buf[1] << 8) | buf[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf + 2, size, NULL);
-}
-
-/** Test TCPCI transmitting message from TCPC */
-void test_tcpci_transmit(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct tcpci_emul_msg *msg;
- uint32_t data[6];
- uint16_t header;
- int i;
-
- msg = tcpci_emul_get_tx_msg(emul);
-
- /* Fill transmit data with pattern */
- for (i = 0; i < 6 * sizeof(uint32_t); i++) {
- ((uint8_t *)data)[i] = i;
- }
-
- /* Test transmit hard reset fail */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_TRANSMIT);
- zassert_equal(EC_ERROR_INVAL,
- drv->transmit(port, TCPCI_MSG_TX_HARD_RESET, 0, NULL),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test transmit cabel reset */
- zassert_equal(EC_SUCCESS,
- drv->transmit(port, TCPCI_MSG_CABLE_RESET, 0, NULL),
- NULL);
- zassert_equal(TCPCI_MSG_CABLE_RESET, msg->type, NULL);
-
- /* Test transmit hard reset */
- zassert_equal(EC_SUCCESS,
- drv->transmit(port, TCPCI_MSG_TX_HARD_RESET, 0, NULL),
- NULL);
- zassert_equal(TCPCI_MSG_TX_HARD_RESET, msg->type, NULL);
-
- /* Test transmit fail on rx buffer */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_TX_BUFFER);
- zassert_equal(EC_ERROR_INVAL,
- drv->transmit(port, TCPCI_MSG_SOP_PRIME, 0, data),
- NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test transmit only header */
- /* Build random header with count 0 */
- header = PD_HEADER(PD_CTRL_PING, PD_ROLE_SOURCE, PD_ROLE_UFP, 0, 0,
- PD_REV20, 0);
- zassert_equal(EC_SUCCESS,
- drv->transmit(port, TCPCI_MSG_SOP_PRIME, header, data),
- NULL);
- zassert_equal(TCPCI_MSG_SOP_PRIME, msg->type, NULL);
- zassert_mem_equal(msg->buf, &header, 2, NULL);
- zassert_equal(2, msg->cnt, NULL);
-
- /* Test transmit message */
- /* Build random header with count 6 */
- header = PD_HEADER(PD_CTRL_PING, PD_ROLE_SOURCE, PD_ROLE_UFP, 0, 6,
- PD_REV20, 0);
- zassert_equal(EC_SUCCESS,
- drv->transmit(port, TCPCI_MSG_SOP_PRIME, header, data),
- NULL);
- zassert_equal(TCPCI_MSG_SOP_PRIME, msg->type, NULL);
- zassert_mem_equal(msg->buf, &header, 2, NULL);
- zassert_mem_equal(msg->buf + 2, data, 6 * sizeof(uint32_t), NULL);
- zassert_equal(2 + 6 * sizeof(uint32_t), msg->cnt, NULL);
-}
-
-/** Test TCPCI alert */
-void test_tcpci_alert(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
-
- tcpc_config[port].flags = TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Test alert read fail */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_ALERT);
- drv->tcpc_alert(port);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Handle overcurrent */
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, TCPC_REG_ALERT_FAULT);
- tcpci_emul_set_reg(emul, TCPC_REG_FAULT_STATUS,
- TCPC_REG_FAULT_STATUS_VCONN_OVER_CURRENT);
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
- check_tcpci_reg(emul, TCPC_REG_FAULT_STATUS, 0x0);
-
- /* Test TX complete */
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, TCPC_REG_ALERT_TX_COMPLETE);
- drv->tcpc_alert(port);
-
- /* Test clear alert and ext_alert */
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, TCPC_REG_ALERT_ALERT_EXT);
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT_EXT,
- TCPC_REG_ALERT_EXT_TIMER_EXPIRED);
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
- check_tcpci_reg(emul, TCPC_REG_FAULT_STATUS, 0x0);
-
- /* Test CC changed, CC status chosen arbitrary */
- tcpci_emul_set_reg(emul, TCPC_REG_CC_STATUS,
- TCPC_REG_CC_STATUS_SET(1, TYPEC_CC_VOLT_RP_1_5,
- TYPEC_CC_VOLT_RP_3_0));
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, TCPC_REG_ALERT_CC_STATUS);
- drv->tcpc_alert(port);
-
- /* Test Hard reset */
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT, TCPC_REG_ALERT_RX_HARD_RST);
- drv->tcpc_alert(port);
-}
-
-/** Test TCPCI alert RX message */
-void test_tcpci_alert_rx_message(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct tcpci_emul_msg msg1, msg2;
- uint8_t buf1[32], buf2[32];
- uint32_t payload[7];
- int exp_head;
- int i, head;
- int size;
-
- tcpc_config[port].flags = TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
- tcpci_emul_set_reg(emul, TCPC_REG_DEV_CAP_2,
- TCPC_REG_DEV_CAP_2_LONG_MSG);
- tcpci_emul_set_reg(emul, TCPC_REG_RX_DETECT,
- TCPC_REG_RX_DETECT_SOP | TCPC_REG_RX_DETECT_SOPP);
-
- for (i = 0; i < 32; i++) {
- buf1[i] = i + 1;
- buf2[i] = i + 33;
- }
- size = 23;
- msg1.buf = buf1;
- msg1.cnt = size + 3;
- msg1.type = TCPCI_MSG_SOP;
-
- msg2.buf = buf2;
- msg2.cnt = size + 3;
- msg2.type = TCPCI_MSG_SOP_PRIME;
-
- /* Test receiving one message */
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg1, true),
- "Failed to setup emulator message");
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
-
- /* Check if msg1 is in queue */
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS, tcpm_dequeue_message(port, payload, &head),
- NULL);
- exp_head = (TCPCI_MSG_SOP << 28) | (buf1[1] << 8) | buf1[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf1 + 2, size, NULL);
- zassert_false(tcpm_has_pending_message(port), NULL);
-
- /* Test receiving two messages */
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg1, true),
- "Failed to setup emulator message");
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg2, true),
- "Failed to setup emulator message");
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
-
- /* Check if msg1 is in queue */
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS, tcpm_dequeue_message(port, payload, &head),
- NULL);
- exp_head = (TCPCI_MSG_SOP << 28) | (buf1[1] << 8) | buf1[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf1 + 2, size, NULL);
- /* Check if msg2 is in queue */
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS, tcpm_dequeue_message(port, payload, &head),
- NULL);
- exp_head = (TCPCI_MSG_SOP_PRIME << 28) | (buf2[1] << 8) | buf2[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf2 + 2, size, NULL);
- zassert_false(tcpm_has_pending_message(port), NULL);
-
- /* Test with too long first message */
- msg1.cnt = 32;
- tcpci_emul_set_reg(emul, TCPC_REG_DEV_CAP_2,
- TCPC_REG_DEV_CAP_2_LONG_MSG);
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg1, true),
- "Failed to setup emulator message");
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg2, true),
- "Failed to setup emulator message");
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
-
- /* Check if msg2 is in queue */
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS, tcpm_dequeue_message(port, payload, &head),
- NULL);
- exp_head = (TCPCI_MSG_SOP_PRIME << 28) | (buf2[1] << 8) | buf2[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf2 + 2, size, NULL);
- zassert_false(tcpm_has_pending_message(port), NULL);
-
- /* Test constant read message failure */
- zassert_equal(TCPCI_EMUL_TX_SUCCESS,
- tcpci_emul_add_rx_msg(emul, &msg1, true),
- "Failed to setup emulator message");
- /* Create loop with one message with wrong size */
- msg1.next = &msg1;
- drv->tcpc_alert(port);
- /* Nothing should be in queue */
- zassert_false(tcpm_has_pending_message(port), NULL);
-
- /* Test constant correct messages stream */
- msg1.cnt = size + 3;
- drv->tcpc_alert(port);
- msg1.next = NULL;
-
- /* msg1 should be at least twice in queue */
- exp_head = (TCPCI_MSG_SOP << 28) | (buf1[1] << 8) | buf1[0];
- for (i = 0; i < 2; i++) {
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS,
- tcpm_dequeue_message(port, payload, &head), NULL);
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf1 + 2, size, NULL);
- }
- tcpm_clear_pending_messages(port);
- zassert_false(tcpm_has_pending_message(port), NULL);
-
- /* Read message that is left in TCPC buffer */
- drv->tcpc_alert(port);
- check_tcpci_reg(emul, TCPC_REG_ALERT, 0x0);
-
- /* Check if msg1 is in queue */
- zassert_true(tcpm_has_pending_message(port), NULL);
- zassert_equal(EC_SUCCESS, tcpm_dequeue_message(port, payload, &head),
- NULL);
- exp_head = (TCPCI_MSG_SOP << 28) | (buf1[1] << 8) | buf1[0];
- zassert_equal(exp_head, head,
- "Received header 0x%08lx, expected 0x%08lx",
- head, exp_head);
- zassert_mem_equal(payload, buf1 + 2, size, NULL);
- zassert_false(tcpm_has_pending_message(port), NULL);
-}
-
-/** Test TCPCI auto discharge on disconnect */
-void test_tcpci_auto_discharge(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- uint8_t initial_ctrl;
- uint8_t exp_ctrl;
-
- /* Set initial value for POWER ctrl register. Chosen arbitrary. */
- initial_ctrl = TCPC_REG_POWER_CTRL_VBUS_VOL_MONITOR_DIS |
- TCPC_REG_POWER_CTRL_FORCE_DISCHARGE;
- tcpci_emul_set_reg(emul, TCPC_REG_POWER_CTRL, initial_ctrl);
-
- /* Test discharge enable */
- exp_ctrl = initial_ctrl | TCPC_REG_POWER_CTRL_AUTO_DISCHARGE_DISCONNECT;
- drv->tcpc_enable_auto_discharge_disconnect(port, 1);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-
- /* Test discharge disable */
- exp_ctrl = initial_ctrl &
- ~TCPC_REG_POWER_CTRL_AUTO_DISCHARGE_DISCONNECT;
- drv->tcpc_enable_auto_discharge_disconnect(port, 0);
- check_tcpci_reg(emul, TCPC_REG_POWER_CTRL, exp_ctrl);
-}
-
-/** Test TCPCI drp toggle */
-void test_tcpci_drp_toggle(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- uint8_t exp_tcpc_ctrl, exp_role_ctrl, initial_tcpc_ctrl;
-
- /* Set TCPCI to revision 2 */
- tcpc_config[port].flags = TCPC_FLAGS_TCPCI_REV2_0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV2_0_VER1_1);
-
- /* Test error on failed role CTRL set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_ROLE_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->drp_toggle(port), NULL);
-
- /* Test error on failed TCPC CTRL set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_TCPC_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->drp_toggle(port), NULL);
-
- /* Test error on failed command set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_COMMAND);
- zassert_equal(EC_ERROR_INVAL, drv->drp_toggle(port), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set initial value for TCPC ctrl register. Chosen arbitrary. */
- initial_tcpc_ctrl = TCPC_REG_TCPC_CTRL_DEBUG_ACC_CONTROL |
- TCPC_REG_TCPC_CTRL_BIST_TEST_MODE;
- tcpci_emul_set_reg(emul, TCPC_REG_TCPC_CTRL, initial_tcpc_ctrl);
-
- /*
- * Test correct registers values for rev 2.0. Role control CC lines
- * have to be set to RP with DRP enabled and smallest RP value.
- */
- exp_tcpc_ctrl = initial_tcpc_ctrl |
- TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT;
- exp_role_ctrl = TCPC_REG_ROLE_CTRL_SET(TYPEC_DRP, TYPEC_RP_USB,
- TYPEC_CC_RP, TYPEC_CC_RP);
- zassert_equal(EC_SUCCESS, drv->drp_toggle(port), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_tcpc_ctrl);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL, exp_role_ctrl);
- check_tcpci_reg(emul, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_LOOK4CONNECTION);
-
- /* Set TCPCI to revision 1 */
- tcpc_config[port].flags = 0;
- tcpci_emul_set_rev(emul, TCPCI_EMUL_REV1_0_VER1_0);
-
- /* Set initial value for TCPC ctrl register. Chosen arbitrary. */
- initial_tcpc_ctrl = TCPC_REG_TCPC_CTRL_DEBUG_ACC_CONTROL |
- TCPC_REG_TCPC_CTRL_BIST_TEST_MODE;
- tcpci_emul_set_reg(emul, TCPC_REG_TCPC_CTRL, initial_tcpc_ctrl);
-
- /*
- * Test correct registers values for rev 1.0. Role control CC lines
- * have to be set to RD with DRP enabled and smallest RP value.
- * Only CC lines setting is different from rev 2.0
- */
- exp_tcpc_ctrl = initial_tcpc_ctrl |
- TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT;
- exp_role_ctrl = TCPC_REG_ROLE_CTRL_SET(TYPEC_DRP, TYPEC_RP_USB,
- TYPEC_CC_RD, TYPEC_CC_RD);
- zassert_equal(EC_SUCCESS, drv->drp_toggle(port), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_tcpc_ctrl);
- check_tcpci_reg(emul, TCPC_REG_ROLE_CTRL, exp_role_ctrl);
- check_tcpci_reg(emul, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_LOOK4CONNECTION);
-}
-
-/** Test TCPCI get chip info */
-void test_tcpci_get_chip_info(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- struct ec_response_pd_chip_info_v1 info;
- uint16_t vendor, product, bcd;
-
- /* Test error on failed vendor id get */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_VENDOR_ID);
- zassert_equal(EC_ERROR_INVAL, drv->get_chip_info(port, 1, &info), NULL);
-
- /* Test error on failed product id get */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_PRODUCT_ID);
- zassert_equal(EC_ERROR_INVAL, drv->get_chip_info(port, 1, &info), NULL);
-
- /* Test error on failed BCD get */
- i2c_common_emul_set_read_fail_reg(i2c_emul, TCPC_REG_VENDOR_ID);
- zassert_equal(EC_ERROR_INVAL, drv->get_chip_info(port, 1, &info), NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test reading chip info. Values chosen arbitrary. */
- vendor = 0x1234;
- product = 0x5678;
- bcd = 0x9876;
- tcpci_emul_set_reg(emul, TCPC_REG_VENDOR_ID, vendor);
- tcpci_emul_set_reg(emul, TCPC_REG_PRODUCT_ID, product);
- tcpci_emul_set_reg(emul, TCPC_REG_BCD_DEV, bcd);
- zassert_equal(EC_SUCCESS, drv->get_chip_info(port, 1, &info), NULL);
- zassert_equal(vendor, info.vendor_id, NULL);
- zassert_equal(product, info.product_id, NULL);
- zassert_equal(bcd, info.device_id, NULL);
-
- /* Test reading cached chip info */
- info.vendor_id = 0;
- info.product_id = 0;
- info.device_id = 0;
- /* Make sure, that TCPC is not accessed */
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_FAIL_ALL_REG);
- zassert_equal(EC_SUCCESS, drv->get_chip_info(port, 0, &info), NULL);
- i2c_common_emul_set_read_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
- zassert_equal(vendor, info.vendor_id, NULL);
- zassert_equal(product, info.product_id, NULL);
- zassert_equal(bcd, info.device_id, NULL);
-}
-
-/** Test TCPCI enter low power mode */
-void test_tcpci_low_power_mode(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
-
- /* Test error on failed command set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_COMMAND);
- zassert_equal(EC_ERROR_INVAL, drv->enter_low_power_mode(port), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test correct command is issued */
- zassert_equal(EC_SUCCESS, drv->enter_low_power_mode(port), NULL);
- check_tcpci_reg(emul, TCPC_REG_COMMAND, TCPC_REG_COMMAND_I2CIDLE);
-}
-
-/** Test TCPCI set bist test mode */
-void test_tcpci_set_bist_mode(const struct emul *emul, enum usbc_port port)
-{
- const struct tcpm_drv *drv = tcpc_config[port].drv;
- struct i2c_emul *i2c_emul = tcpci_emul_get_i2c_emul(emul);
- uint16_t exp_mask, initial_mask;
- uint8_t exp_ctrl, initial_ctrl;
-
- /* Test error on TCPC CTRL set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_TCPC_CTRL);
- zassert_equal(EC_ERROR_INVAL, drv->set_bist_test_mode(port, 1), NULL);
-
- /* Test error on alert mask set */
- i2c_common_emul_set_write_fail_reg(i2c_emul, TCPC_REG_ALERT_MASK);
- zassert_equal(EC_ERROR_INVAL, drv->set_bist_test_mode(port, 1), NULL);
- i2c_common_emul_set_write_fail_reg(i2c_emul,
- I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Set initial value for alert mask register. Chosen arbitrary. */
- initial_mask = TCPC_REG_ALERT_MASK_ALL;
- tcpci_emul_set_reg(emul, TCPC_REG_ALERT_MASK, initial_mask);
-
- /* Set initial value for TCPC ctrl register. Chosen arbitrary. */
- initial_ctrl = TCPC_REG_TCPC_CTRL_DEBUG_ACC_CONTROL |
- TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT;
- tcpci_emul_set_reg(emul, TCPC_REG_TCPC_CTRL, initial_ctrl);
-
- /* Test enabling bist test mode */
- exp_mask = initial_mask & ~TCPC_REG_ALERT_RX_STATUS;
- exp_ctrl = initial_ctrl | TCPC_REG_TCPC_CTRL_BIST_TEST_MODE;
- zassert_equal(EC_SUCCESS, drv->set_bist_test_mode(port, 1), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-
- /* Test disabling bist test mode */
- exp_mask = initial_mask | TCPC_REG_ALERT_RX_STATUS;
- exp_ctrl = initial_ctrl & ~TCPC_REG_TCPC_CTRL_BIST_TEST_MODE;
- zassert_equal(EC_SUCCESS, drv->set_bist_test_mode(port, 0), NULL);
- check_tcpci_reg(emul, TCPC_REG_TCPC_CTRL, exp_ctrl);
- check_tcpci_reg(emul, TCPC_REG_ALERT_MASK, exp_mask);
-}
diff --git a/zephyr/test/drivers/src/tcs3400.c b/zephyr/test/drivers/src/tcs3400.c
deleted file mode 100644
index 66955481f7..0000000000
--- a/zephyr/test/drivers/src/tcs3400.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "i2c.h"
-#include "emul/emul_tcs3400.h"
-#include "emul/emul_common_i2c.h"
-
-#include "motion_sense.h"
-#include "motion_sense_fifo.h"
-#include "driver/als_tcs3400.h"
-#include "test/drivers/test_state.h"
-
-#define TCS_ORD DT_DEP_ORD(DT_NODELABEL(tcs_emul))
-#define TCS_CLR_SENSOR_ID SENSOR_ID(DT_NODELABEL(tcs3400_clear))
-#define TCS_RGB_SENSOR_ID SENSOR_ID(DT_NODELABEL(tcs3400_rgb))
-#define TCS_INT_EVENT \
- TASK_EVENT_MOTION_SENSOR_INTERRUPT(SENSOR_ID(DT_ALIAS(tcs3400_int)))
-
-/** How accurate comparision of rgb sensors should be */
-#define V_EPS 8
-
-/** Test initialization of light sensor driver and device */
-ZTEST_USER(tcs3400, test_tcs_init)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* RGB sensor initialization is always successful */
- zassert_equal(EC_SUCCESS, ms_rgb->drv->init(ms_rgb), NULL);
-
- /* Fail init on communication errors */
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_FAIL_ALL_REG);
- zassert_equal(EC_ERROR_INVAL, ms->drv->init(ms), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Fail on bad ID */
- tcs_emul_set_reg(emul, TCS_I2C_ID, 0);
- zassert_equal(EC_ERROR_ACCESS_DENIED, ms->drv->init(ms), NULL);
- /* Restore ID */
- tcs_emul_set_reg(emul, TCS_I2C_ID,
- DT_STRING_TOKEN(DT_NODELABEL(tcs_emul), device_id));
-
- /* Test successful init. ATIME and AGAIN should be changed on init */
- zassert_equal(EC_SUCCESS, ms->drv->init(ms), NULL);
- zassert_equal(TCS_DEFAULT_ATIME,
- tcs_emul_get_reg(emul, TCS_I2C_ATIME), NULL);
- zassert_equal(TCS_DEFAULT_AGAIN,
- tcs_emul_get_reg(emul, TCS_I2C_CONTROL), NULL);
-}
-
-/** Test if read function leaves device in correct mode to accuire data */
-ZTEST_USER(tcs3400, test_tcs_read)
-{
- struct motion_sensor_t *ms;
- struct i2c_emul *emul;
- uint8_t enable;
- intv3_t v;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
-
- /* Test error on writing registers */
- i2c_common_emul_set_write_fail_reg(emul, TCS_I2C_ATIME);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, v), NULL);
- i2c_common_emul_set_write_fail_reg(emul, TCS_I2C_CONTROL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, v), NULL);
- i2c_common_emul_set_write_fail_reg(emul, TCS_I2C_ENABLE);
- zassert_equal(EC_ERROR_INVAL, ms->drv->read(ms, v), NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test starting read with calibration */
- tcs_emul_set_reg(emul, TCS_I2C_ATIME, 0);
- tcs_emul_set_reg(emul, TCS_I2C_CONTROL, 0);
- tcs_emul_set_reg(emul, TCS_I2C_ENABLE, 0);
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- zassert_equal(EC_RES_IN_PROGRESS, ms->drv->read(ms, v), NULL);
- zassert_equal(TCS_CALIBRATION_ATIME,
- tcs_emul_get_reg(emul, TCS_I2C_ATIME), NULL);
- zassert_equal(TCS_CALIBRATION_AGAIN,
- tcs_emul_get_reg(emul, TCS_I2C_CONTROL), NULL);
- enable = tcs_emul_get_reg(emul, TCS_I2C_ENABLE);
- zassert_true(enable & TCS_I2C_ENABLE_POWER_ON, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_ADC_ENABLE, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_INT_ENABLE, NULL);
-
- /* Test starting read without calibration */
- tcs_emul_set_reg(emul, TCS_I2C_ATIME, 0);
- tcs_emul_set_reg(emul, TCS_I2C_CONTROL, 0);
- tcs_emul_set_reg(emul, TCS_I2C_ENABLE, 0);
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- zassert_equal(EC_RES_IN_PROGRESS, ms->drv->read(ms, v), NULL);
- enable = tcs_emul_get_reg(emul, TCS_I2C_ENABLE);
- zassert_true(enable & TCS_I2C_ENABLE_POWER_ON, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_ADC_ENABLE, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_INT_ENABLE, NULL);
-}
-
-/** Check if FIFO for RGB and clear sensor is empty */
-static void check_fifo_empty_f(struct motion_sensor_t *ms,
- struct motion_sensor_t *ms_rgb, int line)
-{
- struct ec_response_motion_sensor_data vector;
- uint16_t size;
-
- /* Read all data committed to FIFO */
- while (motion_sense_fifo_read(sizeof(vector), 1, &vector, &size)) {
- /* Ignore timestamp frames */
- if (vector.flags == MOTIONSENSE_SENSOR_FLAG_TIMESTAMP) {
- continue;
- }
-
- if (ms - motion_sensors == vector.sensor_num) {
- zassert_unreachable(
- "Unexpected frame for clear sensor @line: %d",
- line);
- }
-
- if (ms_rgb - motion_sensors == vector.sensor_num) {
- zassert_unreachable(
- "Unexpected frame for rgb sensor @line: %d",
- line);
- }
- }
-}
-#define check_fifo_empty(ms, ms_rgb) \
- check_fifo_empty_f(ms, ms_rgb, __LINE__)
-
-/**
- * Test different conditions where irq handler fail or commit no data
- * to fifo
- */
-ZTEST_USER(tcs3400, test_tcs_irq_handler_fail)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
- uint32_t event;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* Fail on wrong event */
- event = 0x1234 & ~TCS_INT_EVENT;
- zassert_equal(EC_ERROR_NOT_HANDLED, ms->drv->irq_handler(ms, &event),
- NULL);
- check_fifo_empty(ms, ms_rgb);
-
- event = TCS_INT_EVENT;
- /* Test error on reading status */
- i2c_common_emul_set_read_fail_reg(emul, TCS_I2C_STATUS);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- check_fifo_empty(ms, ms_rgb);
-
- /* Test fail on changing device power state */
- i2c_common_emul_set_write_fail_reg(emul, TCS_I2C_ENABLE);
- zassert_equal(EC_ERROR_INVAL, ms->drv->irq_handler(ms, &event), NULL);
- i2c_common_emul_set_write_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
- check_fifo_empty(ms, ms_rgb);
-
- /* Test that no data is committed when status is 0 */
- tcs_emul_set_reg(emul, TCS_I2C_STATUS, 0);
- zassert_equal(EC_SUCCESS, ms->drv->irq_handler(ms, &event), NULL);
- check_fifo_empty(ms, ms_rgb);
-}
-
-/**
- * Check if last data committed to FIFO for RGB and clear sensor equals to
- * expected value.
- */
-static void check_fifo_f(struct motion_sensor_t *ms,
- struct motion_sensor_t *ms_rgb,
- int *exp_v, int eps, int line)
-{
- struct ec_response_motion_sensor_data vector;
- uint16_t size;
- int ret_v[4] = {-1, -1, -1, -1};
- int i;
-
- /* Read all data committed to FIFO */
- while (motion_sense_fifo_read(sizeof(vector), 1, &vector, &size)) {
- /* Ignore timestamp frames */
- if (vector.flags == MOTIONSENSE_SENSOR_FLAG_TIMESTAMP) {
- continue;
- }
-
- /* Get clear frame */
- if (ms - motion_sensors == vector.sensor_num) {
- ret_v[0] = vector.udata[0];
- }
-
- /* Get rgb frame */
- if (ms_rgb - motion_sensors == vector.sensor_num) {
- ret_v[1] = vector.udata[0];
- ret_v[2] = vector.udata[1];
- ret_v[3] = vector.udata[2];
- }
- }
-
- if (ret_v[0] == -1) {
- zassert_unreachable("No frame for clear sensor, line %d", line);
- }
-
- if (ret_v[1] == -1) {
- zassert_unreachable("No frame for rgb sensor, line %d", line);
- }
-
- /* Compare with last committed data */
- for (i = 0; i < 4; i++) {
- zassert_within(exp_v[i], ret_v[i], eps,
- "Expected [%d; %d; %d; %d], got [%d; %d; %d; %d]; line: %d",
- exp_v[0], exp_v[1], exp_v[2], exp_v[3],
- ret_v[0], ret_v[1], ret_v[2], ret_v[3], line);
- }
-}
-#define check_fifo(ms, ms_rgb, exp_v, eps) \
- check_fifo_f(ms, ms_rgb, exp_v, eps, __LINE__)
-
-/** Test calibration mode reading of light sensor values */
-ZTEST_USER(tcs3400, test_tcs_read_calibration)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
- uint32_t event = TCS_INT_EVENT;
- int emul_v[4];
- int exp_v[4];
- intv3_t v;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* Need to be set to collect all data in FIFO */
- ms->oversampling_ratio = 1;
- ms_rgb->oversampling_ratio = 1;
- /* Enable calibration mode */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 1), NULL);
- /* Setup AGAIN and ATIME for calibration */
- zassert_equal(EC_RES_IN_PROGRESS, ms->drv->read(ms, v), NULL);
-
- /* Test data that are in calibration range */
- exp_v[0] = 12;
- exp_v[1] = 123;
- exp_v[2] = 1234;
- exp_v[3] = 12345;
- /*
- * Emulator value is with gain 64, while expected value is
- * with gain 16
- */
- emul_v[0] = exp_v[0] * 64 / 16;
- emul_v[1] = exp_v[1] * 64 / 16;
- emul_v[2] = exp_v[2] * 64 / 16;
- emul_v[3] = exp_v[3] * 64 / 16;
- tcs_emul_set_val(emul, TCS_EMUL_C, emul_v[0]);
- tcs_emul_set_val(emul, TCS_EMUL_R, emul_v[1]);
- tcs_emul_set_val(emul, TCS_EMUL_G, emul_v[2]);
- tcs_emul_set_val(emul, TCS_EMUL_B, emul_v[3]);
- /* Set status to show valid data */
- tcs_emul_set_reg(emul, TCS_I2C_STATUS, TCS_I2C_STATUS_RGBC_VALID);
-
- zassert_equal(EC_SUCCESS, ms->drv->irq_handler(ms, &event), NULL);
- /* In calibration mode check for exact match */
- check_fifo(ms, ms_rgb, exp_v, 1);
-
- /* Test data that are outside of calibration range */
- exp_v[0] = 0;
- exp_v[1] = UINT16_MAX;
- exp_v[2] = UINT16_MAX;
- exp_v[3] = 213;
- /*
- * Emulator value is with gain 64, while expected value is
- * with gain 16
- */
- emul_v[0] = 0;
- emul_v[1] = exp_v[1] * 64 / 16;
- emul_v[2] = (UINT16_MAX + 23) * 64 / 16;
- emul_v[3] = exp_v[3] * 64 / 16;
- tcs_emul_set_val(emul, TCS_EMUL_C, emul_v[0]);
- tcs_emul_set_val(emul, TCS_EMUL_R, emul_v[1]);
- tcs_emul_set_val(emul, TCS_EMUL_G, emul_v[2]);
- tcs_emul_set_val(emul, TCS_EMUL_B, emul_v[3]);
- /* Set status to show valid data */
- tcs_emul_set_reg(emul, TCS_I2C_STATUS, TCS_I2C_STATUS_RGBC_VALID);
-
- zassert_equal(EC_SUCCESS, ms->drv->irq_handler(ms, &event), NULL);
- /* In calibration mode check for exact match */
- check_fifo(ms, ms_rgb, exp_v, 1);
-}
-
-/**
- * Set emulator internal value using expected output value returned by
- * the driver. First element of expected vector is IR value used in
- * calculations. Based on that clear light value is calculated.
- * First element of expected vector is updated by this function.
- */
-static void set_emul_val_from_exp(int *exp_v, uint16_t *scale,
- struct i2c_emul *emul)
-{
- int emul_v[4];
- int ir;
-
- /* We use exp_v[0] as IR value */
- ir = exp_v[0];
- /* Driver will return lux value as calculated blue light value */
- exp_v[0] = exp_v[2];
-
- /*
- * Driver takes care of different ATIME and AGAIN value, so expected
- * value is always normalized to ATIME 256 and AGAIN 16. Convert it
- * to internal emulator value (ATIME 256, AGAIN 64) and add expected IR
- * value. Clear light is the sum of rgb light and IR component.
- */
- emul_v[1] = (exp_v[1] + ir) * 64 / 16;
- emul_v[2] = (exp_v[2] + ir) * 64 / 16;
- emul_v[3] = (exp_v[3] + ir) * 64 / 16;
- emul_v[0] = (exp_v[1] + exp_v[2] + exp_v[3] + ir) * 64 / 16;
-
- /* Apply scale, driver should divide by this value */
- emul_v[0] = SENSOR_APPLY_SCALE(emul_v[0], scale[0]);
- emul_v[1] = SENSOR_APPLY_SCALE(emul_v[1], scale[1]);
- emul_v[2] = SENSOR_APPLY_SCALE(emul_v[2], scale[2]);
- emul_v[3] = SENSOR_APPLY_SCALE(emul_v[3], scale[3]);
-
- /* Set emulator values */
- tcs_emul_set_val(emul, TCS_EMUL_C, emul_v[0]);
- tcs_emul_set_val(emul, TCS_EMUL_R, emul_v[1]);
- tcs_emul_set_val(emul, TCS_EMUL_G, emul_v[2]);
- tcs_emul_set_val(emul, TCS_EMUL_B, emul_v[3]);
-}
-
-/** Test normal mode reading of light sensor values */
-ZTEST_USER(tcs3400, test_tcs_read_xyz)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
- uint32_t event = TCS_INT_EVENT;
- /* Expected data to test: IR, R, G, B */
- int exp_v[][4] = {
- {200, 1110, 870, 850},
- {300, 1110, 10000, 8500},
- {600, 50000, 40000, 30000},
- {1000, 3000, 40000, 2000},
- {1000, 65000, 65000, 65000},
- {100, 214, 541, 516},
- {143, 2141, 5414, 5163},
- {100, 50000, 40000, 30000},
- {1430, 2141, 5414, 5163},
- {10000, 50000, 40000, 30000},
- {10000, 214, 541, 516},
- {15000, 50000, 40000, 30000},
- };
- uint16_t scale[4] = {
- MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE
- };
- int i, test;
- intv3_t v;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* Need to be set to collect all data in FIFO */
- ms->oversampling_ratio = 1;
- ms_rgb->oversampling_ratio = 1;
- /* Disable calibration mode */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- /* Setup AGAIN and ATIME for normal mode */
- zassert_equal(EC_RES_IN_PROGRESS, ms->drv->read(ms, v), NULL);
-
- /* Test different data in supported range */
- for (test = 0; test < ARRAY_SIZE(exp_v); test++) {
- set_emul_val_from_exp(exp_v[test], scale, emul);
-
- /* Run few times to allow driver change gain */
- for (i = 0; i < 5; i++) {
- tcs_emul_set_reg(emul, TCS_I2C_STATUS,
- TCS_I2C_STATUS_RGBC_VALID);
- zassert_equal(EC_SUCCESS,
- ms->drv->irq_handler(ms, &event), NULL);
- }
- check_fifo(ms, ms_rgb, exp_v[test], V_EPS);
- }
-
- /* Test data that are outside of supported range */
- exp_v[0][0] = 3000;
- exp_v[0][1] = UINT16_MAX;
- exp_v[0][2] = UINT16_MAX * 32;
- exp_v[0][3] = 200;
- set_emul_val_from_exp(exp_v[0], scale, emul);
-
- /* Run few times to allow driver change gain */
- for (i = 0; i < 10; i++) {
- tcs_emul_set_reg(emul, TCS_I2C_STATUS,
- TCS_I2C_STATUS_RGBC_VALID);
- zassert_equal(EC_SUCCESS, ms->drv->irq_handler(ms, &event),
- NULL);
- }
- /*
- * If saturation value is exceeded on any rgb sensor, than data
- * shouldn't be committed to FIFO.
- */
- check_fifo_empty(ms, ms_rgb);
-}
-
-/**
- * Test getting and setting scale of light sensor. Checks if collected values
- * are scaled properly.
- */
-ZTEST_USER(tcs3400, test_tcs_scale)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
- uint32_t event = TCS_INT_EVENT;
- /* Expected data to test: IR, R, G, B */
- int exp_v[][4] = {
- {200, 1110, 870, 850},
- {300, 1110, 10000, 8500},
- {600, 5000, 4000, 3000},
- {100, 3000, 4000, 2000},
- {100, 1000, 1000, 1000},
- };
- /* Scale for each test */
- uint16_t exp_scale[][4] = {
- {MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE},
- {MOTION_SENSE_DEFAULT_SCALE + 300,
- MOTION_SENSE_DEFAULT_SCALE + 300,
- MOTION_SENSE_DEFAULT_SCALE + 300,
- MOTION_SENSE_DEFAULT_SCALE + 300},
- {MOTION_SENSE_DEFAULT_SCALE - 300,
- MOTION_SENSE_DEFAULT_SCALE - 300,
- MOTION_SENSE_DEFAULT_SCALE - 300,
- MOTION_SENSE_DEFAULT_SCALE - 300},
- {MOTION_SENSE_DEFAULT_SCALE + 345,
- MOTION_SENSE_DEFAULT_SCALE - 5423,
- MOTION_SENSE_DEFAULT_SCALE - 30,
- MOTION_SENSE_DEFAULT_SCALE + 400},
- {MOTION_SENSE_DEFAULT_SCALE - 345,
- MOTION_SENSE_DEFAULT_SCALE + 5423,
- MOTION_SENSE_DEFAULT_SCALE + 30,
- MOTION_SENSE_DEFAULT_SCALE - 400},
- {MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE,
- MOTION_SENSE_DEFAULT_SCALE, MOTION_SENSE_DEFAULT_SCALE}
- };
- uint16_t scale[3];
- int16_t temp;
- int i, test;
- intv3_t v;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* Need to be set to collect all data in FIFO */
- ms->oversampling_ratio = 1;
- ms_rgb->oversampling_ratio = 1;
- /* Disable calibration mode */
- zassert_equal(EC_SUCCESS, ms->drv->perform_calib(ms, 0), NULL);
- /* Setup AGAIN and ATIME for normal mode */
- zassert_equal(EC_RES_IN_PROGRESS, ms->drv->read(ms, v), NULL);
-
- /* Test different data in supported range */
- for (test = 0; test < ARRAY_SIZE(exp_v); test++) {
- /* Set and test clear sensor scale */
- zassert_equal(EC_SUCCESS,
- ms->drv->set_scale(ms, exp_scale[test], 0),
- "test %d", test);
- zassert_equal(EC_SUCCESS,
- ms->drv->get_scale(ms, scale, &temp),
- "test %d", test);
- zassert_equal((int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, temp,
- "test %d, %d", test, temp);
- zassert_equal(exp_scale[test][0], scale[0], "test %d", test);
-
- /* Set and test RGB sensor scale */
- zassert_equal(EC_SUCCESS, ms_rgb->drv->set_scale(ms_rgb,
- &(exp_scale[test][1]), 0),
- "test %d", test);
- zassert_equal(EC_SUCCESS,
- ms_rgb->drv->get_scale(ms_rgb, scale, &temp),
- "test %d", test);
- zassert_equal((int16_t)EC_MOTION_SENSE_INVALID_CALIB_TEMP, temp,
- "test %d", test);
- zassert_equal(exp_scale[test][1], scale[0], "test %d", test);
- zassert_equal(exp_scale[test][2], scale[1], "test %d", test);
- zassert_equal(exp_scale[test][3], scale[2], "test %d", test);
-
- set_emul_val_from_exp(exp_v[test], exp_scale[test], emul);
-
- /* Run few times to allow driver change gain */
- for (i = 0; i < 5; i++) {
- tcs_emul_set_reg(emul, TCS_I2C_STATUS,
- TCS_I2C_STATUS_RGBC_VALID);
- zassert_equal(EC_SUCCESS,
- ms->drv->irq_handler(ms, &event), NULL);
- }
- check_fifo(ms, ms_rgb, exp_v[test], V_EPS);
- }
-
- /* Test fail if scale equals 0 */
- scale[0] = 0;
- scale[1] = MOTION_SENSE_DEFAULT_SCALE;
- scale[2] = MOTION_SENSE_DEFAULT_SCALE;
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_scale(ms, scale, 0), NULL);
-
- zassert_equal(EC_ERROR_INVAL, ms_rgb->drv->set_scale(ms_rgb, scale, 0),
- NULL);
- scale[0] = MOTION_SENSE_DEFAULT_SCALE;
- scale[1] = 0;
- scale[2] = MOTION_SENSE_DEFAULT_SCALE;
- zassert_equal(EC_ERROR_INVAL, ms_rgb->drv->set_scale(ms_rgb, scale, 0),
- NULL);
- scale[0] = MOTION_SENSE_DEFAULT_SCALE;
- scale[1] = MOTION_SENSE_DEFAULT_SCALE;
- scale[2] = 0;
- zassert_equal(EC_ERROR_INVAL, ms_rgb->drv->set_scale(ms_rgb, scale, 0),
- NULL);
-}
-
-/** Test setting and getting data rate of light sensor */
-ZTEST_USER(tcs3400, test_tcs_data_rate)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
- uint8_t enable;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- /* RGB sensor doesn't set rate, but return rate of clear sesnor */
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* Test fail on reading device power state */
- i2c_common_emul_set_read_fail_reg(emul, TCS_I2C_ENABLE);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 0, 0), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 0, 1), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 100, 0), NULL);
- zassert_equal(EC_ERROR_INVAL, ms->drv->set_data_rate(ms, 100, 1), NULL);
- i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG);
-
- /* Test setting 0 rate disables device */
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 0), NULL);
- zassert_equal(0, tcs_emul_get_reg(emul, TCS_I2C_ENABLE), NULL);
- zassert_equal(0, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(0, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 0, 1), NULL);
- zassert_equal(0, tcs_emul_get_reg(emul, TCS_I2C_ENABLE), NULL);
- zassert_equal(0, tcs_emul_get_reg(emul, TCS_I2C_ENABLE), NULL);
- zassert_equal(0, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(0, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-
-
- /* Test setting non-zero rate enables device */
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 100, 0), NULL);
- enable = tcs_emul_get_reg(emul, TCS_I2C_ENABLE);
- zassert_true(enable & TCS_I2C_ENABLE_POWER_ON, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_ADC_ENABLE, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_INT_ENABLE, NULL);
- zassert_equal(100, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(100, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-
- zassert_equal(EC_SUCCESS, ms->drv->set_data_rate(ms, 100, 1), NULL);
- enable = tcs_emul_get_reg(emul, TCS_I2C_ENABLE);
- zassert_true(enable & TCS_I2C_ENABLE_POWER_ON, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_ADC_ENABLE, NULL);
- zassert_true(enable & TCS_I2C_ENABLE_INT_ENABLE, NULL);
- zassert_equal(100, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(100, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-
- /* Test RGB sensor doesn't change data rate */
- zassert_equal(EC_SUCCESS, ms_rgb->drv->set_data_rate(ms_rgb, 300, 0),
- NULL);
- zassert_equal(100, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(100, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-
- zassert_equal(EC_SUCCESS, ms_rgb->drv->set_data_rate(ms_rgb, 300, 1),
- NULL);
- zassert_equal(100, ms->drv->get_data_rate(ms), NULL);
- zassert_equal(100, ms_rgb->drv->get_data_rate(ms_rgb), NULL);
-}
-
-/** Test set range function of clear and RGB sensors */
-ZTEST_USER(tcs3400, test_tcs_set_range)
-{
- struct motion_sensor_t *ms, *ms_rgb;
- struct i2c_emul *emul;
-
- emul = tcs_emul_get(TCS_ORD);
- ms = &motion_sensors[TCS_CLR_SENSOR_ID];
- ms_rgb = &motion_sensors[TCS_RGB_SENSOR_ID];
-
- /* RGB sensor doesn't set anything */
- zassert_equal(EC_SUCCESS, ms_rgb->drv->set_range(ms_rgb, 1, 0), NULL);
-
- /* Clear sensor doesn't change anything on device to set range */
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 0x12300, 1), NULL);
- zassert_equal(0x12300, ms->current_range, NULL);
-
- zassert_equal(EC_SUCCESS, ms->drv->set_range(ms, 0x10000, 0), NULL);
- zassert_equal(0x10000, ms->current_range, NULL);
-}
-
-ZTEST_SUITE(tcs3400, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/temp_sensor.c b/zephyr/test/drivers/src/temp_sensor.c
deleted file mode 100644
index 1a49dba8ca..0000000000
--- a/zephyr/test/drivers/src/temp_sensor.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/adc.h>
-#include <zephyr/drivers/adc/adc_emul.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include <math.h>
-
-#include "common.h"
-#include "temp_sensor.h"
-#include "temp_sensor/temp_sensor.h"
-#include "test/drivers/test_state.h"
-
-#define GPIO_PG_EC_DSW_PWROK_PATH DT_PATH(named_gpios, pg_ec_dsw_pwrok)
-#define GPIO_PG_EC_DSW_PWROK_PORT DT_GPIO_PIN(GPIO_PG_EC_DSW_PWROK_PATH, gpios)
-
-#define ADC_DEVICE_NODE DT_NODELABEL(adc0)
-#define ADC_CHANNELS_NUM DT_PROP(DT_NODELABEL(adc0), nchannels)
-
-/** Test error code when invalid sensor is passed to temp_sensor_read() */
-ZTEST_USER(temp_sensor, test_temp_sensor_wrong_id)
-{
- int temp;
-
- zassert_equal(EC_ERROR_INVAL, temp_sensor_read(TEMP_SENSOR_COUNT,
- &temp),
- NULL);
-}
-
-/** Test error code when temp_sensor_read() is called with powered off ADC */
-ZTEST_USER(temp_sensor, test_temp_sensor_adc_error)
-{
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_PG_EC_DSW_PWROK_PATH, gpios));
- int temp;
-
- zassert_not_null(gpio_dev, "Cannot get GPIO device");
-
- /*
- * pg_ec_dsw_pwrok = 0 means ADC is not powered.
- * adc_read will return error
- */
- zassert_ok(gpio_emul_input_set(gpio_dev, GPIO_PG_EC_DSW_PWROK_PORT, 0),
- NULL);
-
- zassert_equal(EC_ERROR_NOT_POWERED,
- temp_sensor_read(TEMP_SENSOR_CHARGER, &temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- temp_sensor_read(TEMP_SENSOR_DDR_SOC, &temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- temp_sensor_read(TEMP_SENSOR_FAN, &temp), NULL);
- zassert_equal(EC_ERROR_NOT_POWERED,
- temp_sensor_read(TEMP_SENSOR_PP3300_REGULATOR, &temp),
- NULL);
-
- /* power ADC */
- zassert_ok(gpio_emul_input_set(gpio_dev, GPIO_PG_EC_DSW_PWROK_PORT, 1),
- NULL);
-}
-
-/** Simple ADC emulator custom function which always return error */
-static int adc_error_func(const struct device *dev, unsigned int channel,
- void *param, uint32_t *result)
-{
- return -EINVAL;
-}
-
-/**
- * Set valid response only for ADC channel connected with tested sensor.
- * Check if temp_sensor_read() from tested sensor returns EC_SUCCESS and
- * valid temperature. Set invalid response on ADC channel for next test.
- */
-static void check_valid_temperature(const struct device *adc_dev, int sensor)
-{
- int temp;
-
- /* ADC channel of tested sensor return valid value */
- zassert_ok(adc_emul_const_value_set(adc_dev, temp_sensors[sensor].idx,
- 1000),
- "adc_emul_const_value_set() failed (sensor %d)", sensor);
- zassert_equal(EC_SUCCESS, temp_sensor_read(sensor, &temp), NULL);
- zassert_within(temp, 273 + 50, 51,
- "Expected temperature in 0*C-100*C, got %d*C (sensor %d)",
- temp - 273, sensor);
- /* Return error on ADC channel of tested sensor */
- zassert_ok(adc_emul_value_func_set(adc_dev, temp_sensors[sensor].idx,
- adc_error_func, NULL),
- "adc_emul_value_func_set() failed (sensor %d)", sensor);
-}
-
-/** Test if temp_sensor_read() returns temperature on success */
-ZTEST_USER(temp_sensor, test_temp_sensor_read)
-{
- const struct device *adc_dev = DEVICE_DT_GET(ADC_DEVICE_NODE);
- int chan;
-
- zassert_not_null(adc_dev, "Cannot get ADC device");
-
- /* Return error on all ADC channels */
- for (chan = 0; chan < ADC_CHANNELS_NUM; chan++) {
- zassert_ok(adc_emul_value_func_set(adc_dev, chan,
- adc_error_func, NULL),
- "channel %d adc_emul_value_func_set() failed", chan);
- }
-
- check_valid_temperature(adc_dev, TEMP_SENSOR_CHARGER);
- check_valid_temperature(adc_dev, TEMP_SENSOR_DDR_SOC);
- check_valid_temperature(adc_dev, TEMP_SENSOR_FAN);
- check_valid_temperature(adc_dev, TEMP_SENSOR_PP3300_REGULATOR);
-
- /* Return correct value on all ADC channels */
- for (chan = 0; chan < ADC_CHANNELS_NUM; chan++) {
- zassert_ok(adc_emul_const_value_set(adc_dev, chan, 1000),
- "channel %d adc_emul_const_value_set() failed",
- chan);
- }
-}
-
-static void *temp_sensor_setup(void)
-{
- const struct device *dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_PG_EC_DSW_PWROK_PATH, gpios));
-
- zassert_not_null(dev, NULL);
- /* Before tests make sure that power pin is set. */
- zassert_ok(gpio_emul_input_set(dev, GPIO_PG_EC_DSW_PWROK_PORT, 1),
- NULL);
-
- return NULL;
-}
-
-ZTEST_SUITE(temp_sensor, drivers_predicate_post_main, temp_sensor_setup, NULL,
- NULL, NULL);
diff --git a/zephyr/test/drivers/src/test_mocks.c b/zephyr/test/drivers/src/test_mocks.c
deleted file mode 100644
index f8bbb1a6c1..0000000000
--- a/zephyr/test/drivers/src/test_mocks.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "test/drivers/test_mocks.h"
-
-DEFINE_FFF_GLOBALS;
-
-/* Mocks for common/init_rom.c */
-DEFINE_FAKE_VALUE_FUNC(const void *, init_rom_map, const void *, int);
-DEFINE_FAKE_VOID_FUNC(init_rom_unmap, const void *, int);
-DEFINE_FAKE_VALUE_FUNC(int, init_rom_copy, int, int, int);
-
-/* Mocks for common/system.c */
-DEFINE_FAKE_VALUE_FUNC(int, system_jumped_late);
-
-/**
- * @brief Reset all the fakes before each test.
- */
-static void fff_reset_rule_before(const struct ztest_unit_test *test,
- void *data)
-{
- ARG_UNUSED(test);
- ARG_UNUSED(data);
-
- RESET_FAKE(init_rom_map);
- RESET_FAKE(init_rom_unmap);
- RESET_FAKE(init_rom_copy);
- RESET_FAKE(system_jumped_late);
-}
-
-ZTEST_RULE(fff_reset_rule, fff_reset_rule_before, NULL);
diff --git a/zephyr/test/drivers/src/test_rules.c b/zephyr/test/drivers/src/test_rules.c
deleted file mode 100644
index 0266fa3cdf..0000000000
--- a/zephyr/test/drivers/src/test_rules.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <ztest.h>
-
-#include "motion_sense_fifo.h"
-
-static void motion_sense_fifo_reset_before(const struct ztest_unit_test *test,
- void *data)
-{
- ARG_UNUSED(test);
- ARG_UNUSED(data);
- motion_sense_fifo_reset();
-}
-ZTEST_RULE(motion_sense_fifo_reset, motion_sense_fifo_reset_before, NULL);
diff --git a/zephyr/test/drivers/src/thermistor.c b/zephyr/test/drivers/src/thermistor.c
deleted file mode 100644
index e760e0cf33..0000000000
--- a/zephyr/test/drivers/src/thermistor.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/adc.h>
-#include <zephyr/drivers/adc/adc_emul.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <temp_sensor.h>
-
-#include "common.h"
-#include "../driver/temp_sensor/thermistor.h"
-#include "temp_sensor/temp_sensor.h"
-#include "test/drivers/test_state.h"
-
-
-#define GPIO_PG_EC_DSW_PWROK_PATH DT_PATH(named_gpios, pg_ec_dsw_pwrok)
-#define GPIO_PG_EC_DSW_PWROK_PORT DT_GPIO_PIN(GPIO_PG_EC_DSW_PWROK_PATH, gpios)
-
-#define ADC_DEVICE_NODE DT_NODELABEL(adc0)
-
-/* TODO replace counting macros with DT macro when
- * https://github.com/zephyrproject-rtos/zephyr/issues/38715 lands
- */
-#define _ACCUMULATOR(x)
-#define NAMED_TEMP_SENSORS_SIZE \
- DT_FOREACH_CHILD(DT_PATH(named_temp_sensors), _ACCUMULATOR) \
- 0
-#define TEMP_SENSORS_ENABLED_SIZE \
- DT_FOREACH_STATUS_OKAY(cros_ec_temp_sensor, _ACCUMULATOR) 0
-
-/* Conversion of temperature doesn't need to be 100% accurate */
-#define TEMP_EPS 2
-
-#define A_VALID_VOLTAGE 1000
-/**
- * Test if get temp function return expected error when ADC is not powered
- * (indicated as GPIO pin set to low) and return success after powering on ADC.
- */
-ZTEST_USER(thermistor, test_thermistor_power_pin)
-{
- int temp;
- int sensor_idx;
-
- const struct device *gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_PG_EC_DSW_PWROK_PATH, gpios));
- const struct device *adc_dev = DEVICE_DT_GET(ADC_DEVICE_NODE);
-
- zassert_not_null(gpio_dev, "Cannot get GPIO device");
- zassert_not_null(adc_dev, "Cannot get ADC device");
-
- /* Make sure that ADC return a valid value */
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE;
- sensor_idx++) {
- const struct temp_sensor_t *sensor = &temp_sensors[sensor_idx];
-
- zassert_ok(adc_emul_const_value_set(adc_dev,
- sensor->idx,
- A_VALID_VOLTAGE),
- "adc_emul_value_func_set() failed on %s",
- sensor->name);
- }
-
- /* pg_ec_dsw_pwrok = 0 means ADC is not powered. */
- zassert_ok(gpio_emul_input_set(gpio_dev, GPIO_PG_EC_DSW_PWROK_PORT, 0),
- NULL);
-
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE;
- sensor_idx++) {
- const struct temp_sensor_t *sensor = &temp_sensors[sensor_idx];
-
- zassert_equal(EC_ERROR_NOT_POWERED,
- sensor->zephyr_info->read(sensor, &temp),
- "%s failed", sensor->name);
- }
-
- /* pg_ec_dsw_pwrok = 1 means ADC is powered. */
- zassert_ok(gpio_emul_input_set(gpio_dev, GPIO_PG_EC_DSW_PWROK_PORT, 1),
- NULL);
-
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE;
- sensor_idx++) {
- const struct temp_sensor_t *sensor = &temp_sensors[sensor_idx];
-
- zassert_equal(EC_SUCCESS,
- sensor->zephyr_info->read(sensor, &temp),
- "%s failed", sensor->name);
- }
-}
-
-/* Simple ADC emulator custom function which always return error */
-static int adc_error_func(const struct device *dev, unsigned int channel,
- void *param, uint32_t *result)
-{
- return -EINVAL;
-}
-
-/** Test if get temp function return expected error on ADC malfunction */
-ZTEST_USER(thermistor, test_thermistor_adc_read_error)
-{
- int temp;
- int sensor_idx;
-
- const struct device *adc_dev = DEVICE_DT_GET(ADC_DEVICE_NODE);
-
- zassert_not_null(adc_dev, "Cannot get ADC device");
-
- /* Return error on all ADC channels */
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE;
- sensor_idx++) {
- const struct temp_sensor_t *sensor = &temp_sensors[sensor_idx];
-
- zassert_ok(adc_emul_value_func_set(adc_dev, sensor->idx,
- adc_error_func, NULL),
- "adc_emul_value_func_set() failed on %s",
- sensor->name);
- }
-
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE;
- sensor_idx++) {
- const struct temp_sensor_t *sensor = &temp_sensors[sensor_idx];
-
- zassert_equal(EC_ERROR_UNKNOWN,
- sensor->zephyr_info->read(sensor, &temp),
- "%s failed", sensor->name);
- }
-}
-
-/** Get resistance of thermistor for given temperature */
-static int resistance_47kohm_B4050(int t)
-{
- /* Thermistor manufacturer resistance lookup table*/
- int r_table[] = {
- 155700, 147900, 140600, 133700, 127200, /* 0*C - 4*C */
- 121000, 115100, 109600, 104300, 99310, /* 5*C - 9*C */
- 94600, 90130, 85890, 81870, 78070, /* 10*C - 14*C */
- 74450, 71020, 67770, 64680, 61750, /* 15*C - 19*C */
- 58970, 56320, 53810, 51430, 49160, /* 20*C - 24*C */
- 47000, 44950, 42990, 41130, 39360, /* 25*C - 29*C */
- 37680, 36070, 34540, 33080, 31690, /* 30*C - 34*C */
- 30360, 29100, 27900, 26750, 25650, /* 35*C - 39*C */
- 24610, 23610, 22660, 21750, 20880, /* 40*C - 44*C */
- 20050, 19260, 18500, 17780, 17090, /* 45*C - 49*C */
- 16430, 15800, 15200, 14620, 14070, /* 50*C - 54*C */
- 13540, 13030, 12550, 12090, 11640, /* 55*C - 59*C */
- 11210, 10800, 10410, 10040, 9676, /* 60*C - 64*C */
- 9331, 8999, 8680, 8374, 8081, /* 65*C - 69*C */
- 7799, 7528, 7268, 7018, 6777, /* 70*C - 74*C */
- 6546, 6324, 6111, 5906, 5708, /* 75*C - 79*C */
- 5518, 5335, 5160, 4990, 4827, /* 80*C - 84*C */
- 4671, 4519, 4374, 4233, 4098, /* 85*C - 89*C */
- 3968, 3842, 3721, 3605, 3492, /* 90*C - 94*C */
- 3384, 3279, 3179, 3082, 2988, /* 95*C - 99*C */
- 2898 /* 100*C */
- };
-
- t -= 273;
- if (t < 0)
- return r_table[0] + 10000;
-
- if (t >= ARRAY_SIZE(r_table))
- return r_table[ARRAY_SIZE(r_table) - 1] - 100;
-
- return r_table[t];
-}
-
-/**
- * Calculate output voltage in voltage divider circuit using formula
- * Vout = Vs * r2 / (r1 + r2)
- */
-static int volt_divider(int vs, int r1, int r2)
-{
- return vs * r2 / (r1 + r2);
-}
-
-struct thermistor_state {
- const int v;
- const int r;
- int temp_expected;
-};
-
-/** ADC emulator function which calculate output voltage for given thermistor */
-static int adc_temperature_func(const struct device *dev, unsigned int channel,
- void *param, uint32_t *result)
-{
- struct thermistor_state *s = (struct thermistor_state *)param;
-
- *result = volt_divider(s->v,
- s->r,
- resistance_47kohm_B4050(s->temp_expected));
-
- return 0;
-}
-
-/** Test conversion from ADC raw value to temperature */
-static void do_thermistor_test(const struct temp_sensor_t *temp_sensor,
- int reference_mv, int reference_ohms)
-{
- int temp_expected;
- int temp;
-
- const struct device *adc_dev = DEVICE_DT_GET(ADC_DEVICE_NODE);
- struct thermistor_state state = {
- .v = reference_mv,
- .r = reference_ohms,
- };
-
- zassert_not_null(adc_dev, "Cannot get ADC device");
-
- /* Setup ADC channel */
- zassert_ok(adc_emul_value_func_set(adc_dev,
- temp_sensor->idx,
- adc_temperature_func, &state),
- "adc_emul_value_func_set() failed on %s", temp_sensor->name);
-
- /* Makes sure that reference voltage is correct for given thermistor */
- zassert_ok(adc_emul_ref_voltage_set(adc_dev, ADC_REF_INTERNAL, state.v),
- "adc_emul_ref_voltage_set() failed %s on ",
- temp_sensor->name);
-
- /* Test whole supported range from 0*C to 100*C (273*K to 373*K) */
- for (temp_expected = 273; temp_expected <= 373; temp_expected++) {
- state.temp_expected = temp_expected;
- zassert_equal(EC_SUCCESS,
- temp_sensor->zephyr_info->read(temp_sensor, &temp),
- "failed on %s", temp_sensor->name);
- zassert_within(temp_expected, temp, TEMP_EPS,
- "Expected %d*K, got %d*K on %s", temp_expected,
- temp, temp_sensor->name);
- }
-
- /* Temperatures below 0*C should be reported as 0*C */
- state.temp_expected = -15 + 273;
- zassert_equal(EC_SUCCESS,
- temp_sensor->zephyr_info->read(temp_sensor, &temp),
- "failed on %s", temp_sensor->name);
- zassert_equal(273, temp, "Expected %d*K, got %d*K on %s", 273, temp,
- temp_sensor->name);
-
- /* Temperatures above 100*C should be reported as 100*C */
- state.temp_expected = 115 + 273;
- zassert_equal(EC_SUCCESS,
- temp_sensor->zephyr_info->read(temp_sensor, &temp),
- "failed on %s", temp_sensor->name);
- zassert_equal(373, temp, "Expected %d*K, got %d*K on %s", 373, temp,
- temp_sensor->name);
-}
-
-#define GET_THERMISTOR_REF_MV(node_id) \
- [ZSHIM_TEMP_SENSOR_ID(node_id)] = DT_PROP( \
- DT_PHANDLE(node_id, thermistor), steinhart_reference_mv),
-
-#define GET_THERMISTOR_REF_RES(node_id) \
- [ZSHIM_TEMP_SENSOR_ID(node_id)] = DT_PROP( \
- DT_PHANDLE(node_id, thermistor), steinhart_reference_res),
-
-ZTEST_USER(thermistor, test_thermistors_adc_temperature_conversion)
-{
- int sensor_idx;
-
- const static int reference_mv_arr[] = { DT_FOREACH_STATUS_OKAY(
- cros_temp_sensor, GET_THERMISTOR_REF_MV) };
- const static int reference_res_arr[] = { DT_FOREACH_STATUS_OKAY(
- cros_temp_sensor, GET_THERMISTOR_REF_RES) };
-
- for (sensor_idx = 0; sensor_idx < NAMED_TEMP_SENSORS_SIZE; sensor_idx++)
- do_thermistor_test(&temp_sensors[sensor_idx],
- reference_mv_arr[sensor_idx],
- reference_res_arr[sensor_idx]);
-}
-
-ZTEST_USER(thermistor, test_device_nodes_enabled)
-{
- zassert_equal(NAMED_TEMP_SENSORS_SIZE, TEMP_SENSORS_ENABLED_SIZE,
- "Temperature sensors in device tree and "
- "those enabled for test differ");
-
- /* Thermistor nodes being enabled are already tested by compilation. */
-}
-
-static void *thermistor_setup(void)
-{
- const struct device *dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_PG_EC_DSW_PWROK_PATH, gpios));
-
- zassert_not_null(dev, NULL);
- /* Before tests make sure that power pin is set. */
- zassert_ok(gpio_emul_input_set(dev, GPIO_PG_EC_DSW_PWROK_PORT, 1),
- NULL);
-
- return NULL;
-}
-
-ZTEST_SUITE(thermistor, drivers_predicate_post_main, thermistor_setup, NULL,
- NULL, NULL);
diff --git a/zephyr/test/drivers/src/uart_hostcmd.c b/zephyr/test/drivers/src/uart_hostcmd.c
deleted file mode 100644
index 0e68c440ce..0000000000
--- a/zephyr/test/drivers/src/uart_hostcmd.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "console.h"
-#include "host_command.h"
-#include "uart.h"
-#include "test/drivers/test_state.h"
-
-/** Messages used in test */
-static const char msg1[] = "test";
-static const char msg2[] = "uart_hostcmd";
-static const char msg3[] = "message3";
-
-/** Length of message excluding NULL char at the end */
-#define MSG_LEN(msg) (sizeof(msg) - 1)
-
-/**
- * Write message 1 before first snapshot. Read everything from buffer. Create
- * second snapshot. Write message 2 after it.
- */
-static void setup_snapshots_and_messages(void *unused)
-{
- char response[1024];
- struct host_cmd_handler_args read_args =
- BUILD_HOST_COMMAND_RESPONSE(EC_CMD_CONSOLE_READ, 0, response);
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_SIMPLE(EC_CMD_CONSOLE_SNAPSHOT, 0);
-
- /* Set first snapshot before first message */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- cputs(CC_COMMAND, msg1);
-
- /* Read everything from buffer */
- do {
- /* Clear response size before executing command */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args),
- NULL);
- } while (read_args.response_size != 0);
-
- /* Set second snapshot after first message */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- cputs(CC_COMMAND, msg2);
-}
-
-/**
- * Test if read next variant of console read host command is working. ver
- * argument allows to change version of command. In case of version 1, parameter
- * with sub command is provided.
- */
-static void test_uart_hc_read_next(int ver)
-{
- /* Should be able to read whole buffer in one command */
- char response[CONFIG_PLATFORM_EC_HOSTCMD_CONSOLE_BUF_SIZE + 1];
- struct ec_params_console_read_v1 params;
- struct host_cmd_handler_args read_args =
- BUILD_HOST_COMMAND_RESPONSE(EC_CMD_CONSOLE_READ, ver, response);
- struct host_cmd_handler_args snap_args =
- BUILD_HOST_COMMAND_SIMPLE(EC_CMD_CONSOLE_SNAPSHOT, 0);
- char *msg1_start;
- char *msg2_start;
- char *msg3_start;
-
- /* Set up host command parameters */
- if (ver == 1) {
- read_args.params = &params;
- read_args.params_size = sizeof(params);
- params.subcmd = CONSOLE_READ_NEXT;
- }
-
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
-
- /*
- * Whole buffer until snapshot should be in response, check if it ends
- * with message 1 which should start at the end of response excluding
- * NULL char.
- */
- msg1_start = response + read_args.response_size - 1 - MSG_LEN(msg1);
- zassert_mem_equal(msg1, msg1_start, MSG_LEN(msg1),
- "expected \"%s\", got \"%.*s\"",
- msg1, MSG_LEN(msg1), msg1_start);
-
- /* Set new snapshot which should include message 2 */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&snap_args), NULL);
-
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
-
- /*
- * Whole buffer should be in response, check if it ends with both
- * messages. Message 2 should start at the end of response excluding
- * NULL char.
- */
- msg2_start = response + read_args.response_size - 1 - MSG_LEN(msg2);
- msg1_start = msg2_start - MSG_LEN(msg1);
- zassert_mem_equal(msg2, msg2_start, MSG_LEN(msg2),
- "expected \"%s\", got \"%.*s\"",
- msg2, MSG_LEN(msg2), msg2_start);
- zassert_mem_equal(msg1, msg1_start, MSG_LEN(msg1),
- "expected \"%s\", got \"%.*s\"",
- msg1, MSG_LEN(msg1), msg1_start);
-
- /* Append third message */
- cputs(CC_COMMAND, msg3);
-
- /* Check read next without new snapshot, no data should be read */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal(0, read_args.response_size,
- "expected message length 0, got %d",
- read_args.response_size);
-
- /* Set new snapshot which should include message 3 */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&snap_args), NULL);
-
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
-
- msg3_start = response + read_args.response_size - 1 - MSG_LEN(msg3);
- msg2_start = msg3_start - MSG_LEN(msg2);
- msg1_start = msg2_start - MSG_LEN(msg1);
- zassert_mem_equal(msg3, msg3_start, MSG_LEN(msg3),
- "expected \"%s\", got \"%.*s\"",
- msg3, MSG_LEN(msg3), msg3_start);
- zassert_mem_equal(msg2, msg2_start, MSG_LEN(msg2),
- "expected \"%s\", got \"%.*s\"",
- msg2, MSG_LEN(msg2), msg2_start);
- zassert_mem_equal(msg1, msg1_start, MSG_LEN(msg1),
- "expected \"%s\", got \"%.*s\"",
- msg1, MSG_LEN(msg1), msg1_start);
-}
-
-ZTEST_USER(uart_hostcmd, test_uart_hc_read_next_v0)
-{
- test_uart_hc_read_next(0);
-}
-
-ZTEST_USER(uart_hostcmd, test_uart_hc_read_next_v1)
-{
- test_uart_hc_read_next(1);
-}
-
-/** Test if read recent variant of console read host command is working */
-ZTEST_USER(uart_hostcmd, test_uart_hc_read_recent_v1)
-{
- /* Should be able to read whole buffer in one command */
- char response[CONFIG_PLATFORM_EC_HOSTCMD_CONSOLE_BUF_SIZE + 1];
- struct ec_params_console_read_v1 params;
- struct host_cmd_handler_args read_args =
- BUILD_HOST_COMMAND(EC_CMD_CONSOLE_READ, 1, response, params);
- struct host_cmd_handler_args snap_args =
- BUILD_HOST_COMMAND_SIMPLE(EC_CMD_CONSOLE_SNAPSHOT, 0);
-
- params.subcmd = CONSOLE_READ_RECENT;
-
- /* Only message 1 which is between two last snapshots should be read */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
- /* Account additional NULL char at the end */
- zassert_equal(MSG_LEN(msg1) + 1, read_args.response_size,
- "expected message length %d, got %d",
- MSG_LEN(msg1) + 1, read_args.response_size);
- zassert_mem_equal(msg1, response, MSG_LEN(msg1),
- "expected \"%s\", got \"%.*s\"",
- msg1, MSG_LEN(msg1), response);
-
- /* Set new snapshot after second message */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&snap_args), NULL);
-
- /* Only message between two last snapshots should be read */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
- /* Account additional NULL char at the end */
- zassert_equal(MSG_LEN(msg2) + 1, read_args.response_size,
- "expected message length %d, got %d",
- MSG_LEN(msg2) + 1, read_args.response_size);
- zassert_mem_equal(msg2, response, MSG_LEN(msg2),
- "expected \"%s\", got \"%.*s\"",
- msg2, MSG_LEN(msg2), response);
-
- /* Append third message */
- cputs(CC_COMMAND, msg3);
-
- /* Check that message is not read without setting snapshot */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal(0, read_args.response_size,
- "expected message length 0, got %d",
- read_args.response_size);
-
- /* Set new snapshot */
- zassert_equal(EC_RES_SUCCESS, host_command_process(&snap_args), NULL);
-
- /* This time only third message should be read */
- read_args.response_size = 0;
- zassert_equal(EC_RES_SUCCESS, host_command_process(&read_args), NULL);
- zassert_equal('\0', response[read_args.response_size],
- "Last byte of response is not '\\0' (got 0x%x)",
- response[read_args.response_size]);
- /* Account additional NULL char at the end */
- zassert_equal(MSG_LEN(msg3) + 1, read_args.response_size,
- "expected message length %d, got %d",
- MSG_LEN(msg3) + 1, read_args.response_size);
- zassert_mem_equal(msg3, response, MSG_LEN(msg3),
- "expected \"%s\", got \"%.*s\"",
- msg3, MSG_LEN(msg3), response);
-}
-
-ZTEST_SUITE(uart_hostcmd, drivers_predicate_post_main, NULL,
- setup_snapshots_and_messages, NULL, NULL);
diff --git a/zephyr/test/drivers/src/usb_mux.c b/zephyr/test/drivers/src/usb_mux.c
deleted file mode 100644
index 09aa3c47d6..0000000000
--- a/zephyr/test/drivers/src/usb_mux.c
+++ /dev/null
@@ -1,903 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/kernel.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/shell/shell_uart.h>
-
-#include "common.h"
-#include "ec_commands.h"
-#include "ec_tasks.h"
-#include "fff.h"
-#include "hooks.h"
-#include "host_command.h"
-#include "i2c.h"
-#include "test/drivers/stubs.h"
-#include "task.h"
-#include "tcpm/ps8xxx_public.h"
-#include "tcpm/tcpci.h"
-#include "usb_prl_sm.h"
-#include "usb_tc_sm.h"
-
-#include "usb_mux.h"
-#include "test/drivers/test_state.h"
-#include "test/drivers/utils.h"
-
-/** Copy of original usb_muxes[USB_PORT_C1] */
-struct usb_mux usb_mux_c1;
-
-/** Number of usb mux proxies in chain */
-#define NUM_OF_PROXY 3
-
-/** Pointers to original usb muxes chain of port c1 */
-const struct usb_mux *org_mux[NUM_OF_PROXY];
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VALUE_FUNC1(int, proxy_init, const struct usb_mux *);
-static int proxy_init_custom(const struct usb_mux *me)
-{
- int i = me->i2c_addr_flags;
- int ec = EC_SUCCESS;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->driver->init != NULL) {
- ec = org_mux[i]->driver->init(org_mux[i]);
- }
-
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(proxy_init);
- }
-
- /* Discard this call if made from different thread */
- proxy_init_fake.call_count--;
-
- return ec;
-}
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VALUE_FUNC3(int, proxy_set, const struct usb_mux *, mux_state_t, bool *);
-static int proxy_set_custom(const struct usb_mux *me, mux_state_t mux_state,
- bool *ack_required)
-{
- int i = me->i2c_addr_flags;
- int ec = EC_SUCCESS;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->driver->set != NULL) {
- ec = org_mux[i]->driver->set(org_mux[i], mux_state,
- ack_required);
- }
-
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(proxy_set);
- }
-
- /* Discard this call if made from different thread */
- proxy_set_fake.call_count--;
-
- return ec;
-}
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VALUE_FUNC2(int, proxy_get, const struct usb_mux *, mux_state_t *);
-/** Sequence of mux_state values returned by proxy_get function */
-static mux_state_t proxy_get_mux_state_seq[NUM_OF_PROXY];
-/** Index of next mux_state to return from proxy_get_function */
-static int proxy_get_mux_state_seq_idx;
-/** Set all mux_state in sequence to the same state value */
-static void set_proxy_get_mux_state_seq(mux_state_t state)
-{
- proxy_get_mux_state_seq_idx = 0;
- for (int i = 0; i < NUM_OF_PROXY; i++) {
- proxy_get_mux_state_seq[i] = state;
- }
-}
-
-static int proxy_get_custom(const struct usb_mux *me, mux_state_t *mux_state)
-{
- int i = me->i2c_addr_flags;
- int ec = EC_SUCCESS;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->driver->get != NULL) {
- ec = org_mux[i]->driver->get(org_mux[i], mux_state);
- }
-
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- zassert_true(proxy_get_mux_state_seq_idx < NUM_OF_PROXY,
- "%s called too many times without resetting "
- "mux_state_seq", __func__);
- *mux_state =
- proxy_get_mux_state_seq[proxy_get_mux_state_seq_idx];
- proxy_get_mux_state_seq_idx++;
- RETURN_FAKE_RESULT(proxy_get);
- }
-
- /* Discard this call if made from different thread */
- proxy_get_fake.call_count--;
-
- return ec;
-}
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VALUE_FUNC1(int, proxy_enter_low_power_mode, const struct usb_mux *);
-static int proxy_enter_low_power_mode_custom(const struct usb_mux *me)
-{
- int i = me->i2c_addr_flags;
- int ec = EC_SUCCESS;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->driver->enter_low_power_mode != NULL) {
- ec = org_mux[i]->driver->enter_low_power_mode(org_mux[i]);
- }
-
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(proxy_enter_low_power_mode);
- }
-
- /* Discard this call if made from different thread */
- proxy_enter_low_power_mode_fake.call_count--;
-
- return ec;
-}
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VALUE_FUNC1(int, proxy_chipset_reset, const struct usb_mux *);
-static int proxy_chipset_reset_custom(const struct usb_mux *me)
-{
- int i = me->i2c_addr_flags;
- int ec = EC_SUCCESS;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->driver->chipset_reset != NULL) {
- ec = org_mux[i]->driver->chipset_reset(org_mux[i]);
- }
-
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(proxy_chipset_reset);
- }
-
- /* Discard this call if made from different thread */
- proxy_chipset_reset_fake.call_count--;
-
- return ec;
-}
-
-/** Proxy function for fw update capability */
-static bool proxy_fw_update_cap(void)
-{
- return true;
-}
-
-/** Proxy function which check calls from usb_mux framework to driver */
-FAKE_VOID_FUNC3(proxy_hpd_update, const struct usb_mux *, mux_state_t, bool *);
-static void proxy_hpd_update_custom(const struct usb_mux *me,
- mux_state_t mux_state, bool *ack_required)
-{
- int i = me->i2c_addr_flags;
-
- zassert_true(i < NUM_OF_PROXY, "Proxy called for non proxy usb_mux");
-
- if (org_mux[i] != NULL &&
- org_mux[i]->hpd_update != NULL) {
- org_mux[i]->hpd_update(org_mux[i], mux_state, ack_required);
- }
-
- if (task_get_current() != TASK_ID_TEST_RUNNER) {
- /* Discard this call if made from different thread */
- proxy_hpd_update_fake.call_count--;
- }
-}
-
-/** Usb mux driver with proxy functions */
-const struct usb_mux_driver proxy_usb_mux = {
- .init = &proxy_init,
- .set = &proxy_set,
- .get = &proxy_get,
- .enter_low_power_mode = &proxy_enter_low_power_mode,
- .chipset_reset = &proxy_chipset_reset,
- .is_retimer_fw_update_capable = &proxy_fw_update_cap,
-};
-
-/** Mock function used in init test */
-FAKE_VALUE_FUNC1(int, mock_board_init, const struct usb_mux *);
-static int mock_board_init_custom(const struct usb_mux *me)
-{
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(mock_board_init);
- }
-
- /* Discard this call if made from different thread */
- mock_board_init_fake.call_count--;
-
- return EC_SUCCESS;
-}
-
-/** Mock function used in set test */
-FAKE_VALUE_FUNC2(int, mock_board_set, const struct usb_mux *, mux_state_t);
-static int mock_board_set_custom(const struct usb_mux *me,
- mux_state_t mux_state)
-{
- if (task_get_current() == TASK_ID_TEST_RUNNER) {
- RETURN_FAKE_RESULT(mock_board_set);
- }
-
- /* Discard this call if made from different thread */
- mock_board_set_fake.call_count--;
-
- return EC_SUCCESS;
-}
-
-/**
- * Reset state of all fake functions, setup custom fake functions and set
- * default return value to EC_SUCCESS (all functions which has return value)
- */
-static void reset_proxy_fakes(void)
-{
- RESET_FAKE(proxy_init);
- RESET_FAKE(proxy_set);
- RESET_FAKE(proxy_get);
- RESET_FAKE(proxy_enter_low_power_mode);
- RESET_FAKE(proxy_chipset_reset);
- RESET_FAKE(proxy_hpd_update);
- RESET_FAKE(mock_board_init);
- RESET_FAKE(mock_board_set);
-
- /* Setup proxy functions */
- proxy_init_fake.custom_fake = proxy_init_custom;
- proxy_set_fake.custom_fake = proxy_set_custom;
- proxy_get_fake.custom_fake = proxy_get_custom;
- proxy_enter_low_power_mode_fake.custom_fake =
- proxy_enter_low_power_mode_custom;
- proxy_chipset_reset_fake.custom_fake = proxy_chipset_reset_custom;
- proxy_hpd_update_fake.custom_fake = proxy_hpd_update_custom;
- mock_board_init_fake.custom_fake = mock_board_init_custom;
- mock_board_set_fake.custom_fake = mock_board_set_custom;
-
- /* Set default return value */
- proxy_init_fake.return_val = EC_SUCCESS;
- proxy_set_fake.return_val = EC_SUCCESS;
- proxy_get_fake.return_val = EC_SUCCESS;
- proxy_enter_low_power_mode_fake.return_val = EC_SUCCESS;
- proxy_chipset_reset_fake.return_val = EC_SUCCESS;
- mock_board_init_fake.return_val = EC_SUCCESS;
- mock_board_set_fake.return_val = EC_SUCCESS;
-}
-
-/** Chain of 3 proxy usb muxes */
-struct usb_mux proxy_chain_2 = {
- .usb_port = USBC_PORT_C1,
- .driver = &proxy_usb_mux,
- .next_mux = NULL,
- .i2c_addr_flags = 2,
- .hpd_update = &proxy_hpd_update,
-};
-
-struct usb_mux proxy_chain_1 = {
- .usb_port = USBC_PORT_C1,
- .driver = &proxy_usb_mux,
- .next_mux = &proxy_chain_2,
- .i2c_addr_flags = 1,
- .hpd_update = &proxy_hpd_update,
-};
-
-struct usb_mux proxy_chain_0 = {
- .usb_port = USBC_PORT_C1,
- .driver = &proxy_usb_mux,
- .next_mux = &proxy_chain_1,
- .i2c_addr_flags = 0,
- .hpd_update = &proxy_hpd_update,
-};
-
-
-/** Setup first 3 usb muxes of port 1 with proxy */
-static void setup_usb_mux_proxy_chain(void)
-{
- const struct usb_mux *t;
- int i;
-
- memcpy(&usb_mux_c1, &usb_muxes[USBC_PORT_C1], sizeof(struct usb_mux));
- memcpy(&usb_muxes[USBC_PORT_C1], &proxy_chain_0,
- sizeof(struct usb_mux));
-
- /*
- * Setup org_mux array to point real driver which should be called by
- * each proxy
- */
- t = &usb_mux_c1;
- for (i = 0; i < NUM_OF_PROXY; i++) {
- org_mux[i] = t;
- if (t != NULL) {
- t = t->next_mux;
- }
- }
-
- if (org_mux[2] != NULL) {
- proxy_chain_2.next_mux = org_mux[2]->next_mux;
- } else {
- proxy_chain_2.next_mux = NULL;
- }
-}
-
-/** Restore original usb_mux chain without proxy */
-static void restore_usb_mux_chain(void)
-{
- memcpy(&usb_muxes[USBC_PORT_C1], &usb_mux_c1, sizeof(struct usb_mux));
-}
-
-/**
- * Check if given proxy function was called num times and if first argument was
- * pointer to the right proxy chain element. First argument is
- * const struct usb_mux * for all struct usb_mux_driver callbacks.
- */
-#define CHECK_PROXY_FAKE_CALL_CNT(proxy, num) \
- do { \
- zassert_equal(num, proxy##_fake.call_count, "%d != %d", \
- num, proxy##_fake.call_count); \
- if (num >= 1) { \
- zassert_equal(&usb_muxes[USBC_PORT_C1], \
- proxy##_fake.arg0_history[0], \
- NULL); \
- } \
- if (num >= 2) { \
- zassert_equal(&proxy_chain_1, \
- proxy##_fake.arg0_history[1], \
- NULL); \
- } \
- if (num >= 3) { \
- zassert_equal(&proxy_chain_2, \
- proxy##_fake.arg0_history[2], \
- NULL); \
- } \
- } while (0)
-
-/**
- * Do the same thing as CHECK_PROXY_FAKE_CALL_CNT and check if second argument
- * was the same as given state. hpd_update and set callback have mux_state_t
- * as second argument.
- */
-#define CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy, num, state) \
- do { \
- CHECK_PROXY_FAKE_CALL_CNT(proxy, num); \
- if (num >= 1) { \
- zassert_equal(state, \
- proxy##_fake.arg1_history[0], \
- "0x%x != 0x%x", state, \
- proxy##_fake.arg1_history[0]); \
- } \
- if (num >= 2) { \
- zassert_equal(state, \
- proxy##_fake.arg1_history[1], \
- "0x%x != 0x%x", state, \
- proxy##_fake.arg1_history[1]); \
- } \
- if (num >= 3) { \
- zassert_equal(state, \
- proxy##_fake.arg1_history[2], \
- "0x%x != 0x%x", state, \
- proxy##_fake.arg1_history[2]); \
- } \
- } while (0)
-
-/** Test usb_mux init */
-ZTEST(usb_uninit_mux, test_usb_mux_init)
-{
- int fail_on_2nd_ret[] = {EC_SUCCESS, EC_ERROR_NOT_POWERED};
-
- /* Set AP to normal state to init BB retimer */
- test_set_chipset_to_s0();
-
- /* Test successful initialisation */
- usb_mux_init(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
-
- /*
- * Test failed initialisation. Muxes that are in chain after
- * the one which fails shouldn't be called
- */
- reset_proxy_fakes();
- SET_RETURN_SEQ(proxy_init, fail_on_2nd_ret, 2);
- usb_mux_init(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 2);
-
- /* Test board init callback */
- proxy_chain_1.board_init = &mock_board_init;
- reset_proxy_fakes();
- usb_mux_init(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- /* Check if board_init was called for proxy 1 */
- zassert_equal(1, mock_board_init_fake.call_count, NULL);
- zassert_equal(&proxy_chain_1, mock_board_init_fake.arg0_history[0],
- NULL);
-
- proxy_chain_1.board_init = NULL;
-}
-
-/** Test usb_mux setting mux mode */
-ZTEST(usb_uninit_mux, test_usb_mux_set)
-{
- int fail_on_2nd_ret[] = {EC_SUCCESS, EC_ERROR_UNKNOWN};
- mux_state_t exp_mode;
-
- /* Set flag for usb mux 1 to disable polarity setting */
- proxy_chain_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
-
- /* Test setting mux mode without polarity inversion */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- /* All muxes should have the same mode */
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test setting mux mode with polarity inversion */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_TBT_COMPAT_ENABLED;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 1 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_set, NUM_OF_PROXY);
- /* usb mux 1 shouldn't be set with polarity mode, because of flag */
- zassert_equal(exp_mode | USB_PD_MUX_POLARITY_INVERTED,
- proxy_set_fake.arg1_history[0], NULL);
- zassert_equal(exp_mode, proxy_set_fake.arg1_history[1], NULL);
- zassert_equal(exp_mode | USB_PD_MUX_POLARITY_INVERTED,
- proxy_set_fake.arg1_history[2], NULL);
-
- /* Test board set callback */
- reset_proxy_fakes();
- proxy_chain_1.board_set = &mock_board_set;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
- /* Check if board_set was called for proxy 1 */
- zassert_equal(1, mock_board_set_fake.call_count, NULL);
- zassert_equal(&proxy_chain_1, mock_board_set_fake.arg0_history[0],
- NULL);
- zassert_equal(exp_mode, mock_board_set_fake.arg1_history[0], NULL);
-
- /* Test set function with error in usb_mux */
- reset_proxy_fakes();
- SET_RETURN_SEQ(proxy_set, fail_on_2nd_ret, 2);
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, 2, exp_mode);
- /* board_set shouldn't be called after fail */
- zassert_equal(0, mock_board_set_fake.call_count, NULL);
-
- proxy_chain_1.board_set = NULL;
-}
-
-/** Test usb_mux reset in g3 when required flag is set */
-ZTEST(usb_uninit_mux, test_usb_mux_reset_in_g3)
-{
- mux_state_t exp_mode = USB_PD_MUX_USB_ENABLED;
-
- /* Test that init is called */
- reset_proxy_fakes();
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Usb muxes of port 1 should stay initialised */
- usb_muxes[USBC_PORT_C1].flags = 0;
- hook_notify(HOOK_CHIPSET_HARD_OFF);
-
- /* Test that init is not called */
- reset_proxy_fakes();
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-}
-
-/** Test usb_mux getting mux mode */
-ZTEST(usb_uninit_mux, test_usb_mux_get)
-{
- int fail_on_2nd_ret[] = {EC_SUCCESS, EC_ERROR_UNKNOWN};
- mux_state_t exp_mode, mode;
-
- /* Test getting mux mode */
- exp_mode = USB_PD_MUX_USB_ENABLED;
- set_proxy_get_mux_state_seq(exp_mode);
- mode = usb_mux_get(USBC_PORT_C1);
- zassert_equal(exp_mode, mode, "mode is 0x%x (!= 0x%x)", mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
-
- /* Test getting mux mode with inverted polarisation in one mux */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_TBT_COMPAT_ENABLED;
- set_proxy_get_mux_state_seq(exp_mode);
- /* Set polarisation in usb mux 1 state */
- proxy_get_mux_state_seq[1] |= USB_PD_MUX_POLARITY_INVERTED;
- exp_mode |= USB_PD_MUX_POLARITY_INVERTED;
- mode = usb_mux_get(USBC_PORT_C1);
- zassert_equal(exp_mode, mode, "mode is 0x%x (!= 0x%x)", mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
-
- /* Test get function with error in usb_mux */
- reset_proxy_fakes();
- SET_RETURN_SEQ(proxy_get, fail_on_2nd_ret, 2);
- set_proxy_get_mux_state_seq(USB_PD_MUX_TBT_COMPAT_ENABLED);
- exp_mode = USB_PD_MUX_NONE;
- mode = usb_mux_get(USBC_PORT_C1);
- zassert_equal(exp_mode, mode, "mode is 0x%x (!= 0x%x)", mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, 2);
-}
-
-/** Test usb_mux entering and exiting low power mode */
-ZTEST(usb_init_mux, test_usb_mux_low_power_mode)
-{
- int fail_on_2nd_ret[] = {EC_SUCCESS, EC_ERROR_NOT_POWERED};
- mux_state_t exp_mode, mode;
-
- /* Test enter to low power mode */
- exp_mode = USB_PD_MUX_NONE;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_DISCONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_enter_low_power_mode, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test that nothing is changed when already in low power mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_NONE;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_DISCONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_enter_low_power_mode, 0);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_set, 0);
-
- /* Test that get return USB_PD_MUX_NONE in low power mode */
- exp_mode = USB_PD_MUX_NONE;
- mode = usb_mux_get(USBC_PORT_C1);
- zassert_equal(exp_mode, mode, "mode is 0x%x (!= 0x%x)", mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, 0);
-
- /* Test exiting from low power mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test exiting from lpm, when init end with EC_ERROR_NOT_POWERED */
- reset_proxy_fakes();
- SET_RETURN_SEQ(proxy_init, fail_on_2nd_ret, 2);
- usb_mux_init(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 2);
-
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test enter to low power mode with polarity */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_NONE;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_DISCONNECT,
- 1 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_enter_low_power_mode, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test that nothing is changed on lpm exit error */
- reset_proxy_fakes();
- SET_RETURN_SEQ(proxy_init, fail_on_2nd_ret, 2);
- exp_mode = USB_PD_MUX_USB_ENABLED;
- usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
- 0 /* = polarity */);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 2);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_set, 0);
-}
-
-/** Test usb_mux flip */
-ZTEST(usb_uninit_mux, test_usb_mux_flip)
-{
- mux_state_t exp_mode;
-
- /* Set flag for usb mux 1 to disable polarity setting */
- proxy_chain_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
-
- /* Test flip port without polarity inverted */
- exp_mode = USB_PD_MUX_USB_ENABLED;
- set_proxy_get_mux_state_seq(exp_mode);
- usb_mux_flip(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_set, NUM_OF_PROXY);
- /* usb mux 1 shouldn't be set with polarity mode, because of flag */
- zassert_equal(exp_mode | USB_PD_MUX_POLARITY_INVERTED,
- proxy_set_fake.arg1_history[0], NULL);
- zassert_equal(exp_mode, proxy_set_fake.arg1_history[1], NULL);
- zassert_equal(exp_mode | USB_PD_MUX_POLARITY_INVERTED,
- proxy_set_fake.arg1_history[2], NULL);
-
- /* Test flip port with polarity inverted */
- reset_proxy_fakes();
- exp_mode |= USB_PD_MUX_POLARITY_INVERTED;
- set_proxy_get_mux_state_seq(exp_mode);
- /* Clear polarity bit from usb mux 1 */
- proxy_get_mux_state_seq[1] &= ~USB_PD_MUX_POLARITY_INVERTED;
- exp_mode &= ~USB_PD_MUX_POLARITY_INVERTED;
- usb_mux_flip(USBC_PORT_C1);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-}
-
-ZTEST(usb_uninit_mux, test_usb_mux_hpd_update)
-{
- mux_state_t exp_mode, mode, virt_mode;
-
- /* Get current state of virtual usb mux and set mock */
- usbc1_virtual_usb_mux.driver->get(&usbc1_virtual_usb_mux, &virt_mode);
-
- /* Test no hpd level and no irq */
- exp_mode = virt_mode;
- usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
- /* Check if virtual usb mux mode is updated correctly */
- usbc1_virtual_usb_mux.driver->get(&usbc1_virtual_usb_mux, &mode);
- zassert_equal(exp_mode, mode, "virtual mux mode is 0x%x (!= 0x%x)",
- mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_hpd_update, NUM_OF_PROXY,
- exp_mode);
-
- /* Test hpd level and irq */
- reset_proxy_fakes();
- exp_mode = virt_mode | USB_PD_MUX_HPD_LVL | USB_PD_MUX_HPD_IRQ;
- usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
- /* Check if virtual usb mux mode is updated correctly */
- usbc1_virtual_usb_mux.driver->get(&usbc1_virtual_usb_mux, &mode);
- zassert_equal(exp_mode, mode, "virtual mux mode is 0x%x (!= 0x%x)",
- mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_hpd_update, NUM_OF_PROXY,
- exp_mode);
-
- /* Test no hpd level and irq */
- reset_proxy_fakes();
- exp_mode = virt_mode | USB_PD_MUX_HPD_IRQ;
- usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
- /* Check if virtual usb mux mode is updated correctly */
- usbc1_virtual_usb_mux.driver->get(&usbc1_virtual_usb_mux, &mode);
- zassert_equal(exp_mode, mode, "virtual mux mode is 0x%x (!= 0x%x)",
- mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_hpd_update, NUM_OF_PROXY,
- exp_mode);
-
- /* Test hpd level and no irq */
- reset_proxy_fakes();
- exp_mode = virt_mode | USB_PD_MUX_HPD_LVL;
- usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
- /* Check if virtual usb mux mode is updated correctly */
- usbc1_virtual_usb_mux.driver->get(&usbc1_virtual_usb_mux, &mode);
- zassert_equal(exp_mode, mode, "virtual mux mode is 0x%x (!= 0x%x)",
- mode, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_hpd_update, NUM_OF_PROXY,
- exp_mode);
-
- /* Test ps8xxx hpd update */
- usb_muxes[USBC_PORT_C1].usb_port = 1;
- usb_muxes[USBC_PORT_C1].driver = &tcpci_tcpm_usb_mux_driver;
- usb_muxes[USBC_PORT_C1].hpd_update = &ps8xxx_tcpc_update_hpd_status;
-
- reset_proxy_fakes();
- exp_mode = virt_mode | USB_PD_MUX_HPD_LVL | USB_PD_MUX_HPD_IRQ;
- usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
- /* Check if PS8xxx mux mode is updated correctly */
- tcpci_tcpm_usb_mux_driver.get(&usb_muxes[USBC_PORT_C1], &mode);
- zassert_equal(0, mode, "mux mode is 0x%x (!= 0x%x)",
- mode, 0);
-}
-
-ZTEST(usb_init_mux, test_usb_mux_fw_update_port_info)
-{
- int port_info;
-
- port_info = usb_mux_retimer_fw_update_port_info();
- zassert_true(port_info & BIT(USBC_PORT_C1),
- "fw update for port C1 should be set");
-}
-
-ZTEST(usb_init_mux, test_usb_mux_chipset_reset)
-{
- /* After this hook chipset reset functions should be called */
- hook_notify(HOOK_CHIPSET_RESET);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_chipset_reset, NUM_OF_PROXY);
-}
-
-/* Test host command get mux info */
-ZTEST(usb_init_mux, test_usb_mux_hc_mux_info)
-{
- struct ec_response_usb_pd_mux_info response;
- struct ec_params_usb_pd_mux_info params;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_USB_PD_MUX_INFO, 0, response, params);
- mux_state_t exp_mode;
-
- /* Test invalid port parameter */
- params.port = 5;
- zassert_equal(EC_RES_INVALID_PARAM, host_command_process(&args), NULL);
-
- /* Set correct port for rest of the test */
- params.port = USBC_PORT_C1;
-
- /* Test error on getting mux mode */
- set_proxy_get_mux_state_seq(USB_PD_MUX_USB_ENABLED);
- proxy_get_fake.return_val = EC_ERROR_UNKNOWN;
- zassert_equal(EC_RES_ERROR, host_command_process(&args), NULL);
-
- /* Test getting mux mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED;
- set_proxy_get_mux_state_seq(exp_mode);
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
- zassert_equal(exp_mode, response.flags, "mode is 0x%x (!= 0x%x)",
- response.flags, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
-
- /* Test clearing HPD IRQ */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED | USB_PD_MUX_HPD_LVL |
- USB_PD_MUX_HPD_IRQ;
- set_proxy_get_mux_state_seq(exp_mode);
- zassert_equal(EC_RES_SUCCESS, host_command_process(&args), NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
- zassert_equal(exp_mode, response.flags, "mode is 0x%x (!= 0x%x)",
- response.flags, exp_mode);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_hpd_update, NUM_OF_PROXY,
- USB_PD_MUX_HPD_LVL);
-}
-
-/** Test typec console command */
-ZTEST(usb_init_mux, test_usb_mux_typec_command)
-{
- mux_state_t polarity;
- mux_state_t exp_mode;
-
- /* Test error on command with no argument */
- zassert_equal(EC_ERROR_PARAM_COUNT,
- shell_execute_cmd(get_ec_shell(),
- "typec"), NULL);
-
- /*
- * Test success on passing "debug" as first argument. This will enable
- * debug prints, but it is not possible to test that in unit test
- * without accessing cprints output.
- */
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec debug"), NULL);
-
- /* Test error on port argument that is not a number */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "typec test1"), NULL);
-
- /* Test error on invalid port number */
- zassert_equal(EC_ERROR_PARAM1,
- shell_execute_cmd(get_ec_shell(),
- "typec 5"), NULL);
-
- /*
- * Test success on correct port number. Command should print mux state
- * on console, but it is not possible to check that in unit test.
- */
- set_proxy_get_mux_state_seq(USB_PD_MUX_TBT_COMPAT_ENABLED);
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec 1"), NULL);
- CHECK_PROXY_FAKE_CALL_CNT(proxy_get, NUM_OF_PROXY);
-
- /* Test setting none mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_NONE;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec 1 none"), NULL);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
- /* Mux will enter low power mode */
- CHECK_PROXY_FAKE_CALL_CNT(proxy_enter_low_power_mode, NUM_OF_PROXY);
-
- /* Polarity is set based on PD */
- polarity = polarity_rm_dts(pd_get_polarity(USBC_PORT_C1)) ?
- USB_PD_MUX_POLARITY_INVERTED : 0;
-
- /* Test setting USB mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED | polarity;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec 1 usb"), NULL);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
- /* Mux will exit low power mode */
- CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
-
- /* Test setting DP mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_DP_ENABLED | polarity;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec 1 dp"), NULL);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-
- /* Test setting dock mode */
- reset_proxy_fakes();
- exp_mode = USB_PD_MUX_USB_ENABLED | USB_PD_MUX_DP_ENABLED | polarity;
- zassert_equal(EC_SUCCESS,
- shell_execute_cmd(get_ec_shell(),
- "typec 1 dock"), NULL);
- CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
-}
-
-/** Setup proxy chain and uninit usb muxes */
-void usb_uninit_mux_before(void *state)
-{
- ARG_UNUSED(state);
- setup_usb_mux_proxy_chain();
- set_test_runner_tid();
-
- /* Makes sure that usb muxes of port 1 are not init */
- usb_muxes[USBC_PORT_C1].flags = USB_MUX_FLAG_RESETS_IN_G3;
- hook_notify(HOOK_CHIPSET_HARD_OFF);
- reset_proxy_fakes();
-}
-
-void usb_uninit_mux_after(void *state)
-{
- ARG_UNUSED(state);
- restore_usb_mux_chain();
-}
-
-/** Setup proxy chain and init usb muxes */
-void usb_init_mux_before(void *state)
-{
- ARG_UNUSED(state);
- setup_usb_mux_proxy_chain();
- set_test_runner_tid();
-
- /* Makes sure that usb muxes of port 1 are init */
- usb_mux_init(USBC_PORT_C1);
- reset_proxy_fakes();
-}
-
-void usb_init_mux_after(void *state)
-{
- ARG_UNUSED(state);
- restore_usb_mux_chain();
-}
-
-ZTEST_SUITE(usb_uninit_mux, drivers_predicate_post_main, NULL,
- usb_uninit_mux_before, usb_uninit_mux_after, NULL);
-
-ZTEST_SUITE(usb_init_mux, drivers_predicate_post_main, NULL,
- usb_init_mux_before, usb_init_mux_after, NULL);
diff --git a/zephyr/test/drivers/src/usb_pd_host_cmd.c b/zephyr/test/drivers/src/usb_pd_host_cmd.c
deleted file mode 100644
index 5eb589043c..0000000000
--- a/zephyr/test/drivers/src/usb_pd_host_cmd.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "ec_commands.h"
-#include "host_command.h"
-#include "test/drivers/test_state.h"
-
-ZTEST_USER(usb_pd_host_cmd, test_host_command_hc_pd_ports)
-{
- struct ec_response_usb_pd_ports response;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_RESPONSE(EC_CMD_USB_PD_PORTS, 0,
- response);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
- zassert_equal(response.num_ports, CONFIG_USB_PD_PORT_MAX_COUNT, NULL);
-}
-
-ZTEST_SUITE(usb_pd_host_cmd, drivers_predicate_post_main, NULL, NULL, NULL,
- NULL);
diff --git a/zephyr/test/drivers/src/utils.c b/zephyr/test/drivers/src/utils.c
deleted file mode 100644
index 5ba78043b1..0000000000
--- a/zephyr/test/drivers/src/utils.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <zephyr/shell/shell_uart.h>
-#include <zephyr/drivers/gpio/gpio_emul.h>
-
-#include "battery.h"
-#include "battery_smart.h"
-#include "emul/emul_isl923x.h"
-#include "emul/emul_smart_battery.h"
-#include "emul/tcpc/emul_tcpci_partner_src.h"
-#include "hooks.h"
-#include "power.h"
-#include "test/drivers/stubs.h"
-#include "chipset.h"
-#include "test/drivers/utils.h"
-
-#define BATTERY_ORD DT_DEP_ORD(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)
-
-void test_set_chipset_to_s0(void)
-{
- struct sbat_emul_bat_data *bat;
- struct i2c_emul *emul;
- const struct device *battery_gpio_dev =
- DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_BATT_PRES_ODL_PATH, gpios));
-
- printk("%s: Forcing power on\n", __func__);
- emul = sbat_emul_get_ptr(BATTERY_ORD);
- bat = sbat_emul_get_bat_data(emul);
-
- /*
- * Make sure that battery is in good condition to
- * not trigger hibernate in charge_state_v2.c
- * Set battery voltage to expected value and capacity to 75%. Battery
- * will not be full and accepts charging, but will not trigger
- * hibernate. Charge level is chosen arbitrary.
- */
- bat->cap = bat->full_cap * 3 / 4;
- bat->volt = battery_get_info()->voltage_normal;
- bat->design_mv = bat->volt;
-
- /* Set battery present gpio. */
- zassert_ok(gpio_emul_input_set(battery_gpio_dev,
- GPIO_BATT_PRES_ODL_PORT, 0),
- NULL);
-
- /* The easiest way to power on seems to be the shell command. */
- zassert_equal(EC_SUCCESS, shell_execute_cmd(get_ec_shell(), "power on"),
- NULL);
-
- k_sleep(K_SECONDS(1));
-
- /* Check if chipset is in correct state */
- zassert_equal(POWER_S0, power_get_state(), "Expected S0, got %d",
- power_get_state());
-}
-
-void test_set_chipset_to_g3(void)
-{
- printk("%s: Forcing shutdown\n", __func__);
- chipset_force_shutdown(CHIPSET_RESET_KB_SYSRESET);
- k_sleep(K_SECONDS(20));
- /* Check if chipset is in correct state */
- zassert_equal(POWER_G3, power_get_state(), "Expected G3, got %d",
- power_get_state());
-}
-
-void connect_source_to_port(struct tcpci_partner_data *partner,
- struct tcpci_src_emul_data *src, int pdo_index,
- const struct emul *tcpci_emul,
- const struct emul *charger_emul)
-{
- set_ac_enabled(true);
- zassume_ok(tcpci_partner_connect_to_tcpci(partner, tcpci_emul), NULL);
-
- isl923x_emul_set_adc_vbus(charger_emul,
- PDO_FIXED_GET_VOLT(src->pdo[pdo_index]));
-
- k_sleep(K_SECONDS(10));
-}
-
-void disconnect_source_from_port(const struct emul *tcpci_emul,
- const struct emul *charger_emul)
-{
- set_ac_enabled(false);
- zassume_ok(tcpci_emul_disconnect_partner(tcpci_emul), NULL);
- isl923x_emul_set_adc_vbus(charger_emul, 0);
- k_sleep(K_SECONDS(1));
-}
-
-void host_cmd_motion_sense_dump(int max_sensor_count,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_DUMP,
- .dump = {
- .max_sensor_count = max_sensor_count,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 4, *response, params);
-
- zassume_ok(host_command_process(&args),
- "Failed to get motion_sense dump");
-}
-
-int host_cmd_motion_sense_data(uint8_t sensor_num,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_DATA,
- .sensor_odr = {
- .sensor_num = sensor_num,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 4, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_info(uint8_t cmd_version, uint8_t sensor_num,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_INFO,
- .sensor_odr = {
- .sensor_num = sensor_num,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, cmd_version, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_ec_rate(uint8_t sensor_num, int data_rate_ms,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_EC_RATE,
- .ec_rate = {
- .sensor_num = sensor_num,
- .data = data_rate_ms,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_odr(uint8_t sensor_num, int32_t odr, bool round_up,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_SENSOR_ODR,
- .sensor_odr = {
- .sensor_num = sensor_num,
- .data = odr,
- .roundup = round_up,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_range(uint8_t sensor_num, int32_t range,
- bool round_up,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_SENSOR_RANGE,
- .sensor_range = {
- .sensor_num = sensor_num,
- .data = range,
- .roundup = round_up,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_offset(uint8_t sensor_num, uint16_t flags,
- int16_t temperature, int16_t offset_x,
- int16_t offset_y, int16_t offset_z,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_SENSOR_OFFSET,
- .sensor_offset = {
- .sensor_num = sensor_num,
- .flags = flags,
- .temp = temperature,
- .offset = { offset_x, offset_y, offset_z },
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_scale(uint8_t sensor_num, uint16_t flags,
- int16_t temperature, int16_t scale_x,
- int16_t scale_y, int16_t scale_z,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_SENSOR_SCALE,
- .sensor_scale = {
- .sensor_num = sensor_num,
- .flags = flags,
- .temp = temperature,
- .scale = { scale_x, scale_y, scale_z },
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_calib(uint8_t sensor_num, bool enable,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_PERFORM_CALIB,
- .perform_calib = {
- .sensor_num = sensor_num,
- .enable = enable,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_fifo_flush(uint8_t sensor_num,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_FIFO_FLUSH,
- .sensor_odr = {
- .sensor_num = sensor_num,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_fifo_info(struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_FIFO_INFO,
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_fifo_read(uint8_t buffer_length,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_FIFO_READ,
- .fifo_read = {
- .max_data_vector = buffer_length,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_int_enable(int8_t enable,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_FIFO_INT_ENABLE,
- .fifo_int_enable = {
- .enable = enable,
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-int host_cmd_motion_sense_spoof(uint8_t sensor_num, uint8_t enable,
- int16_t values0, int16_t values1,
- int16_t values2,
- struct ec_response_motion_sense *response)
-{
- struct ec_params_motion_sense params = {
- .cmd = MOTIONSENSE_CMD_SPOOF,
- .spoof = {
- .sensor_id = sensor_num,
- .spoof_enable = enable,
- .components = { values0, values1, values2 },
- },
- };
- struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
- EC_CMD_MOTION_SENSE_CMD, 1, *response, params);
-
- return host_command_process(&args);
-}
-
-void host_cmd_typec_discovery(int port, enum typec_partner_type partner_type,
- void *response, size_t response_size)
-{
- struct ec_params_typec_discovery params = {
- .port = port, .partner_type = partner_type
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_DISCOVERY, 0, params);
- /* The expected response to EC_CMD_TYPEC_DISCOVERY extends beyond the
- * bounds of struct ec_response_typec_discovery.
- */
- args.response = response;
- args.response_max = response_size;
-
- zassume_ok(host_command_process(&args),
- "Failed to get Type-C state for port %d", port);
-}
-
-K_HEAP_DEFINE(test_heap, 2048);
-
-void *test_malloc(size_t bytes)
-{
- void *mem;
-
- mem = k_heap_alloc(&test_heap, bytes, K_NO_WAIT);
-
- if (mem == NULL) {
- printk("Failed to alloc %d bytes\n", bytes);
- }
-
- return mem;
-}
-
-void test_free(void *mem)
-{
- k_heap_free(&test_heap, mem);
-}
diff --git a/zephyr/test/drivers/src/vboot_hash.c b/zephyr/test/drivers/src/vboot_hash.c
deleted file mode 100644
index ac23b95b02..0000000000
--- a/zephyr/test/drivers/src/vboot_hash.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-#include <sha256.h>
-
-#include "ec_commands.h"
-#include "host_command.h"
-#include "test/drivers/test_state.h"
-
-ZTEST_USER(vboot_hash, test_hostcmd)
-{
- struct ec_params_vboot_hash params = {
- .cmd = EC_VBOOT_HASH_START,
- .offset = 0,
- .size = 0,
- };
- struct ec_response_vboot_hash response;
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND(EC_CMD_VBOOT_HASH, 0, response, params);
-
- zassert_ok(host_command_process(&args), NULL);
- zassert_ok(args.result, NULL);
- zassert_equal(args.response_size, sizeof(response), NULL);
- zassert_equal(response.status, EC_VBOOT_HASH_STATUS_BUSY,
- "response.status = %d", response.status);
-}
-
-ZTEST_SUITE(vboot_hash, drivers_predicate_post_main, NULL, NULL, NULL, NULL);
diff --git a/zephyr/test/drivers/src/watchdog.c b/zephyr/test/drivers/src/watchdog.c
deleted file mode 100644
index 8b91247f12..0000000000
--- a/zephyr/test/drivers/src/watchdog.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/**
- * @file
- * @brief Unit Tests for watchdog.
- */
-
-#include <zephyr/device.h>
-#include <zephyr/drivers/watchdog.h>
-
-#include <zephyr/logging/log.h>
-#include <zephyr/zephyr.h>
-#include <ztest.h>
-
-#include "common.h"
-#include "ec_tasks.h"
-#include "fff.h"
-#include "hooks.h"
-#include "test/drivers/stubs.h"
-#include "watchdog.h"
-#include "test/drivers/test_state.h"
-
-#define wdt DEVICE_DT_GET(DT_CHOSEN(cros_ec_watchdog))
-
-/**
- * @brief Default watchdog timeout plus some time for it to expire.
- */
-#define DEFAULT_WDT_EXPIRY_MS \
- (CONFIG_AUX_TIMER_PERIOD_MS + (CONFIG_AUX_TIMER_PERIOD_MS / 2))
-
-/**
- * @brief Boolean to indicate watchdog alert triggered
- */
-bool wdt_warning_triggered;
-
-/**
- * @brief timer to used to validate watchdog expiries.
- */
-K_TIMER_DEFINE(ktimer, NULL, NULL);
-
-/**
- * @brief Watchdog test setup handler.
- */
-static void watchdog_before(void *state)
-{
- ARG_UNUSED(state);
- set_test_runner_tid();
- wdt_warning_triggered = false;
-
- /* When shuffling need watchdog initialized and running
- * for other tests.
- */
- (void) watchdog_init();
- (void) wdt_setup(wdt, 0);
-}
-
-/**
- * @brief Watchdog test teardown handler.
- */
-static void watchdog_after(void *state)
-{
- ARG_UNUSED(state);
- wdt_warning_triggered = false;
-}
-
-/**
- * @brief TestPurpose: Verify watchdog initialization.
- *
- * @details
- * Validate watchdog initialization.
- *
- * Expected Results
- * - Successful on first init.
- * - Failure on second init.
- */
-ZTEST(watchdog, test_watchdog_init)
-{
- int retval = EC_SUCCESS;
-
- /* Test already initialized (initialized in watchdog_before) */
- retval = watchdog_init();
- zassert_equal(-ENOMEM, retval, "Expected -ENOMEM, returned %d.",
- retval);
-}
-
-/**
- * @brief TestPurpose: Verify watchdog reload.
- *
- * @details
- * Validate watchdog is fed.
- *
- * Expected Results
- * - watchdog warning handler function is never triggered
- */
-ZTEST(watchdog, test_watchdog_reload)
-{
- int i;
- int safe_wait_ms = DEFAULT_WDT_EXPIRY_MS / 2;
-
- zassert_false(wdt_warning_triggered, "Watchdog timer expired early.");
- for (i = 0; i < 10; i++) {
- k_timer_start(&ktimer, K_MSEC(safe_wait_ms), K_NO_WAIT);
- k_busy_wait(safe_wait_ms * 1000);
- k_timer_stop(&ktimer);
- watchdog_reload();
- zassert_false(wdt_warning_triggered,
- "Watchdog timer expired unexpectedly on loop=%d",
- i);
- }
-}
-
-/**
- * @brief TestPurpose: Verify watchdog timer expires.
- *
- * @details
- * Validate watchdog timer expiry occurs after busy wait
- *
- * Expected Results
- * - Validate watchdog warning handler function is triggered.
- */
-ZTEST(watchdog, test_wdt_warning_handler)
-{
- /* Feed the dog so timer is reset */
- watchdog_reload();
-
- zassert_false(wdt_warning_triggered, "Watchdog timer expired early.");
-
- k_timer_start(&ktimer, K_MSEC(DEFAULT_WDT_EXPIRY_MS), K_NO_WAIT);
- k_busy_wait(DEFAULT_WDT_EXPIRY_MS * 1000);
- k_timer_stop(&ktimer);
-
- zassert_true(wdt_warning_triggered, "Watchdog timer did not expire.");
-}
-
-/**
- * @brief Test Suite: Verifies watchdog functionality.
- */
-ZTEST_SUITE(watchdog, drivers_predicate_post_main, NULL, watchdog_before,
- watchdog_after, NULL);