diff options
| author | Kim, Milo <Milo.Kim@ti.com> | 2013-02-18 01:51:02 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-03-03 21:37:57 -0500 |
| commit | 407945fd78c3fddef83ba17bf2250112c07dc7c1 (patch) | |
| tree | 28ed41bd35527cbd4df66701e096cc1068305385 | |
| parent | 7b74d149247c8972da1cec3e4c70b67049aaeb69 (diff) | |
regulator: lp8788-ldo: use ena_pin of regulator-core for external control
Regulator core driver provides enable GPIO control for enabling/disabling a
regulator. Now, enable GPIO is shared among regulators.
Use this internal working, so unnecessary code are removed.
GPIO enable pin configurations are added in digital LDO and analog LDO drivers.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Reviewed-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
| -rw-r--r-- | drivers/regulator/lp8788-ldo.c | 98 |
1 files changed, 17 insertions, 81 deletions
diff --git a/drivers/regulator/lp8788-ldo.c b/drivers/regulator/lp8788-ldo.c index cd5a14ad9263..fcba90a4c26c 100644 --- a/drivers/regulator/lp8788-ldo.c +++ b/drivers/regulator/lp8788-ldo.c | |||
| @@ -184,40 +184,6 @@ static enum lp8788_ldo_id lp8788_aldo_id[] = { | |||
| 184 | ALDO10, | 184 | ALDO10, |
| 185 | }; | 185 | }; |
| 186 | 186 | ||
| 187 | static int lp8788_ldo_enable(struct regulator_dev *rdev) | ||
| 188 | { | ||
| 189 | struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); | ||
| 190 | |||
| 191 | if (ldo->en_pin) { | ||
| 192 | gpio_set_value(ldo->en_pin->gpio, ENABLE); | ||
| 193 | return 0; | ||
| 194 | } else { | ||
| 195 | return regulator_enable_regmap(rdev); | ||
| 196 | } | ||
| 197 | } | ||
| 198 | |||
| 199 | static int lp8788_ldo_disable(struct regulator_dev *rdev) | ||
| 200 | { | ||
| 201 | struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); | ||
| 202 | |||
| 203 | if (ldo->en_pin) { | ||
| 204 | gpio_set_value(ldo->en_pin->gpio, DISABLE); | ||
| 205 | return 0; | ||
| 206 | } else { | ||
| 207 | return regulator_disable_regmap(rdev); | ||
| 208 | } | ||
| 209 | } | ||
| 210 | |||
| 211 | static int lp8788_ldo_is_enabled(struct regulator_dev *rdev) | ||
| 212 | { | ||
| 213 | struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); | ||
| 214 | |||
| 215 | if (ldo->en_pin) | ||
| 216 | return gpio_get_value(ldo->en_pin->gpio) ? 1 : 0; | ||
| 217 | else | ||
| 218 | return regulator_is_enabled_regmap(rdev); | ||
| 219 | } | ||
| 220 | |||
| 221 | static int lp8788_ldo_enable_time(struct regulator_dev *rdev) | 187 | static int lp8788_ldo_enable_time(struct regulator_dev *rdev) |
| 222 | { | 188 | { |
| 223 | struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); | 189 | struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); |
| @@ -253,17 +219,17 @@ static struct regulator_ops lp8788_ldo_voltage_table_ops = { | |||
| 253 | .list_voltage = regulator_list_voltage_table, | 219 | .list_voltage = regulator_list_voltage_table, |
| 254 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | 220 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
| 255 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 221 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
| 256 | .enable = lp8788_ldo_enable, | 222 | .enable = regulator_enable_regmap, |
| 257 | .disable = lp8788_ldo_disable, | 223 | .disable = regulator_disable_regmap, |
| 258 | .is_enabled = lp8788_ldo_is_enabled, | 224 | .is_enabled = regulator_is_enabled_regmap, |
| 259 | .enable_time = lp8788_ldo_enable_time, | 225 | .enable_time = lp8788_ldo_enable_time, |
| 260 | }; | 226 | }; |
| 261 | 227 | ||
| 262 | static struct regulator_ops lp8788_ldo_voltage_fixed_ops = { | 228 | static struct regulator_ops lp8788_ldo_voltage_fixed_ops = { |
| 263 | .get_voltage = lp8788_ldo_fixed_get_voltage, | 229 | .get_voltage = lp8788_ldo_fixed_get_voltage, |
| 264 | .enable = lp8788_ldo_enable, | 230 | .enable = regulator_enable_regmap, |
| 265 | .disable = lp8788_ldo_disable, | 231 | .disable = regulator_disable_regmap, |
| 266 | .is_enabled = lp8788_ldo_is_enabled, | 232 | .is_enabled = regulator_is_enabled_regmap, |
| 267 | .enable_time = lp8788_ldo_enable_time, | 233 | .enable_time = lp8788_ldo_enable_time, |
| 268 | }; | 234 | }; |
| 269 | 235 | ||
| @@ -535,43 +501,10 @@ static struct regulator_desc lp8788_aldo_desc[] = { | |||
| 535 | }, | 501 | }, |
| 536 | }; | 502 | }; |
| 537 | 503 | ||
| 538 | static int lp8788_gpio_request_ldo_en(struct platform_device *pdev, | ||
| 539 | struct lp8788_ldo *ldo, | ||
| 540 | enum lp8788_ext_ldo_en_id id) | ||
| 541 | { | ||
| 542 | struct device *dev = &pdev->dev; | ||
| 543 | struct lp8788_ldo_enable_pin *pin = ldo->en_pin; | ||
| 544 | int ret, gpio, pinstate; | ||
| 545 | char *name[] = { | ||
| 546 | [EN_ALDO1] = "LP8788_EN_ALDO1", | ||
| 547 | [EN_ALDO234] = "LP8788_EN_ALDO234", | ||
| 548 | [EN_ALDO5] = "LP8788_EN_ALDO5", | ||
| 549 | [EN_ALDO7] = "LP8788_EN_ALDO7", | ||
| 550 | [EN_DLDO7] = "LP8788_EN_DLDO7", | ||
| 551 | [EN_DLDO911] = "LP8788_EN_DLDO911", | ||
| 552 | }; | ||
| 553 | |||
| 554 | gpio = pin->gpio; | ||
| 555 | if (!gpio_is_valid(gpio)) { | ||
| 556 | dev_err(dev, "invalid gpio: %d\n", gpio); | ||
| 557 | return -EINVAL; | ||
| 558 | } | ||
| 559 | |||
| 560 | pinstate = pin->init_state; | ||
| 561 | ret = devm_gpio_request_one(dev, gpio, pinstate, name[id]); | ||
| 562 | if (ret == -EBUSY) { | ||
| 563 | dev_warn(dev, "gpio%d already used\n", gpio); | ||
| 564 | return 0; | ||
| 565 | } | ||
| 566 | |||
| 567 | return ret; | ||
| 568 | } | ||
| 569 | |||
| 570 | static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, | 504 | static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, |
| 571 | struct lp8788_ldo *ldo, | 505 | struct lp8788_ldo *ldo, |
| 572 | enum lp8788_ldo_id id) | 506 | enum lp8788_ldo_id id) |
| 573 | { | 507 | { |
| 574 | int ret; | ||
| 575 | struct lp8788 *lp = ldo->lp; | 508 | struct lp8788 *lp = ldo->lp; |
| 576 | struct lp8788_platform_data *pdata = lp->pdata; | 509 | struct lp8788_platform_data *pdata = lp->pdata; |
| 577 | enum lp8788_ext_ldo_en_id enable_id; | 510 | enum lp8788_ext_ldo_en_id enable_id; |
| @@ -613,14 +546,7 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, | |||
| 613 | goto set_default_ldo_enable_mode; | 546 | goto set_default_ldo_enable_mode; |
| 614 | 547 | ||
| 615 | ldo->en_pin = pdata->ldo_pin[enable_id]; | 548 | ldo->en_pin = pdata->ldo_pin[enable_id]; |
| 616 | 549 | return 0; | |
| 617 | ret = lp8788_gpio_request_ldo_en(pdev, ldo, enable_id); | ||
| 618 | if (ret) { | ||
| 619 | ldo->en_pin = NULL; | ||
| 620 | goto set_default_ldo_enable_mode; | ||
| 621 | } | ||
| 622 | |||
| 623 | return ret; | ||
| 624 | 550 | ||
| 625 | set_default_ldo_enable_mode: | 551 | set_default_ldo_enable_mode: |
| 626 | return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id], 0); | 552 | return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id], 0); |
| @@ -644,6 +570,11 @@ static int lp8788_dldo_probe(struct platform_device *pdev) | |||
| 644 | if (ret) | 570 | if (ret) |
| 645 | return ret; | 571 | return ret; |
| 646 | 572 | ||
| 573 | if (ldo->en_pin) { | ||
| 574 | cfg.ena_gpio = ldo->en_pin->gpio; | ||
| 575 | cfg.ena_gpio_flags = ldo->en_pin->init_state; | ||
| 576 | } | ||
| 577 | |||
| 647 | cfg.dev = pdev->dev.parent; | 578 | cfg.dev = pdev->dev.parent; |
| 648 | cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL; | 579 | cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL; |
| 649 | cfg.driver_data = ldo; | 580 | cfg.driver_data = ldo; |
| @@ -700,6 +631,11 @@ static int lp8788_aldo_probe(struct platform_device *pdev) | |||
| 700 | if (ret) | 631 | if (ret) |
| 701 | return ret; | 632 | return ret; |
| 702 | 633 | ||
| 634 | if (ldo->en_pin) { | ||
| 635 | cfg.ena_gpio = ldo->en_pin->gpio; | ||
| 636 | cfg.ena_gpio_flags = ldo->en_pin->init_state; | ||
| 637 | } | ||
| 638 | |||
| 703 | cfg.dev = pdev->dev.parent; | 639 | cfg.dev = pdev->dev.parent; |
| 704 | cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL; | 640 | cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL; |
| 705 | cfg.driver_data = ldo; | 641 | cfg.driver_data = ldo; |
