hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/regulator/tps65910-regulator.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * tps65910.c -- TI tps65910
34 *
....@@ -5,12 +6,6 @@
56 *
67 * Author: Graeme Gregory <gg@slimlogic.co.uk>
78 * Author: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
8
- *
9
- * This program is free software; you can redistribute it and/or modify it
10
- * under the terms of the GNU General Public License as published by the
11
- * Free Software Foundation; either version 2 of the License, or (at your
12
- * option) any later version.
13
- *
149 */
1510
1611 #include <linux/kernel.h>
....@@ -395,8 +390,8 @@
395390 static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
396391 {
397392 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
398
- struct tps65910 *mfd = pmic->mfd;
399
- int reg, value, id = rdev_get_id(dev);
393
+ struct regmap *regmap = rdev_get_regmap(dev);
394
+ int reg, id = rdev_get_id(dev);
400395
401396 reg = pmic->get_ctrl_reg(id);
402397 if (reg < 0)
....@@ -404,14 +399,14 @@
404399
405400 switch (mode) {
406401 case REGULATOR_MODE_NORMAL:
407
- return tps65910_reg_update_bits(pmic->mfd, reg,
408
- LDO_ST_MODE_BIT | LDO_ST_ON_BIT,
409
- LDO_ST_ON_BIT);
402
+ return regmap_update_bits(regmap, reg,
403
+ LDO_ST_MODE_BIT | LDO_ST_ON_BIT,
404
+ LDO_ST_ON_BIT);
410405 case REGULATOR_MODE_IDLE:
411
- value = LDO_ST_ON_BIT | LDO_ST_MODE_BIT;
412
- return tps65910_reg_set_bits(mfd, reg, value);
406
+ return regmap_set_bits(regmap, reg,
407
+ LDO_ST_ON_BIT | LDO_ST_MODE_BIT);
413408 case REGULATOR_MODE_STANDBY:
414
- return tps65910_reg_clear_bits(mfd, reg, LDO_ST_ON_BIT);
409
+ return regmap_clear_bits(regmap, reg, LDO_ST_ON_BIT);
415410 }
416411
417412 return -EINVAL;
....@@ -420,13 +415,14 @@
420415 static unsigned int tps65910_get_mode(struct regulator_dev *dev)
421416 {
422417 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
418
+ struct regmap *regmap = rdev_get_regmap(dev);
423419 int ret, reg, value, id = rdev_get_id(dev);
424420
425421 reg = pmic->get_ctrl_reg(id);
426422 if (reg < 0)
427423 return reg;
428424
429
- ret = tps65910_reg_read(pmic->mfd, reg, &value);
425
+ ret = regmap_read(regmap, reg, &value);
430426 if (ret < 0)
431427 return ret;
432428
....@@ -440,20 +436,20 @@
440436
441437 static int tps65910_get_voltage_dcdc_sel(struct regulator_dev *dev)
442438 {
443
- struct tps65910_reg *pmic = rdev_get_drvdata(dev);
439
+ struct regmap *regmap = rdev_get_regmap(dev);
444440 int ret, id = rdev_get_id(dev);
445441 int opvsel = 0, srvsel = 0, vselmax = 0, mult = 0, sr = 0;
446442
447443 switch (id) {
448444 case TPS65910_REG_VDD1:
449
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1_OP, &opvsel);
445
+ ret = regmap_read(regmap, TPS65910_VDD1_OP, &opvsel);
450446 if (ret < 0)
451447 return ret;
452
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1, &mult);
448
+ ret = regmap_read(regmap, TPS65910_VDD1, &mult);
453449 if (ret < 0)
454450 return ret;
455451 mult = (mult & VDD1_VGAIN_SEL_MASK) >> VDD1_VGAIN_SEL_SHIFT;
456
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1_SR, &srvsel);
452
+ ret = regmap_read(regmap, TPS65910_VDD1_SR, &srvsel);
457453 if (ret < 0)
458454 return ret;
459455 sr = opvsel & VDD1_OP_CMD_MASK;
....@@ -462,14 +458,14 @@
462458 vselmax = 75;
463459 break;
464460 case TPS65910_REG_VDD2:
465
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2_OP, &opvsel);
461
+ ret = regmap_read(regmap, TPS65910_VDD2_OP, &opvsel);
466462 if (ret < 0)
467463 return ret;
468
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2, &mult);
464
+ ret = regmap_read(regmap, TPS65910_VDD2, &mult);
469465 if (ret < 0)
470466 return ret;
471467 mult = (mult & VDD2_VGAIN_SEL_MASK) >> VDD2_VGAIN_SEL_SHIFT;
472
- ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2_SR, &srvsel);
468
+ ret = regmap_read(regmap, TPS65910_VDD2_SR, &srvsel);
473469 if (ret < 0)
474470 return ret;
475471 sr = opvsel & VDD2_OP_CMD_MASK;
....@@ -478,12 +474,10 @@
478474 vselmax = 75;
479475 break;
480476 case TPS65911_REG_VDDCTRL:
481
- ret = tps65910_reg_read(pmic->mfd, TPS65911_VDDCTRL_OP,
482
- &opvsel);
477
+ ret = regmap_read(regmap, TPS65911_VDDCTRL_OP, &opvsel);
483478 if (ret < 0)
484479 return ret;
485
- ret = tps65910_reg_read(pmic->mfd, TPS65911_VDDCTRL_SR,
486
- &srvsel);
480
+ ret = regmap_read(regmap, TPS65911_VDDCTRL_SR, &srvsel);
487481 if (ret < 0)
488482 return ret;
489483 sr = opvsel & VDDCTRL_OP_CMD_MASK;
....@@ -519,13 +513,14 @@
519513 static int tps65910_get_voltage_sel(struct regulator_dev *dev)
520514 {
521515 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
516
+ struct regmap *regmap = rdev_get_regmap(dev);
522517 int ret, reg, value, id = rdev_get_id(dev);
523518
524519 reg = pmic->get_ctrl_reg(id);
525520 if (reg < 0)
526521 return reg;
527522
528
- ret = tps65910_reg_read(pmic->mfd, reg, &value);
523
+ ret = regmap_read(regmap, reg, &value);
529524 if (ret < 0)
530525 return ret;
531526
....@@ -561,12 +556,13 @@
561556 static int tps65911_get_voltage_sel(struct regulator_dev *dev)
562557 {
563558 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
559
+ struct regmap *regmap = rdev_get_regmap(dev);
564560 int ret, id = rdev_get_id(dev);
565561 unsigned int value, reg;
566562
567563 reg = pmic->get_ctrl_reg(id);
568564
569
- ret = tps65910_reg_read(pmic->mfd, reg, &value);
565
+ ret = regmap_read(regmap, reg, &value);
570566 if (ret < 0)
571567 return ret;
572568
....@@ -599,7 +595,7 @@
599595 static int tps65910_set_voltage_dcdc_sel(struct regulator_dev *dev,
600596 unsigned selector)
601597 {
602
- struct tps65910_reg *pmic = rdev_get_drvdata(dev);
598
+ struct regmap *regmap = rdev_get_regmap(dev);
603599 int id = rdev_get_id(dev), vsel;
604600 int dcdc_mult = 0;
605601
....@@ -610,10 +606,9 @@
610606 dcdc_mult--;
611607 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
612608
613
- tps65910_reg_update_bits(pmic->mfd, TPS65910_VDD1,
614
- VDD1_VGAIN_SEL_MASK,
615
- dcdc_mult << VDD1_VGAIN_SEL_SHIFT);
616
- tps65910_reg_write(pmic->mfd, TPS65910_VDD1_OP, vsel);
609
+ regmap_update_bits(regmap, TPS65910_VDD1, VDD1_VGAIN_SEL_MASK,
610
+ dcdc_mult << VDD1_VGAIN_SEL_SHIFT);
611
+ regmap_write(regmap, TPS65910_VDD1_OP, vsel);
617612 break;
618613 case TPS65910_REG_VDD2:
619614 dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
....@@ -621,14 +616,14 @@
621616 dcdc_mult--;
622617 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
623618
624
- tps65910_reg_update_bits(pmic->mfd, TPS65910_VDD2,
625
- VDD1_VGAIN_SEL_MASK,
626
- dcdc_mult << VDD2_VGAIN_SEL_SHIFT);
627
- tps65910_reg_write(pmic->mfd, TPS65910_VDD2_OP, vsel);
619
+ regmap_update_bits(regmap, TPS65910_VDD2, VDD1_VGAIN_SEL_MASK,
620
+ dcdc_mult << VDD2_VGAIN_SEL_SHIFT);
621
+ regmap_write(regmap, TPS65910_VDD2_OP, vsel);
628622 break;
629623 case TPS65911_REG_VDDCTRL:
630624 vsel = selector + 3;
631
- tps65910_reg_write(pmic->mfd, TPS65911_VDDCTRL_OP, vsel);
625
+ regmap_write(regmap, TPS65911_VDDCTRL_OP, vsel);
626
+ break;
632627 }
633628
634629 return 0;
....@@ -638,6 +633,7 @@
638633 unsigned selector)
639634 {
640635 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
636
+ struct regmap *regmap = rdev_get_regmap(dev);
641637 int reg, id = rdev_get_id(dev);
642638
643639 reg = pmic->get_ctrl_reg(id);
....@@ -654,11 +650,11 @@
654650 case TPS65910_REG_VAUX2:
655651 case TPS65910_REG_VAUX33:
656652 case TPS65910_REG_VMMC:
657
- return tps65910_reg_update_bits(pmic->mfd, reg, LDO_SEL_MASK,
658
- selector << LDO_SEL_SHIFT);
653
+ return regmap_update_bits(regmap, reg, LDO_SEL_MASK,
654
+ selector << LDO_SEL_SHIFT);
659655 case TPS65910_REG_VBB:
660
- return tps65910_reg_update_bits(pmic->mfd, reg, BBCH_BBSEL_MASK,
661
- selector << BBCH_BBSEL_SHIFT);
656
+ return regmap_update_bits(regmap, reg, BBCH_BBSEL_MASK,
657
+ selector << BBCH_BBSEL_SHIFT);
662658 }
663659
664660 return -EINVAL;
....@@ -668,6 +664,7 @@
668664 unsigned selector)
669665 {
670666 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
667
+ struct regmap *regmap = rdev_get_regmap(dev);
671668 int reg, id = rdev_get_id(dev);
672669
673670 reg = pmic->get_ctrl_reg(id);
....@@ -678,21 +675,21 @@
678675 case TPS65911_REG_LDO1:
679676 case TPS65911_REG_LDO2:
680677 case TPS65911_REG_LDO4:
681
- return tps65910_reg_update_bits(pmic->mfd, reg, LDO1_SEL_MASK,
682
- selector << LDO_SEL_SHIFT);
678
+ return regmap_update_bits(regmap, reg, LDO1_SEL_MASK,
679
+ selector << LDO_SEL_SHIFT);
683680 case TPS65911_REG_LDO3:
684681 case TPS65911_REG_LDO5:
685682 case TPS65911_REG_LDO6:
686683 case TPS65911_REG_LDO7:
687684 case TPS65911_REG_LDO8:
688
- return tps65910_reg_update_bits(pmic->mfd, reg, LDO3_SEL_MASK,
689
- selector << LDO_SEL_SHIFT);
685
+ return regmap_update_bits(regmap, reg, LDO3_SEL_MASK,
686
+ selector << LDO_SEL_SHIFT);
690687 case TPS65910_REG_VIO:
691
- return tps65910_reg_update_bits(pmic->mfd, reg, LDO_SEL_MASK,
692
- selector << LDO_SEL_SHIFT);
688
+ return regmap_update_bits(regmap, reg, LDO_SEL_MASK,
689
+ selector << LDO_SEL_SHIFT);
693690 case TPS65910_REG_VBB:
694
- return tps65910_reg_update_bits(pmic->mfd, reg, BBCH_BBSEL_MASK,
695
- selector << BBCH_BBSEL_SHIFT);
691
+ return regmap_update_bits(regmap, reg, BBCH_BBSEL_MASK,
692
+ selector << BBCH_BBSEL_SHIFT);
696693 }
697694
698695 return -EINVAL;
....@@ -762,7 +759,7 @@
762759 }
763760
764761 /* Regulator ops (except VRTC) */
765
-static struct regulator_ops tps65910_ops_dcdc = {
762
+static const struct regulator_ops tps65910_ops_dcdc = {
766763 .is_enabled = regulator_is_enabled_regmap,
767764 .enable = regulator_enable_regmap,
768765 .disable = regulator_disable_regmap,
....@@ -775,7 +772,7 @@
775772 .map_voltage = regulator_map_voltage_ascend,
776773 };
777774
778
-static struct regulator_ops tps65910_ops_vdd3 = {
775
+static const struct regulator_ops tps65910_ops_vdd3 = {
779776 .is_enabled = regulator_is_enabled_regmap,
780777 .enable = regulator_enable_regmap,
781778 .disable = regulator_disable_regmap,
....@@ -786,7 +783,7 @@
786783 .map_voltage = regulator_map_voltage_ascend,
787784 };
788785
789
-static struct regulator_ops tps65910_ops_vbb = {
786
+static const struct regulator_ops tps65910_ops_vbb = {
790787 .is_enabled = regulator_is_enabled_regmap,
791788 .enable = regulator_enable_regmap,
792789 .disable = regulator_disable_regmap,
....@@ -798,7 +795,7 @@
798795 .map_voltage = regulator_map_voltage_iterate,
799796 };
800797
801
-static struct regulator_ops tps65910_ops = {
798
+static const struct regulator_ops tps65910_ops = {
802799 .is_enabled = regulator_is_enabled_regmap,
803800 .enable = regulator_enable_regmap,
804801 .disable = regulator_disable_regmap,
....@@ -810,7 +807,7 @@
810807 .map_voltage = regulator_map_voltage_ascend,
811808 };
812809
813
-static struct regulator_ops tps65911_ops = {
810
+static const struct regulator_ops tps65911_ops = {
814811 .is_enabled = regulator_is_enabled_regmap,
815812 .enable = regulator_enable_regmap,
816813 .disable = regulator_disable_regmap,
....@@ -855,10 +852,10 @@
855852
856853 /* External EN1 control */
857854 if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1)
858
- ret = tps65910_reg_set_bits(mfd,
855
+ ret = regmap_set_bits(mfd->regmap,
859856 TPS65910_EN1_LDO_ASS + regoffs, bit_pos);
860857 else
861
- ret = tps65910_reg_clear_bits(mfd,
858
+ ret = regmap_clear_bits(mfd->regmap,
862859 TPS65910_EN1_LDO_ASS + regoffs, bit_pos);
863860 if (ret < 0) {
864861 dev_err(mfd->dev,
....@@ -868,10 +865,10 @@
868865
869866 /* External EN2 control */
870867 if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2)
871
- ret = tps65910_reg_set_bits(mfd,
868
+ ret = regmap_set_bits(mfd->regmap,
872869 TPS65910_EN2_LDO_ASS + regoffs, bit_pos);
873870 else
874
- ret = tps65910_reg_clear_bits(mfd,
871
+ ret = regmap_clear_bits(mfd->regmap,
875872 TPS65910_EN2_LDO_ASS + regoffs, bit_pos);
876873 if (ret < 0) {
877874 dev_err(mfd->dev,
....@@ -883,10 +880,10 @@
883880 if ((tps65910_chip_id(mfd) == TPS65910) &&
884881 (id >= TPS65910_REG_VDIG1)) {
885882 if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3)
886
- ret = tps65910_reg_set_bits(mfd,
883
+ ret = regmap_set_bits(mfd->regmap,
887884 TPS65910_EN3_LDO_ASS + regoffs, bit_pos);
888885 else
889
- ret = tps65910_reg_clear_bits(mfd,
886
+ ret = regmap_clear_bits(mfd->regmap,
890887 TPS65910_EN3_LDO_ASS + regoffs, bit_pos);
891888 if (ret < 0) {
892889 dev_err(mfd->dev,
....@@ -898,10 +895,10 @@
898895 /* Return if no external control is selected */
899896 if (!(ext_sleep_config & EXT_SLEEP_CONTROL)) {
900897 /* Clear all sleep controls */
901
- ret = tps65910_reg_clear_bits(mfd,
898
+ ret = regmap_clear_bits(mfd->regmap,
902899 TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
903900 if (!ret)
904
- ret = tps65910_reg_clear_bits(mfd,
901
+ ret = regmap_clear_bits(mfd->regmap,
905902 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
906903 if (ret < 0)
907904 dev_err(mfd->dev,
....@@ -922,39 +919,38 @@
922919 int sr_reg_add = pmic->get_ctrl_reg(id) + 2;
923920 int opvsel, srvsel;
924921
925
- ret = tps65910_reg_read(pmic->mfd, op_reg_add, &opvsel);
922
+ ret = regmap_read(mfd->regmap, op_reg_add, &opvsel);
926923 if (ret < 0)
927924 return ret;
928
- ret = tps65910_reg_read(pmic->mfd, sr_reg_add, &srvsel);
925
+ ret = regmap_read(mfd->regmap, sr_reg_add, &srvsel);
929926 if (ret < 0)
930927 return ret;
931928
932929 if (opvsel & VDD1_OP_CMD_MASK) {
933930 u8 reg_val = srvsel & VDD1_OP_SEL_MASK;
934931
935
- ret = tps65910_reg_write(pmic->mfd, op_reg_add,
936
- reg_val);
932
+ ret = regmap_write(mfd->regmap, op_reg_add, reg_val);
937933 if (ret < 0) {
938934 dev_err(mfd->dev,
939935 "Error in configuring op register\n");
940936 return ret;
941937 }
942938 }
943
- ret = tps65910_reg_write(pmic->mfd, sr_reg_add, 0);
939
+ ret = regmap_write(mfd->regmap, sr_reg_add, 0);
944940 if (ret < 0) {
945941 dev_err(mfd->dev, "Error in setting sr register\n");
946942 return ret;
947943 }
948944 }
949945
950
- ret = tps65910_reg_clear_bits(mfd,
946
+ ret = regmap_clear_bits(mfd->regmap,
951947 TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
952948 if (!ret) {
953949 if (ext_sleep_config & TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
954
- ret = tps65910_reg_set_bits(mfd,
950
+ ret = regmap_set_bits(mfd->regmap,
955951 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
956952 else
957
- ret = tps65910_reg_clear_bits(mfd,
953
+ ret = regmap_clear_bits(mfd->regmap,
958954 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
959955 }
960956 if (ret < 0)
....@@ -1102,7 +1098,7 @@
11021098 platform_set_drvdata(pdev, pmic);
11031099
11041100 /* Give control of all register to control port */
1105
- err = tps65910_reg_set_bits(pmic->mfd, TPS65910_DEVCTRL,
1101
+ err = regmap_set_bits(pmic->mfd->regmap, TPS65910_DEVCTRL,
11061102 DEVCTRL_SR_CTL_I2C_SEL_MASK);
11071103 if (err < 0)
11081104 return err;
....@@ -1118,7 +1114,7 @@
11181114 * voltage level can go higher than expected or crash
11191115 * Workaround: use no synchronization of DCDC clocks
11201116 */
1121
- tps65910_reg_clear_bits(pmic->mfd, TPS65910_DCDCCTRL,
1117
+ regmap_clear_bits(pmic->mfd->regmap, TPS65910_DCDCCTRL,
11221118 DCDCCTRL_DCDCCKSYNC_MASK);
11231119 break;
11241120 case TPS65911:
....@@ -1215,12 +1211,10 @@
12151211
12161212 rdev = devm_regulator_register(&pdev->dev, &pmic->desc[i],
12171213 &config);
1218
- if (IS_ERR(rdev)) {
1219
- dev_err(tps65910->dev,
1220
- "failed to register %s regulator\n",
1221
- pdev->name);
1222
- return PTR_ERR(rdev);
1223
- }
1214
+ if (IS_ERR(rdev))
1215
+ return dev_err_probe(tps65910->dev, PTR_ERR(rdev),
1216
+ "failed to register %s regulator\n",
1217
+ pdev->name);
12241218
12251219 /* Save regulator for cleanup */
12261220 pmic->rdev[i] = rdev;