@@ -225,27 +225,56 @@ static void test_request_release_clock_spec(const struct device *clk_dev,
225
225
static void test_clock_control_request (const struct test_clk_context * clk_contexts ,
226
226
size_t contexts_size )
227
227
{
228
+ int ret ;
228
229
const struct test_clk_context * clk_context ;
229
230
size_t clk_specs_size ;
230
231
const struct device * clk_dev ;
231
- const struct nrf_clock_spec * clk_spec ;
232
+ const struct nrf_clock_spec * req_spec ;
233
+ struct nrf_clock_spec res_spec ;
234
+ uint32_t startup_time_us ;
232
235
233
236
for (size_t i = 0 ; i < contexts_size ; i ++ ) {
234
237
clk_context = & clk_contexts [i ];
235
238
clk_specs_size = clk_context -> clk_specs_size ;
236
239
237
240
for (size_t u = 0 ; u < clk_specs_size ; u ++ ) {
238
241
clk_dev = clk_context -> clk_dev ;
239
- clk_spec = & clk_context -> clk_specs [u ];
242
+ req_spec = & clk_context -> clk_specs [u ];
240
243
241
- zassert_true (device_is_ready (clk_dev ),
242
- "%s is not ready" , clk_dev -> name );
244
+ zassert_true (device_is_ready (clk_dev ), "%s is not ready" , clk_dev -> name );
243
245
244
- TC_PRINT ("Applying clock (%s) spec: frequency %d, accuracy %d, precision "
246
+ TC_PRINT ("Requested clock (%s) spec: frequency %d, accuracy %d, precision "
245
247
"%d\n" ,
246
- clk_dev -> name , clk_spec -> frequency , clk_spec -> accuracy ,
247
- clk_spec -> precision );
248
- test_request_release_clock_spec (clk_dev , clk_spec );
248
+ clk_dev -> name , req_spec -> frequency , req_spec -> accuracy ,
249
+ req_spec -> precision );
250
+
251
+ ret = nrf_clock_control_resolve (clk_dev , req_spec , & res_spec );
252
+ if (ret == 0 ) {
253
+ TC_PRINT ("Resolved spec: frequency %d, accuracy %d, precision "
254
+ "%d\n" ,
255
+ res_spec .frequency , res_spec .accuracy , res_spec .precision );
256
+ } else if (ret == - ENOSYS ) {
257
+ TC_PRINT ("resolve not supported\n" );
258
+ res_spec .frequency = req_spec -> frequency ;
259
+ res_spec .accuracy = req_spec -> accuracy ;
260
+ res_spec .precision = req_spec -> precision ;
261
+ }
262
+ zassert (ret == 0 || ret == - ENOSYS ,
263
+ "minimum clock specs could not be resolved" );
264
+
265
+ ret = nrf_clock_control_get_startup_time (clk_dev , & res_spec ,
266
+ & startup_time_us );
267
+ if (ret == 0 ) {
268
+ printk ("startup time for resloved spec: %uus\n" , startup_time_us );
269
+ } else if (ret == - ENOSYS ) {
270
+ printk ("get startup time not supported\n" );
271
+ }
272
+ zassert (ret == 0 || ret == - ENOSYS , "failed to get startup time" );
273
+
274
+ TC_PRINT ("Applying spec: frequency %d, accuracy %d, precision "
275
+ "%d\n" ,
276
+ res_spec .frequency , res_spec .accuracy , res_spec .precision );
277
+ test_request_release_clock_spec (clk_dev , & res_spec );
249
278
}
250
279
}
251
280
}
0 commit comments