]> Pileus Git - ~andy/linux/blobdiff - drivers/regulator/lp8788-ldo.c
Merge branch 'postmerge' into for-linus
[~andy/linux] / drivers / regulator / lp8788-ldo.c
index cd5a14ad9263c7d0e095eab699620032d4286987..0ce2c4c194b358fa0a7347674ffe2cc5cfd41b61 100644 (file)
@@ -156,68 +156,6 @@ static const int lp8788_aldo7_vtbl[] = {
        1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1800000,
 };
 
-static enum lp8788_ldo_id lp8788_dldo_id[] = {
-       DLDO1,
-       DLDO2,
-       DLDO3,
-       DLDO4,
-       DLDO5,
-       DLDO6,
-       DLDO7,
-       DLDO8,
-       DLDO9,
-       DLDO10,
-       DLDO11,
-       DLDO12,
-};
-
-static enum lp8788_ldo_id lp8788_aldo_id[] = {
-       ALDO1,
-       ALDO2,
-       ALDO3,
-       ALDO4,
-       ALDO5,
-       ALDO6,
-       ALDO7,
-       ALDO8,
-       ALDO9,
-       ALDO10,
-};
-
-static int lp8788_ldo_enable(struct regulator_dev *rdev)
-{
-       struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
-
-       if (ldo->en_pin) {
-               gpio_set_value(ldo->en_pin->gpio, ENABLE);
-               return 0;
-       } else {
-               return regulator_enable_regmap(rdev);
-       }
-}
-
-static int lp8788_ldo_disable(struct regulator_dev *rdev)
-{
-       struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
-
-       if (ldo->en_pin) {
-               gpio_set_value(ldo->en_pin->gpio, DISABLE);
-               return 0;
-       } else {
-               return regulator_disable_regmap(rdev);
-       }
-}
-
-static int lp8788_ldo_is_enabled(struct regulator_dev *rdev)
-{
-       struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
-
-       if (ldo->en_pin)
-               return gpio_get_value(ldo->en_pin->gpio) ? 1 : 0;
-       else
-               return regulator_is_enabled_regmap(rdev);
-}
-
 static int lp8788_ldo_enable_time(struct regulator_dev *rdev)
 {
        struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
@@ -232,38 +170,21 @@ static int lp8788_ldo_enable_time(struct regulator_dev *rdev)
        return ENABLE_TIME_USEC * val;
 }
 
-static int lp8788_ldo_fixed_get_voltage(struct regulator_dev *rdev)
-{
-       enum lp8788_ldo_id id = rdev_get_id(rdev);
-
-       switch (id) {
-       case ALDO2 ... ALDO5:
-               return 2850000;
-       case DLDO12:
-       case ALDO8 ... ALDO9:
-               return 2500000;
-       case ALDO10:
-               return 1100000;
-       default:
-               return -EINVAL;
-       }
-}
-
 static struct regulator_ops lp8788_ldo_voltage_table_ops = {
        .list_voltage = regulator_list_voltage_table,
        .set_voltage_sel = regulator_set_voltage_sel_regmap,
        .get_voltage_sel = regulator_get_voltage_sel_regmap,
-       .enable = lp8788_ldo_enable,
-       .disable = lp8788_ldo_disable,
-       .is_enabled = lp8788_ldo_is_enabled,
+       .enable = regulator_enable_regmap,
+       .disable = regulator_disable_regmap,
+       .is_enabled = regulator_is_enabled_regmap,
        .enable_time = lp8788_ldo_enable_time,
 };
 
 static struct regulator_ops lp8788_ldo_voltage_fixed_ops = {
-       .get_voltage = lp8788_ldo_fixed_get_voltage,
-       .enable = lp8788_ldo_enable,
-       .disable = lp8788_ldo_disable,
-       .is_enabled = lp8788_ldo_is_enabled,
+       .list_voltage = regulator_list_voltage_linear,
+       .enable = regulator_enable_regmap,
+       .disable = regulator_disable_regmap,
+       .is_enabled = regulator_is_enabled_regmap,
        .enable_time = lp8788_ldo_enable_time,
 };
 
@@ -420,6 +341,7 @@ static struct regulator_desc lp8788_dldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_B,
                .enable_mask = LP8788_EN_DLDO12_M,
+               .min_uV = 2500000,
        },
 };
 
@@ -446,6 +368,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_B,
                .enable_mask = LP8788_EN_ALDO2_M,
+               .min_uV = 2850000,
        },
        {
                .name = "aldo3",
@@ -456,6 +379,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_B,
                .enable_mask = LP8788_EN_ALDO3_M,
+               .min_uV = 2850000,
        },
        {
                .name = "aldo4",
@@ -466,6 +390,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_B,
                .enable_mask = LP8788_EN_ALDO4_M,
+               .min_uV = 2850000,
        },
        {
                .name = "aldo5",
@@ -476,6 +401,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_C,
                .enable_mask = LP8788_EN_ALDO5_M,
+               .min_uV = 2850000,
        },
        {
                .name = "aldo6",
@@ -512,6 +438,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_C,
                .enable_mask = LP8788_EN_ALDO8_M,
+               .min_uV = 2500000,
        },
        {
                .name = "aldo9",
@@ -522,6 +449,7 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_C,
                .enable_mask = LP8788_EN_ALDO9_M,
+               .min_uV = 2500000,
        },
        {
                .name = "aldo10",
@@ -532,46 +460,14 @@ static struct regulator_desc lp8788_aldo_desc[] = {
                .owner = THIS_MODULE,
                .enable_reg = LP8788_EN_LDO_C,
                .enable_mask = LP8788_EN_ALDO10_M,
+               .min_uV = 1100000,
        },
 };
 
-static int lp8788_gpio_request_ldo_en(struct platform_device *pdev,
-                               struct lp8788_ldo *ldo,
-                               enum lp8788_ext_ldo_en_id id)
-{
-       struct device *dev = &pdev->dev;
-       struct lp8788_ldo_enable_pin *pin = ldo->en_pin;
-       int ret, gpio, pinstate;
-       char *name[] = {
-               [EN_ALDO1]   = "LP8788_EN_ALDO1",
-               [EN_ALDO234] = "LP8788_EN_ALDO234",
-               [EN_ALDO5]   = "LP8788_EN_ALDO5",
-               [EN_ALDO7]   = "LP8788_EN_ALDO7",
-               [EN_DLDO7]   = "LP8788_EN_DLDO7",
-               [EN_DLDO911] = "LP8788_EN_DLDO911",
-       };
-
-       gpio = pin->gpio;
-       if (!gpio_is_valid(gpio)) {
-               dev_err(dev, "invalid gpio: %d\n", gpio);
-               return -EINVAL;
-       }
-
-       pinstate = pin->init_state;
-       ret = devm_gpio_request_one(dev, gpio, pinstate, name[id]);
-       if (ret == -EBUSY) {
-               dev_warn(dev, "gpio%d already used\n", gpio);
-               return 0;
-       }
-
-       return ret;
-}
-
 static int lp8788_config_ldo_enable_mode(struct platform_device *pdev,
                                        struct lp8788_ldo *ldo,
                                        enum lp8788_ldo_id id)
 {
-       int ret;
        struct lp8788 *lp = ldo->lp;
        struct lp8788_platform_data *pdata = lp->pdata;
        enum lp8788_ext_ldo_en_id enable_id;
@@ -613,14 +509,7 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev,
                goto set_default_ldo_enable_mode;
 
        ldo->en_pin = pdata->ldo_pin[enable_id];
-
-       ret = lp8788_gpio_request_ldo_en(pdev, ldo, enable_id);
-       if (ret) {
-               ldo->en_pin = NULL;
-               goto set_default_ldo_enable_mode;
-       }
-
-       return ret;
+       return 0;
 
 set_default_ldo_enable_mode:
        return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id], 0);
@@ -640,10 +529,15 @@ static int lp8788_dldo_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        ldo->lp = lp;
-       ret = lp8788_config_ldo_enable_mode(pdev, ldo, lp8788_dldo_id[id]);
+       ret = lp8788_config_ldo_enable_mode(pdev, ldo, id);
        if (ret)
                return ret;
 
+       if (ldo->en_pin) {
+               cfg.ena_gpio = ldo->en_pin->gpio;
+               cfg.ena_gpio_flags = ldo->en_pin->init_state;
+       }
+
        cfg.dev = pdev->dev.parent;
        cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL;
        cfg.driver_data = ldo;
@@ -696,10 +590,15 @@ static int lp8788_aldo_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        ldo->lp = lp;
-       ret = lp8788_config_ldo_enable_mode(pdev, ldo, lp8788_aldo_id[id]);
+       ret = lp8788_config_ldo_enable_mode(pdev, ldo, id + ALDO1);
        if (ret)
                return ret;
 
+       if (ldo->en_pin) {
+               cfg.ena_gpio = ldo->en_pin->gpio;
+               cfg.ena_gpio_flags = ldo->en_pin->init_state;
+       }
+
        cfg.dev = pdev->dev.parent;
        cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL;
        cfg.driver_data = ldo;