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 */ 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 */ 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 */ 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 */ 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 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 */ 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 */ 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 */ 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