]> git.sur5r.net Git - u-boot/blobdiff - drivers/power/regulator/fixed.c
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / drivers / power / regulator / fixed.c
index 62dc47f769859210be08d823a6f889055301cc5e..0be5b7bd5191bb67e772b8fe6e847e7b6a62dd47 100644 (file)
@@ -1,13 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  Copyright (C) 2015 Samsung Electronics
  *
  *  Przemyslaw Marczak <p.marczak@samsung.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
-#include <fdtdec.h>
 #include <errno.h>
 #include <dm.h>
 #include <i2c.h>
@@ -15,8 +13,6 @@
 #include <power/pmic.h>
 #include <power/regulator.h>
 
-DECLARE_GLOBAL_DATA_PTR;
-
 struct fixed_regulator_platdata {
        struct gpio_desc gpio; /* GPIO for regulator enable control */
        unsigned int startup_delay_us;
@@ -27,6 +23,7 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)
        struct dm_regulator_uclass_platdata *uc_pdata;
        struct fixed_regulator_platdata *dev_pdata;
        struct gpio_desc *gpio;
+       int flags = GPIOD_IS_OUT;
        int ret;
 
        dev_pdata = dev_get_platdata(dev);
@@ -37,9 +34,12 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)
        /* Set type to fixed */
        uc_pdata->type = REGULATOR_TYPE_FIXED;
 
+       if (dev_read_bool(dev, "enable-active-high"))
+               flags |= GPIOD_IS_OUT_ACTIVE;
+
        /* Get fixed regulator optional enable GPIO desc */
        gpio = &dev_pdata->gpio;
-       ret = gpio_request_by_name(dev, "gpio", 0, gpio, GPIOD_IS_OUT);
+       ret = gpio_request_by_name(dev, "gpio", 0, gpio, flags);
        if (ret) {
                debug("Fixed regulator optional enable GPIO - not found! Error: %d\n",
                      ret);
@@ -48,9 +48,8 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)
        }
 
        /* Get optional ramp up delay */
-       dev_pdata->startup_delay_us = fdtdec_get_uint(gd->fdt_blob,
-                                                     dev->of_offset,
-                                                     "startup-delay-us", 0);
+       dev_pdata->startup_delay_us = dev_read_u32_default(dev,
+                                                       "startup-delay-us", 0);
 
        return 0;
 }
@@ -87,7 +86,7 @@ static int fixed_regulator_get_current(struct udevice *dev)
        return uc_pdata->min_uA;
 }
 
-static bool fixed_regulator_get_enable(struct udevice *dev)
+static int fixed_regulator_get_enable(struct udevice *dev)
 {
        struct fixed_regulator_platdata *dev_pdata = dev_get_platdata(dev);
 
@@ -103,8 +102,11 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable)
        struct fixed_regulator_platdata *dev_pdata = dev_get_platdata(dev);
        int ret;
 
+       debug("%s: dev='%s', enable=%d, delay=%d, has_gpio=%d\n", __func__,
+             dev->name, enable, dev_pdata->startup_delay_us,
+             dm_gpio_is_valid(&dev_pdata->gpio));
        /* Enable GPIO is optional */
-       if (!dev_pdata->gpio.dev) {
+       if (!dm_gpio_is_valid(&dev_pdata->gpio)) {
                if (!enable)
                        return -ENOSYS;
                return 0;
@@ -112,13 +114,14 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable)
 
        ret = dm_gpio_set_value(&dev_pdata->gpio, enable);
        if (ret) {
-               error("Can't set regulator : %s gpio to: %d\n", dev->name,
+               pr_err("Can't set regulator : %s gpio to: %d\n", dev->name,
                      enable);
                return ret;
        }
 
        if (enable && dev_pdata->startup_delay_us)
                udelay(dev_pdata->startup_delay_us);
+       debug("%s: done\n", __func__);
 
        return 0;
 }