@@ -83,6 +83,9 @@ struct da9063_regulator_info {
83
83
84
84
/* DA9063 event detection bit */
85
85
struct reg_field oc_event ;
86
+
87
+ /* DA9063 voltage monitor bit */
88
+ struct reg_field vmon ;
86
89
};
87
90
88
91
/* Macros for LDO */
@@ -148,6 +151,7 @@ struct da9063_regulator {
148
151
struct regmap_field * suspend ;
149
152
struct regmap_field * sleep ;
150
153
struct regmap_field * suspend_sleep ;
154
+ struct regmap_field * vmon ;
151
155
};
152
156
153
157
/* Encapsulates all information for the regulators driver */
@@ -581,91 +585,110 @@ static const struct da9063_regulator_info da9063_regulator_info[] = {
581
585
da9063_buck_a_limits ,
582
586
DA9063_REG_BUCK_ILIM_C , DA9063_BCORE1_ILIM_MASK ),
583
587
DA9063_BUCK_COMMON_FIELDS (BCORE1 ),
588
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BCORE1_MON_EN ),
584
589
},
585
590
{
586
591
DA9063_BUCK (DA9063 , BCORE2 , 300 , 10 , 1570 ,
587
592
da9063_buck_a_limits ,
588
593
DA9063_REG_BUCK_ILIM_C , DA9063_BCORE2_ILIM_MASK ),
589
594
DA9063_BUCK_COMMON_FIELDS (BCORE2 ),
595
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BCORE2_MON_EN ),
590
596
},
591
597
{
592
598
DA9063_BUCK (DA9063 , BPRO , 530 , 10 , 1800 ,
593
599
da9063_buck_a_limits ,
594
600
DA9063_REG_BUCK_ILIM_B , DA9063_BPRO_ILIM_MASK ),
595
601
DA9063_BUCK_COMMON_FIELDS (BPRO ),
602
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BPRO_MON_EN ),
596
603
},
597
604
{
598
605
DA9063_BUCK (DA9063 , BMEM , 800 , 20 , 3340 ,
599
606
da9063_buck_b_limits ,
600
607
DA9063_REG_BUCK_ILIM_A , DA9063_BMEM_ILIM_MASK ),
601
608
DA9063_BUCK_COMMON_FIELDS (BMEM ),
609
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BMEM_MON_EN ),
602
610
},
603
611
{
604
612
DA9063_BUCK (DA9063 , BIO , 800 , 20 , 3340 ,
605
613
da9063_buck_b_limits ,
606
614
DA9063_REG_BUCK_ILIM_A , DA9063_BIO_ILIM_MASK ),
607
615
DA9063_BUCK_COMMON_FIELDS (BIO ),
616
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BIO_MON_EN ),
608
617
},
609
618
{
610
619
DA9063_BUCK (DA9063 , BPERI , 800 , 20 , 3340 ,
611
620
da9063_buck_b_limits ,
612
621
DA9063_REG_BUCK_ILIM_B , DA9063_BPERI_ILIM_MASK ),
613
622
DA9063_BUCK_COMMON_FIELDS (BPERI ),
623
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BPERI_MON_EN ),
614
624
},
615
625
{
616
626
DA9063_BUCK (DA9063 , BCORES_MERGED , 300 , 10 , 1570 ,
617
627
da9063_bcores_merged_limits ,
618
628
DA9063_REG_BUCK_ILIM_C , DA9063_BCORE1_ILIM_MASK ),
619
629
/* BCORES_MERGED uses the same register fields as BCORE1 */
620
630
DA9063_BUCK_COMMON_FIELDS (BCORE1 ),
631
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BCORE1_MON_EN ),
621
632
},
622
633
{
623
634
DA9063_BUCK (DA9063 , BMEM_BIO_MERGED , 800 , 20 , 3340 ,
624
635
da9063_bmem_bio_merged_limits ,
625
636
DA9063_REG_BUCK_ILIM_A , DA9063_BMEM_ILIM_MASK ),
626
637
/* BMEM_BIO_MERGED uses the same register fields as BMEM */
627
638
DA9063_BUCK_COMMON_FIELDS (BMEM ),
639
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_4 , DA9063_BMEM_MON_EN ),
628
640
},
629
641
{
630
642
DA9063_LDO (DA9063 , LDO3 , 900 , 20 , 3440 ),
631
643
.oc_event = BFIELD (DA9063_REG_STATUS_D , DA9063_LDO3_LIM ),
644
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO3_MON_EN ),
632
645
},
633
646
{
634
647
DA9063_LDO (DA9063 , LDO7 , 900 , 50 , 3600 ),
635
648
.oc_event = BFIELD (DA9063_REG_STATUS_D , DA9063_LDO7_LIM ),
649
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO7_MON_EN ),
636
650
},
637
651
{
638
652
DA9063_LDO (DA9063 , LDO8 , 900 , 50 , 3600 ),
639
653
.oc_event = BFIELD (DA9063_REG_STATUS_D , DA9063_LDO8_LIM ),
654
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO8_MON_EN ),
640
655
},
641
656
{
642
657
DA9063_LDO (DA9063 , LDO9 , 950 , 50 , 3600 ),
658
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_3 , DA9063_LDO9_MON_EN ),
643
659
},
644
660
{
645
661
DA9063_LDO (DA9063 , LDO11 , 900 , 50 , 3600 ),
646
662
.oc_event = BFIELD (DA9063_REG_STATUS_D , DA9063_LDO11_LIM ),
663
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_3 , DA9063_LDO11_MON_EN ),
647
664
},
648
665
649
666
/* The following LDOs are present only on DA9063, not on DA9063L */
650
667
{
651
668
DA9063_LDO (DA9063 , LDO1 , 600 , 20 , 1860 ),
669
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO1_MON_EN ),
652
670
},
653
671
{
654
672
DA9063_LDO (DA9063 , LDO2 , 600 , 20 , 1860 ),
673
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO2_MON_EN ),
655
674
},
656
675
{
657
676
DA9063_LDO (DA9063 , LDO4 , 900 , 20 , 3440 ),
658
677
.oc_event = BFIELD (DA9063_REG_STATUS_D , DA9063_LDO4_LIM ),
678
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO4_MON_EN ),
659
679
},
660
680
{
661
681
DA9063_LDO (DA9063 , LDO5 , 900 , 50 , 3600 ),
682
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO5_MON_EN ),
662
683
},
663
684
{
664
685
DA9063_LDO (DA9063 , LDO6 , 900 , 50 , 3600 ),
686
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_2 , DA9063_LDO6_MON_EN ),
665
687
},
666
688
667
689
{
668
690
DA9063_LDO (DA9063 , LDO10 , 900 , 50 , 3600 ),
691
+ .vmon = BFIELD (DA9063_BB_REG_MON_REG_3 , DA9063_LDO10_MON_EN ),
669
692
},
670
693
};
671
694
@@ -932,6 +955,12 @@ static int da9063_regulator_probe(struct platform_device *pdev)
932
955
if (IS_ERR (regl -> suspend_sleep ))
933
956
return PTR_ERR (regl -> suspend_sleep );
934
957
}
958
+ if (regl -> info -> vmon .reg ) {
959
+ regl -> vmon = devm_regmap_field_alloc (& pdev -> dev ,
960
+ da9063 -> regmap , regl -> info -> vmon );
961
+ if (IS_ERR (regl -> vmon ))
962
+ return PTR_ERR (regl -> vmon );
963
+ }
935
964
936
965
/* Register regulator */
937
966
memset (& config , 0 , sizeof (config ));
0 commit comments