Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kim, Milo and committed by
Mark Brown
407945fd 7b74d149

+17 -81
+17 -81
drivers/regulator/lp8788-ldo.c
··· 184 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 187 static int lp8788_ldo_enable_time(struct regulator_dev *rdev) 222 188 { 223 189 struct lp8788_ldo *ldo = rdev_get_drvdata(rdev); ··· 219 253 .list_voltage = regulator_list_voltage_table, 220 254 .set_voltage_sel = regulator_set_voltage_sel_regmap, 221 255 .get_voltage_sel = regulator_get_voltage_sel_regmap, 222 - .enable = lp8788_ldo_enable, 223 - .disable = lp8788_ldo_disable, 224 - .is_enabled = lp8788_ldo_is_enabled, 256 + .enable = regulator_enable_regmap, 257 + .disable = regulator_disable_regmap, 258 + .is_enabled = regulator_is_enabled_regmap, 225 259 .enable_time = lp8788_ldo_enable_time, 226 260 }; 227 261 228 262 static struct regulator_ops lp8788_ldo_voltage_fixed_ops = { 229 263 .get_voltage = lp8788_ldo_fixed_get_voltage, 230 - .enable = lp8788_ldo_enable, 231 - .disable = lp8788_ldo_disable, 232 - .is_enabled = lp8788_ldo_is_enabled, 264 + .enable = regulator_enable_regmap, 265 + .disable = regulator_disable_regmap, 266 + .is_enabled = regulator_is_enabled_regmap, 233 267 .enable_time = lp8788_ldo_enable_time, 234 268 }; 235 269 ··· 501 535 }, 502 536 }; 503 537 504 - static int lp8788_gpio_request_ldo_en(struct platform_device *pdev, 505 - struct lp8788_ldo *ldo, 506 - enum lp8788_ext_ldo_en_id id) 507 - { 508 - struct device *dev = &pdev->dev; 509 - struct lp8788_ldo_enable_pin *pin = ldo->en_pin; 510 - int ret, gpio, pinstate; 511 - char *name[] = { 512 - [EN_ALDO1] = "LP8788_EN_ALDO1", 513 - [EN_ALDO234] = "LP8788_EN_ALDO234", 514 - [EN_ALDO5] = "LP8788_EN_ALDO5", 515 - [EN_ALDO7] = "LP8788_EN_ALDO7", 516 - [EN_DLDO7] = "LP8788_EN_DLDO7", 517 - [EN_DLDO911] = "LP8788_EN_DLDO911", 518 - }; 519 - 520 - gpio = pin->gpio; 521 - if (!gpio_is_valid(gpio)) { 522 - dev_err(dev, "invalid gpio: %d\n", gpio); 523 - return -EINVAL; 524 - } 525 - 526 - pinstate = pin->init_state; 527 - ret = devm_gpio_request_one(dev, gpio, pinstate, name[id]); 528 - if (ret == -EBUSY) { 529 - dev_warn(dev, "gpio%d already used\n", gpio); 530 - return 0; 531 - } 532 - 533 - return ret; 534 - } 535 - 536 538 static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, 537 539 struct lp8788_ldo *ldo, 538 540 enum lp8788_ldo_id id) 539 541 { 540 - int ret; 541 542 struct lp8788 *lp = ldo->lp; 542 543 struct lp8788_platform_data *pdata = lp->pdata; 543 544 enum lp8788_ext_ldo_en_id enable_id; ··· 546 613 goto set_default_ldo_enable_mode; 547 614 548 615 ldo->en_pin = pdata->ldo_pin[enable_id]; 549 - 550 - ret = lp8788_gpio_request_ldo_en(pdev, ldo, enable_id); 551 - if (ret) { 552 - ldo->en_pin = NULL; 553 - goto set_default_ldo_enable_mode; 554 - } 555 - 556 - return ret; 616 + return 0; 557 617 558 618 set_default_ldo_enable_mode: 559 619 return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id], 0); ··· 569 643 ret = lp8788_config_ldo_enable_mode(pdev, ldo, lp8788_dldo_id[id]); 570 644 if (ret) 571 645 return ret; 646 + 647 + if (ldo->en_pin) { 648 + cfg.ena_gpio = ldo->en_pin->gpio; 649 + cfg.ena_gpio_flags = ldo->en_pin->init_state; 650 + } 572 651 573 652 cfg.dev = pdev->dev.parent; 574 653 cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL; ··· 630 699 ret = lp8788_config_ldo_enable_mode(pdev, ldo, lp8788_aldo_id[id]); 631 700 if (ret) 632 701 return ret; 702 + 703 + if (ldo->en_pin) { 704 + cfg.ena_gpio = ldo->en_pin->gpio; 705 + cfg.ena_gpio_flags = ldo->en_pin->init_state; 706 + } 633 707 634 708 cfg.dev = pdev->dev.parent; 635 709 cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL;