/*
 * Copyright (c) 2022, Commonwealth Scientific and Industrial Research
 * Organisation (CSIRO) ABN 41 687 119 230.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <ztest.h>
#include <pm/device.h>
#include <pm/device_runtime.h>

static void test_demo(void)
{
	const struct device *reg_0 = DEVICE_DT_GET(DT_NODELABEL(test_reg_0));
	const struct device *reg_1 = DEVICE_DT_GET(DT_NODELABEL(test_reg_1));
	const struct device *reg_chained = DEVICE_DT_GET(DT_NODELABEL(test_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);

	TC_PRINT("Cycling: %s\n", reg_0->name);

	pm_device_runtime_get(reg_0);
	pm_device_runtime_put(reg_0);

	TC_PRINT("Cycling: %s\n", reg_1->name);

	pm_device_runtime_get(reg_1);
	pm_device_runtime_put(reg_1);

	TC_PRINT("Cycling: %s\n", reg_chained->name);

	pm_device_runtime_get(reg_chained);
	pm_device_runtime_put(reg_chained);

	TC_PRINT("DONE\n");
}

void test_main(void)
{
	ztest_test_suite(device_power_domain,
			 ztest_unit_test(test_demo));
	ztest_run_test_suite(device_power_domain);
}
