aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/max8998.c
diff options
context:
space:
mode:
authorMyungJoo Ham <myungjoo.ham@samsung.com>2011-01-11 06:20:05 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2011-01-14 06:38:16 -0500
commit735a3d9efdc5aeebe201008e6655b235c7f02aeb (patch)
treea1083cec498505b1dbd28dd09a73d477965d2d61 /drivers/regulator/max8998.c
parent337ce5d1c5759644cea6c47220ce7e84f0398362 (diff)
regulator: Support MAX8998/LP3974 DVS-GPIO
The previous driver did not support BUCK1-DVS3, BUCK1-DVS4, and BUCK2-DVS2 modes. This patch adds such modes and an option to block setting buck1/2 voltages out of the preset values. Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/regulator/max8998.c')
-rw-r--r--drivers/regulator/max8998.c87
1 files changed, 67 insertions, 20 deletions
diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c
index af52ebfc4927..0ec49ca527a8 100644
--- a/drivers/regulator/max8998.c
+++ b/drivers/regulator/max8998.c
@@ -424,6 +424,9 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev,
424 } 424 }
425 } 425 }
426 426
427 if (pdata->buck_voltage_lock)
428 return -EINVAL;
429
427 /* no predefine regulator found */ 430 /* no predefine regulator found */
428 max8998->buck1_idx = (buck1_last_val % 2) + 2; 431 max8998->buck1_idx = (buck1_last_val % 2) + 2;
429 dev_dbg(max8998->dev, "max8998->buck1_idx:%d\n", 432 dev_dbg(max8998->dev, "max8998->buck1_idx:%d\n",
@@ -451,18 +454,26 @@ buck1_exit:
451 "BUCK2, i:%d buck2_vol1:%d, buck2_vol2:%d\n" 454 "BUCK2, i:%d buck2_vol1:%d, buck2_vol2:%d\n"
452 , i, max8998->buck2_vol[0], max8998->buck2_vol[1]); 455 , i, max8998->buck2_vol[0], max8998->buck2_vol[1]);
453 if (gpio_is_valid(pdata->buck2_set3)) { 456 if (gpio_is_valid(pdata->buck2_set3)) {
454 if (max8998->buck2_vol[0] == i) { 457
455 max8998->buck1_idx = 0; 458 /* check if requested voltage */
456 buck2_gpio_set(pdata->buck2_set3, 0); 459 /* value is already defined */
457 } else { 460 for (j = 0; j < ARRAY_SIZE(max8998->buck2_vol); j++) {
458 max8998->buck1_idx = 1; 461 if (max8998->buck2_vol[j] == i) {
459 ret = max8998_get_voltage_register(rdev, &reg, 462 max8998->buck2_idx = j;
460 &shift, 463 buck2_gpio_set(pdata->buck2_set3, j);
461 &mask); 464 goto buck2_exit;
462 ret = max8998_write_reg(i2c, reg, i); 465 }
463 max8998->buck2_vol[1] = i;
464 buck2_gpio_set(pdata->buck2_set3, 1);
465 } 466 }
467
468 if (pdata->buck_voltage_lock)
469 return -EINVAL;
470
471 max8998_get_voltage_register(rdev,
472 &reg, &shift, &mask);
473 ret = max8998_write_reg(i2c, reg, i);
474 max8998->buck2_vol[max8998->buck2_idx] = i;
475 buck2_gpio_set(pdata->buck2_set3, max8998->buck2_idx);
476buck2_exit:
466 dev_dbg(max8998->dev, "%s: SET3:%d\n", i2c->name, 477 dev_dbg(max8998->dev, "%s: SET3:%d\n", i2c->name,
467 gpio_get_value(pdata->buck2_set3)); 478 gpio_get_value(pdata->buck2_set3));
468 } else { 479 } else {
@@ -707,6 +718,9 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
707 platform_set_drvdata(pdev, max8998); 718 platform_set_drvdata(pdev, max8998);
708 i2c = max8998->iodev->i2c; 719 i2c = max8998->iodev->i2c;
709 720
721 max8998->buck1_idx = pdata->buck1_default_idx;
722 max8998->buck2_idx = pdata->buck2_default_idx;
723
710 /* NOTE: */ 724 /* NOTE: */
711 /* For unused GPIO NOT marked as -1 (thereof equal to 0) WARN_ON */ 725 /* For unused GPIO NOT marked as -1 (thereof equal to 0) WARN_ON */
712 /* will be displayed */ 726 /* will be displayed */
@@ -739,23 +753,46 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
739 i = 0; 753 i = 0;
740 while (buck12_voltage_map_desc.min + 754 while (buck12_voltage_map_desc.min +
741 buck12_voltage_map_desc.step*i 755 buck12_voltage_map_desc.step*i
742 != (pdata->buck1_max_voltage1 / 1000)) 756 < (pdata->buck1_voltage1 / 1000))
743 i++; 757 i++;
744 printk(KERN_ERR "i:%d, buck1_idx:%d\n", i, max8998->buck1_idx);
745 max8998->buck1_vol[0] = i; 758 max8998->buck1_vol[0] = i;
746 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE1, i); 759 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE1, i);
760 if (ret)
761 return ret;
747 762
748 /* Set predefined value for BUCK1 register 2 */ 763 /* Set predefined value for BUCK1 register 2 */
749 i = 0; 764 i = 0;
750 while (buck12_voltage_map_desc.min + 765 while (buck12_voltage_map_desc.min +
751 buck12_voltage_map_desc.step*i 766 buck12_voltage_map_desc.step*i
752 != (pdata->buck1_max_voltage2 / 1000)) 767 < (pdata->buck1_voltage2 / 1000))
753 i++; 768 i++;
754 769
755 max8998->buck1_vol[1] = i; 770 max8998->buck1_vol[1] = i;
756 printk(KERN_ERR "i:%d, buck1_idx:%d\n", i, max8998->buck1_idx); 771 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE2, i);
757 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE2, i) 772 if (ret)
758 + ret; 773 return ret;
774
775 /* Set predefined value for BUCK1 register 3 */
776 i = 0;
777 while (buck12_voltage_map_desc.min +
778 buck12_voltage_map_desc.step*i
779 < (pdata->buck1_voltage3 / 1000))
780 i++;
781
782 max8998->buck1_vol[2] = i;
783 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE3, i);
784 if (ret)
785 return ret;
786
787 /* Set predefined value for BUCK1 register 4 */
788 i = 0;
789 while (buck12_voltage_map_desc.min +
790 buck12_voltage_map_desc.step*i
791 < (pdata->buck1_voltage4 / 1000))
792 i++;
793
794 max8998->buck1_vol[3] = i;
795 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE4, i);
759 if (ret) 796 if (ret)
760 return ret; 797 return ret;
761 798
@@ -772,18 +809,28 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
772 gpio_direction_output(pdata->buck2_set3, 809 gpio_direction_output(pdata->buck2_set3,
773 max8998->buck2_idx & 0x1); 810 max8998->buck2_idx & 0x1);
774 811
775 /* BUCK2 - set preset default voltage value to buck2_vol[0] */ 812 /* BUCK2 register 1 */
776 i = 0; 813 i = 0;
777 while (buck12_voltage_map_desc.min + 814 while (buck12_voltage_map_desc.min +
778 buck12_voltage_map_desc.step*i 815 buck12_voltage_map_desc.step*i
779 != (pdata->buck2_max_voltage / 1000)) 816 < (pdata->buck2_voltage1 / 1000))
780 i++; 817 i++;
781 printk(KERN_ERR "i:%d, buck2_idx:%d\n", i, max8998->buck2_idx);
782 max8998->buck2_vol[0] = i; 818 max8998->buck2_vol[0] = i;
783 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK2_VOLTAGE1, i); 819 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK2_VOLTAGE1, i);
784 if (ret) 820 if (ret)
785 return ret; 821 return ret;
786 822
823 /* BUCK2 register 2 */
824 i = 0;
825 while (buck12_voltage_map_desc.min +
826 buck12_voltage_map_desc.step*i
827 < (pdata->buck2_voltage2 / 1000))
828 i++;
829 printk(KERN_ERR "i2:%d, buck2_idx:%d\n", i, max8998->buck2_idx);
830 max8998->buck2_vol[1] = i;
831 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK2_VOLTAGE2, i);
832 if (ret)
833 return ret;
787 } 834 }
788 835
789 for (i = 0; i < pdata->num_regulators; i++) { 836 for (i = 0; i < pdata->num_regulators; i++) {