These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / regulator / arizona-ldo1.c
index a1d07d3..f7c88ff 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/bitops.h>
 #include <linux/err.h>
 #include <linux/of.h>
+#include <linux/of_gpio.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/driver.h>
 #include <linux/regulator/machine.h>
@@ -78,11 +79,6 @@ static int arizona_ldo1_hc_set_voltage_sel(struct regulator_dev *rdev,
        if (ret != 0)
                return ret;
 
-       ret = regmap_update_bits(regmap, ARIZONA_DYNAMIC_FREQUENCY_SCALING_1,
-                                ARIZONA_SUBSYS_MAX_FREQ, val);
-       if (ret != 0)
-               return ret;
-
        if (val)
                return 0;
 
@@ -178,19 +174,38 @@ static const struct regulator_init_data arizona_ldo1_default = {
        .num_consumer_supplies = 1,
 };
 
+static const struct regulator_init_data arizona_ldo1_wm5110 = {
+       .constraints = {
+               .min_uV = 1175000,
+               .max_uV = 1200000,
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS |
+                                 REGULATOR_CHANGE_VOLTAGE,
+       },
+       .num_consumer_supplies = 1,
+};
+
 static int arizona_ldo1_of_get_pdata(struct arizona *arizona,
                                     struct regulator_config *config,
                                     const struct regulator_desc *desc)
 {
        struct arizona_pdata *pdata = &arizona->pdata;
        struct arizona_ldo1 *ldo1 = config->driver_data;
+       struct device_node *np = arizona->dev->of_node;
        struct device_node *init_node, *dcvdd_node;
        struct regulator_init_data *init_data;
 
-       pdata->ldoena = arizona_of_get_named_gpio(arizona, "wlf,ldoena", true);
+       pdata->ldoena = of_get_named_gpio(np, "wlf,ldoena", 0);
+       if (pdata->ldoena < 0) {
+               dev_warn(arizona->dev,
+                        "LDOENA GPIO property missing/malformed: %d\n",
+                        pdata->ldoena);
+               pdata->ldoena = 0;
+       } else {
+               config->ena_gpio_initialized = true;
+       }
 
-       init_node = of_get_child_by_name(arizona->dev->of_node, "ldo1");
-       dcvdd_node = of_parse_phandle(arizona->dev->of_node, "DCVDD-supply", 0);
+       init_node = of_get_child_by_name(np, "ldo1");
+       dcvdd_node = of_parse_phandle(np, "DCVDD-supply", 0);
 
        if (init_node) {
                config->of_node = init_node;
@@ -240,9 +255,16 @@ static int arizona_ldo1_probe(struct platform_device *pdev)
        switch (arizona->type) {
        case WM5102:
        case WM8997:
+       case WM8998:
+       case WM1814:
                desc = &arizona_ldo1_hc;
                ldo1->init_data = arizona_ldo1_dvfs;
                break;
+       case WM5110:
+       case WM8280:
+               desc = &arizona_ldo1;
+               ldo1->init_data = arizona_ldo1_wm5110;
+               break;
        default:
                desc = &arizona_ldo1;
                ldo1->init_data = arizona_ldo1_default;
@@ -262,8 +284,6 @@ static int arizona_ldo1_probe(struct platform_device *pdev)
                        ret = arizona_ldo1_of_get_pdata(arizona, &config, desc);
                        if (ret < 0)
                                return ret;
-
-                       config.ena_gpio_initialized = true;
                }
        }