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