aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/max8997.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator/max8997.c')
-rw-r--r--drivers/regulator/max8997.c163
1 files changed, 90 insertions, 73 deletions
diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
index db09244bb3e..b88551be452 100644
--- a/drivers/regulator/max8997.c
+++ b/drivers/regulator/max8997.c
@@ -22,7 +22,6 @@
22 */ 22 */
23 23
24#include <linux/bug.h> 24#include <linux/bug.h>
25#include <linux/delay.h>
26#include <linux/err.h> 25#include <linux/err.h>
27#include <linux/gpio.h> 26#include <linux/gpio.h>
28#include <linux/slab.h> 27#include <linux/slab.h>
@@ -278,9 +277,7 @@ static int max8997_reg_is_enabled(struct regulator_dev *rdev)
278 u8 val; 277 u8 val;
279 278
280 ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern); 279 ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
281 if (ret == -EINVAL) 280 if (ret)
282 return 1; /* "not controllable" */
283 else if (ret)
284 return ret; 281 return ret;
285 282
286 ret = max8997_read_reg(i2c, reg, &val); 283 ret = max8997_read_reg(i2c, reg, &val);
@@ -382,7 +379,7 @@ static int max8997_get_voltage_register(struct regulator_dev *rdev,
382 return 0; 379 return 0;
383} 380}
384 381
385static int max8997_get_voltage(struct regulator_dev *rdev) 382static int max8997_get_voltage_sel(struct regulator_dev *rdev)
386{ 383{
387 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 384 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
388 struct i2c_client *i2c = max8997->iodev->i2c; 385 struct i2c_client *i2c = max8997->iodev->i2c;
@@ -400,15 +397,7 @@ static int max8997_get_voltage(struct regulator_dev *rdev)
400 val >>= shift; 397 val >>= shift;
401 val &= mask; 398 val &= mask;
402 399
403 if (rdev->desc && rdev->desc->ops && rdev->desc->ops->list_voltage) 400 return val;
404 return rdev->desc->ops->list_voltage(rdev, val);
405
406 /*
407 * max8997_list_voltage returns value for any rdev with voltage_map,
408 * which works for "CHARGER" and "CHARGER TOPOFF" that do not have
409 * list_voltage ops (they are current regulators).
410 */
411 return max8997_list_voltage(rdev, val);
412} 401}
413 402
414static inline int max8997_get_voltage_proper_val( 403static inline int max8997_get_voltage_proper_val(
@@ -497,9 +486,7 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
497 int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 486 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
498 const struct voltage_map_desc *desc; 487 const struct voltage_map_desc *desc;
499 int rid = rdev_get_id(rdev); 488 int rid = rdev_get_id(rdev);
500 int reg, shift = 0, mask, ret; 489 int i, reg, shift, mask, ret;
501 int i;
502 u8 org;
503 490
504 switch (rid) { 491 switch (rid) {
505 case MAX8997_LDO1 ... MAX8997_LDO21: 492 case MAX8997_LDO1 ... MAX8997_LDO21:
@@ -528,21 +515,50 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
528 if (ret) 515 if (ret)
529 return ret; 516 return ret;
530 517
531 max8997_read_reg(i2c, reg, &org);
532 org = (org & mask) >> shift;
533
534 ret = max8997_update_reg(i2c, reg, i << shift, mask << shift); 518 ret = max8997_update_reg(i2c, reg, i << shift, mask << shift);
535 *selector = i; 519 *selector = i;
536 520
537 if (rid == MAX8997_BUCK1 || rid == MAX8997_BUCK2 || 521 return ret;
538 rid == MAX8997_BUCK4 || rid == MAX8997_BUCK5) { 522}
539 /* If the voltage is increasing */ 523
540 if (org < i) 524static int max8997_set_voltage_ldobuck_time_sel(struct regulator_dev *rdev,
541 udelay(DIV_ROUND_UP(desc->step * (i - org), 525 unsigned int old_selector,
542 max8997->ramp_delay)); 526 unsigned int new_selector)
527{
528 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
529 int rid = rdev_get_id(rdev);
530 const struct voltage_map_desc *desc = reg_voltage_map[rid];
531
532 /* Delay is required only if the voltage is increasing */
533 if (old_selector >= new_selector)
534 return 0;
535
536 /* No need to delay if gpio_dvs_mode */
537 switch (rid) {
538 case MAX8997_BUCK1:
539 if (max8997->buck1_gpiodvs)
540 return 0;
541 break;
542 case MAX8997_BUCK2:
543 if (max8997->buck2_gpiodvs)
544 return 0;
545 break;
546 case MAX8997_BUCK5:
547 if (max8997->buck5_gpiodvs)
548 return 0;
549 break;
543 } 550 }
544 551
545 return ret; 552 switch (rid) {
553 case MAX8997_BUCK1:
554 case MAX8997_BUCK2:
555 case MAX8997_BUCK4:
556 case MAX8997_BUCK5:
557 return DIV_ROUND_UP(desc->step * (new_selector - old_selector),
558 max8997->ramp_delay);
559 }
560
561 return 0;
546} 562}
547 563
548/* 564/*
@@ -749,11 +765,6 @@ static int max8997_set_voltage_safeout(struct regulator_dev *rdev,
749 return ret; 765 return ret;
750} 766}
751 767
752static int max8997_reg_enable_suspend(struct regulator_dev *rdev)
753{
754 return 0;
755}
756
757static int max8997_reg_disable_suspend(struct regulator_dev *rdev) 768static int max8997_reg_disable_suspend(struct regulator_dev *rdev)
758{ 769{
759 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 770 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
@@ -786,9 +797,9 @@ static struct regulator_ops max8997_ldo_ops = {
786 .is_enabled = max8997_reg_is_enabled, 797 .is_enabled = max8997_reg_is_enabled,
787 .enable = max8997_reg_enable, 798 .enable = max8997_reg_enable,
788 .disable = max8997_reg_disable, 799 .disable = max8997_reg_disable,
789 .get_voltage = max8997_get_voltage, 800 .get_voltage_sel = max8997_get_voltage_sel,
790 .set_voltage = max8997_set_voltage_ldobuck, 801 .set_voltage = max8997_set_voltage_ldobuck,
791 .set_suspend_enable = max8997_reg_enable_suspend, 802 .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel,
792 .set_suspend_disable = max8997_reg_disable_suspend, 803 .set_suspend_disable = max8997_reg_disable_suspend,
793}; 804};
794 805
@@ -797,9 +808,9 @@ static struct regulator_ops max8997_buck_ops = {
797 .is_enabled = max8997_reg_is_enabled, 808 .is_enabled = max8997_reg_is_enabled,
798 .enable = max8997_reg_enable, 809 .enable = max8997_reg_enable,
799 .disable = max8997_reg_disable, 810 .disable = max8997_reg_disable,
800 .get_voltage = max8997_get_voltage, 811 .get_voltage_sel = max8997_get_voltage_sel,
801 .set_voltage = max8997_set_voltage_buck, 812 .set_voltage = max8997_set_voltage_buck,
802 .set_suspend_enable = max8997_reg_enable_suspend, 813 .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel,
803 .set_suspend_disable = max8997_reg_disable_suspend, 814 .set_suspend_disable = max8997_reg_disable_suspend,
804}; 815};
805 816
@@ -808,7 +819,6 @@ static struct regulator_ops max8997_fixedvolt_ops = {
808 .is_enabled = max8997_reg_is_enabled, 819 .is_enabled = max8997_reg_is_enabled,
809 .enable = max8997_reg_enable, 820 .enable = max8997_reg_enable,
810 .disable = max8997_reg_disable, 821 .disable = max8997_reg_disable,
811 .set_suspend_enable = max8997_reg_enable_suspend,
812 .set_suspend_disable = max8997_reg_disable_suspend, 822 .set_suspend_disable = max8997_reg_disable_suspend,
813}; 823};
814 824
@@ -817,39 +827,56 @@ static struct regulator_ops max8997_safeout_ops = {
817 .is_enabled = max8997_reg_is_enabled, 827 .is_enabled = max8997_reg_is_enabled,
818 .enable = max8997_reg_enable, 828 .enable = max8997_reg_enable,
819 .disable = max8997_reg_disable, 829 .disable = max8997_reg_disable,
820 .get_voltage = max8997_get_voltage, 830 .get_voltage_sel = max8997_get_voltage_sel,
821 .set_voltage = max8997_set_voltage_safeout, 831 .set_voltage = max8997_set_voltage_safeout,
822 .set_suspend_enable = max8997_reg_enable_suspend,
823 .set_suspend_disable = max8997_reg_disable_suspend, 832 .set_suspend_disable = max8997_reg_disable_suspend,
824}; 833};
825 834
826static struct regulator_ops max8997_fixedstate_ops = { 835static struct regulator_ops max8997_fixedstate_ops = {
827 .list_voltage = max8997_list_voltage_charger_cv, 836 .list_voltage = max8997_list_voltage_charger_cv,
828 .get_voltage = max8997_get_voltage, 837 .get_voltage_sel = max8997_get_voltage_sel,
829 .set_voltage = max8997_set_voltage_charger_cv, 838 .set_voltage = max8997_set_voltage_charger_cv,
830}; 839};
831 840
832static int max8997_set_voltage_ldobuck_wrap(struct regulator_dev *rdev, 841static int max8997_set_current_limit(struct regulator_dev *rdev,
833 int min_uV, int max_uV) 842 int min_uA, int max_uA)
834{ 843{
835 unsigned dummy; 844 unsigned dummy;
845 int rid = rdev_get_id(rdev);
846
847 if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)
848 return -EINVAL;
836 849
837 return max8997_set_voltage_ldobuck(rdev, min_uV, max_uV, &dummy); 850 /* Reuse max8997_set_voltage_ldobuck to set current_limit. */
851 return max8997_set_voltage_ldobuck(rdev, min_uA, max_uA, &dummy);
838} 852}
839 853
854static int max8997_get_current_limit(struct regulator_dev *rdev)
855{
856 int sel, rid = rdev_get_id(rdev);
857
858 if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)
859 return -EINVAL;
860
861 sel = max8997_get_voltage_sel(rdev);
862 if (sel < 0)
863 return sel;
864
865 /* Reuse max8997_list_voltage to get current_limit. */
866 return max8997_list_voltage(rdev, sel);
867}
840 868
841static struct regulator_ops max8997_charger_ops = { 869static struct regulator_ops max8997_charger_ops = {
842 .is_enabled = max8997_reg_is_enabled, 870 .is_enabled = max8997_reg_is_enabled,
843 .enable = max8997_reg_enable, 871 .enable = max8997_reg_enable,
844 .disable = max8997_reg_disable, 872 .disable = max8997_reg_disable,
845 .get_current_limit = max8997_get_voltage, 873 .get_current_limit = max8997_get_current_limit,
846 .set_current_limit = max8997_set_voltage_ldobuck_wrap, 874 .set_current_limit = max8997_set_current_limit,
847}; 875};
848 876
849static struct regulator_ops max8997_charger_fixedstate_ops = { 877static struct regulator_ops max8997_charger_fixedstate_ops = {
850 .is_enabled = max8997_reg_is_enabled, 878 .get_current_limit = max8997_get_current_limit,
851 .get_current_limit = max8997_get_voltage, 879 .set_current_limit = max8997_set_current_limit,
852 .set_current_limit = max8997_set_voltage_ldobuck_wrap,
853}; 880};
854 881
855#define MAX8997_VOLTAGE_REGULATOR(_name, _ops) {\ 882#define MAX8997_VOLTAGE_REGULATOR(_name, _ops) {\
@@ -922,16 +949,15 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
922 return -ENODEV; 949 return -ENODEV;
923 } 950 }
924 951
925 max8997 = kzalloc(sizeof(struct max8997_data), GFP_KERNEL); 952 max8997 = devm_kzalloc(&pdev->dev, sizeof(struct max8997_data),
953 GFP_KERNEL);
926 if (!max8997) 954 if (!max8997)
927 return -ENOMEM; 955 return -ENOMEM;
928 956
929 size = sizeof(struct regulator_dev *) * pdata->num_regulators; 957 size = sizeof(struct regulator_dev *) * pdata->num_regulators;
930 max8997->rdev = kzalloc(size, GFP_KERNEL); 958 max8997->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
931 if (!max8997->rdev) { 959 if (!max8997->rdev)
932 kfree(max8997);
933 return -ENOMEM; 960 return -ENOMEM;
934 }
935 961
936 rdev = max8997->rdev; 962 rdev = max8997->rdev;
937 max8997->dev = &pdev->dev; 963 max8997->dev = &pdev->dev;
@@ -955,7 +981,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
955 pdata->buck1_voltage[i] / 1000 + 981 pdata->buck1_voltage[i] / 1000 +
956 buck1245_voltage_map_desc.step); 982 buck1245_voltage_map_desc.step);
957 if (ret < 0) 983 if (ret < 0)
958 goto err_alloc; 984 goto err_out;
959 985
960 max8997->buck2_vol[i] = ret = 986 max8997->buck2_vol[i] = ret =
961 max8997_get_voltage_proper_val( 987 max8997_get_voltage_proper_val(
@@ -964,7 +990,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
964 pdata->buck2_voltage[i] / 1000 + 990 pdata->buck2_voltage[i] / 1000 +
965 buck1245_voltage_map_desc.step); 991 buck1245_voltage_map_desc.step);
966 if (ret < 0) 992 if (ret < 0)
967 goto err_alloc; 993 goto err_out;
968 994
969 max8997->buck5_vol[i] = ret = 995 max8997->buck5_vol[i] = ret =
970 max8997_get_voltage_proper_val( 996 max8997_get_voltage_proper_val(
@@ -973,7 +999,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
973 pdata->buck5_voltage[i] / 1000 + 999 pdata->buck5_voltage[i] / 1000 +
974 buck1245_voltage_map_desc.step); 1000 buck1245_voltage_map_desc.step);
975 if (ret < 0) 1001 if (ret < 0)
976 goto err_alloc; 1002 goto err_out;
977 1003
978 if (max_buck1 < max8997->buck1_vol[i]) 1004 if (max_buck1 < max8997->buck1_vol[i])
979 max_buck1 = max8997->buck1_vol[i]; 1005 max_buck1 = max8997->buck1_vol[i];
@@ -1006,7 +1032,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1006 !gpio_is_valid(pdata->buck125_gpios[2])) { 1032 !gpio_is_valid(pdata->buck125_gpios[2])) {
1007 dev_err(&pdev->dev, "GPIO NOT VALID\n"); 1033 dev_err(&pdev->dev, "GPIO NOT VALID\n");
1008 ret = -EINVAL; 1034 ret = -EINVAL;
1009 goto err_alloc; 1035 goto err_out;
1010 } 1036 }
1011 1037
1012 ret = gpio_request(pdata->buck125_gpios[0], 1038 ret = gpio_request(pdata->buck125_gpios[0],
@@ -1015,7 +1041,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1015 dev_warn(&pdev->dev, "Duplicated gpio request" 1041 dev_warn(&pdev->dev, "Duplicated gpio request"
1016 " on SET1\n"); 1042 " on SET1\n");
1017 else if (ret) 1043 else if (ret)
1018 goto err_alloc; 1044 goto err_out;
1019 else 1045 else
1020 gpio1set = true; 1046 gpio1set = true;
1021 1047
@@ -1027,7 +1053,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1027 else if (ret) { 1053 else if (ret) {
1028 if (gpio1set) 1054 if (gpio1set)
1029 gpio_free(pdata->buck125_gpios[0]); 1055 gpio_free(pdata->buck125_gpios[0]);
1030 goto err_alloc; 1056 goto err_out;
1031 } else 1057 } else
1032 gpio2set = true; 1058 gpio2set = true;
1033 1059
@@ -1041,7 +1067,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1041 gpio_free(pdata->buck125_gpios[0]); 1067 gpio_free(pdata->buck125_gpios[0]);
1042 if (gpio2set) 1068 if (gpio2set)
1043 gpio_free(pdata->buck125_gpios[1]); 1069 gpio_free(pdata->buck125_gpios[1]);
1044 goto err_alloc; 1070 goto err_out;
1045 } 1071 }
1046 1072
1047 gpio_direction_output(pdata->buck125_gpios[0], 1073 gpio_direction_output(pdata->buck125_gpios[0],
@@ -1110,13 +1136,9 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1110 1136
1111 return 0; 1137 return 0;
1112err: 1138err:
1113 for (i = 0; i < max8997->num_regulators; i++) 1139 while (--i >= 0)
1114 if (rdev[i]) 1140 regulator_unregister(rdev[i]);
1115 regulator_unregister(rdev[i]); 1141err_out:
1116err_alloc:
1117 kfree(max8997->rdev);
1118 kfree(max8997);
1119
1120 return ret; 1142 return ret;
1121} 1143}
1122 1144
@@ -1127,12 +1149,7 @@ static int __devexit max8997_pmic_remove(struct platform_device *pdev)
1127 int i; 1149 int i;
1128 1150
1129 for (i = 0; i < max8997->num_regulators; i++) 1151 for (i = 0; i < max8997->num_regulators; i++)
1130 if (rdev[i]) 1152 regulator_unregister(rdev[i]);
1131 regulator_unregister(rdev[i]);
1132
1133 kfree(max8997->rdev);
1134 kfree(max8997);
1135
1136 return 0; 1153 return 0;
1137} 1154}
1138 1155