Skip to content

Commit 3b66e4a

Browse files
agxbroonie
authored andcommitted
regulator: bd718x7: Add enable times
Use the typical startup times from the data sheet so boards get a reasonable default. Not setting any enable time can lead to board hangs when e.g. clocks are enabled too soon afterwards. This fixes gpu power domain resume on the Librem 5. [Moved #defines into driver, seems to be general agreement and avoids any cross tree issues -- broonie] Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com> Link: https://lore.kernel.org/r/41fb2ed19f584f138336344e2297ae7301f72b75.1608316658.git.agx@sigxcpu.org Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent df9716e commit 3b66e4a

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

drivers/regulator/bd718x7-regulator.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,36 @@
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

Comments
 (0)