diff options
| -rw-r--r-- | drivers/regulator/palmas-regulator.c | 109 |
1 files changed, 56 insertions, 53 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index 05f11b96e17f..f75fb90d7db3 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c | |||
| @@ -434,14 +434,14 @@ static int palmas_ldo_write(struct palmas *palmas, unsigned int reg, | |||
| 434 | 434 | ||
| 435 | static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) | 435 | static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) |
| 436 | { | 436 | { |
| 437 | int id = rdev_get_id(dev); | ||
| 437 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | 438 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); |
| 438 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; | 439 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; |
| 439 | int id = rdev_get_id(dev); | 440 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; |
| 440 | unsigned int reg; | 441 | unsigned int reg; |
| 441 | bool rail_enable = true; | 442 | bool rail_enable = true; |
| 442 | 443 | ||
| 443 | palmas_smps_read(pmic->palmas, ddata->palmas_regs_info[id].ctrl_addr, | 444 | palmas_smps_read(pmic->palmas, rinfo->ctrl_addr, ®); |
| 444 | ®); | ||
| 445 | 445 | ||
| 446 | reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; | 446 | reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; |
| 447 | 447 | ||
| @@ -464,8 +464,7 @@ static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) | |||
| 464 | 464 | ||
| 465 | pmic->current_reg_mode[id] = reg & PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; | 465 | pmic->current_reg_mode[id] = reg & PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; |
| 466 | if (rail_enable) | 466 | if (rail_enable) |
| 467 | palmas_smps_write(pmic->palmas, | 467 | palmas_smps_write(pmic->palmas, rinfo->ctrl_addr, reg); |
| 468 | ddata->palmas_regs_info[id].ctrl_addr, reg); | ||
| 469 | 468 | ||
| 470 | /* Switch the enable value to ensure this is used for enable */ | 469 | /* Switch the enable value to ensure this is used for enable */ |
| 471 | pmic->desc[id].enable_val = pmic->current_reg_mode[id]; | 470 | pmic->desc[id].enable_val = pmic->current_reg_mode[id]; |
| @@ -496,11 +495,11 @@ static unsigned int palmas_get_mode_smps(struct regulator_dev *dev) | |||
| 496 | static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, | 495 | static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, |
| 497 | int ramp_delay) | 496 | int ramp_delay) |
| 498 | { | 497 | { |
| 498 | int id = rdev_get_id(rdev); | ||
| 499 | struct palmas_pmic *pmic = rdev_get_drvdata(rdev); | 499 | struct palmas_pmic *pmic = rdev_get_drvdata(rdev); |
| 500 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; | 500 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; |
| 501 | int id = rdev_get_id(rdev); | 501 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; |
| 502 | unsigned int reg = 0; | 502 | unsigned int reg = 0; |
| 503 | unsigned int addr = ddata->palmas_regs_info[id].tstep_addr; | ||
| 504 | int ret; | 503 | int ret; |
| 505 | 504 | ||
| 506 | /* SMPS3 and SMPS7 do not have tstep_addr setting */ | 505 | /* SMPS3 and SMPS7 do not have tstep_addr setting */ |
| @@ -519,7 +518,7 @@ static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, | |||
| 519 | else | 518 | else |
| 520 | reg = 1; | 519 | reg = 1; |
| 521 | 520 | ||
| 522 | ret = palmas_smps_write(pmic->palmas, addr, reg); | 521 | ret = palmas_smps_write(pmic->palmas, rinfo->tstep_addr, reg); |
| 523 | if (ret < 0) { | 522 | if (ret < 0) { |
| 524 | dev_err(pmic->palmas->dev, "TSTEP write failed: %d\n", ret); | 523 | dev_err(pmic->palmas->dev, "TSTEP write failed: %d\n", ret); |
| 525 | return ret; | 524 | return ret; |
| @@ -590,13 +589,13 @@ static struct regulator_ops tps65917_ops_ext_control_smps = { | |||
| 590 | 589 | ||
| 591 | static int palmas_is_enabled_ldo(struct regulator_dev *dev) | 590 | static int palmas_is_enabled_ldo(struct regulator_dev *dev) |
| 592 | { | 591 | { |
| 592 | int id = rdev_get_id(dev); | ||
| 593 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | 593 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); |
| 594 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; | 594 | struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata; |
| 595 | int id = rdev_get_id(dev); | 595 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; |
| 596 | unsigned int reg; | 596 | unsigned int reg; |
| 597 | 597 | ||
| 598 | palmas_ldo_read(pmic->palmas, | 598 | palmas_ldo_read(pmic->palmas, rinfo->ctrl_addr, ®); |
| 599 | ddata->palmas_regs_info[id].ctrl_addr, ®); | ||
| 600 | 599 | ||
| 601 | reg &= PALMAS_LDO1_CTRL_STATUS; | 600 | reg &= PALMAS_LDO1_CTRL_STATUS; |
| 602 | 601 | ||
| @@ -643,11 +642,12 @@ static struct regulator_ops tps65917_ops_ldo = { | |||
| 643 | static int palmas_regulator_config_external(struct palmas *palmas, int id, | 642 | static int palmas_regulator_config_external(struct palmas *palmas, int id, |
| 644 | struct palmas_reg_init *reg_init) | 643 | struct palmas_reg_init *reg_init) |
| 645 | { | 644 | { |
| 646 | int sleep_id = palmas_regs_info[id].sleep_id; | 645 | struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata; |
| 646 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; | ||
| 647 | int ret; | 647 | int ret; |
| 648 | 648 | ||
| 649 | ret = palmas_ext_control_req_config(palmas, sleep_id, | 649 | ret = palmas_ext_control_req_config(palmas, rinfo->sleep_id, |
| 650 | reg_init->roof_floor, true); | 650 | reg_init->roof_floor, true); |
| 651 | if (ret < 0) | 651 | if (ret < 0) |
| 652 | dev_err(palmas->dev, | 652 | dev_err(palmas->dev, |
| 653 | "Ext control config for regulator %d failed %d\n", | 653 | "Ext control config for regulator %d failed %d\n", |
| @@ -665,12 +665,10 @@ static int palmas_smps_init(struct palmas *palmas, int id, | |||
| 665 | struct palmas_reg_init *reg_init) | 665 | struct palmas_reg_init *reg_init) |
| 666 | { | 666 | { |
| 667 | unsigned int reg; | 667 | unsigned int reg; |
| 668 | unsigned int addr; | ||
| 669 | int ret; | 668 | int ret; |
| 670 | |||
| 671 | struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata; | 669 | struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata; |
| 672 | 670 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; | |
| 673 | addr = ddata->palmas_regs_info[id].ctrl_addr; | 671 | unsigned int addr = rinfo->ctrl_addr; |
| 674 | 672 | ||
| 675 | ret = palmas_smps_read(palmas, addr, ®); | 673 | ret = palmas_smps_read(palmas, addr, ®); |
| 676 | if (ret) | 674 | if (ret) |
| @@ -705,12 +703,11 @@ static int palmas_smps_init(struct palmas *palmas, int id, | |||
| 705 | if (ret) | 703 | if (ret) |
| 706 | return ret; | 704 | return ret; |
| 707 | 705 | ||
| 708 | if (ddata->palmas_regs_info[id].vsel_addr && reg_init->vsel) { | 706 | if (rinfo->vsel_addr && reg_init->vsel) { |
| 709 | addr = ddata->palmas_regs_info[id].vsel_addr; | ||
| 710 | 707 | ||
| 711 | reg = reg_init->vsel; | 708 | reg = reg_init->vsel; |
| 712 | 709 | ||
| 713 | ret = palmas_smps_write(palmas, addr, reg); | 710 | ret = palmas_smps_write(palmas, rinfo->vsel_addr, reg); |
| 714 | if (ret) | 711 | if (ret) |
| 715 | return ret; | 712 | return ret; |
| 716 | } | 713 | } |
| @@ -718,7 +715,6 @@ static int palmas_smps_init(struct palmas *palmas, int id, | |||
| 718 | if (reg_init->roof_floor && (id != PALMAS_REG_SMPS10_OUT1) && | 715 | if (reg_init->roof_floor && (id != PALMAS_REG_SMPS10_OUT1) && |
| 719 | (id != PALMAS_REG_SMPS10_OUT2)) { | 716 | (id != PALMAS_REG_SMPS10_OUT2)) { |
| 720 | /* Enable externally controlled regulator */ | 717 | /* Enable externally controlled regulator */ |
| 721 | addr = ddata->palmas_regs_info[id].ctrl_addr; | ||
| 722 | ret = palmas_smps_read(palmas, addr, ®); | 718 | ret = palmas_smps_read(palmas, addr, ®); |
| 723 | if (ret < 0) | 719 | if (ret < 0) |
| 724 | return ret; | 720 | return ret; |
| @@ -740,10 +736,10 @@ static int palmas_ldo_init(struct palmas *palmas, int id, | |||
| 740 | unsigned int reg; | 736 | unsigned int reg; |
| 741 | unsigned int addr; | 737 | unsigned int addr; |
| 742 | int ret; | 738 | int ret; |
| 743 | |||
| 744 | struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata; | 739 | struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata; |
| 740 | struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id]; | ||
| 745 | 741 | ||
| 746 | addr = ddata->palmas_regs_info[id].ctrl_addr; | 742 | addr = rinfo->ctrl_addr; |
| 747 | 743 | ||
| 748 | ret = palmas_ldo_read(palmas, addr, ®); | 744 | ret = palmas_ldo_read(palmas, addr, ®); |
| 749 | if (ret) | 745 | if (ret) |
| @@ -765,7 +761,6 @@ static int palmas_ldo_init(struct palmas *palmas, int id, | |||
| 765 | 761 | ||
| 766 | if (reg_init->roof_floor) { | 762 | if (reg_init->roof_floor) { |
| 767 | /* Enable externally controlled regulator */ | 763 | /* Enable externally controlled regulator */ |
| 768 | addr = ddata->palmas_regs_info[id].ctrl_addr; | ||
| 769 | ret = palmas_update_bits(palmas, PALMAS_LDO_BASE, | 764 | ret = palmas_update_bits(palmas, PALMAS_LDO_BASE, |
| 770 | addr, PALMAS_LDO1_CTRL_MODE_ACTIVE, | 765 | addr, PALMAS_LDO1_CTRL_MODE_ACTIVE, |
| 771 | PALMAS_LDO1_CTRL_MODE_ACTIVE); | 766 | PALMAS_LDO1_CTRL_MODE_ACTIVE); |
| @@ -786,10 +781,10 @@ static int palmas_extreg_init(struct palmas *palmas, int id, | |||
| 786 | unsigned int addr; | 781 | unsigned int addr; |
