Skip to content

tests: drivers: nrf_clock_control: Test extended API #93141

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 37 additions & 8 deletions tests/drivers/clock_control/nrf_clock_control/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,27 +225,56 @@ static void test_request_release_clock_spec(const struct device *clk_dev,
static void test_clock_control_request(const struct test_clk_context *clk_contexts,
size_t contexts_size)
{
int ret;
const struct test_clk_context *clk_context;
size_t clk_specs_size;
const struct device *clk_dev;
const struct nrf_clock_spec *clk_spec;
const struct nrf_clock_spec *req_spec;
struct nrf_clock_spec res_spec;
uint32_t startup_time_us;

for (size_t i = 0; i < contexts_size; i++) {
clk_context = &clk_contexts[i];
clk_specs_size = clk_context->clk_specs_size;

for (size_t u = 0; u < clk_specs_size; u++) {
clk_dev = clk_context->clk_dev;
clk_spec = &clk_context->clk_specs[u];
req_spec = &clk_context->clk_specs[u];

zassert_true(device_is_ready(clk_dev),
"%s is not ready", clk_dev->name);
zassert_true(device_is_ready(clk_dev), "%s is not ready", clk_dev->name);

TC_PRINT("Applying clock (%s) spec: frequency %d, accuracy %d, precision "
TC_PRINT("Requested clock (%s) spec: frequency %d, accuracy %d, precision "
"%d\n",
clk_dev->name, clk_spec->frequency, clk_spec->accuracy,
clk_spec->precision);
test_request_release_clock_spec(clk_dev, clk_spec);
clk_dev->name, req_spec->frequency, req_spec->accuracy,
req_spec->precision);

ret = nrf_clock_control_resolve(clk_dev, req_spec, &res_spec);
zassert(ret == 0 || ret == -ENOSYS,
"minimum clock specs could not be resolved");
if (ret == 0) {
TC_PRINT("Resolved spec: frequency %d, accuracy %d, precision "
"%d\n",
res_spec.frequency, res_spec.accuracy, res_spec.precision);
} else if (ret == -ENOSYS) {
TC_PRINT("resolve not supported\n");
res_spec.frequency = req_spec->frequency;
res_spec.accuracy = req_spec->accuracy;
res_spec.precision = req_spec->precision;
}

ret = nrf_clock_control_get_startup_time(clk_dev, &res_spec,
&startup_time_us);
zassert(ret == 0 || ret == -ENOSYS, "failed to get startup time");
if (ret == 0) {
TC_PRINT("startup time for resloved spec: %uus\n", startup_time_us);
} else if (ret == -ENOSYS) {
TC_PRINT("get startup time not supported\n");
}

TC_PRINT("Applying spec: frequency %d, accuracy %d, precision "
"%d\n",
res_spec.frequency, res_spec.accuracy, res_spec.precision);
test_request_release_clock_spec(clk_dev, &res_spec);
}
}
}
Expand Down