diff options
Diffstat (limited to 'zephyr/test/kingler/src/db_detect_hdmi.c')
-rw-r--r-- | zephyr/test/kingler/src/db_detect_hdmi.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/zephyr/test/kingler/src/db_detect_hdmi.c b/zephyr/test/kingler/src/db_detect_hdmi.c new file mode 100644 index 0000000000..35cf92ae5e --- /dev/null +++ b/zephyr/test/kingler/src/db_detect_hdmi.c @@ -0,0 +1,83 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "zephyr/kernel.h" +#include <zephyr/drivers/gpio/gpio_emul.h> +#include <zephyr/ztest.h> + +#include "gpio_signal.h" +#include "hooks.h" +#include "variant_db_detection.h" + +static void *db_detection_setup(void) +{ + const struct device *hdmi_prsnt_gpio = DEVICE_DT_GET( + DT_GPIO_CTLR(DT_NODELABEL(gpio_hdmi_prsnt_odl), gpios)); + const gpio_port_pins_t hdmi_prsnt_pin = + DT_GPIO_PIN(DT_NODELABEL(gpio_hdmi_prsnt_odl), gpios); + /* Set the GPIO to low to indicate the DB is HDMI */ + zassert_ok(gpio_emul_input_set(hdmi_prsnt_gpio, hdmi_prsnt_pin, 0), + NULL); + + hook_notify(HOOK_INIT); + + return NULL; +} + +ZTEST_SUITE(db_detection, NULL, db_detection_setup, NULL, NULL, NULL); + +static int interrupt_count; +void x_ec_interrupt(enum gpio_signal signal) +{ + interrupt_count++; +} + +/* test hdmi db case */ +ZTEST(db_detection, test_db_detect_hdmi) +{ + const struct device *en_hdmi_gpio = + DEVICE_DT_GET(DT_GPIO_CTLR(DT_ALIAS(gpio_en_hdmi_pwr), gpios)); + const gpio_port_pins_t en_hdmi_pin = + DT_GPIO_PIN(DT_ALIAS(gpio_en_hdmi_pwr), gpios); + const struct device *ps185_pwrdn_gpio = DEVICE_DT_GET( + DT_GPIO_CTLR(DT_ALIAS(gpio_ps185_pwrdn_odl), gpios)); + const gpio_port_pins_t ps185_pwrdn_pin = + DT_GPIO_PIN(DT_ALIAS(gpio_ps185_pwrdn_odl), gpios); + const struct device *int_x_ec_gpio = DEVICE_DT_GET( + DT_GPIO_CTLR(DT_NODELABEL(gpio_x_ec_gpio2), gpios)); + const gpio_port_pins_t int_x_ec_pin = + DT_GPIO_PIN(DT_NODELABEL(gpio_x_ec_gpio2), gpios); + + /* Check the DB type is HDMI */ + zassert_equal(CORSOLA_DB_HDMI, corsola_get_db_type(), NULL); + + /* Verify we can enable or disable hdmi power */ + zassert_ok(gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_en_hdmi_pwr), 1), + NULL); + zassert_equal(1, gpio_emul_output_get(en_hdmi_gpio, en_hdmi_pin), NULL); + zassert_ok(gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_en_hdmi_pwr), 0), + NULL); + zassert_equal(0, gpio_emul_output_get(en_hdmi_gpio, en_hdmi_pin), NULL); + + /* Verify we can change the gpio_ps185_pwrdn_odl state */ + zassert_ok(gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_ps185_pwrdn_odl), 1), + NULL); + zassert_equal(1, + gpio_emul_output_get(ps185_pwrdn_gpio, ps185_pwrdn_pin), + NULL); + zassert_ok(gpio_pin_set_dt(GPIO_DT_FROM_ALIAS(gpio_ps185_pwrdn_odl), 0), + NULL); + zassert_equal(0, + gpio_emul_output_get(ps185_pwrdn_gpio, ps185_pwrdn_pin), + NULL); + + /* Verify x_ec_interrupt is enabled */ + interrupt_count = 0; + zassert_ok(gpio_emul_input_set(int_x_ec_gpio, int_x_ec_pin, 1), NULL); + k_sleep(K_MSEC(100)); + + zassert_equal(interrupt_count, 1, "interrupt_count=%d", + interrupt_count); +} |