regulator: palma: Disable smps10 boost during suspend
[linux-2.6.git] / drivers / regulator / max8997.c
index f8940c6..17a58c5 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/err.h>
 #include <linux/gpio.h>
 #include <linux/slab.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/driver.h>
 #include <linux/regulator/machine.h>
@@ -129,15 +130,10 @@ static const struct voltage_map_desc *reg_voltage_map[] = {
        [MAX8997_CHARGER_TOPOFF] = &topoff_current_map_desc,
 };
 
-static inline int max8997_get_rid(struct regulator_dev *rdev)
-{
-       return rdev_get_id(rdev);
-}
-
 static int max8997_list_voltage_safeout(struct regulator_dev *rdev,
                unsigned int selector)
 {
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
 
        if (rid == MAX8997_ESAFEOUT1 || rid == MAX8997_ESAFEOUT2) {
                switch (selector) {
@@ -160,7 +156,7 @@ static int max8997_list_voltage_safeout(struct regulator_dev *rdev,
 static int max8997_list_voltage_charger_cv(struct regulator_dev *rdev,
                unsigned int selector)
 {
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
 
        if (rid != MAX8997_CHARGER_CV)
                goto err;
@@ -183,7 +179,7 @@ static int max8997_list_voltage(struct regulator_dev *rdev,
                unsigned int selector)
 {
        const struct voltage_map_desc *desc;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        int val;
 
        if (rid >= ARRAY_SIZE(reg_voltage_map) ||
@@ -204,7 +200,7 @@ static int max8997_list_voltage(struct regulator_dev *rdev,
 static int max8997_get_enable_register(struct regulator_dev *rdev,
                int *reg, int *mask, int *pattern)
 {
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
 
        switch (rid) {
        case MAX8997_LDO1 ... MAX8997_LDO21:
@@ -324,7 +320,7 @@ static int max8997_reg_disable(struct regulator_dev *rdev)
 static int max8997_get_voltage_register(struct regulator_dev *rdev,
                int *_reg, int *_shift, int *_mask)
 {
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        int reg, shift = 0, mask = 0x3f;
 
        switch (rid) {
@@ -385,7 +381,7 @@ static int max8997_get_voltage(struct regulator_dev *rdev)
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
        struct i2c_client *i2c = max8997->iodev->i2c;
        int reg, shift, mask, ret;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        u8 val;
 
        ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
@@ -445,7 +441,7 @@ static int max8997_set_voltage_charger_cv(struct regulator_dev *rdev,
 {
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
        struct i2c_client *i2c = max8997->iodev->i2c;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        int lb, ub;
        int reg, shift = 0, mask, ret = 0;
        u8 val = 0x0;
@@ -502,7 +498,7 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
        struct i2c_client *i2c = max8997->iodev->i2c;
        int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
        const struct voltage_map_desc *desc;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        int reg, shift = 0, mask, ret;
        int i;
        u8 org;
@@ -544,7 +540,8 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
                        rid == MAX8997_BUCK4 || rid == MAX8997_BUCK5) {
                /* If the voltage is increasing */
                if (org < i)
-                       udelay(desc->step * (i - org) / max8997->ramp_delay);
+                       udelay(DIV_ROUND_UP(desc->step * (i - org),
+                                               max8997->ramp_delay));
        }
 
        return ret;
@@ -562,7 +559,7 @@ static int max8997_assess_side_effect(struct regulator_dev *rdev,
                u8 new_val, int *best)
 {
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        u8 *buckx_val[3];
        bool buckx_gpiodvs[3];
        int side_effect[8];
@@ -639,7 +636,7 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
                int min_uV, int max_uV, unsigned *selector)
 {
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        const struct voltage_map_desc *desc;
        int new_val, new_idx, damage, tmp_val, tmp_idx, tmp_dmg;
        bool gpio_dvs_mode = false;
@@ -687,7 +684,7 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
                }
 
                new_val++;
-       } while (desc->min + desc->step + new_val <= desc->max);
+       } while (desc->min + desc->step * new_val <= desc->max);
 
        new_idx = tmp_idx;
        new_val = tmp_val;
@@ -722,7 +719,7 @@ static int max8997_set_voltage_safeout(struct regulator_dev *rdev,
 {
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
        struct i2c_client *i2c = max8997->iodev->i2c;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
        int reg, shift = 0, mask, ret;
        int i = 0;
        u8 val;
@@ -764,7 +761,7 @@ static int max8997_reg_disable_suspend(struct regulator_dev *rdev)
        struct max8997_data *max8997 = rdev_get_drvdata(rdev);
        struct i2c_client *i2c = max8997->iodev->i2c;
        int ret, reg, mask, pattern;
-       int rid = max8997_get_rid(rdev);
+       int rid = rdev_get_id(rdev);
 
        ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
        if (ret)
@@ -906,13 +903,13 @@ static struct regulator_desc regulators[] = {
        },
        regulator_desc_buck(7),
        {
-               .name   = "EN32KHz AP",
+               .name   = "EN32KHz_AP",
                .id     = MAX8997_EN32KHZ_AP,
                .ops    = &max8997_fixedvolt_ops,
                .type   = REGULATOR_VOLTAGE,
                .owner  = THIS_MODULE,
        }, {
-               .name   = "EN32KHz CP",
+               .name   = "EN32KHz_CP",
                .id     = MAX8997_EN32KHZ_CP,
                .ops    = &max8997_fixedvolt_ops,
                .type   = REGULATOR_VOLTAGE,
@@ -936,7 +933,7 @@ static struct regulator_desc regulators[] = {
                .type   = REGULATOR_VOLTAGE,
                .owner   = THIS_MODULE,
        }, {
-               .name   = "CHARGER CV",
+               .name   = "CHARGER_CV",
                .id     = MAX8997_CHARGER_CV,
                .ops    = &max8997_fixedstate_ops,
                .type   = REGULATOR_VOLTAGE,
@@ -948,7 +945,7 @@ static struct regulator_desc regulators[] = {
                .type   = REGULATOR_CURRENT,
                .owner   = THIS_MODULE,
        }, {
-               .name   = "CHARGER TOPOFF",
+               .name   = "CHARGER_TOPOFF",
                .id     = MAX8997_CHARGER_TOPOFF,
                .ops    = &max8997_charger_fixedstate_ops,
                .type   = REGULATOR_CURRENT,
@@ -1144,7 +1141,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
                        regulators[id].n_voltages = 16;
 
                rdev[i] = regulator_register(&regulators[id], max8997->dev,
-                               pdata->regulators[i].initdata, max8997);
+                               pdata->regulators[i].initdata, max8997, NULL);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(max8997->dev, "regulator init failed for %d\n",