Merge remote-tracking branches 'regulator/topic/db8500', 'regulator/topic/gpio',...
authorMark Brown <broonie@linaro.org>
Thu, 23 Jan 2014 12:01:27 +0000 (12:01 +0000)
committerMark Brown <broonie@linaro.org>
Thu, 23 Jan 2014 12:01:27 +0000 (12:01 +0000)
12 files changed:
drivers/mfd/pcf50633-core.c
drivers/regulator/Kconfig
drivers/regulator/Makefile
drivers/regulator/db8500-prcmu.c
drivers/regulator/gpio-regulator.c
drivers/regulator/lp3971.c
drivers/regulator/lp3972.c
drivers/regulator/max14577.c [new file with mode: 0644]
drivers/regulator/max77693.c
drivers/regulator/mc13892-regulator.c
drivers/regulator/pcf50633-regulator.c
drivers/regulator/pfuze100-regulator.c

index 6841d6805fd64a6aaab032ce121d4e3c63b36443..41ab5e34d2acb0a150f5ae9af8aab3774cfd01a3 100644 (file)
@@ -245,7 +245,7 @@ static int pcf50633_probe(struct i2c_client *client,
        for (i = 0; i < PCF50633_NUM_REGULATORS; i++) {
                struct platform_device *pdev;
 
-               pdev = platform_device_alloc("pcf50633-regltr", i);
+               pdev = platform_device_alloc("pcf50633-regulator", i);
                if (!pdev) {
                        dev_err(pcf->dev, "Cannot create regulator %d\n", i);
                        continue;
index 63bc1bab37e3445a2ad3363304e4ac0f164c8e87..77711d4bd3771cae693f89b154c4c8ebaff45f98 100644 (file)
@@ -257,6 +257,13 @@ config REGULATOR_LP8788
        help
          This driver supports LP8788 voltage regulator chip.
 
+config REGULATOR_MAX14577
+       tristate "Maxim 14577 regulator"
+       depends on MFD_MAX14577
+       help
+         This driver controls a Maxim 14577 regulator via I2C bus.
+         The regulators include safeout LDO and current regulator 'CHARGER'.
+
 config REGULATOR_MAX1586
        tristate "Maxim 1586/1587 voltage regulator"
        depends on I2C
@@ -392,7 +399,7 @@ config REGULATOR_PCF50633
         on PCF50633
 
 config REGULATOR_PFUZE100
-       tristate "Support regulators on Freescale PFUZE100 PMIC"
+       tristate "Freescale PFUZE100 regulator driver"
        depends on I2C
        select REGMAP_I2C
        help
index 3bb3a5591b958c7d32c8a97c5f83f6d211c32b09..979f9ddcf259bd5a82b6b5d91f81981902e6185c 100644 (file)
@@ -36,6 +36,7 @@ obj-$(CONFIG_REGULATOR_LP872X) += lp872x.o
 obj-$(CONFIG_REGULATOR_LP8788) += lp8788-buck.o
 obj-$(CONFIG_REGULATOR_LP8788) += lp8788-ldo.o
 obj-$(CONFIG_REGULATOR_LP8755) += lp8755.o
+obj-$(CONFIG_REGULATOR_MAX14577) += max14577.o
 obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o
 obj-$(CONFIG_REGULATOR_MAX8649)        += max8649.o
 obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o
index a53c11a529d5f65dc55e6790167c4d69f5c68de0..846acf240e486d138319cbf26ce9434b71e6bc6e 100644 (file)
@@ -431,17 +431,11 @@ static int db8500_regulator_register(struct platform_device *pdev,
        config.of_node = np;
 
        /* register with the regulator framework */
-       info->rdev = regulator_register(&info->desc, &config);
+       info->rdev = devm_regulator_register(&pdev->dev, &info->desc, &config);
        if (IS_ERR(info->rdev)) {
                err = PTR_ERR(info->rdev);
                dev_err(&pdev->dev, "failed to register %s: err %i\n",
                        info->desc.name, err);
-
-               /* if failing, unregister all earlier regulators */
-               while (--id >= 0) {
-                       info = &dbx500_regulator_info[id];
-                       regulator_unregister(info->rdev);
-               }
                return err;
        }
 
@@ -530,20 +524,8 @@ static int db8500_regulator_probe(struct platform_device *pdev)
 
 static int db8500_regulator_remove(struct platform_device *pdev)
 {
-       int i;
-
        ux500_regulator_debug_exit();
 
-       for (i = 0; i < ARRAY_SIZE(dbx500_regulator_info); i++) {
-               struct dbx500_regulator_info *info;
-               info = &dbx500_regulator_info[i];
-
-               dev_vdbg(rdev_get_dev(info->rdev),
-                       "regulator-%s-remove\n", info->desc.name);
-
-               regulator_unregister(info->rdev);
-       }
-
        return 0;
 }
 
index 234960dc96077389460632cdc832f0c6ea5e69e1..c0a1d00b78c932a6982961334f9e3e9501592c50 100644 (file)
@@ -203,17 +203,18 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np)
        }
        config->nr_states = i;
 
+       config->type = REGULATOR_VOLTAGE;
        ret = of_property_read_string(np, "regulator-type", &regtype);
-       if (ret < 0) {
-               dev_err(dev, "Missing 'regulator-type' property\n");
-               return ERR_PTR(-EINVAL);
+       if (ret >= 0) {
+               if (!strncmp("voltage", regtype, 7))
+                       config->type = REGULATOR_VOLTAGE;
+               else if (!strncmp("current", regtype, 7))
+                       config->type = REGULATOR_CURRENT;
+               else
+                       dev_warn(dev, "Unknown regulator-type '%s'\n",
+                                regtype);
        }
 
-       if (!strncmp("voltage", regtype, 7))
-               config->type = REGULATOR_VOLTAGE;
-       else if (!strncmp("current", regtype, 7))
-               config->type = REGULATOR_CURRENT;
-
        return config;
 }
 
index 947c05ffe0ab9887899a871a1576936b01b8ba3a..3b1102b75071f9d9f73fa0b34db63e43f9784614 100644 (file)
@@ -25,8 +25,6 @@ struct lp3971 {
        struct device *dev;
        struct mutex io_lock;
        struct i2c_client *i2c;
-       int num_regulators;
-       struct regulator_dev **rdev;
 };
 
 static u8 lp3971_reg_read(struct lp3971 *lp3971, u8 reg);
@@ -383,42 +381,27 @@ static int setup_regulators(struct lp3971 *lp3971,
 {
        int i, err;
 
-       lp3971->num_regulators = pdata->num_regulators;
-       lp3971->rdev = kcalloc(pdata->num_regulators,
-                               sizeof(struct regulator_dev *), GFP_KERNEL);
-       if (!lp3971->rdev) {
-               err = -ENOMEM;
-               goto err_nomem;
-       }
-
        /* Instantiate the regulators */
        for (i = 0; i < pdata->num_regulators; i++) {
                struct regulator_config config = { };
                struct lp3971_regulator_subdev *reg = &pdata->regulators[i];
+               struct regulator_dev *rdev;
 
                config.dev = lp3971->dev;
                config.init_data = reg->initdata;
                config.driver_data = lp3971;
 
-               lp3971->rdev[i] = regulator_register(&regulators[reg->id],
-                                                    &config);
-               if (IS_ERR(lp3971->rdev[i])) {
-                       err = PTR_ERR(lp3971->rdev[i]);
+               rdev = devm_regulator_register(lp3971->dev,
+                                              &regulators[reg->id], &config);
+               if (IS_ERR(rdev)) {
+                       err = PTR_ERR(rdev);
                        dev_err(lp3971->dev, "regulator init failed: %d\n",
                                err);
-                       goto error;
+                       return err;
                }
        }
 
        return 0;
-
-error:
-       while (--i >= 0)
-               regulator_unregister(lp3971->rdev[i]);
-       kfree(lp3971->rdev);
-       lp3971->rdev = NULL;
-err_nomem:
-       return err;
 }
 
 static int lp3971_i2c_probe(struct i2c_client *i2c,
@@ -460,19 +443,6 @@ static int lp3971_i2c_probe(struct i2c_client *i2c,
        return 0;
 }
 
-static int lp3971_i2c_remove(struct i2c_client *i2c)
-{
-       struct lp3971 *lp3971 = i2c_get_clientdata(i2c);
-       int i;
-
-       for (i = 0; i < lp3971->num_regulators; i++)
-               regulator_unregister(lp3971->rdev[i]);
-
-       kfree(lp3971->rdev);
-
-       return 0;
-}
-
 static const struct i2c_device_id lp3971_i2c_id[] = {
        { "lp3971", 0 },
        { }
@@ -485,7 +455,6 @@ static struct i2c_driver lp3971_i2c_driver = {
                .owner = THIS_MODULE,
        },
        .probe    = lp3971_i2c_probe,
-       .remove   = lp3971_i2c_remove,
        .id_table = lp3971_i2c_id,
 };
 
index 093e6f44ff8a3e0d9f17eb6cd0001c36d5911b37..aea485afcc1a8a9983781320182ed9078ff9517c 100644 (file)
@@ -22,8 +22,6 @@ struct lp3972 {
        struct device *dev;
        struct mutex io_lock;
        struct i2c_client *i2c;
-       int num_regulators;
-       struct regulator_dev **rdev;
 };
 
 /* LP3972 Control Registers */
@@ -478,41 +476,27 @@ static int setup_regulators(struct lp3972 *lp3972,
 {
        int i, err;
 
-       lp3972->num_regulators = pdata->num_regulators;
-       lp3972->rdev = kcalloc(pdata->num_regulators,
-                               sizeof(struct regulator_dev *), GFP_KERNEL);
-       if (!lp3972->rdev) {
-               err = -ENOMEM;
-               goto err_nomem;
-       }
-
        /* Instantiate the regulators */
        for (i = 0; i < pdata->num_regulators; i++) {
                struct lp3972_regulator_subdev *reg = &pdata->regulators[i];
                struct regulator_config config = { };
+               struct regulator_dev *rdev;
 
                config.dev = lp3972->dev;
                config.init_data = reg->initdata;
                config.driver_data = lp3972;
 
-               lp3972->rdev[i] = regulator_register(&regulators[reg->id],
-                                                    &config);
-               if (IS_ERR(lp3972->rdev[i])) {
-                       err = PTR_ERR(lp3972->rdev[i]);
+               rdev = devm_regulator_register(lp3972->dev,
+                                              &regulators[reg->id], &config);
+               if (IS_ERR(rdev)) {
+                       err = PTR_ERR(rdev);
                        dev_err(lp3972->dev, "regulator init failed: %d\n",
                                err);
-                       goto error;
+                       return err;
                }
        }
 
        return 0;
-error:
-       while (--i >= 0)
-               regulator_unregister(lp3972->rdev[i]);
-       kfree(lp3972->rdev);
-       lp3972->rdev = NULL;
-err_nomem:
-       return err;
 }
 
 static int lp3972_i2c_probe(struct i2c_client *i2c,
@@ -557,18 +541,6 @@ static int lp3972_i2c_probe(struct i2c_client *i2c,
        return 0;
 }
 
-static int lp3972_i2c_remove(struct i2c_client *i2c)
-{
-       struct lp3972 *lp3972 = i2c_get_clientdata(i2c);
-       int i;
-
-       for (i = 0; i < lp3972->num_regulators; i++)
-               regulator_unregister(lp3972->rdev[i]);
-       kfree(lp3972->rdev);
-
-       return 0;
-}
-
 static const struct i2c_device_id lp3972_i2c_id[] = {
        { "lp3972", 0 },
        { }
@@ -581,7 +553,6 @@ static struct i2c_driver lp3972_i2c_driver = {
                .owner = THIS_MODULE,
        },
        .probe    = lp3972_i2c_probe,
-       .remove   = lp3972_i2c_remove,
        .id_table = lp3972_i2c_id,
 };
 
diff --git a/drivers/regulator/max14577.c b/drivers/regulator/max14577.c
new file mode 100644 (file)
index 0000000..b1078ba
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * max14577.c - Regulator driver for the Maxim 14577
+ *
+ * Copyright (C) 2013 Samsung Electronics
+ * Krzysztof Kozlowski <k.kozlowski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/driver.h>
+#include <linux/mfd/max14577.h>
+#include <linux/mfd/max14577-private.h>
+#include <linux/regulator/of_regulator.h>
+
+struct max14577_regulator {
+       struct device *dev;
+       struct max14577 *max14577;
+       struct regulator_dev **regulators;
+};
+
+static int max14577_reg_is_enabled(struct regulator_dev *rdev)
+{
+       int rid = rdev_get_id(rdev);
+       struct regmap *rmap = rdev->regmap;
+       u8 reg_data;
+
+       switch (rid) {
+       case MAX14577_CHARGER:
+               max14577_read_reg(rmap, MAX14577_CHG_REG_CHG_CTRL2, &reg_data);
+               if ((reg_data & CHGCTRL2_MBCHOSTEN_MASK) == 0)
+                       return 0;
+               max14577_read_reg(rmap, MAX14577_CHG_REG_STATUS3, &reg_data);
+               if ((reg_data & STATUS3_CGMBC_MASK) == 0)
+                       return 0;
+               /* MBCHOSTEN and CGMBC are on */
+               return 1;
+       default:
+               return -EINVAL;
+       }
+}
+
+static int max14577_reg_get_current_limit(struct regulator_dev *rdev)
+{
+       u8 reg_data;
+       struct regmap *rmap = rdev->regmap;
+
+       if (rdev_get_id(rdev) != MAX14577_CHARGER)
+               return -EINVAL;
+
+       max14577_read_reg(rmap, MAX14577_CHG_REG_CHG_CTRL4, &reg_data);
+
+       if ((reg_data & CHGCTRL4_MBCICHWRCL_MASK) == 0)
+               return MAX14577_REGULATOR_CURRENT_LIMIT_MIN;
+
+       reg_data = ((reg_data & CHGCTRL4_MBCICHWRCH_MASK) >>
+                       CHGCTRL4_MBCICHWRCH_SHIFT);
+       return MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_START +
+               reg_data * MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP;
+}
+
+static int max14577_reg_set_current_limit(struct regulator_dev *rdev,
+               int min_uA, int max_uA)
+{
+       int i, current_bits = 0xf;
+       u8 reg_data;
+
+       if (rdev_get_id(rdev) != MAX14577_CHARGER)
+               return -EINVAL;
+
+       if (min_uA > MAX14577_REGULATOR_CURRENT_LIMIT_MAX ||
+                       max_uA < MAX14577_REGULATOR_CURRENT_LIMIT_MIN)
+               return -EINVAL;
+
+       if (max_uA < MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_START) {
+               /* Less than 200 mA, so set 90mA (turn only Low Bit off) */
+               u8 reg_data = 0x0 << CHGCTRL4_MBCICHWRCL_SHIFT;
+               return max14577_update_reg(rdev->regmap,
+                               MAX14577_CHG_REG_CHG_CTRL4,
+                               CHGCTRL4_MBCICHWRCL_MASK, reg_data);
+       }
+
+       /* max_uA is in range: <LIMIT_HIGH_START, inifinite>, so search for
+        * valid current starting from LIMIT_MAX. */
+       for (i = MAX14577_REGULATOR_CURRENT_LIMIT_MAX;
+                       i >= MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_START;
+                       i -= MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP) {
+               if (i <= max_uA)
+                       break;
+               current_bits--;
+       }
+       BUG_ON(current_bits < 0); /* Cannot happen */
+       /* Turn Low Bit on (use range 200mA-950 mA) */
+       reg_data = 0x1 << CHGCTRL4_MBCICHWRCL_SHIFT;
+       /* and set proper High Bits */
+       reg_data |= current_bits << CHGCTRL4_MBCICHWRCH_SHIFT;
+
+       return max14577_update_reg(rdev->regmap, MAX14577_CHG_REG_CHG_CTRL4,
+                       CHGCTRL4_MBCICHWRCL_MASK | CHGCTRL4_MBCICHWRCH_MASK,
+                       reg_data);
+}
+
+static struct regulator_ops max14577_safeout_ops = {
+       .is_enabled             = regulator_is_enabled_regmap,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .list_voltage           = regulator_list_voltage_linear,
+};
+
+static struct regulator_ops max14577_charger_ops = {
+       .is_enabled             = max14577_reg_is_enabled,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .get_current_limit      = max14577_reg_get_current_limit,
+       .set_current_limit      = max14577_reg_set_current_limit,
+};
+
+static const struct regulator_desc supported_regulators[] = {
+       [MAX14577_SAFEOUT] = {
+               .name           = "SAFEOUT",
+               .id             = MAX14577_SAFEOUT,
+               .ops            = &max14577_safeout_ops,
+               .type           = REGULATOR_VOLTAGE,
+               .owner          = THIS_MODULE,
+               .n_voltages     = 1,
+               .min_uV         = MAX14577_REGULATOR_SAFEOUT_VOLTAGE,
+               .enable_reg     = MAX14577_REG_CONTROL2,
+               .enable_mask    = CTRL2_SFOUTORD_MASK,
+       },
+       [MAX14577_CHARGER] = {
+               .name           = "CHARGER",
+               .id             = MAX14577_CHARGER,
+               .ops            = &max14577_charger_ops,
+               .type           = REGULATOR_CURRENT,
+               .owner          = THIS_MODULE,
+               .enable_reg     = MAX14577_CHG_REG_CHG_CTRL2,
+               .enable_mask    = CHGCTRL2_MBCHOSTEN_MASK,
+       },
+};
+
+#ifdef CONFIG_OF
+static struct of_regulator_match max14577_regulator_matches[] = {
+       { .name = "SAFEOUT", },
+       { .name = "CHARGER", },
+};
+
+static int max14577_regulator_dt_parse_pdata(struct platform_device *pdev)
+{
+       int ret;
+       struct device_node *np;
+
+       np = of_get_child_by_name(pdev->dev.parent->of_node, "regulators");
+       if (!np) {
+               dev_err(&pdev->dev, "Failed to get child OF node for regulators\n");
+               return -EINVAL;
+       }
+
+       ret = of_regulator_match(&pdev->dev, np, max14577_regulator_matches,
+                       MAX14577_REG_MAX);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "Error parsing regulator init data: %d\n", ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+static inline struct regulator_init_data *match_init_data(int index)
+{
+       return max14577_regulator_matches[index].init_data;
+}
+
+static inline struct device_node *match_of_node(int index)
+{
+       return max14577_regulator_matches[index].of_node;
+}
+#else /* CONFIG_OF */
+static int max14577_regulator_dt_parse_pdata(struct platform_device *pdev)
+{
+       return 0;
+}
+static inline struct regulator_init_data *match_init_data(int index)
+{
+       return NULL;
+}
+
+static inline struct device_node *match_of_node(int index)
+{
+       return NULL;
+}
+#endif /* CONFIG_OF */
+
+
+static int max14577_regulator_probe(struct platform_device *pdev)
+{
+       struct max14577 *max14577 = dev_get_drvdata(pdev->dev.parent);
+       struct max14577_platform_data *pdata = dev_get_platdata(max14577->dev);
+       int i, ret;
+       struct regulator_config config = {};
+
+       ret = max14577_regulator_dt_parse_pdata(pdev);
+       if (ret)
+               return ret;
+
+       config.dev = &pdev->dev;
+       config.regmap = max14577->regmap;
+
+       for (i = 0; i < ARRAY_SIZE(supported_regulators); i++) {
+               struct regulator_dev *regulator;
+               /*
+                * Index of supported_regulators[] is also the id and must
+                * match index of pdata->regulators[].
+                */
+               if (pdata && pdata->regulators) {
+                       config.init_data = pdata->regulators[i].initdata;
+                       config.of_node = pdata->regulators[i].of_node;
+               } else {
+                       config.init_data = match_init_data(i);
+                       config.of_node = match_of_node(i);
+               }
+
+               regulator = devm_regulator_register(&pdev->dev,
+                               &supported_regulators[i], &config);
+               if (IS_ERR(regulator)) {
+                       ret = PTR_ERR(regulator);
+                       dev_err(&pdev->dev,
+                                       "Regulator init failed for ID %d with error: %d\n",
+                                       i, ret);
+                       return ret;
+               }
+       }
+
+       return ret;
+}
+
+static struct platform_driver max14577_regulator_driver = {
+       .driver = {
+                  .owner = THIS_MODULE,
+                  .name = "max14577-regulator",
+                  },
+       .probe  = max14577_regulator_probe,
+};
+
+static int __init max14577_regulator_init(void)
+{
+       BUILD_BUG_ON(MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_START +
+                       MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP * 0xf !=
+                       MAX14577_REGULATOR_CURRENT_LIMIT_MAX);
+       BUILD_BUG_ON(ARRAY_SIZE(supported_regulators) != MAX14577_REG_MAX);
+
+       return platform_driver_register(&max14577_regulator_driver);
+}
+subsys_initcall(max14577_regulator_init);
+
+static void __exit max14577_regulator_exit(void)
+{
+       platform_driver_unregister(&max14577_regulator_driver);
+}
+module_exit(max14577_regulator_exit);
+
+MODULE_AUTHOR("Krzysztof Kozlowski <k.kozlowski@samsung.com>");
+MODULE_DESCRIPTION("MAXIM 14577 regulator driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:max14577-regulator");
index feb20bf4ccab4b056003896773ae86dec5c7219e..5fb899f461d0c47a666715fc6bf3813083ee17a3 100644 (file)
@@ -138,6 +138,7 @@ static struct regulator_ops max77693_charger_ops = {
        .n_voltages     = 4,                                    \
        .ops            = &max77693_safeout_ops,                \
        .type           = REGULATOR_VOLTAGE,                    \
+       .owner          = THIS_MODULE,                          \
        .volt_table     = max77693_safeout_table,               \
        .vsel_reg       = MAX77693_CHG_REG_SAFEOUT_CTRL,        \
        .vsel_mask      = SAFEOUT_CTRL_SAFEOUT##_num##_MASK,    \
index 96c9f80d9550b28ceafdab692fe996588c6dd180..f374fa57220f6d7699c739ea41569eed4538949d 100644 (file)
@@ -274,25 +274,25 @@ static struct mc13xxx_regulator mc13892_regulators[] = {
        MC13892_SW_DEFINE(SW4, SWITCHERS3, SWITCHERS3, mc13892_sw),
        MC13892_FIXED_DEFINE(SWBST, SWITCHERS5, mc13892_swbst),
        MC13892_FIXED_DEFINE(VIOHI, REGULATORMODE0, mc13892_viohi),
-       MC13892_DEFINE_REGU(VPLL, REGULATORMODE0, REGULATORSETTING0,    \
+       MC13892_DEFINE_REGU(VPLL, REGULATORMODE0, REGULATORSETTING0,
                mc13892_vpll),
-       MC13892_DEFINE_REGU(VDIG, REGULATORMODE0, REGULATORSETTING0,    \
+       MC13892_DEFINE_REGU(VDIG, REGULATORMODE0, REGULATORSETTING0,
                mc13892_vdig),
-       MC13892_DEFINE_REGU(VSD, REGULATORMODE1, REGULATORSETTING1,     \
+       MC13892_DEFINE_REGU(VSD, REGULATORMODE1, REGULATORSETTING1,
                mc13892_vsd),
-       MC13892_DEFINE_REGU(VUSB2, REGULATORMODE0, REGULATORSETTING0,   \
+       MC13892_DEFINE_REGU(VUSB2, REGULATORMODE0, REGULATORSETTING0,
                mc13892_vusb2),
-       MC13892_DEFINE_REGU(VVIDEO, REGULATORMODE1, REGULATORSETTING1,  \
+       MC13892_DEFINE_REGU(VVIDEO, REGULATORMODE1, REGULATORSETTING1,
                mc13892_vvideo),
-       MC13892_DEFINE_REGU(VAUDIO, REGULATORMODE1, REGULATORSETTING1,  \
+       MC13892_DEFINE_REGU(VAUDIO, REGULATORMODE1, REGULATORSETTING1,
                mc13892_vaudio),
-       MC13892_DEFINE_REGU(VCAM, REGULATORMODE1, REGULATORSETTING0,    \
+       MC13892_DEFINE_REGU(VCAM, REGULATORMODE1, REGULATORSETTING0,
                mc13892_vcam),
-       MC13892_DEFINE_REGU(VGEN1, REGULATORMODE0, REGULATORSETTING0,   \
+       MC13892_DEFINE_REGU(VGEN1, REGULATORMODE0, REGULATORSETTING0,
                mc13892_vgen1),
-       MC13892_DEFINE_REGU(VGEN2, REGULATORMODE0, REGULATORSETTING0,   \
+       MC13892_DEFINE_REGU(VGEN2, REGULATORMODE0, REGULATORSETTING0,
                mc13892_vgen2),
-       MC13892_DEFINE_REGU(VGEN3, REGULATORMODE1, REGULATORSETTING0,   \
+       MC13892_DEFINE_REGU(VGEN3, REGULATORMODE1, REGULATORSETTING0,
                mc13892_vgen3),
        MC13892_FIXED_DEFINE(VUSB, USB1, mc13892_vusb),
        MC13892_GPO_DEFINE(GPO1, POWERMISC, mc13892_gpo),
@@ -476,8 +476,8 @@ static int mc13892_sw_regulator_set_voltage_sel(struct regulator_dev *rdev,
        }
 
        mc13xxx_lock(priv->mc13xxx);
-       ret = mc13xxx_reg_rmw(priv->mc13xxx, mc13892_regulators[id].vsel_reg, mask,
-                             reg_value);
+       ret = mc13xxx_reg_rmw(priv->mc13xxx, mc13892_regulators[id].vsel_reg,
+                             mask, reg_value);
        mc13xxx_unlock(priv->mc13xxx);
 
        return ret;
index d7da1c15a6da447d699e080a4bfda259f734c5f0..134f90ec9ca1fc80c1728d0ae4d6778edc93e2f6 100644 (file)
@@ -105,7 +105,7 @@ static int pcf50633_regulator_probe(struct platform_device *pdev)
 
 static struct platform_driver pcf50633_regulator_driver = {
        .driver = {
-               .name = "pcf50633-regltr",
+               .name = "pcf50633-regulator",
        },
        .probe = pcf50633_regulator_probe,
 };
index c31e0485de25252c0a32a220fb40630a03db0b11..ab174f20ca11f473c889848b1d7e6b7545a9e3ef 100644 (file)
@@ -309,14 +309,17 @@ static int pfuze_identify(struct pfuze_chip *pfuze_chip)
                return ret;
 
        switch (value & 0x0f) {
-               /* Freescale misprogrammed 1-3% of parts prior to week 8 of 2013 as ID=8 */
-               case 0x8:
-                       dev_info(pfuze_chip->dev, "Assuming misprogrammed ID=0x8");
-               case 0x0:
-                       break;
-               default:
-                       dev_warn(pfuze_chip->dev, "Illegal ID: %x\n", value);
-                       return -ENODEV;
+       /*
+        * Freescale misprogrammed 1-3% of parts prior to week 8 of 2013
+        * as ID=8
+        */
+       case 0x8:
+               dev_info(pfuze_chip->dev, "Assuming misprogrammed ID=0x8");
+       case 0x0:
+               break;
+       default:
+               dev_warn(pfuze_chip->dev, "Illegal ID: %x\n", value);
+               return -ENODEV;
        }
 
        ret = regmap_read(pfuze_chip->regmap, PFUZE100_REVID, &value);
@@ -408,31 +411,18 @@ static int pfuze100_regulator_probe(struct i2c_client *client,
                config.driver_data = pfuze_chip;
                config.of_node = match_of_node(i);
 
-               pfuze_chip->regulators[i] = regulator_register(desc, &config);
+               pfuze_chip->regulators[i] =
+                       devm_regulator_register(&client->dev, desc, &config);
                if (IS_ERR(pfuze_chip->regulators[i])) {
                        dev_err(&client->dev, "register regulator%s failed\n",
                                pfuze100_regulators[i].desc.name);
-                       ret = PTR_ERR(pfuze_chip->regulators[i]);
-                       while (--i >= 0)
-                               regulator_unregister(pfuze_chip->regulators[i]);
-                       return ret;
+                       return PTR_ERR(pfuze_chip->regulators[i]);
                }
        }
 
        return 0;
 }
 
-static int pfuze100_regulator_remove(struct i2c_client *client)
-{
-       int i;
-       struct pfuze_chip *pfuze_chip = i2c_get_clientdata(client);
-
-       for (i = 0; i < PFUZE100_MAX_REGULATOR; i++)
-               regulator_unregister(pfuze_chip->regulators[i]);
-
-       return 0;
-}
-
 static struct i2c_driver pfuze_driver = {
        .id_table = pfuze_device_id,
        .driver = {
@@ -441,7 +431,6 @@ static struct i2c_driver pfuze_driver = {
                .of_match_table = pfuze_dt_ids,
        },
        .probe = pfuze100_regulator_probe,
-       .remove = pfuze100_regulator_remove,
 };
 module_i2c_driver(pfuze_driver);