Merge tag 'for-3.6-rc3' of git://gitorious.org/linux-pwm/linux-pwm
[firefly-linux-kernel-4.4.55.git] / drivers / regulator / tps62360-regulator.c
index e534269ed44aa2afebcd4cc1c7e509354aa92877..68729a7c8709fbcbc8e88e8cf99924afc2e69f18 100644 (file)
@@ -65,10 +65,8 @@ struct tps62360_chip {
        struct regulator_desc desc;
        struct regulator_dev *rdev;
        struct regmap *regmap;
-       int chip_id;
        int vsel0_gpio;
        int vsel1_gpio;
-       int voltage_base;
        u8 voltage_reg_mask;
        bool en_internal_pulldn;
        bool en_discharge;
@@ -76,7 +74,6 @@ struct tps62360_chip {
        int lru_index[4];
        int curr_vset_vsel[4];
        int curr_vset_id;
-       int change_uv_per_us;
 };
 
 /*
@@ -175,23 +172,6 @@ static int tps62360_dcdc_set_voltage_sel(struct regulator_dev *dev,
        return 0;
 }
 
-static int tps62360_set_voltage_time_sel(struct regulator_dev *rdev,
-               unsigned int old_selector, unsigned int new_selector)
-{
-       struct tps62360_chip *tps = rdev_get_drvdata(rdev);
-       int old_uV, new_uV;
-
-       old_uV = regulator_list_voltage_linear(rdev, old_selector);
-       if (old_uV < 0)
-               return old_uV;
-
-       new_uV = regulator_list_voltage_linear(rdev, new_selector);
-       if (new_uV < 0)
-               return new_uV;
-
-       return DIV_ROUND_UP(abs(old_uV - new_uV), tps->change_uv_per_us);
-}
-
 static int tps62360_set_mode(struct regulator_dev *rdev, unsigned int mode)
 {
        struct tps62360_chip *tps = rdev_get_drvdata(rdev);
@@ -258,7 +238,7 @@ static struct regulator_ops tps62360_dcdc_ops = {
        .set_voltage_sel        = tps62360_dcdc_set_voltage_sel,
        .list_voltage           = regulator_list_voltage_linear,
        .map_voltage            = regulator_map_voltage_linear,
-       .set_voltage_time_sel   = tps62360_set_voltage_time_sel,
+       .set_voltage_time_sel   = regulator_set_voltage_time_sel,
        .set_mode               = tps62360_set_mode,
        .get_mode               = tps62360_get_mode,
 };
@@ -301,7 +281,7 @@ static int __devinit tps62360_init_dcdc(struct tps62360_chip *tps,
        ramp_ctrl = (ramp_ctrl >> 4) & 0x7;
 
        /* ramp mV/us = 32/(2^ramp_ctrl) */
-       tps->change_uv_per_us = DIV_ROUND_UP(32000, BIT(ramp_ctrl));
+       tps->desc.ramp_delay = DIV_ROUND_UP(32000, BIT(ramp_ctrl));
        return ret;
 }
 
@@ -408,13 +388,13 @@ static int __devinit tps62360_probe(struct i2c_client *client,
        switch (chip_id) {
        case TPS62360:
        case TPS62362:
-               tps->voltage_base = TPS62360_BASE_VOLTAGE;
+               tps->desc.min_uV = TPS62360_BASE_VOLTAGE;
                tps->voltage_reg_mask = 0x3F;
                tps->desc.n_voltages = TPS62360_N_VOLTAGES;
                break;
        case TPS62361:
        case TPS62363:
-               tps->voltage_base = TPS62361_BASE_VOLTAGE;
+               tps->desc.min_uV = TPS62361_BASE_VOLTAGE;
                tps->voltage_reg_mask = 0x7F;
                tps->desc.n_voltages = TPS62361_N_VOLTAGES;
                break;
@@ -427,7 +407,6 @@ static int __devinit tps62360_probe(struct i2c_client *client,
        tps->desc.ops = &tps62360_dcdc_ops;
        tps->desc.type = REGULATOR_VOLTAGE;
        tps->desc.owner = THIS_MODULE;
-       tps->desc.min_uV = tps->voltage_base;
        tps->desc.uV_step = 10000;
 
        tps->regmap = devm_regmap_init_i2c(client, &tps62360_regmap_config);
@@ -449,24 +428,24 @@ static int __devinit tps62360_probe(struct i2c_client *client,
                int gpio_flags;
                gpio_flags = (pdata->vsel0_def_state) ?
                                GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
-               ret = gpio_request_one(tps->vsel0_gpio,
+               ret = devm_gpio_request_one(&client->dev, tps->vsel0_gpio,
                                gpio_flags, "tps62360-vsel0");
                if (ret) {
                        dev_err(&client->dev,
                                "%s(): Could not obtain vsel0 GPIO %d: %d\n",
                                __func__, tps->vsel0_gpio, ret);
-                       goto err_gpio0;
+                       return ret;
                }
 
                gpio_flags = (pdata->vsel1_def_state) ?
                                GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
-               ret = gpio_request_one(tps->vsel1_gpio,
+               ret = devm_gpio_request_one(&client->dev, tps->vsel1_gpio,
                                gpio_flags, "tps62360-vsel1");
                if (ret) {
                        dev_err(&client->dev,
                                "%s(): Could not obtain vsel1 GPIO %d: %d\n",
                                __func__, tps->vsel1_gpio, ret);
-                       goto err_gpio1;
+                       return ret;
                }
                tps->valid_gpios = true;
 
@@ -484,7 +463,7 @@ static int __devinit tps62360_probe(struct i2c_client *client,
        if (ret < 0) {
                dev_err(tps->dev, "%s(): Init failed with err = %d\n",
                                __func__, ret);
-               goto err_init;
+               return ret;
        }
 
        config.dev = &client->dev;
@@ -498,21 +477,11 @@ static int __devinit tps62360_probe(struct i2c_client *client,
                dev_err(tps->dev,
                        "%s(): regulator register failed with err %s\n",
                        __func__, id->name);
-               ret = PTR_ERR(rdev);
-               goto err_init;
+               return PTR_ERR(rdev);
        }
 
        tps->rdev = rdev;
        return 0;
-
-err_init:
-       if (gpio_is_valid(tps->vsel1_gpio))
-               gpio_free(tps->vsel1_gpio);
-err_gpio1:
-       if (gpio_is_valid(tps->vsel0_gpio))
-               gpio_free(tps->vsel0_gpio);
-err_gpio0:
-       return ret;
 }
 
 /**
@@ -525,12 +494,6 @@ static int __devexit tps62360_remove(struct i2c_client *client)
 {
        struct tps62360_chip *tps = i2c_get_clientdata(client);
 
-       if (gpio_is_valid(tps->vsel1_gpio))
-               gpio_free(tps->vsel1_gpio);
-
-       if (gpio_is_valid(tps->vsel0_gpio))
-               gpio_free(tps->vsel0_gpio);
-
        regulator_unregister(tps->rdev);
        return 0;
 }