efi_loader: selftest: enable APPEND_WRITE tests
[oweals/u-boot.git] / test / dm / regulator.c
index c4f14bdac588899bffc4cc5bba8707939969e511..e510539542b60b7a22416c060f83712939d93ad8 100644 (file)
@@ -1,10 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Tests for the driver model regulator API
  *
  * Copyright (c) 2015 Samsung Electronics
  * Przemyslaw Marczak <p.marczak@samsung.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <malloc.h>
 #include <dm/device-internal.h>
 #include <dm/root.h>
-#include <dm/ut.h>
 #include <dm/util.h>
 #include <dm/test.h>
 #include <dm/uclass-internal.h>
 #include <power/pmic.h>
 #include <power/regulator.h>
 #include <power/sandbox_pmic.h>
-
-DECLARE_GLOBAL_DATA_PTR;
+#include <test/ut.h>
 
 enum {
        BUCK1,
        BUCK2,
+       BUCK3,
        LDO1,
        LDO2,
        OUTPUT_COUNT,
@@ -42,12 +40,13 @@ static const char *regulator_names[OUTPUT_COUNT][OUTPUT_NAME_COUNT] = {
        /* devname, platname */
        { SANDBOX_BUCK1_DEVNAME, SANDBOX_BUCK1_PLATNAME },
        { SANDBOX_BUCK2_DEVNAME, SANDBOX_BUCK2_PLATNAME },
+       { SANDBOX_BUCK3_DEVNAME, SANDBOX_BUCK3_PLATNAME },
        { SANDBOX_LDO1_DEVNAME, SANDBOX_LDO1_PLATNAME},
        { SANDBOX_LDO2_DEVNAME, SANDBOX_LDO2_PLATNAME},
 };
 
 /* Test regulator get method */
-static int dm_test_power_regulator_get(struct dm_test_state *dms)
+static int dm_test_power_regulator_get(struct unit_test_state *uts)
 {
        struct dm_regulator_uclass_platdata *uc_pdata;
        struct udevice *dev_by_devname;
@@ -92,7 +91,7 @@ static int dm_test_power_regulator_get(struct dm_test_state *dms)
 DM_TEST(dm_test_power_regulator_get, DM_TESTF_SCAN_FDT);
 
 /* Test regulator set and get Voltage method */
-static int dm_test_power_regulator_set_get_voltage(struct dm_test_state *dms)
+static int dm_test_power_regulator_set_get_voltage(struct unit_test_state *uts)
 {
        struct dm_regulator_uclass_platdata *uc_pdata;
        struct udevice *dev;
@@ -119,7 +118,7 @@ static int dm_test_power_regulator_set_get_voltage(struct dm_test_state *dms)
 DM_TEST(dm_test_power_regulator_set_get_voltage, DM_TESTF_SCAN_FDT);
 
 /* Test regulator set and get Current method */
-static int dm_test_power_regulator_set_get_current(struct dm_test_state *dms)
+static int dm_test_power_regulator_set_get_current(struct unit_test_state *uts)
 {
        struct dm_regulator_uclass_platdata *uc_pdata;
        struct udevice *dev;
@@ -158,7 +157,7 @@ static int dm_test_power_regulator_set_get_current(struct dm_test_state *dms)
 DM_TEST(dm_test_power_regulator_set_get_current, DM_TESTF_SCAN_FDT);
 
 /* Test regulator set and get Enable method */
-static int dm_test_power_regulator_set_get_enable(struct dm_test_state *dms)
+static int dm_test_power_regulator_set_get_enable(struct unit_test_state *uts)
 {
        const char *platname;
        struct udevice *dev;
@@ -176,8 +175,29 @@ static int dm_test_power_regulator_set_get_enable(struct dm_test_state *dms)
 }
 DM_TEST(dm_test_power_regulator_set_get_enable, DM_TESTF_SCAN_FDT);
 
+/* Test regulator set and get enable if allowed method */
+static
+int dm_test_power_regulator_set_enable_if_allowed(struct unit_test_state *uts)
+{
+       const char *platname;
+       struct udevice *dev, *dev_autoset;
+       bool val_set = false;
+
+       /* Get BUCK1 - always on regulator */
+       platname = regulator_names[BUCK1][PLATNAME];
+       ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
+       ut_assertok(regulator_get_by_platname(platname, &dev));
+
+       /* Try disabling always-on regulator */
+       ut_assertok(regulator_set_enable_if_allowed(dev, val_set));
+       ut_asserteq(regulator_get_enable(dev), !val_set);
+
+       return 0;
+}
+DM_TEST(dm_test_power_regulator_set_enable_if_allowed, DM_TESTF_SCAN_FDT);
+
 /* Test regulator set and get mode method */
-static int dm_test_power_regulator_set_get_mode(struct dm_test_state *dms)
+static int dm_test_power_regulator_set_get_mode(struct unit_test_state *uts)
 {
        const char *platname;
        struct udevice *dev;
@@ -196,7 +216,7 @@ static int dm_test_power_regulator_set_get_mode(struct dm_test_state *dms)
 DM_TEST(dm_test_power_regulator_set_get_mode, DM_TESTF_SCAN_FDT);
 
 /* Test regulator autoset method */
-static int dm_test_power_regulator_autoset(struct dm_test_state *dms)
+static int dm_test_power_regulator_autoset(struct unit_test_state *uts)
 {
        const char *platname;
        struct udevice *dev, *dev_autoset;
@@ -210,7 +230,7 @@ static int dm_test_power_regulator_autoset(struct dm_test_state *dms)
         * Expected output state: uV=1200000; uA=200000; output enabled
         */
        platname = regulator_names[BUCK1][PLATNAME];
-       ut_assertok(regulator_autoset(platname, &dev_autoset, false));
+       ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
 
        /* Check, that the returned device is proper */
        ut_assertok(regulator_get_by_platname(platname, &dev));
@@ -276,7 +296,7 @@ static const struct setting expected_setting_list[] = {
 static int list_count = ARRAY_SIZE(expected_setting_list);
 
 /* Test regulator list autoset method */
-static int dm_test_power_regulator_autoset_list(struct dm_test_state *dms)
+static int dm_test_power_regulator_autoset_list(struct unit_test_state *uts)
 {
        struct udevice *dev_list[2], *dev;
        int i;