1 /*
2  * Copyright (c) 2022 Nordic Semiconductor ASA
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #include <zephyr/drivers/regulator.h>
7 #include <zephyr/drivers/regulator/fake.h>
8 #include <zephyr/ztest.h>
9 
10 DEFINE_FFF_GLOBALS;
11 
12 static const struct device *const parent = DEVICE_DT_GET(DT_NODELABEL(regulator));
13 /* REG0: no Devicetree properties */
14 static const struct device *const reg0 = DEVICE_DT_GET(DT_NODELABEL(reg0));
15 /* REG1: regulator-always-on */
16 static const struct device *const reg1 = DEVICE_DT_GET(DT_NODELABEL(reg1));
17 /* REG2: regulator-boot-on */
18 static const struct device *const reg2 = DEVICE_DT_GET(DT_NODELABEL(reg2));
19 /* REG3: regulator-max/min-microvolt/microamp, regulator-allowed-modes */
20 static const struct device *const reg3 = DEVICE_DT_GET(DT_NODELABEL(reg3));
21 /* REG4: regulator-boot-off */
22 static const struct device *const reg4 = DEVICE_DT_GET(DT_NODELABEL(reg4));
23 /* REG5: regulator-boot-off and is_enabled */
24 static const struct device *const reg5 = DEVICE_DT_GET(DT_NODELABEL(reg5));
25 
26 static DEVICE_API(regulator, dummy_regulator_api);
27 static DEVICE_API(regulator_parent, dummy_regulator_parent_api);
28 
29 DEVICE_DEFINE(dummy_regulator, "dummy_regulator", NULL, NULL, NULL, NULL, POST_KERNEL,
30 	      CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &dummy_regulator_api);
31 DEVICE_DEFINE(dummy_regulator_parent, "dummy_regulator_parent", NULL, NULL, NULL, NULL, POST_KERNEL,
32 	      CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &dummy_regulator_parent_api);
33 
34 /* Dummy regulator: empty API */
35 static const struct device *const dummy_reg = DEVICE_GET(dummy_regulator);
36 /* Dummy parent regulator: empty API */
37 static const struct device *const dummy_parent = DEVICE_GET(dummy_regulator_parent);
38 
ZTEST(regulator_api,test_parent_dvs_state_set_not_implemented)39 ZTEST(regulator_api, test_parent_dvs_state_set_not_implemented)
40 {
41 	int ret = regulator_parent_dvs_state_set(dummy_parent, 0);
42 
43 	zassert_equal(ret, -ENOSYS);
44 }
45 
ZTEST(regulator_api,test_parent_dvs_state_set_ok)46 ZTEST(regulator_api, test_parent_dvs_state_set_ok)
47 {
48 	RESET_FAKE(regulator_parent_fake_dvs_state_set);
49 
50 	regulator_parent_fake_dvs_state_set_fake.return_val = 0;
51 
52 	zassert_equal(regulator_parent_dvs_state_set(parent, 0U), 0);
53 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.arg0_val, parent);
54 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.arg1_val, 0U);
55 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.call_count, 1U);
56 }
57 
ZTEST(regulator_api,test_parent_dvs_state_set_fail)58 ZTEST(regulator_api, test_parent_dvs_state_set_fail)
59 {
60 	RESET_FAKE(regulator_parent_fake_dvs_state_set);
61 
62 	regulator_parent_fake_dvs_state_set_fake.return_val = -ENOTSUP;
63 
64 	zassert_equal(regulator_parent_dvs_state_set(parent, 0U), -ENOTSUP);
65 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.arg0_val, parent);
66 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.arg1_val, 0U);
67 	zassert_equal(regulator_parent_fake_dvs_state_set_fake.call_count, 1U);
68 }
69 
ZTEST(regulator_api,test_parent_ship_mode_not_implemented)70 ZTEST(regulator_api, test_parent_ship_mode_not_implemented)
71 {
72 	int ret = regulator_parent_ship_mode(dummy_parent);
73 
74 	zassert_equal(ret, -ENOSYS);
75 }
76 
ZTEST(regulator_api,test_parent_ship_mode_ok)77 ZTEST(regulator_api, test_parent_ship_mode_ok)
78 {
79 	RESET_FAKE(regulator_parent_fake_ship_mode);
80 
81 	regulator_parent_fake_ship_mode_fake.return_val = 0;
82 
83 	zassert_equal(regulator_parent_ship_mode(parent), 0);
84 	zassert_equal(regulator_parent_fake_ship_mode_fake.arg0_val, parent);
85 	zassert_equal(regulator_parent_fake_ship_mode_fake.call_count, 1U);
86 }
87 
ZTEST(regulator_api,test_parent_ship_mode_fail)88 ZTEST(regulator_api, test_parent_ship_mode_fail)
89 {
90 	RESET_FAKE(regulator_parent_fake_ship_mode);
91 
92 	regulator_parent_fake_ship_mode_fake.return_val = -ENOTSUP;
93 
94 	zassert_equal(regulator_parent_ship_mode(parent), -ENOTSUP);
95 	zassert_equal(regulator_parent_fake_ship_mode_fake.arg0_val, parent);
96 	zassert_equal(regulator_parent_fake_ship_mode_fake.call_count, 1U);
97 }
98 
ZTEST(regulator_api,test_common_config)99 ZTEST(regulator_api, test_common_config)
100 {
101 	const struct regulator_common_config *config;
102 
103 	/* reg0: all defaults */
104 	config = reg0->config;
105 	zassert_equal(config->min_uv, INT32_MIN);
106 	zassert_equal(config->max_uv, INT32_MAX);
107 	zassert_equal(config->min_ua, INT32_MIN);
108 	zassert_equal(config->max_ua, INT32_MAX);
109 	zassert_equal(config->allowed_modes_cnt, 0U);
110 	zassert_equal(config->initial_mode, REGULATOR_INITIAL_MODE_UNKNOWN);
111 	zassert_equal(REGULATOR_ACTIVE_DISCHARGE_GET_BITS(config->flags),
112 		      REGULATOR_ACTIVE_DISCHARGE_DEFAULT);
113 
114 	/* reg1: regulator-always-on */
115 	config = reg1->config;
116 	zassert_equal(config->flags & REGULATOR_ALWAYS_ON, REGULATOR_ALWAYS_ON);
117 
118 	/* reg2: regulator-boot-on */
119 	config = reg2->config;
120 	zassert_equal(config->flags & REGULATOR_BOOT_ON, REGULATOR_BOOT_ON);
121 
122 	/* reg3: regulator-min/max-microvolt/microamp */
123 	config = reg3->config;
124 	zassert_equal(config->min_uv, 100);
125 	zassert_equal(config->max_uv, 200);
126 	zassert_equal(config->min_ua, 100);
127 	zassert_equal(config->max_ua, 200);
128 	zassert_equal(config->allowed_modes[0], 1U);
129 	zassert_equal(config->allowed_modes[1], 10U);
130 	zassert_equal(config->allowed_modes_cnt, 2U);
131 	zassert_equal(REGULATOR_ACTIVE_DISCHARGE_GET_BITS(config->flags), 1U);
132 
133 	/* reg4: regulator-boot-off */
134 	config = reg4->config;
135 	zassert_equal(config->flags & REGULATOR_BOOT_OFF, REGULATOR_BOOT_OFF);
136 }
137 
ZTEST(regulator_api,test_common_is_init_enabled)138 ZTEST(regulator_api, test_common_is_init_enabled)
139 {
140 	zassert_false(regulator_common_is_init_enabled(reg0));
141 	zassert_true(regulator_common_is_init_enabled(reg1));
142 	zassert_true(regulator_common_is_init_enabled(reg2));
143 	zassert_false(regulator_common_is_init_enabled(reg3));
144 	zassert_false(regulator_common_is_init_enabled(reg4));
145 	zassert_false(regulator_common_is_init_enabled(reg5));
146 }
147 
ZTEST(regulator_api,test_enable_disable)148 ZTEST(regulator_api, test_enable_disable)
149 {
150 	RESET_FAKE(regulator_fake_enable);
151 	RESET_FAKE(regulator_fake_disable);
152 
153 	/* REG1 already enabled, not enabled again */
154 	zassert_equal(regulator_enable(reg1), 0);
155 	zassert_equal(regulator_fake_enable_fake.call_count, 0U);
156 
157 	/* REG1: can't be disabled */
158 	zassert_equal(regulator_disable(reg1), 0);
159 	zassert_equal(regulator_fake_disable_fake.call_count, 0U);
160 
161 	/* REG2: can be disabled */
162 	zassert_equal(regulator_disable(reg2), 0);
163 	zassert_equal(regulator_fake_disable_fake.arg0_val, reg2);
164 	zassert_equal(regulator_fake_disable_fake.call_count, 1U);
165 
166 	/* REG2: enable again */
167 	zassert_equal(regulator_enable(reg2), 0);
168 	zassert_equal(regulator_fake_enable_fake.arg0_val, reg2);
169 	zassert_equal(regulator_fake_enable_fake.call_count, 1U);
170 
171 	/* REG0: enable */
172 	zassert_equal(regulator_enable(reg0), 0);
173 	zassert_equal(regulator_fake_enable_fake.arg0_val, reg0);
174 	zassert_equal(regulator_fake_enable_fake.call_count, 2U);
175 
176 	/* REG0: disable */
177 	zassert_equal(regulator_disable(reg0), 0);
178 	zassert_equal(regulator_fake_disable_fake.arg0_val, reg0);
179 	zassert_equal(regulator_fake_disable_fake.call_count, 2U);
180 
181 	/* REG5: disabled at boot, can be enabled again */
182 	zassert_equal(regulator_enable(reg5), 0);
183 	zassert_equal(regulator_fake_enable_fake.call_count, 3U);
184 
185 	/* REG5: disable */
186 	zassert_equal(regulator_disable(reg5), 0);
187 	zassert_equal(regulator_fake_disable_fake.call_count, 3U);
188 }
189 
ZTEST(regulator_api,test_count_voltages_not_implemented)190 ZTEST(regulator_api, test_count_voltages_not_implemented)
191 {
192 	unsigned int count = regulator_count_voltages(dummy_reg);
193 
194 	zassert_equal(count, 0U);
195 }
196 
ZTEST(regulator_api,test_count_voltages)197 ZTEST(regulator_api, test_count_voltages)
198 {
199 	RESET_FAKE(regulator_fake_count_voltages);
200 
201 	regulator_fake_count_voltages_fake.return_val = 10U;
202 
203 	zassert_equal(regulator_count_voltages(reg0), 10U);
204 	zassert_equal(regulator_fake_count_voltages_fake.arg0_val, reg0);
205 	zassert_equal(regulator_fake_count_voltages_fake.call_count, 1U);
206 }
207 
ZTEST(regulator_api,test_list_voltage_not_implemented)208 ZTEST(regulator_api, test_list_voltage_not_implemented)
209 {
210 	int ret = regulator_list_voltage(dummy_reg, 0, NULL);
211 
212 	zassert_equal(ret, -EINVAL);
213 }
214 
list_voltage_ok(const struct device * dev,unsigned int idx,int32_t * volt_uv)215 static int list_voltage_ok(const struct device *dev, unsigned int idx, int32_t *volt_uv)
216 {
217 	ARG_UNUSED(dev);
218 	ARG_UNUSED(idx);
219 
220 	*volt_uv = 100;
221 
222 	return 0;
223 }
224 
ZTEST(regulator_api,test_list_voltage_valid)225 ZTEST(regulator_api, test_list_voltage_valid)
226 {
227 	int32_t volt_uv;
228 
229 	RESET_FAKE(regulator_fake_list_voltage);
230 
231 	regulator_fake_list_voltage_fake.custom_fake = list_voltage_ok;
232 
233 	zassert_equal(regulator_list_voltage(reg0, 0, &volt_uv), 0);
234 	zassert_equal(volt_uv, 100);
235 	zassert_equal(regulator_fake_list_voltage_fake.call_count, 1U);
236 	zassert_equal(regulator_fake_list_voltage_fake.arg0_val, reg0);
237 	zassert_equal(regulator_fake_list_voltage_fake.arg1_val, 0);
238 	zassert_equal(regulator_fake_list_voltage_fake.arg2_val, &volt_uv);
239 }
240 
list_voltage_invalid(const struct device * dev,unsigned int idx,int32_t * volt_uv)241 static int list_voltage_invalid(const struct device *dev, unsigned int idx, int32_t *volt_uv)
242 {
243 	ARG_UNUSED(dev);
244 	ARG_UNUSED(idx);
245 	ARG_UNUSED(volt_uv);
246 
247 	return -EINVAL;
248 }
249 
ZTEST(regulator_api,test_list_voltage_invalid)250 ZTEST(regulator_api, test_list_voltage_invalid)
251 {
252 	RESET_FAKE(regulator_fake_list_voltage);
253 
254 	regulator_fake_list_voltage_fake.custom_fake = list_voltage_invalid;
255 
256 	zassert_equal(regulator_list_voltage(reg0, 0, NULL), -EINVAL);
257 	zassert_equal(regulator_fake_list_voltage_fake.call_count, 1U);
258 	zassert_equal(regulator_fake_list_voltage_fake.arg0_val, reg0);
259 	zassert_equal(regulator_fake_list_voltage_fake.arg1_val, 0);
260 	zassert_equal(regulator_fake_list_voltage_fake.arg2_val, NULL);
261 }
262 
list_voltage(const struct device * dev,unsigned int idx,int32_t * volt_uv)263 static int list_voltage(const struct device *dev, unsigned int idx, int32_t *volt_uv)
264 {
265 	ARG_UNUSED(dev);
266 
267 	switch (idx) {
268 	case 0U:
269 		*volt_uv = 100;
270 		break;
271 	case 1U:
272 		*volt_uv = 200;
273 		break;
274 	case 2U:
275 		*volt_uv = 300;
276 		break;
277 	case 3U:
278 		*volt_uv = 400;
279 		break;
280 	default:
281 		return -EINVAL;
282 	}
283 
284 	return 0;
285 }
286 
ZTEST(regulator_api,test_is_supported_voltage)287 ZTEST(regulator_api, test_is_supported_voltage)
288 {
289 	RESET_FAKE(regulator_fake_count_voltages);
290 	RESET_FAKE(regulator_fake_list_voltage);
291 
292 	regulator_fake_count_voltages_fake.return_val = 4U;
293 	regulator_fake_list_voltage_fake.custom_fake = list_voltage;
294 
295 	zassert_false(regulator_is_supported_voltage(reg0, 0, 50));
296 	zassert_true(regulator_is_supported_voltage(reg0, 50, 100));
297 	zassert_true(regulator_is_supported_voltage(reg0, 100, 200));
298 	zassert_true(regulator_is_supported_voltage(reg0, 150, 200));
299 	zassert_true(regulator_is_supported_voltage(reg0, 200, 300));
300 	zassert_true(regulator_is_supported_voltage(reg0, 300, 400));
301 	zassert_true(regulator_is_supported_voltage(reg0, 400, 500));
302 	zassert_false(regulator_is_supported_voltage(reg0, 500, 600));
303 
304 	zassert_not_equal(regulator_fake_count_voltages_fake.call_count, 0U);
305 	zassert_not_equal(regulator_fake_list_voltage_fake.call_count, 0U);
306 }
307 
ZTEST(regulator_api,test_is_supported_voltage_dt_limit)308 ZTEST(regulator_api, test_is_supported_voltage_dt_limit)
309 {
310 	RESET_FAKE(regulator_fake_count_voltages);
311 	RESET_FAKE(regulator_fake_list_voltage);
312 
313 	regulator_fake_count_voltages_fake.return_val = 4U;
314 	regulator_fake_list_voltage_fake.custom_fake = list_voltage;
315 
316 	zassert_false(regulator_is_supported_voltage(reg3, 0, 50));
317 	zassert_true(regulator_is_supported_voltage(reg3, 50, 100));
318 	zassert_true(regulator_is_supported_voltage(reg3, 100, 200));
319 	zassert_true(regulator_is_supported_voltage(reg3, 150, 200));
320 	zassert_true(regulator_is_supported_voltage(reg3, 200, 300));
321 	zassert_false(regulator_is_supported_voltage(reg3, 300, 400));
322 	zassert_false(regulator_is_supported_voltage(reg3, 400, 500));
323 	zassert_false(regulator_is_supported_voltage(reg3, 500, 600));
324 
325 	zassert_not_equal(regulator_fake_count_voltages_fake.call_count, 0U);
326 	zassert_not_equal(regulator_fake_list_voltage_fake.call_count, 0U);
327 }
328 
ZTEST(regulator_api,test_set_voltage_not_implemented)329 ZTEST(regulator_api, test_set_voltage_not_implemented)
330 {
331 	int ret = regulator_set_voltage(dummy_reg, 0, 0);
332 
333 	zassert_equal(ret, -ENOSYS);
334 }
335 
ZTEST(regulator_api,test_set_voltage_ok)336 ZTEST(regulator_api, test_set_voltage_ok)
337 {
338 	RESET_FAKE(regulator_fake_set_voltage);
339 
340 	regulator_fake_set_voltage_fake.return_val = 0;
341 
342 	zassert_equal(regulator_set_voltage(reg0, 0, 0), 0);
343 	zassert_equal(regulator_fake_set_voltage_fake.arg0_val, reg0);
344 	zassert_equal(regulator_fake_set_voltage_fake.arg1_val, 0);
345 	zassert_equal(regulator_fake_set_voltage_fake.arg2_val, 0);
346 	zassert_equal(regulator_fake_set_voltage_fake.call_count, 1U);
347 }
348 
ZTEST(regulator_api,test_set_voltage_fail)349 ZTEST(regulator_api, test_set_voltage_fail)
350 {
351 	RESET_FAKE(regulator_fake_set_voltage);
352 
353 	regulator_fake_set_voltage_fake.return_val = -EINVAL;
354 
355 	zassert_equal(regulator_set_voltage(reg0, 0, 0), -EINVAL);
356 	zassert_equal(regulator_fake_set_voltage_fake.arg0_val, reg0);
357 	zassert_equal(regulator_fake_set_voltage_fake.arg1_val, 0);
358 	zassert_equal(regulator_fake_set_voltage_fake.arg2_val, 0);
359 	zassert_equal(regulator_fake_set_voltage_fake.call_count, 1U);
360 }
361 
ZTEST(regulator_api,test_set_voltage_dt_limit)362 ZTEST(regulator_api, test_set_voltage_dt_limit)
363 {
364 	RESET_FAKE(regulator_fake_set_voltage);
365 
366 	regulator_fake_set_voltage_fake.return_val = 0;
367 
368 	zassert_equal(regulator_set_voltage(reg3, 300, 400), -EINVAL);
369 	zassert_equal(regulator_fake_set_voltage_fake.call_count, 0U);
370 }
371 
ZTEST(regulator_api,test_get_voltage_not_implemented)372 ZTEST(regulator_api, test_get_voltage_not_implemented)
373 {
374 	int ret = regulator_get_voltage(dummy_reg, NULL);
375 
376 	zassert_equal(ret, -ENOSYS);
377 }
378 
get_voltage_ok(const struct device * dev,int32_t * volt_uv)379 static int get_voltage_ok(const struct device *dev, int32_t *volt_uv)
380 {
381 	ARG_UNUSED(dev);
382 
383 	*volt_uv = 100;
384 
385 	return 0;
386 }
387 
ZTEST(regulator_api,test_get_voltage_ok)388 ZTEST(regulator_api, test_get_voltage_ok)
389 {
390 	int32_t volt_uv;
391 
392 	RESET_FAKE(regulator_fake_get_voltage);
393 
394 	regulator_fake_get_voltage_fake.custom_fake = get_voltage_ok;
395 
396 	zassert_equal(regulator_get_voltage(reg0, &volt_uv), 0);
397 	zassert_equal(volt_uv, 100);
398 	zassert_equal(regulator_fake_get_voltage_fake.call_count, 1U);
399 	zassert_equal(regulator_fake_get_voltage_fake.arg0_val, reg0);
400 	zassert_equal(regulator_fake_get_voltage_fake.arg1_val, &volt_uv);
401 }
402 
get_voltage_fail(const struct device * dev,int32_t * volt_uv)403 static int get_voltage_fail(const struct device *dev, int32_t *volt_uv)
404 {
405 	ARG_UNUSED(dev);
406 	ARG_UNUSED(volt_uv);
407 
408 	return -EIO;
409 }
410 
ZTEST(regulator_api,test_get_voltage_error)411 ZTEST(regulator_api, test_get_voltage_error)
412 {
413 	RESET_FAKE(regulator_fake_get_voltage);
414 
415 	regulator_fake_get_voltage_fake.custom_fake = get_voltage_fail;
416 
417 	zassert_equal(regulator_get_voltage(reg0, NULL), -EIO);
418 	zassert_equal(regulator_fake_get_voltage_fake.call_count, 1U);
419 	zassert_equal(regulator_fake_get_voltage_fake.arg0_val, reg0);
420 	zassert_equal(regulator_fake_get_voltage_fake.arg1_val, NULL);
421 }
422 
ZTEST(regulator_api,test_count_current_limits_not_implemented)423 ZTEST(regulator_api, test_count_current_limits_not_implemented)
424 {
425 	unsigned int ret = regulator_count_current_limits(dummy_reg);
426 
427 	zassert_equal(ret, 0);
428 }
429 
ZTEST(regulator_api,test_count_current_limits_ok)430 ZTEST(regulator_api, test_count_current_limits_ok)
431 {
432 	RESET_FAKE(regulator_fake_count_current_limits);
433 
434 	regulator_fake_count_current_limits_fake.return_val = 10;
435 
436 	zassert_equal(regulator_count_current_limits(reg0), 10U);
437 	zassert_equal(regulator_fake_count_current_limits_fake.arg0_val, reg0);
438 	zassert_equal(regulator_fake_count_current_limits_fake.call_count, 1U);
439 }
440 
ZTEST(regulator_api,test_count_current_limits_fail)441 ZTEST(regulator_api, test_count_current_limits_fail)
442 {
443 	RESET_FAKE(regulator_fake_count_current_limits);
444 
445 	regulator_fake_count_current_limits_fake.return_val = -EINVAL;
446 
447 	zassert_equal(regulator_count_current_limits(reg0), -EINVAL);
448 	zassert_equal(regulator_fake_count_current_limits_fake.arg0_val, reg0);
449 	zassert_equal(regulator_fake_count_current_limits_fake.call_count, 1U);
450 }
451 
ZTEST(regulator_api,test_list_current_limit_not_implemented)452 ZTEST(regulator_api, test_list_current_limit_not_implemented)
453 {
454 	zassert_equal(regulator_list_current_limit(dummy_reg, 0, NULL), -EINVAL);
455 }
456 
list_current_limit_ok(const struct device * dev,unsigned int idx,int32_t * curr_ua)457 static int list_current_limit_ok(const struct device *dev, unsigned int idx, int32_t *curr_ua)
458 {
459 	ARG_UNUSED(dev);
460 	ARG_UNUSED(idx);
461 
462 	*curr_ua = 100;
463 
464 	return 0;
465 }
466 
ZTEST(regulator_api,test_list_current_limit_ok)467 ZTEST(regulator_api, test_list_current_limit_ok)
468 {
469 	RESET_FAKE(regulator_fake_list_current_limit);
470 
471 	int32_t curr_ua;
472 
473 	regulator_fake_list_current_limit_fake.custom_fake = list_current_limit_ok;
474 
475 	zassert_equal(regulator_list_current_limit(reg0, 1, &curr_ua), 0);
476 	zassert_equal(curr_ua, 100);
477 	zassert_equal(regulator_fake_list_current_limit_fake.arg0_val, reg0);
478 	zassert_equal(regulator_fake_list_current_limit_fake.arg1_val, 1U);
479 	zassert_equal(regulator_fake_list_current_limit_fake.arg2_val, &curr_ua);
480 	zassert_equal(regulator_fake_list_current_limit_fake.call_count, 1U);
481 }
482 
ZTEST(regulator_api,test_list_current_limit_fail)483 ZTEST(regulator_api, test_list_current_limit_fail)
484 {
485 	RESET_FAKE(regulator_fake_list_current_limit);
486 
487 	int32_t curr_ua;
488 
489 	regulator_fake_list_current_limit_fake.return_val = -EIO;
490 
491 	zassert_equal(regulator_list_current_limit(reg0, 1, &curr_ua), -EIO);
492 	zassert_equal(regulator_fake_list_current_limit_fake.arg0_val, reg0);
493 	zassert_equal(regulator_fake_list_current_limit_fake.arg1_val, 1U);
494 	zassert_equal(regulator_fake_list_current_limit_fake.arg2_val, &curr_ua);
495 	zassert_equal(regulator_fake_list_current_limit_fake.call_count, 1U);
496 }
497 
ZTEST(regulator_api,test_set_current_limit_not_implemented)498 ZTEST(regulator_api, test_set_current_limit_not_implemented)
499 {
500 	int ret = regulator_set_current_limit(dummy_reg, 0, 0);
501 
502 	zassert_equal(ret, -ENOSYS);
503 }
504 
ZTEST(regulator_api,test_set_current_limit_ok)505 ZTEST(regulator_api, test_set_current_limit_ok)
506 {
507 	RESET_FAKE(regulator_fake_set_current_limit);
508 
509 	regulator_fake_set_current_limit_fake.return_val = 0;
510 
511 	zassert_equal(regulator_set_current_limit(reg0, 0, 0), 0);
512 	zassert_equal(regulator_fake_set_current_limit_fake.arg0_val, reg0);
513 	zassert_equal(regulator_fake_set_current_limit_fake.arg1_val, 0);
514 	zassert_equal(regulator_fake_set_current_limit_fake.arg2_val, 0);
515 	zassert_equal(regulator_fake_set_current_limit_fake.call_count, 1U);
516 }
517 
ZTEST(regulator_api,test_set_current_limit_fail)518 ZTEST(regulator_api, test_set_current_limit_fail)
519 {
520 	RESET_FAKE(regulator_fake_set_current_limit);
521 
522 	regulator_fake_set_current_limit_fake.return_val = -EINVAL;
523 
524 	zassert_equal(regulator_set_current_limit(reg0, 0, 0), -EINVAL);
525 	zassert_equal(regulator_fake_set_current_limit_fake.arg0_val, reg0);
526 	zassert_equal(regulator_fake_set_current_limit_fake.arg1_val, 0);
527 	zassert_equal(regulator_fake_set_current_limit_fake.arg2_val, 0);
528 	zassert_equal(regulator_fake_set_current_limit_fake.call_count, 1U);
529 }
530 
ZTEST(regulator_api,test_set_current_limit_dt_limit)531 ZTEST(regulator_api, test_set_current_limit_dt_limit)
532 {
533 	RESET_FAKE(regulator_fake_set_current_limit);
534 
535 	regulator_fake_set_current_limit_fake.return_val = 0;
536 
537 	zassert_equal(regulator_set_current_limit(reg3, 300, 400), -EINVAL);
538 	zassert_equal(regulator_fake_set_current_limit_fake.call_count, 0U);
539 }
540 
ZTEST(regulator_api,test_get_current_limit_not_implemented)541 ZTEST(regulator_api, test_get_current_limit_not_implemented)
542 {
543 	int ret = regulator_get_current_limit(dummy_reg, NULL);
544 
545 	zassert_equal(ret, -ENOSYS);
546 }
547 
get_current_limit_ok(const struct device * dev,int32_t * curr_ua)548 static int get_current_limit_ok(const struct device *dev, int32_t *curr_ua)
549 {
550 	ARG_UNUSED(dev);
551 
552 	*curr_ua = 100;
553 
554 	return 0;
555 }
556 
ZTEST(regulator_api,test_get_current_limit_ok)557 ZTEST(regulator_api, test_get_current_limit_ok)
558 {
559 	int32_t curr_ua;
560 
561 	RESET_FAKE(regulator_fake_get_current_limit);
562 
563 	regulator_fake_get_current_limit_fake.custom_fake = get_current_limit_ok;
564 
565 	zassert_equal(regulator_get_current_limit(reg0, &curr_ua), 0);
566 	zassert_equal(curr_ua, 100);
567 	zassert_equal(regulator_fake_get_current_limit_fake.call_count, 1U);
568 	zassert_equal(regulator_fake_get_current_limit_fake.arg0_val, reg0);
569 	zassert_equal(regulator_fake_get_current_limit_fake.arg1_val, &curr_ua);
570 }
571 
get_current_limit_fail(const struct device * dev,int32_t * curr_ua)572 static int get_current_limit_fail(const struct device *dev, int32_t *curr_ua)
573 {
574 	ARG_UNUSED(dev);
575 	ARG_UNUSED(curr_ua);
576 
577 	return -EIO;
578 }
579 
ZTEST(regulator_api,test_get_current_limit_error)580 ZTEST(regulator_api, test_get_current_limit_error)
581 {
582 	RESET_FAKE(regulator_fake_get_current_limit);
583 
584 	regulator_fake_get_current_limit_fake.custom_fake = get_current_limit_fail;
585 
586 	zassert_equal(regulator_get_current_limit(reg0, NULL), -EIO);
587 	zassert_equal(regulator_fake_get_current_limit_fake.call_count, 1U);
588 	zassert_equal(regulator_fake_get_current_limit_fake.arg0_val, reg0);
589 	zassert_equal(regulator_fake_get_current_limit_fake.arg1_val, NULL);
590 }
591 
ZTEST(regulator_api,test_set_mode_not_implemented)592 ZTEST(regulator_api, test_set_mode_not_implemented)
593 {
594 	int ret = regulator_set_mode(dummy_reg, 0);
595 
596 	zassert_equal(ret, -ENOSYS);
597 }
598 
ZTEST(regulator_api,test_set_mode_ok)599 ZTEST(regulator_api, test_set_mode_ok)
600 {
601 	RESET_FAKE(regulator_fake_set_mode);
602 
603 	regulator_fake_set_mode_fake.return_val = 0;
604 
605 	zassert_equal(regulator_set_mode(reg0, 0), 0);
606 	zassert_equal(regulator_set_mode(reg0, 1), 0);
607 	zassert_equal(regulator_set_mode(reg0, 10), 0);
608 	zassert_equal(regulator_fake_set_mode_fake.call_count, 3U);
609 }
610 
ZTEST(regulator_api,test_set_mode_fail)611 ZTEST(regulator_api, test_set_mode_fail)
612 {
613 	RESET_FAKE(regulator_fake_set_mode);
614 
615 	regulator_fake_set_mode_fake.return_val = -ENOTSUP;
616 
617 	zassert_equal(regulator_set_mode(reg0, 0), -ENOTSUP);
618 	zassert_equal(regulator_fake_set_mode_fake.arg0_val, reg0);
619 	zassert_equal(regulator_fake_set_mode_fake.arg1_val, 0);
620 	zassert_equal(regulator_fake_set_mode_fake.call_count, 1U);
621 }
622 
ZTEST(regulator_api,test_set_mode_dt_limit)623 ZTEST(regulator_api, test_set_mode_dt_limit)
624 {
625 	RESET_FAKE(regulator_fake_set_mode);
626 
627 	regulator_fake_set_mode_fake.return_val = 0;
628 
629 	zassert_equal(regulator_set_mode(reg3, 0), -ENOTSUP);
630 	zassert_equal(regulator_set_mode(reg3, 1), 0);
631 	zassert_equal(regulator_set_mode(reg3, 10), 0);
632 	zassert_equal(regulator_fake_set_mode_fake.call_count, 2U);
633 }
634 
ZTEST(regulator_api,test_get_mode_not_implemented)635 ZTEST(regulator_api, test_get_mode_not_implemented)
636 {
637 	int ret = regulator_get_mode(dummy_reg, NULL);
638 
639 	zassert_equal(ret, -ENOSYS);
640 }
641 
ZTEST(regulator_api,test_set_active_discharge_not_implemented)642 ZTEST(regulator_api, test_set_active_discharge_not_implemented)
643 {
644 	int ret = regulator_set_active_discharge(dummy_reg, false);
645 
646 	zassert_equal(ret, -ENOSYS);
647 }
648 
get_active_discharge_ok(const struct device * dev,bool * active_discharge)649 static int get_active_discharge_ok(const struct device *dev, bool *active_discharge)
650 {
651 	ARG_UNUSED(dev);
652 
653 	*active_discharge = true;
654 
655 	return 0;
656 }
657 
ZTEST(regulator_api,test_get_active_discharge_ok)658 ZTEST(regulator_api, test_get_active_discharge_ok)
659 {
660 	bool active_discharge;
661 
662 	RESET_FAKE(regulator_fake_get_active_discharge);
663 
664 	regulator_fake_get_active_discharge_fake.custom_fake = get_active_discharge_ok;
665 
666 	zassert_equal(regulator_get_active_discharge(reg0, &active_discharge), false);
667 	zassert_equal(active_discharge, true);
668 	zassert_equal(regulator_fake_get_active_discharge_fake.call_count, 1U);
669 	zassert_equal(regulator_fake_get_active_discharge_fake.arg0_val, reg0);
670 	zassert_equal(regulator_fake_get_active_discharge_fake.arg1_val, &active_discharge);
671 }
672 
ZTEST(regulator_api,test_get_active_discharge_not_implemented)673 ZTEST(regulator_api, test_get_active_discharge_not_implemented)
674 {
675 	int ret = regulator_get_active_discharge(dummy_reg, NULL);
676 
677 	zassert_equal(ret, -ENOSYS);
678 }
679 
get_mode_ok(const struct device * dev,regulator_mode_t * mode)680 static int get_mode_ok(const struct device *dev, regulator_mode_t *mode)
681 {
682 	ARG_UNUSED(dev);
683 
684 	*mode = 10U;
685 
686 	return 0;
687 }
688 
ZTEST(regulator_api,test_get_mode_ok)689 ZTEST(regulator_api, test_get_mode_ok)
690 {
691 	regulator_mode_t mode;
692 
693 	RESET_FAKE(regulator_fake_get_mode);
694 
695 	regulator_fake_get_mode_fake.custom_fake = get_mode_ok;
696 
697 	zassert_equal(regulator_get_mode(reg0, &mode), 0U);
698 	zassert_equal(mode, 10U);
699 	zassert_equal(regulator_fake_get_mode_fake.call_count, 1U);
700 	zassert_equal(regulator_fake_get_mode_fake.arg0_val, reg0);
701 	zassert_equal(regulator_fake_get_mode_fake.arg1_val, &mode);
702 }
703 
get_mode_fail(const struct device * dev,regulator_mode_t * mode)704 static int get_mode_fail(const struct device *dev, regulator_mode_t *mode)
705 {
706 	ARG_UNUSED(dev);
707 	ARG_UNUSED(mode);
708 
709 	return -EIO;
710 }
711 
ZTEST(regulator_api,test_get_mode_error)712 ZTEST(regulator_api, test_get_mode_error)
713 {
714 	RESET_FAKE(regulator_fake_get_mode);
715 
716 	regulator_fake_get_mode_fake.custom_fake = get_mode_fail;
717 
718 	zassert_equal(regulator_get_mode(reg0, NULL), -EIO);
719 	zassert_equal(regulator_fake_get_mode_fake.call_count, 1U);
720 	zassert_equal(regulator_fake_get_mode_fake.arg0_val, reg0);
721 	zassert_equal(regulator_fake_get_mode_fake.arg1_val, NULL);
722 }
723 
ZTEST(regulator_api,test_get_error_flags_not_implemented)724 ZTEST(regulator_api, test_get_error_flags_not_implemented)
725 {
726 	int ret = regulator_get_error_flags(dummy_reg, NULL);
727 
728 	zassert_equal(ret, -ENOSYS);
729 }
730 
get_error_flags_ok(const struct device * dev,regulator_error_flags_t * flags)731 static int get_error_flags_ok(const struct device *dev, regulator_error_flags_t *flags)
732 {
733 	ARG_UNUSED(dev);
734 
735 	*flags = REGULATOR_ERROR_OVER_CURRENT;
736 
737 	return 0;
738 }
739 
ZTEST(regulator_api,test_get_error_flags_ok)740 ZTEST(regulator_api, test_get_error_flags_ok)
741 {
742 	regulator_error_flags_t flags;
743 
744 	RESET_FAKE(regulator_fake_get_error_flags);
745 
746 	regulator_fake_get_error_flags_fake.custom_fake = get_error_flags_ok;
747 
748 	zassert_equal(regulator_get_error_flags(reg0, &flags), 0);
749 	zassert_equal(flags, REGULATOR_ERROR_OVER_CURRENT);
750 	zassert_equal(regulator_fake_get_error_flags_fake.call_count, 1U);
751 	zassert_equal(regulator_fake_get_error_flags_fake.arg0_val, reg0);
752 	zassert_equal(regulator_fake_get_error_flags_fake.arg1_val, &flags);
753 }
754 
get_error_flags_fail(const struct device * dev,regulator_error_flags_t * flags)755 static int get_error_flags_fail(const struct device *dev, regulator_error_flags_t *flags)
756 {
757 	ARG_UNUSED(dev);
758 	ARG_UNUSED(flags);
759 
760 	return -EIO;
761 }
762 
ZTEST(regulator_api,test_get_max_voltage)763 ZTEST(regulator_api, test_get_max_voltage)
764 {
765 	int32_t max_uv = 0;
766 	int err = 0;
767 
768 	err = regulator_common_get_max_voltage(reg0, &max_uv);
769 	zassert_equal(err, -ENOENT);
770 
771 	err = regulator_common_get_max_voltage(reg3, &max_uv);
772 	zassert_equal(err, 0);
773 	zassert_equal(max_uv, 200);
774 }
775 
ZTEST(regulator_api,test_get_min_voltage)776 ZTEST(regulator_api, test_get_min_voltage)
777 {
778 	int32_t min_uv = 0;
779 	int err = 0;
780 
781 	err = regulator_common_get_min_voltage(reg0, &min_uv);
782 	zassert_equal(err, -ENOENT);
783 
784 	err = regulator_common_get_min_voltage(reg3, &min_uv);
785 	zassert_equal(err, 0);
786 	zassert_equal(min_uv, 100);
787 }
788 
ZTEST(regulator_api,test_get_error_flags_error)789 ZTEST(regulator_api, test_get_error_flags_error)
790 {
791 	RESET_FAKE(regulator_fake_get_error_flags);
792 
793 	regulator_fake_get_error_flags_fake.custom_fake = get_error_flags_fail;
794 
795 	zassert_equal(regulator_get_error_flags(reg0, NULL), -EIO);
796 	zassert_equal(regulator_fake_get_error_flags_fake.call_count, 1U);
797 	zassert_equal(regulator_fake_get_error_flags_fake.arg0_val, reg0);
798 	zassert_equal(regulator_fake_get_error_flags_fake.arg1_val, NULL);
799 }
800 
setup(void)801 void *setup(void)
802 {
803 	zassert_true(device_is_ready(parent));
804 	zassert_true(device_is_ready(reg0));
805 	zassert_true(device_is_ready(reg1));
806 	zassert_true(device_is_ready(reg2));
807 	zassert_true(device_is_ready(reg3));
808 	zassert_true(device_is_ready(reg4));
809 	zassert_true(device_is_ready(reg5));
810 
811 	/* REG1, REG2 initialized at init time (always-on/boot-on) */
812 	zassert_equal(regulator_fake_enable_fake.call_count, 2U);
813 	zassert_true(regulator_is_enabled(reg1));
814 	zassert_true(regulator_is_enabled(reg2));
815 
816 	/* REG3 mode set at init time (initial-mode) */
817 	zassert_equal(regulator_fake_set_mode_fake.call_count, 1U);
818 
819 	/* REG4 already disabled at init time (boot-off) */
820 	zassert_false(regulator_is_enabled(reg4));
821 
822 	/* REG5 explicitly disabled at init time (boot-off) */
823 	zassert_equal(regulator_fake_disable_fake.call_count, 1U);
824 	zassert_false(regulator_is_enabled(reg5));
825 
826 	return NULL;
827 }
828 
829 ZTEST_SUITE(regulator_api, NULL, setup, NULL, NULL, NULL);
830