Add support for 2.7V-5.5V VIN power supply.

Signed-off-by: Svyatoslav Ryhel <[email protected]>
---
 drivers/mfd/lm3533-core.c  | 23 +++++++++++++++++++++--
 include/linux/mfd/lm3533.h |  2 ++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c
index 8495e9119871..519f8c16a3f3 100644
--- a/drivers/mfd/lm3533-core.c
+++ b/drivers/mfd/lm3533-core.c
@@ -17,6 +17,7 @@
 #include <linux/mod_devicetable.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 #include <linux/seq_file.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
@@ -164,14 +165,25 @@ static int lm3533_set_lvled_config(struct lm3533 *lm3533, 
u8 lvled, u8 led)
        return ret;
 }
 
-static void lm3533_enable(struct lm3533 *lm3533)
+static int lm3533_enable(struct lm3533 *lm3533)
 {
+       int ret;
+
+       ret = regulator_enable(lm3533->vin_supply);
+       if (ret) {
+               dev_err(lm3533->dev, "failed to enable vin power supply\n");
+               return ret;
+       }
+
        gpiod_set_value(lm3533->hwen, 1);
+
+       return 0;
 }
 
 static void lm3533_disable(struct lm3533 *lm3533)
 {
        gpiod_set_value(lm3533->hwen, 0);
+       regulator_disable(lm3533->vin_supply);
 }
 
 enum lm3533_attribute_type {
@@ -324,7 +336,9 @@ static int lm3533_device_init(struct lm3533 *lm3533)
        u32 count = 0, reg;
        int ret;
 
-       lm3533_enable(lm3533);
+       ret = lm3533_enable(lm3533);
+       if (ret)
+               return ret;
 
        device_for_each_child_node_scoped(lm3533->dev, child) {
                if (!fwnode_device_is_available(child))
@@ -493,6 +507,11 @@ static int lm3533_i2c_probe(struct i2c_client *i2c)
                return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->hwen),
                                     "failed to get HWEN GPIO\n");
 
+       lm3533->vin_supply = devm_regulator_get(lm3533->dev, "vin");
+       if (IS_ERR(lm3533->vin_supply))
+               return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->vin_supply),
+                                    "failed to get vin-supply\n");
+
        device_property_read_u32(lm3533->dev, "ti,boost-ovp-microvolt",
                                 &lm3533->boost_ovp);
 
diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h
index 3aa962d4c747..d751773fc92d 100644
--- a/include/linux/mfd/lm3533.h
+++ b/include/linux/mfd/lm3533.h
@@ -21,6 +21,7 @@
 struct device;
 struct gpio_desc;
 struct regmap;
+struct regulator;
 
 struct lm3533 {
        struct device *dev;
@@ -28,6 +29,7 @@ struct lm3533 {
        struct regmap *regmap;
 
        struct gpio_desc *hwen;
+       struct regulator *vin_supply;
 
        u32 boost_ovp;
        u32 boost_freq;
-- 
2.51.0

Reply via email to