blob: 20b3383567fe5b0f31ca0aa032c3fd26ae76b7b2 [file] [log] [blame]
/*
* Copyright (c) 2022, Commonwealth Scientific and Industrial Research
* Organisation (CSIRO) ABN 41 687 119 230.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/ztest.h>
#include <zephyr/pm/device.h>
#include <zephyr/pm/device_runtime.h>
ZTEST(device_power_domain, test_demo)
{
const struct device *const reg_0 = DEVICE_DT_GET(DT_NODELABEL(test_reg_0));
const struct device *const reg_1 = DEVICE_DT_GET(DT_NODELABEL(test_reg_1));
const struct device *const reg_chained = DEVICE_DT_GET(DT_NODELABEL(test_reg_chained));
/* Initial power state */
zassert_true(pm_device_is_powered(reg_0), "");
zassert_true(pm_device_is_powered(reg_1), "");
zassert_false(pm_device_is_powered(reg_chained), "");
TC_PRINT("Enabling runtime power management on regulators\n");
pm_device_runtime_enable(reg_0);
pm_device_runtime_enable(reg_1);
pm_device_runtime_enable(reg_chained);
/* State shouldn't have changed */
zassert_true(pm_device_is_powered(reg_0), "");
zassert_true(pm_device_is_powered(reg_1), "");
zassert_false(pm_device_is_powered(reg_chained), "");
TC_PRINT("Cycling: %s\n", reg_0->name);
/* reg_chained is powered off reg_0, so it's power state should change */
pm_device_runtime_get(reg_0);
zassert_true(pm_device_is_powered(reg_chained), "");
pm_device_runtime_put(reg_0);
zassert_false(pm_device_is_powered(reg_chained), "");
TC_PRINT("Cycling: %s\n", reg_1->name);
pm_device_runtime_get(reg_1);
zassert_false(pm_device_is_powered(reg_chained), "");
pm_device_runtime_put(reg_1);
TC_PRINT("Cycling: %s\n", reg_chained->name);
/* reg_chained should be powered after being requested */
pm_device_runtime_get(reg_chained);
zassert_true(pm_device_is_powered(reg_chained), "");
pm_device_runtime_put(reg_chained);
TC_PRINT("DONE\n");
}
ZTEST_SUITE(device_power_domain, NULL, NULL, NULL, NULL, NULL);