xref: /openbmc/u-boot/test/dm/regulator.c (revision e35171e9)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2e8f339e0SPrzemyslaw Marczak /*
3e8f339e0SPrzemyslaw Marczak  * Tests for the driver model regulator API
4e8f339e0SPrzemyslaw Marczak  *
5e8f339e0SPrzemyslaw Marczak  * Copyright (c) 2015 Samsung Electronics
6e8f339e0SPrzemyslaw Marczak  * Przemyslaw Marczak <p.marczak@samsung.com>
7e8f339e0SPrzemyslaw Marczak  */
8e8f339e0SPrzemyslaw Marczak 
9e8f339e0SPrzemyslaw Marczak #include <common.h>
10e8f339e0SPrzemyslaw Marczak #include <errno.h>
11e8f339e0SPrzemyslaw Marczak #include <dm.h>
12e8f339e0SPrzemyslaw Marczak #include <fdtdec.h>
13e8f339e0SPrzemyslaw Marczak #include <malloc.h>
14e8f339e0SPrzemyslaw Marczak #include <dm/device-internal.h>
15e8f339e0SPrzemyslaw Marczak #include <dm/root.h>
16e8f339e0SPrzemyslaw Marczak #include <dm/util.h>
17e8f339e0SPrzemyslaw Marczak #include <dm/test.h>
18e8f339e0SPrzemyslaw Marczak #include <dm/uclass-internal.h>
19e8f339e0SPrzemyslaw Marczak #include <power/pmic.h>
20e8f339e0SPrzemyslaw Marczak #include <power/regulator.h>
21e8f339e0SPrzemyslaw Marczak #include <power/sandbox_pmic.h>
22e721b882SJoe Hershberger #include <test/ut.h>
23e8f339e0SPrzemyslaw Marczak 
24e8f339e0SPrzemyslaw Marczak enum {
25e8f339e0SPrzemyslaw Marczak 	BUCK1,
26e8f339e0SPrzemyslaw Marczak 	BUCK2,
27bf802f5dSFelix Brack 	BUCK3,
28e8f339e0SPrzemyslaw Marczak 	LDO1,
29e8f339e0SPrzemyslaw Marczak 	LDO2,
30e8f339e0SPrzemyslaw Marczak 	OUTPUT_COUNT,
31e8f339e0SPrzemyslaw Marczak };
32e8f339e0SPrzemyslaw Marczak 
33e8f339e0SPrzemyslaw Marczak enum {
34e8f339e0SPrzemyslaw Marczak 	DEVNAME = 0,
35e8f339e0SPrzemyslaw Marczak 	PLATNAME,
36e8f339e0SPrzemyslaw Marczak 	OUTPUT_NAME_COUNT,
37e8f339e0SPrzemyslaw Marczak };
38e8f339e0SPrzemyslaw Marczak 
39e8f339e0SPrzemyslaw Marczak static const char *regulator_names[OUTPUT_COUNT][OUTPUT_NAME_COUNT] = {
40e8f339e0SPrzemyslaw Marczak 	/* devname, platname */
41e8f339e0SPrzemyslaw Marczak 	{ SANDBOX_BUCK1_DEVNAME, SANDBOX_BUCK1_PLATNAME },
42e8f339e0SPrzemyslaw Marczak 	{ SANDBOX_BUCK2_DEVNAME, SANDBOX_BUCK2_PLATNAME },
43bf802f5dSFelix Brack 	{ SANDBOX_BUCK3_DEVNAME, SANDBOX_BUCK3_PLATNAME },
44e8f339e0SPrzemyslaw Marczak 	{ SANDBOX_LDO1_DEVNAME, SANDBOX_LDO1_PLATNAME},
45e8f339e0SPrzemyslaw Marczak 	{ SANDBOX_LDO2_DEVNAME, SANDBOX_LDO2_PLATNAME},
46e8f339e0SPrzemyslaw Marczak };
47e8f339e0SPrzemyslaw Marczak 
48e8f339e0SPrzemyslaw Marczak /* Test regulator get method */
dm_test_power_regulator_get(struct unit_test_state * uts)49e721b882SJoe Hershberger static int dm_test_power_regulator_get(struct unit_test_state *uts)
50e8f339e0SPrzemyslaw Marczak {
51e8f339e0SPrzemyslaw Marczak 	struct dm_regulator_uclass_platdata *uc_pdata;
52e8f339e0SPrzemyslaw Marczak 	struct udevice *dev_by_devname;
53e8f339e0SPrzemyslaw Marczak 	struct udevice *dev_by_platname;
54e8f339e0SPrzemyslaw Marczak 	const char *devname;
55e8f339e0SPrzemyslaw Marczak 	const char *platname;
56e8f339e0SPrzemyslaw Marczak 	int i;
57e8f339e0SPrzemyslaw Marczak 
58e8f339e0SPrzemyslaw Marczak 	for (i = 0; i < OUTPUT_COUNT; i++) {
59e8f339e0SPrzemyslaw Marczak 		/*
60e8f339e0SPrzemyslaw Marczak 		 * Do the test for each regulator's devname and platname,
61e8f339e0SPrzemyslaw Marczak 		 * which are related to a single device.
62e8f339e0SPrzemyslaw Marczak 		 */
63e8f339e0SPrzemyslaw Marczak 		devname = regulator_names[i][DEVNAME];
64e8f339e0SPrzemyslaw Marczak 		platname = regulator_names[i][PLATNAME];
65e8f339e0SPrzemyslaw Marczak 
66e8f339e0SPrzemyslaw Marczak 		/*
67e8f339e0SPrzemyslaw Marczak 		 * Check, that regulator_get_by_devname() function, returns
68e8f339e0SPrzemyslaw Marczak 		 * a device with the name equal to the requested one.
69e8f339e0SPrzemyslaw Marczak 		 */
70e8f339e0SPrzemyslaw Marczak 		ut_assertok(regulator_get_by_devname(devname, &dev_by_devname));
71e8f339e0SPrzemyslaw Marczak 		ut_asserteq_str(devname, dev_by_devname->name);
72e8f339e0SPrzemyslaw Marczak 
73e8f339e0SPrzemyslaw Marczak 		/*
74e8f339e0SPrzemyslaw Marczak 		 * Check, that regulator_get_by_platname() function, returns
75e8f339e0SPrzemyslaw Marczak 		 * a device with the name equal to the requested one.
76e8f339e0SPrzemyslaw Marczak 		 */
77e8f339e0SPrzemyslaw Marczak 		ut_assertok(regulator_get_by_platname(platname, &dev_by_platname));
78e8f339e0SPrzemyslaw Marczak 		uc_pdata = dev_get_uclass_platdata(dev_by_platname);
79e8f339e0SPrzemyslaw Marczak 		ut_assert(uc_pdata);
80e8f339e0SPrzemyslaw Marczak 		ut_asserteq_str(platname, uc_pdata->name);
81e8f339e0SPrzemyslaw Marczak 
82e8f339e0SPrzemyslaw Marczak 		/*
83e8f339e0SPrzemyslaw Marczak 		 * Check, that the pointers returned by both get functions,
84e8f339e0SPrzemyslaw Marczak 		 * points to the same regulator device.
85e8f339e0SPrzemyslaw Marczak 		 */
86e8f339e0SPrzemyslaw Marczak 		ut_asserteq_ptr(dev_by_devname, dev_by_platname);
87e8f339e0SPrzemyslaw Marczak 	}
88e8f339e0SPrzemyslaw Marczak 
89e8f339e0SPrzemyslaw Marczak 	return 0;
90e8f339e0SPrzemyslaw Marczak }
91e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_get, DM_TESTF_SCAN_FDT);
92e8f339e0SPrzemyslaw Marczak 
93e8f339e0SPrzemyslaw Marczak /* Test regulator set and get Voltage method */
dm_test_power_regulator_set_get_voltage(struct unit_test_state * uts)94e721b882SJoe Hershberger static int dm_test_power_regulator_set_get_voltage(struct unit_test_state *uts)
95e8f339e0SPrzemyslaw Marczak {
96e8f339e0SPrzemyslaw Marczak 	struct dm_regulator_uclass_platdata *uc_pdata;
97e8f339e0SPrzemyslaw Marczak 	struct udevice *dev;
98e8f339e0SPrzemyslaw Marczak 	const char *platname;
99e8f339e0SPrzemyslaw Marczak 	int val_set, val_get;
100e8f339e0SPrzemyslaw Marczak 
101e8f339e0SPrzemyslaw Marczak 	/* Set and get Voltage of BUCK1 - set to 'min' constraint */
102e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[BUCK1][PLATNAME];
103e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
104e8f339e0SPrzemyslaw Marczak 
105e8f339e0SPrzemyslaw Marczak 	uc_pdata = dev_get_uclass_platdata(dev);
106e8f339e0SPrzemyslaw Marczak 	ut_assert(uc_pdata);
107e8f339e0SPrzemyslaw Marczak 
108e8f339e0SPrzemyslaw Marczak 	val_set = uc_pdata->min_uV;
109e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_set_value(dev, val_set));
110e8f339e0SPrzemyslaw Marczak 
111e8f339e0SPrzemyslaw Marczak 	val_get = regulator_get_value(dev);
112e8f339e0SPrzemyslaw Marczak 	ut_assert(val_get >= 0);
113e8f339e0SPrzemyslaw Marczak 
114e8f339e0SPrzemyslaw Marczak 	ut_asserteq(val_set, val_get);
115e8f339e0SPrzemyslaw Marczak 
116e8f339e0SPrzemyslaw Marczak 	return 0;
117e8f339e0SPrzemyslaw Marczak }
118e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_set_get_voltage, DM_TESTF_SCAN_FDT);
119e8f339e0SPrzemyslaw Marczak 
120e8f339e0SPrzemyslaw Marczak /* Test regulator set and get Current method */
dm_test_power_regulator_set_get_current(struct unit_test_state * uts)121e721b882SJoe Hershberger static int dm_test_power_regulator_set_get_current(struct unit_test_state *uts)
122e8f339e0SPrzemyslaw Marczak {
123e8f339e0SPrzemyslaw Marczak 	struct dm_regulator_uclass_platdata *uc_pdata;
124e8f339e0SPrzemyslaw Marczak 	struct udevice *dev;
125e8f339e0SPrzemyslaw Marczak 	const char *platname;
126e8f339e0SPrzemyslaw Marczak 	int val_set, val_get;
127e8f339e0SPrzemyslaw Marczak 
128e8f339e0SPrzemyslaw Marczak 	/* Set and get the Current of LDO1 - set to 'min' constraint */
129e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[LDO1][PLATNAME];
130e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
131e8f339e0SPrzemyslaw Marczak 
132e8f339e0SPrzemyslaw Marczak 	uc_pdata = dev_get_uclass_platdata(dev);
133e8f339e0SPrzemyslaw Marczak 	ut_assert(uc_pdata);
134e8f339e0SPrzemyslaw Marczak 
135e8f339e0SPrzemyslaw Marczak 	val_set = uc_pdata->min_uA;
136e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_set_current(dev, val_set));
137e8f339e0SPrzemyslaw Marczak 
138e8f339e0SPrzemyslaw Marczak 	val_get = regulator_get_current(dev);
139e8f339e0SPrzemyslaw Marczak 	ut_assert(val_get >= 0);
140e8f339e0SPrzemyslaw Marczak 
141e8f339e0SPrzemyslaw Marczak 	ut_asserteq(val_set, val_get);
142e8f339e0SPrzemyslaw Marczak 
143e8f339e0SPrzemyslaw Marczak 	/* Check LDO2 current limit constraints - should be -ENODATA */
144e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[LDO2][PLATNAME];
145e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
146e8f339e0SPrzemyslaw Marczak 
147e8f339e0SPrzemyslaw Marczak 	uc_pdata = dev_get_uclass_platdata(dev);
148e8f339e0SPrzemyslaw Marczak 	ut_assert(uc_pdata);
149e8f339e0SPrzemyslaw Marczak 	ut_asserteq(-ENODATA, uc_pdata->min_uA);
150e8f339e0SPrzemyslaw Marczak 	ut_asserteq(-ENODATA, uc_pdata->max_uA);
151e8f339e0SPrzemyslaw Marczak 
152e8f339e0SPrzemyslaw Marczak 	/* Try set the Current of LDO2 - should return -ENOSYS */
153e8f339e0SPrzemyslaw Marczak 	ut_asserteq(-ENOSYS, regulator_set_current(dev, 0));
154e8f339e0SPrzemyslaw Marczak 
155e8f339e0SPrzemyslaw Marczak 	return 0;
156e8f339e0SPrzemyslaw Marczak }
157e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_set_get_current, DM_TESTF_SCAN_FDT);
158e8f339e0SPrzemyslaw Marczak 
159e8f339e0SPrzemyslaw Marczak /* Test regulator set and get Enable method */
dm_test_power_regulator_set_get_enable(struct unit_test_state * uts)160e721b882SJoe Hershberger static int dm_test_power_regulator_set_get_enable(struct unit_test_state *uts)
161e8f339e0SPrzemyslaw Marczak {
162e8f339e0SPrzemyslaw Marczak 	const char *platname;
163e8f339e0SPrzemyslaw Marczak 	struct udevice *dev;
164e8f339e0SPrzemyslaw Marczak 	bool val_set = true;
165e8f339e0SPrzemyslaw Marczak 
166e8f339e0SPrzemyslaw Marczak 	/* Set the Enable of LDO1 - default is disabled */
167e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[LDO1][PLATNAME];
168e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
169e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_set_enable(dev, val_set));
170e8f339e0SPrzemyslaw Marczak 
171e8f339e0SPrzemyslaw Marczak 	/* Get the Enable state of LDO1 and compare it with the requested one */
172e8f339e0SPrzemyslaw Marczak 	ut_asserteq(regulator_get_enable(dev), val_set);
173e8f339e0SPrzemyslaw Marczak 
174e8f339e0SPrzemyslaw Marczak 	return 0;
175e8f339e0SPrzemyslaw Marczak }
176e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_set_get_enable, DM_TESTF_SCAN_FDT);
177e8f339e0SPrzemyslaw Marczak 
178*cc4a224aSLokesh Vutla /* Test regulator set and get enable if allowed method */
179*cc4a224aSLokesh Vutla static
dm_test_power_regulator_set_enable_if_allowed(struct unit_test_state * uts)180*cc4a224aSLokesh Vutla int dm_test_power_regulator_set_enable_if_allowed(struct unit_test_state *uts)
181*cc4a224aSLokesh Vutla {
182*cc4a224aSLokesh Vutla 	const char *platname;
183*cc4a224aSLokesh Vutla 	struct udevice *dev, *dev_autoset;
184*cc4a224aSLokesh Vutla 	bool val_set = false;
185*cc4a224aSLokesh Vutla 
186*cc4a224aSLokesh Vutla 	/* Get BUCK1 - always on regulator */
187*cc4a224aSLokesh Vutla 	platname = regulator_names[BUCK1][PLATNAME];
188*cc4a224aSLokesh Vutla 	ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
189*cc4a224aSLokesh Vutla 	ut_assertok(regulator_get_by_platname(platname, &dev));
190*cc4a224aSLokesh Vutla 
191*cc4a224aSLokesh Vutla 	/* Try disabling always-on regulator */
192*cc4a224aSLokesh Vutla 	ut_assertok(regulator_set_enable_if_allowed(dev, val_set));
193*cc4a224aSLokesh Vutla 	ut_asserteq(regulator_get_enable(dev), !val_set);
194*cc4a224aSLokesh Vutla 
195*cc4a224aSLokesh Vutla 	return 0;
196*cc4a224aSLokesh Vutla }
197*cc4a224aSLokesh Vutla DM_TEST(dm_test_power_regulator_set_enable_if_allowed, DM_TESTF_SCAN_FDT);
198*cc4a224aSLokesh Vutla 
199e8f339e0SPrzemyslaw Marczak /* Test regulator set and get mode method */
dm_test_power_regulator_set_get_mode(struct unit_test_state * uts)200e721b882SJoe Hershberger static int dm_test_power_regulator_set_get_mode(struct unit_test_state *uts)
201e8f339e0SPrzemyslaw Marczak {
202e8f339e0SPrzemyslaw Marczak 	const char *platname;
203e8f339e0SPrzemyslaw Marczak 	struct udevice *dev;
204e8f339e0SPrzemyslaw Marczak 	int val_set = LDO_OM_SLEEP;
205e8f339e0SPrzemyslaw Marczak 
206e8f339e0SPrzemyslaw Marczak 	/* Set the mode id to LDO_OM_SLEEP of LDO1 - default is LDO_OM_OFF */
207e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[LDO1][PLATNAME];
208e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
209e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_set_mode(dev, val_set));
210e8f339e0SPrzemyslaw Marczak 
211e8f339e0SPrzemyslaw Marczak 	/* Get the mode id of LDO1 and compare it with the requested one */
212e8f339e0SPrzemyslaw Marczak 	ut_asserteq(regulator_get_mode(dev), val_set);
213e8f339e0SPrzemyslaw Marczak 
214e8f339e0SPrzemyslaw Marczak 	return 0;
215e8f339e0SPrzemyslaw Marczak }
216e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_set_get_mode, DM_TESTF_SCAN_FDT);
217e8f339e0SPrzemyslaw Marczak 
218e8f339e0SPrzemyslaw Marczak /* Test regulator autoset method */
dm_test_power_regulator_autoset(struct unit_test_state * uts)219e721b882SJoe Hershberger static int dm_test_power_regulator_autoset(struct unit_test_state *uts)
220e8f339e0SPrzemyslaw Marczak {
221e8f339e0SPrzemyslaw Marczak 	const char *platname;
222e8f339e0SPrzemyslaw Marczak 	struct udevice *dev, *dev_autoset;
223e8f339e0SPrzemyslaw Marczak 
224e8f339e0SPrzemyslaw Marczak 	/*
225e8f339e0SPrzemyslaw Marczak 	 * Test the BUCK1 with fdt properties
226e8f339e0SPrzemyslaw Marczak 	 * - min-microvolt = max-microvolt = 1200000
227e8f339e0SPrzemyslaw Marczak 	 * - min-microamp = max-microamp = 200000
228e8f339e0SPrzemyslaw Marczak 	 * - always-on = set
229e8f339e0SPrzemyslaw Marczak 	 * - boot-on = not set
230e8f339e0SPrzemyslaw Marczak 	 * Expected output state: uV=1200000; uA=200000; output enabled
231e8f339e0SPrzemyslaw Marczak 	 */
232e8f339e0SPrzemyslaw Marczak 	platname = regulator_names[BUCK1][PLATNAME];
2333b55d30fSSimon Glass 	ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
234e8f339e0SPrzemyslaw Marczak 
235e8f339e0SPrzemyslaw Marczak 	/* Check, that the returned device is proper */
236e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_get_by_platname(platname, &dev));
237e8f339e0SPrzemyslaw Marczak 	ut_asserteq_ptr(dev, dev_autoset);
238e8f339e0SPrzemyslaw Marczak 
239e8f339e0SPrzemyslaw Marczak 	/* Check the setup after autoset */
240e8f339e0SPrzemyslaw Marczak 	ut_asserteq(regulator_get_value(dev),
241e8f339e0SPrzemyslaw Marczak 		    SANDBOX_BUCK1_AUTOSET_EXPECTED_UV);
242e8f339e0SPrzemyslaw Marczak 	ut_asserteq(regulator_get_current(dev),
243e8f339e0SPrzemyslaw Marczak 		    SANDBOX_BUCK1_AUTOSET_EXPECTED_UA);
244e8f339e0SPrzemyslaw Marczak 	ut_asserteq(regulator_get_enable(dev),
245e8f339e0SPrzemyslaw Marczak 		    SANDBOX_BUCK1_AUTOSET_EXPECTED_ENABLE);
246e8f339e0SPrzemyslaw Marczak 
247e8f339e0SPrzemyslaw Marczak 	return 0;
248e8f339e0SPrzemyslaw Marczak }
249e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_autoset, DM_TESTF_SCAN_FDT);
250e8f339e0SPrzemyslaw Marczak 
251e8f339e0SPrzemyslaw Marczak /*
252e8f339e0SPrzemyslaw Marczak  * Struct setting: to keep the expected output settings.
253e8f339e0SPrzemyslaw Marczak  * @voltage: Voltage value [uV]
254e8f339e0SPrzemyslaw Marczak  * @current: Current value [uA]
255e8f339e0SPrzemyslaw Marczak  * @enable: output enable state: true/false
256e8f339e0SPrzemyslaw Marczak  */
257e8f339e0SPrzemyslaw Marczak struct setting {
258e8f339e0SPrzemyslaw Marczak 	int voltage;
259e8f339e0SPrzemyslaw Marczak 	int current;
260e8f339e0SPrzemyslaw Marczak 	bool enable;
261e8f339e0SPrzemyslaw Marczak };
262e8f339e0SPrzemyslaw Marczak 
263e8f339e0SPrzemyslaw Marczak /*
264e8f339e0SPrzemyslaw Marczak  * platname_list: an array of regulator platform names.
265e8f339e0SPrzemyslaw Marczak  * For testing regulator_list_autoset() for outputs:
266e8f339e0SPrzemyslaw Marczak  * - LDO1
267e8f339e0SPrzemyslaw Marczak  * - LDO2
268e8f339e0SPrzemyslaw Marczak  */
269e8f339e0SPrzemyslaw Marczak static const char *platname_list[] = {
270e8f339e0SPrzemyslaw Marczak 	SANDBOX_LDO1_PLATNAME,
271e8f339e0SPrzemyslaw Marczak 	SANDBOX_LDO2_PLATNAME,
272e8f339e0SPrzemyslaw Marczak 	NULL,
273e8f339e0SPrzemyslaw Marczak };
274e8f339e0SPrzemyslaw Marczak 
275e8f339e0SPrzemyslaw Marczak /*
276e8f339e0SPrzemyslaw Marczak  * expected_setting_list: an array of regulator output setting, expected after
277e8f339e0SPrzemyslaw Marczak  * call of the regulator_list_autoset() for the "platname_list" array.
278e8f339e0SPrzemyslaw Marczak  * For testing results of regulator_list_autoset() for outputs:
279e8f339e0SPrzemyslaw Marczak  * - LDO1
280e8f339e0SPrzemyslaw Marczak  * - LDO2
281e8f339e0SPrzemyslaw Marczak  * The settings are defined in: include/power/sandbox_pmic.h
282e8f339e0SPrzemyslaw Marczak  */
283e8f339e0SPrzemyslaw Marczak static const struct setting expected_setting_list[] = {
284e8f339e0SPrzemyslaw Marczak 	[0] = { /* LDO1 */
285e8f339e0SPrzemyslaw Marczak 	.voltage = SANDBOX_LDO1_AUTOSET_EXPECTED_UV,
286e8f339e0SPrzemyslaw Marczak 	.current = SANDBOX_LDO1_AUTOSET_EXPECTED_UA,
287e8f339e0SPrzemyslaw Marczak 	.enable  = SANDBOX_LDO1_AUTOSET_EXPECTED_ENABLE,
288e8f339e0SPrzemyslaw Marczak 	},
289e8f339e0SPrzemyslaw Marczak 	[1] = { /* LDO2 */
290e8f339e0SPrzemyslaw Marczak 	.voltage = SANDBOX_LDO2_AUTOSET_EXPECTED_UV,
291e8f339e0SPrzemyslaw Marczak 	.current = SANDBOX_LDO2_AUTOSET_EXPECTED_UA,
292e8f339e0SPrzemyslaw Marczak 	.enable  = SANDBOX_LDO2_AUTOSET_EXPECTED_ENABLE,
293e8f339e0SPrzemyslaw Marczak 	},
294e8f339e0SPrzemyslaw Marczak };
295e8f339e0SPrzemyslaw Marczak 
296e8f339e0SPrzemyslaw Marczak static int list_count = ARRAY_SIZE(expected_setting_list);
297e8f339e0SPrzemyslaw Marczak 
298e8f339e0SPrzemyslaw Marczak /* Test regulator list autoset method */
dm_test_power_regulator_autoset_list(struct unit_test_state * uts)299e721b882SJoe Hershberger static int dm_test_power_regulator_autoset_list(struct unit_test_state *uts)
300e8f339e0SPrzemyslaw Marczak {
301e8f339e0SPrzemyslaw Marczak 	struct udevice *dev_list[2], *dev;
302e8f339e0SPrzemyslaw Marczak 	int i;
303e8f339e0SPrzemyslaw Marczak 
304e8f339e0SPrzemyslaw Marczak 	/*
305e8f339e0SPrzemyslaw Marczak 	 * Test the settings of the regulator list:
306e8f339e0SPrzemyslaw Marczak 	 * LDO1 with fdt properties:
307e8f339e0SPrzemyslaw Marczak 	 * - min-microvolt = max-microvolt = 1800000
308e8f339e0SPrzemyslaw Marczak 	 * - min-microamp = max-microamp = 100000
309e8f339e0SPrzemyslaw Marczak 	 * - always-on = not set
310e8f339e0SPrzemyslaw Marczak 	 * - boot-on = set
311e8f339e0SPrzemyslaw Marczak 	 * Expected output state: uV=1800000; uA=100000; output enabled
312e8f339e0SPrzemyslaw Marczak 	 *
313e8f339e0SPrzemyslaw Marczak 	 * LDO2 with fdt properties:
314e8f339e0SPrzemyslaw Marczak 	 * - min-microvolt = max-microvolt = 3300000
315e8f339e0SPrzemyslaw Marczak 	 * - always-on = not set
316e8f339e0SPrzemyslaw Marczak 	 * - boot-on = not set
317e8f339e0SPrzemyslaw Marczak 	 * Expected output state: uV=300000(default); output disabled(default)
318e8f339e0SPrzemyslaw Marczak 	 * The expected settings are defined in: include/power/sandbox_pmic.h.
319e8f339e0SPrzemyslaw Marczak 	 */
320e8f339e0SPrzemyslaw Marczak 	ut_assertok(regulator_list_autoset(platname_list, dev_list, false));
321e8f339e0SPrzemyslaw Marczak 
322e8f339e0SPrzemyslaw Marczak 	for (i = 0; i < list_count; i++) {
323e8f339e0SPrzemyslaw Marczak 		/* Check, that the returned device is non-NULL */
324e8f339e0SPrzemyslaw Marczak 		ut_assert(dev_list[i]);
325e8f339e0SPrzemyslaw Marczak 
326e8f339e0SPrzemyslaw Marczak 		/* Check, that the returned device is proper */
327e8f339e0SPrzemyslaw Marczak 		ut_assertok(regulator_get_by_platname(platname_list[i], &dev));
328e8f339e0SPrzemyslaw Marczak 		ut_asserteq_ptr(dev_list[i], dev);
329e8f339e0SPrzemyslaw Marczak 
330e8f339e0SPrzemyslaw Marczak 		/* Check, that regulator output Voltage value is as expected */
331e8f339e0SPrzemyslaw Marczak 		ut_asserteq(regulator_get_value(dev_list[i]),
332e8f339e0SPrzemyslaw Marczak 			    expected_setting_list[i].voltage);
333e8f339e0SPrzemyslaw Marczak 
334e8f339e0SPrzemyslaw Marczak 		/* Check, that regulator output Current value is as expected */
335e8f339e0SPrzemyslaw Marczak 		ut_asserteq(regulator_get_current(dev_list[i]),
336e8f339e0SPrzemyslaw Marczak 			    expected_setting_list[i].current);
337e8f339e0SPrzemyslaw Marczak 
338e8f339e0SPrzemyslaw Marczak 		/* Check, that regulator output Enable state is as expected */
339e8f339e0SPrzemyslaw Marczak 		ut_asserteq(regulator_get_enable(dev_list[i]),
340e8f339e0SPrzemyslaw Marczak 			    expected_setting_list[i].enable);
341e8f339e0SPrzemyslaw Marczak 	}
342e8f339e0SPrzemyslaw Marczak 
343e8f339e0SPrzemyslaw Marczak 	return 0;
344e8f339e0SPrzemyslaw Marczak }
345e8f339e0SPrzemyslaw Marczak DM_TEST(dm_test_power_regulator_autoset_list, DM_TESTF_SCAN_FDT);
346