From 0bfde7bc5d211f3a94460b7c306e8c71caa90d0f Mon Sep 17 00:00:00 2001 From: Keith Short Date: Mon, 11 Oct 2021 14:29:13 -0600 Subject: [PATCH] tests: Add PM control to dummy_driver Add the pm_control fn to the dummy_driver so the full PM API is tested. This change also bypasses all PM APIs if the device driver doesn't support PM. Signed-off-by: Keith Short --- tests/kernel/device/src/dummy_driver.c | 9 +++++++-- tests/kernel/device/src/main.c | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/tests/kernel/device/src/dummy_driver.c b/tests/kernel/device/src/dummy_driver.c index f15070bddcd..a492a52bc05 100644 --- a/tests/kernel/device/src/dummy_driver.c +++ b/tests/kernel/device/src/dummy_driver.c @@ -32,11 +32,16 @@ int dummy_init(const struct device *dev) return 0; } +int dummy_pm_control(const struct device *dev, enum pm_device_action action) +{ + return 0; +} + /** * @cond INTERNAL_HIDDEN */ -DEVICE_DEFINE(dummy_driver, DUMMY_DRIVER_NAME, &dummy_init, - NULL, NULL, NULL, POST_KERNEL, +DEVICE_DEFINE(dummy_driver, DUMMY_DRIVER_NAME, dummy_init, + dummy_pm_control, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &funcs); /** diff --git a/tests/kernel/device/src/main.c b/tests/kernel/device/src/main.c index af9d4a5253e..12021142e72 100644 --- a/tests/kernel/device/src/main.c +++ b/tests/kernel/device/src/main.c @@ -293,11 +293,18 @@ void test_dummy_device_pm(void) { const struct device *dev; int busy, ret; - enum pm_device_state device_power_state = PM_DEVICE_STATE_SUSPENDED; + enum pm_device_state device_power_state; dev = device_get_binding(DUMMY_PORT_2); zassert_false((dev == NULL), NULL); + ret = pm_device_state_get(dev, &device_power_state); + if (ret == -ENOSYS) { + TC_PRINT("Power management not supported on device"); + ztest_test_skip(); + return; + } + busy = pm_device_is_any_busy(); zassert_true((busy == 0), NULL); @@ -320,15 +327,11 @@ void test_dummy_device_pm(void) /* Set device state to PM_DEVICE_STATE_ACTIVE */ ret = pm_device_state_set(dev, PM_DEVICE_STATE_ACTIVE); - if (ret == -ENOSYS) { - TC_PRINT("Power management not supported on device"); - ztest_test_skip(); - return; - } - zassert_true((ret == 0), + zassert_true((ret == 0) || (ret == -EALREADY), "Unable to set active state to device"); + device_power_state = PM_DEVICE_STATE_SUSPENDED; ret = pm_device_state_get(dev, &device_power_state); zassert_true((ret == 0), "Unable to get active state to device"); @@ -343,7 +346,7 @@ void test_dummy_device_pm(void) ret = pm_device_state_get(dev, &device_power_state); zassert_true((ret == 0), "Unable to get suspend state to device"); - zassert_true((device_power_state == PM_DEVICE_STATE_ACTIVE), + zassert_true((device_power_state == PM_DEVICE_STATE_SUSPENDED), "Error power status"); } #else