]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
drivers: regulator: fixed: add u-boot, off-on-delay-us
authorPeng Fan <peng.fan@nxp.com>
Thu, 26 Jul 2018 11:47:24 +0000 (19:47 +0800)
committerTom Rini <trini@konsulko.com>
Mon, 20 Aug 2018 00:38:39 +0000 (20:38 -0400)
Add u-boot,off-on-delay-us for fixed regulator.

Depends on board design, the gpio regulator sometimes
connects with a big capacitance. When need to off, then
on the regulator, if there is no enough delay,
the voltage does not drop to 0, so introduce this
property to handle such case.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
doc/device-tree-bindings/regulator/fixed.txt
drivers/power/regulator/fixed.c

index 5fd9033fea2d69a672d01fa0aae449f5a91626f0..453d2bef4459e31c461b0a3a5ad86f5fdc0720e1 100644 (file)
@@ -11,6 +11,7 @@ Required properties:
 Optional properties:
 - gpio: GPIO to use for enable control
 - startup-delay-us: startup time in microseconds
+- u-boot,off-on-delay-us: off delay time in microseconds
 - regulator constraints (binding info: regulator.txt)
 - enable-active-high: Polarity of GPIO is Active high. If this property
   is missing, the default assumed is Active low.
index 0be5b7bd5191bb67e772b8fe6e847e7b6a62dd47..a99aa783107e7e1279c8b4a98b682c829d759aea 100644 (file)
@@ -16,6 +16,7 @@
 struct fixed_regulator_platdata {
        struct gpio_desc gpio; /* GPIO for regulator enable control */
        unsigned int startup_delay_us;
+       unsigned int off_on_delay_us;
 };
 
 static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)
@@ -50,6 +51,8 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev)
        /* Get optional ramp up delay */
        dev_pdata->startup_delay_us = dev_read_u32_default(dev,
                                                        "startup-delay-us", 0);
+       dev_pdata->off_on_delay_us =
+                       dev_read_u32_default(dev, "u-boot,off-on-delay-us", 0);
 
        return 0;
 }
@@ -123,6 +126,9 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable)
                udelay(dev_pdata->startup_delay_us);
        debug("%s: done\n", __func__);
 
+       if (!enable && dev_pdata->off_on_delay_us)
+               udelay(dev_pdata->off_on_delay_us);
+
        return 0;
 }