blob: 87fa860147327dfe7aed39e9cf7957304f5bece7 [file] [log] [blame]
/*
* Copyright (c) 2023 Andriy Gelman <andriy.gelman@gmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/clock_control.h>
#include <zephyr/ztest.h>
#define NODELABEL DT_NODELABEL(samplenode)
static const struct device *clk_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(NODELABEL));
static void *pwm_clock_setup(void)
{
int ret;
uint32_t clock_rate;
uint32_t clock_rate_dt = DT_PROP_BY_PHANDLE(NODELABEL, clocks, clock_frequency);
zassert_equal(device_is_ready(clk_dev), true, "%s: PWM clock device is not ready",
clk_dev->name);
ret = clock_control_get_rate(clk_dev, 0, &clock_rate);
zassert_equal(0, ret, "%s: Unexpected err (%d) from clock_control_get_rate",
clk_dev->name, ret);
zassert_equal(clock_rate_dt, clock_rate,
"%s: devicetree clock rate mismatch. Expected %dHz Fetched %dHz",
clk_dev->name, clock_rate_dt, clock_rate);
ret = clock_control_on(clk_dev, 0);
zassert_equal(0, ret, "%s: Unexpected err (%d) from clock_control_on", clk_dev->name, ret);
return NULL;
}
ZTEST(pwm_clock, test_clock_control_get_rate)
{
int ret;
uint32_t clock_rate;
ret = clock_control_get_rate(clk_dev, 0, &clock_rate);
zassert_equal(0, ret, "%s: Unexpected err (%d) from clock_control_get_rate",
clk_dev->name, ret);
}
ZTEST(pwm_clock, test_clock_control_set_rate)
{
int ret;
uint32_t clock_rate, clock_rate_new;
ret = clock_control_get_rate(clk_dev, 0, &clock_rate);
zassert_equal(0, ret, "%s: Unexpected err (%d) from clock_control_get_rate",
clk_dev->name, ret);
clock_rate /= 2;
ret = clock_control_set_rate(clk_dev, 0, (clock_control_subsys_rate_t)clock_rate);
zassert_equal(0, ret, "%s: unexpected err (%d) from clock_control_set_rate",
clk_dev->name, ret);
ret = clock_control_get_rate(clk_dev, 0, &clock_rate_new);
zassert_equal(0, ret, "%s: Unexpected err (%d) from clock_control_get_rate",
clk_dev->name, ret);
zassert_equal(clock_rate, clock_rate_new,
"%s: Clock rate mismatch. Expected %dHz Fetched %dHz", clk_dev->name,
clock_rate, clock_rate_new);
}
ZTEST_SUITE(pwm_clock, NULL, pwm_clock_setup, NULL, NULL, NULL);