]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/regulator/max8973-regulator.c
regulator: qcom_spmi: Do not initialise static to NULL
[linux.git] / drivers / regulator / max8973-regulator.c
index e0c747aa9f851d5e394f59348d6b531bf1c7b664..7cd493ec63157b3007f391ac6acec2540440f254 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/regulator/max8973-regulator.h>
 #include <linux/regulator/of_regulator.h>
 #include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/of_gpio.h>
 #include <linux/i2c.h>
 #include <linux/slab.h>
@@ -114,7 +115,6 @@ struct max8973_chip {
        struct regulator_desc desc;
        struct regmap *regmap;
        bool enable_external_control;
-       int enable_gpio;
        int dvs_gpio;
        int lru_index[MAX8973_MAX_VOUT_REG];
        int curr_vout_val[MAX8973_MAX_VOUT_REG];
@@ -567,7 +567,6 @@ static struct max8973_regulator_platform_data *max8973_parse_dt(
 
        pdata->enable_ext_control = of_property_read_bool(np,
                                                "maxim,externally-enable");
-       pdata->enable_gpio = of_get_named_gpio(np, "maxim,enable-gpio", 0);
        pdata->dvs_gpio = of_get_named_gpio(np, "maxim,dvs-gpio", 0);
 
        ret = of_property_read_u32(np, "maxim,dvs-default-state", &pval);
@@ -633,6 +632,8 @@ static int max8973_probe(struct i2c_client *client,
        struct max8973_chip *max;
        bool pdata_from_dt = false;
        unsigned int chip_id;
+       struct gpio_desc *gpiod;
+       enum gpiod_flags gflags;
        int ret;
 
        pdata = dev_get_platdata(&client->dev);
@@ -647,8 +648,7 @@ static int max8973_probe(struct i2c_client *client,
                return -EIO;
        }
 
-       if ((pdata->dvs_gpio == -EPROBE_DEFER) ||
-               (pdata->enable_gpio == -EPROBE_DEFER))
+       if (pdata->dvs_gpio == -EPROBE_DEFER)
                return -EPROBE_DEFER;
 
        max = devm_kzalloc(&client->dev, sizeof(*max), GFP_KERNEL);
@@ -696,15 +696,11 @@ static int max8973_probe(struct i2c_client *client,
        max->desc.n_voltages = MAX8973_BUCK_N_VOLTAGE;
 
        max->dvs_gpio = (pdata->dvs_gpio) ? pdata->dvs_gpio : -EINVAL;
-       max->enable_gpio = (pdata->enable_gpio) ? pdata->enable_gpio : -EINVAL;
        max->enable_external_control = pdata->enable_ext_control;
        max->curr_gpio_val = pdata->dvs_def_state;
        max->curr_vout_reg = MAX8973_VOUT + pdata->dvs_def_state;
        max->junction_temp_warning = pdata->junction_temp_warning;
 
-       if (gpio_is_valid(max->enable_gpio))
-               max->enable_external_control = true;
-
        max->lru_index[0] = max->curr_vout_reg;
 
        if (gpio_is_valid(max->dvs_gpio)) {
@@ -757,27 +753,35 @@ static int max8973_probe(struct i2c_client *client,
                        break;
                }
 
-               if (gpio_is_valid(max->enable_gpio)) {
-                       config.ena_gpio_flags = GPIOF_OUT_INIT_LOW;
-                       if (ridata && (ridata->constraints.always_on ||
-                                       ridata->constraints.boot_on))
-                               config.ena_gpio_flags = GPIOF_OUT_INIT_HIGH;
-                       config.ena_gpio = max->enable_gpio;
+               if (ridata && (ridata->constraints.always_on ||
+                              ridata->constraints.boot_on))
+                       gflags = GPIOD_OUT_HIGH;
+               else
+                       gflags = GPIOD_OUT_LOW;
+               gpiod = devm_gpiod_get_optional(&client->dev,
+                                               "maxim,enable",
+                                               gflags);
+               if (IS_ERR(gpiod))
+                       return PTR_ERR(gpiod);
+               if (gpiod) {
+                       config.ena_gpiod = gpiod;
+                       max->enable_external_control = true;
                }
+
                break;
 
        case MAX77621:
-               if (gpio_is_valid(max->enable_gpio)) {
-                       ret = devm_gpio_request_one(&client->dev,
-                                       max->enable_gpio, GPIOF_OUT_INIT_HIGH,
-                                       "max8973-en-gpio");
-                       if (ret) {
-                               dev_err(&client->dev,
-                                       "gpio_request for gpio %d failed: %d\n",
-                                       max->enable_gpio, ret);
-                               return ret;
-                       }
-               }
+               /*
+                * We do not let the core switch this regulator on/off,
+                * we just leave it on.
+                */
+               gpiod = devm_gpiod_get_optional(&client->dev,
+                                               "maxim,enable",
+                                               GPIOD_OUT_HIGH);
+               if (IS_ERR(gpiod))
+                       return PTR_ERR(gpiod);
+               if (gpiod)
+                       max->enable_external_control = true;
 
                max->desc.enable_reg = MAX8973_VOUT;
                max->desc.enable_mask = MAX8973_VOUT_ENABLE;