zephyr/tests/subsys/pm/device_runtime_api/src/test_driver.c
Gerard Marull-Paretas ddc168fa78 pm: s/PM_DEVICE_(DT_(INST))_REF/PM_DEVICE_(DT_(INST))_GET
In order to align with macros used to obtain a device reference (e.g.
DEVICE_DT_GET), align the PM macros to use "GET" instead of "REF". This
change should have low impact since no official release has gone out yet
with the "REF" macros.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-01-18 12:14:06 -05:00

72 lines
1.3 KiB
C

/*
* Copyright (c) 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "test_driver.h"
#include <kernel.h>
#include <pm/device.h>
struct test_driver_data {
bool ongoing;
bool async;
struct k_sem sync;
};
static int test_driver_action(const struct device *dev,
enum pm_device_action action)
{
struct test_driver_data *data = dev->data;
data->ongoing = true;
if (data->async) {
k_sem_take(&data->sync, K_FOREVER);
data->async = false;
}
data->ongoing = false;
return 0;
}
void test_driver_pm_async(const struct device *dev)
{
struct test_driver_data *data = dev->data;
data->async = true;
}
void test_driver_pm_done(const struct device *dev)
{
struct test_driver_data *data = dev->data;
k_sem_give(&data->sync);
}
bool test_driver_pm_ongoing(const struct device *dev)
{
struct test_driver_data *data = dev->data;
return data->ongoing;
}
int test_driver_init(const struct device *dev)
{
struct test_driver_data *data = dev->data;
k_sem_init(&data->sync, 0, 1);
return 0;
}
PM_DEVICE_DEFINE(test_driver, test_driver_action);
static struct test_driver_data data;
DEVICE_DEFINE(test_driver, "test_driver", &test_driver_init,
PM_DEVICE_GET(test_driver), &data, NULL, POST_KERNEL,
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, NULL);