1515#include <linux/regulator/of_regulator.h>
1616#include <linux/slab.h>
1717
18+ /* Typical regulator startup times as per data sheet in uS */
19+ #define BD71847_BUCK1_STARTUP_TIME 144
20+ #define BD71847_BUCK2_STARTUP_TIME 162
21+ #define BD71847_BUCK3_STARTUP_TIME 162
22+ #define BD71847_BUCK4_STARTUP_TIME 240
23+ #define BD71847_BUCK5_STARTUP_TIME 270
24+ #define BD71847_BUCK6_STARTUP_TIME 200
25+ #define BD71847_LDO1_STARTUP_TIME 440
26+ #define BD71847_LDO2_STARTUP_TIME 370
27+ #define BD71847_LDO3_STARTUP_TIME 310
28+ #define BD71847_LDO4_STARTUP_TIME 400
29+ #define BD71847_LDO5_STARTUP_TIME 530
30+ #define BD71847_LDO6_STARTUP_TIME 400
31+
32+ #define BD71837_BUCK1_STARTUP_TIME 160
33+ #define BD71837_BUCK2_STARTUP_TIME 180
34+ #define BD71837_BUCK3_STARTUP_TIME 180
35+ #define BD71837_BUCK4_STARTUP_TIME 180
36+ #define BD71837_BUCK5_STARTUP_TIME 160
37+ #define BD71837_BUCK6_STARTUP_TIME 240
38+ #define BD71837_BUCK7_STARTUP_TIME 220
39+ #define BD71837_BUCK8_STARTUP_TIME 200
40+ #define BD71837_LDO1_STARTUP_TIME 440
41+ #define BD71837_LDO2_STARTUP_TIME 370
42+ #define BD71837_LDO3_STARTUP_TIME 310
43+ #define BD71837_LDO4_STARTUP_TIME 400
44+ #define BD71837_LDO5_STARTUP_TIME 310
45+ #define BD71837_LDO6_STARTUP_TIME 400
46+ #define BD71837_LDO7_STARTUP_TIME 530
47+
1848/*
1949 * BD718(37/47/50) have two "enable control modes". ON/OFF can either be
2050 * controlled by software - or by PMIC internal HW state machine. Whether
@@ -613,6 +643,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
613643 .vsel_mask = DVS_BUCK_RUN_MASK ,
614644 .enable_reg = BD718XX_REG_BUCK1_CTRL ,
615645 .enable_mask = BD718XX_BUCK_EN ,
646+ .enable_time = BD71847_BUCK1_STARTUP_TIME ,
616647 .owner = THIS_MODULE ,
617648 .of_parse_cb = buck_set_hw_dvs_levels ,
618649 },
@@ -646,6 +677,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
646677 .vsel_mask = DVS_BUCK_RUN_MASK ,
647678 .enable_reg = BD718XX_REG_BUCK2_CTRL ,
648679 .enable_mask = BD718XX_BUCK_EN ,
680+ .enable_time = BD71847_BUCK2_STARTUP_TIME ,
649681 .owner = THIS_MODULE ,
650682 .of_parse_cb = buck_set_hw_dvs_levels ,
651683 },
@@ -680,6 +712,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
680712 .linear_range_selectors = bd71847_buck3_volt_range_sel ,
681713 .enable_reg = BD718XX_REG_1ST_NODVS_BUCK_CTRL ,
682714 .enable_mask = BD718XX_BUCK_EN ,
715+ .enable_time = BD71847_BUCK3_STARTUP_TIME ,
683716 .owner = THIS_MODULE ,
684717 },
685718 .init = {
@@ -706,6 +739,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
706739 .vsel_range_mask = BD71847_BUCK4_RANGE_MASK ,
707740 .linear_range_selectors = bd71847_buck4_volt_range_sel ,
708741 .enable_mask = BD718XX_BUCK_EN ,
742+ .enable_time = BD71847_BUCK4_STARTUP_TIME ,
709743 .owner = THIS_MODULE ,
710744 },
711745 .init = {
@@ -727,6 +761,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
727761 .vsel_mask = BD718XX_3RD_NODVS_BUCK_MASK ,
728762 .enable_reg = BD718XX_REG_3RD_NODVS_BUCK_CTRL ,
729763 .enable_mask = BD718XX_BUCK_EN ,
764+ .enable_time = BD71847_BUCK5_STARTUP_TIME ,
730765 .owner = THIS_MODULE ,
731766 },
732767 .init = {
@@ -750,6 +785,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
750785 .vsel_mask = BD718XX_4TH_NODVS_BUCK_MASK ,
751786 .enable_reg = BD718XX_REG_4TH_NODVS_BUCK_CTRL ,
752787 .enable_mask = BD718XX_BUCK_EN ,
788+ .enable_time = BD71847_BUCK6_STARTUP_TIME ,
753789 .owner = THIS_MODULE ,
754790 },
755791 .init = {
@@ -775,6 +811,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
775811 .linear_range_selectors = bd718xx_ldo1_volt_range_sel ,
776812 .enable_reg = BD718XX_REG_LDO1_VOLT ,
777813 .enable_mask = BD718XX_LDO_EN ,
814+ .enable_time = BD71847_LDO1_STARTUP_TIME ,
778815 .owner = THIS_MODULE ,
779816 },
780817 .init = {
@@ -796,6 +833,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
796833 .n_voltages = ARRAY_SIZE (ldo_2_volts ),
797834 .enable_reg = BD718XX_REG_LDO2_VOLT ,
798835 .enable_mask = BD718XX_LDO_EN ,
836+ .enable_time = BD71847_LDO2_STARTUP_TIME ,
799837 .owner = THIS_MODULE ,
800838 },
801839 .init = {
@@ -818,6 +856,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
818856 .vsel_mask = BD718XX_LDO3_MASK ,
819857 .enable_reg = BD718XX_REG_LDO3_VOLT ,
820858 .enable_mask = BD718XX_LDO_EN ,
859+ .enable_time = BD71847_LDO3_STARTUP_TIME ,
821860 .owner = THIS_MODULE ,
822861 },
823862 .init = {
@@ -840,6 +879,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
840879 .vsel_mask = BD718XX_LDO4_MASK ,
841880 .enable_reg = BD718XX_REG_LDO4_VOLT ,
842881 .enable_mask = BD718XX_LDO_EN ,
882+ .enable_time = BD71847_LDO4_STARTUP_TIME ,
843883 .owner = THIS_MODULE ,
844884 },
845885 .init = {
@@ -865,6 +905,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
865905 .linear_range_selectors = bd71847_ldo5_volt_range_sel ,
866906 .enable_reg = BD718XX_REG_LDO5_VOLT ,
867907 .enable_mask = BD718XX_LDO_EN ,
908+ .enable_time = BD71847_LDO5_STARTUP_TIME ,
868909 .owner = THIS_MODULE ,
869910 },
870911 .init = {
@@ -889,6 +930,7 @@ static struct bd718xx_regulator_data bd71847_regulators[] = {
889930 .vsel_mask = BD718XX_LDO6_MASK ,
890931 .enable_reg = BD718XX_REG_LDO6_VOLT ,
891932 .enable_mask = BD718XX_LDO_EN ,
933+ .enable_time = BD71847_LDO6_STARTUP_TIME ,
892934 .owner = THIS_MODULE ,
893935 },
894936 .init = {
@@ -942,6 +984,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
942984 .vsel_mask = DVS_BUCK_RUN_MASK ,
943985 .enable_reg = BD718XX_REG_BUCK1_CTRL ,
944986 .enable_mask = BD718XX_BUCK_EN ,
987+ .enable_time = BD71837_BUCK1_STARTUP_TIME ,
945988 .owner = THIS_MODULE ,
946989 .of_parse_cb = buck_set_hw_dvs_levels ,
947990 },
@@ -975,6 +1018,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
9751018 .vsel_mask = DVS_BUCK_RUN_MASK ,
9761019 .enable_reg = BD718XX_REG_BUCK2_CTRL ,
9771020 .enable_mask = BD718XX_BUCK_EN ,
1021+ .enable_time = BD71837_BUCK2_STARTUP_TIME ,
9781022 .owner = THIS_MODULE ,
9791023 .of_parse_cb = buck_set_hw_dvs_levels ,
9801024 },
@@ -1005,6 +1049,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
10051049 .vsel_mask = DVS_BUCK_RUN_MASK ,
10061050 .enable_reg = BD71837_REG_BUCK3_CTRL ,
10071051 .enable_mask = BD718XX_BUCK_EN ,
1052+ .enable_time = BD71837_BUCK3_STARTUP_TIME ,
10081053 .owner = THIS_MODULE ,
10091054 .of_parse_cb = buck_set_hw_dvs_levels ,
10101055 },
@@ -1033,6 +1078,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
10331078 .vsel_mask = DVS_BUCK_RUN_MASK ,
10341079 .enable_reg = BD71837_REG_BUCK4_CTRL ,
10351080 .enable_mask = BD718XX_BUCK_EN ,
1081+ .enable_time = BD71837_BUCK4_STARTUP_TIME ,
10361082 .owner = THIS_MODULE ,
10371083 .of_parse_cb = buck_set_hw_dvs_levels ,
10381084 },
@@ -1065,6 +1111,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
10651111 .linear_range_selectors = bd71837_buck5_volt_range_sel ,
10661112 .enable_reg = BD718XX_REG_1ST_NODVS_BUCK_CTRL ,
10671113 .enable_mask = BD718XX_BUCK_EN ,
1114+ .enable_time = BD71837_BUCK5_STARTUP_TIME ,
10681115 .owner = THIS_MODULE ,
10691116 },
10701117 .init = {
@@ -1088,6 +1135,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
10881135 .vsel_mask = BD71837_BUCK6_MASK ,
10891136 .enable_reg = BD718XX_REG_2ND_NODVS_BUCK_CTRL ,
10901137 .enable_mask = BD718XX_BUCK_EN ,
1138+ .enable_time = BD71837_BUCK6_STARTUP_TIME ,
10911139 .owner = THIS_MODULE ,
10921140 },
10931141 .init = {
@@ -1109,6 +1157,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
11091157 .vsel_mask = BD718XX_3RD_NODVS_BUCK_MASK ,
11101158 .enable_reg = BD718XX_REG_3RD_NODVS_BUCK_CTRL ,
11111159 .enable_mask = BD718XX_BUCK_EN ,
1160+ .enable_time = BD71837_BUCK7_STARTUP_TIME ,
11121161 .owner = THIS_MODULE ,
11131162 },
11141163 .init = {
@@ -1132,6 +1181,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
11321181 .vsel_mask = BD718XX_4TH_NODVS_BUCK_MASK ,
11331182 .enable_reg = BD718XX_REG_4TH_NODVS_BUCK_CTRL ,
11341183 .enable_mask = BD718XX_BUCK_EN ,
1184+ .enable_time = BD71837_BUCK8_STARTUP_TIME ,
11351185 .owner = THIS_MODULE ,
11361186 },
11371187 .init = {
@@ -1157,6 +1207,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
11571207 .linear_range_selectors = bd718xx_ldo1_volt_range_sel ,
11581208 .enable_reg = BD718XX_REG_LDO1_VOLT ,
11591209 .enable_mask = BD718XX_LDO_EN ,
1210+ .enable_time = BD71837_LDO1_STARTUP_TIME ,
11601211 .owner = THIS_MODULE ,
11611212 },
11621213 .init = {
@@ -1178,6 +1229,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
11781229 .n_voltages = ARRAY_SIZE (ldo_2_volts ),
11791230 .enable_reg = BD718XX_REG_LDO2_VOLT ,
11801231 .enable_mask = BD718XX_LDO_EN ,
1232+ .enable_time = BD71837_LDO2_STARTUP_TIME ,
11811233 .owner = THIS_MODULE ,
11821234 },
11831235 .init = {
@@ -1200,6 +1252,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
12001252 .vsel_mask = BD718XX_LDO3_MASK ,
12011253 .enable_reg = BD718XX_REG_LDO3_VOLT ,
12021254 .enable_mask = BD718XX_LDO_EN ,
1255+ .enable_time = BD71837_LDO3_STARTUP_TIME ,
12031256 .owner = THIS_MODULE ,
12041257 },
12051258 .init = {
@@ -1222,6 +1275,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
12221275 .vsel_mask = BD718XX_LDO4_MASK ,
12231276 .enable_reg = BD718XX_REG_LDO4_VOLT ,
12241277 .enable_mask = BD718XX_LDO_EN ,
1278+ .enable_time = BD71837_LDO4_STARTUP_TIME ,
12251279 .owner = THIS_MODULE ,
12261280 },
12271281 .init = {
@@ -1246,6 +1300,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
12461300 .vsel_mask = BD71837_LDO5_MASK ,
12471301 .enable_reg = BD718XX_REG_LDO5_VOLT ,
12481302 .enable_mask = BD718XX_LDO_EN ,
1303+ .enable_time = BD71837_LDO5_STARTUP_TIME ,
12491304 .owner = THIS_MODULE ,
12501305 },
12511306 .init = {
@@ -1272,6 +1327,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
12721327 .vsel_mask = BD718XX_LDO6_MASK ,
12731328 .enable_reg = BD718XX_REG_LDO6_VOLT ,
12741329 .enable_mask = BD718XX_LDO_EN ,
1330+ .enable_time = BD71837_LDO6_STARTUP_TIME ,
12751331 .owner = THIS_MODULE ,
12761332 },
12771333 .init = {
@@ -1296,6 +1352,7 @@ static struct bd718xx_regulator_data bd71837_regulators[] = {
12961352 .vsel_mask = BD71837_LDO7_MASK ,
12971353 .enable_reg = BD71837_REG_LDO7_VOLT ,
12981354 .enable_mask = BD718XX_LDO_EN ,
1355+ .enable_time = BD71837_LDO7_STARTUP_TIME ,
12991356 .owner = THIS_MODULE ,
13001357 },
13011358 .init = {
0 commit comments