aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/palmas-regulator.c109
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
435static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) 435static 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, &reg);
444 &reg);
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)
496static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, 495static 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
591static int palmas_is_enabled_ldo(struct regulator_dev *dev) 590static 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, &reg);
599 ddata->palmas_regs_info[id].ctrl_addr, &reg);
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 = {
643static int palmas_regulator_config_external(struct palmas *palmas, int id, 642static 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, &reg); 673 ret = palmas_smps_read(palmas, addr, &reg);
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, &reg); 718 ret = palmas_smps_read(palmas, addr, &reg);
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, &reg); 744 ret = palmas_ldo_read(palmas, addr, &reg);
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;