diff options
-rw-r--r-- | drivers/regulator/lp872x.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/regulator/lp872x.c b/drivers/regulator/lp872x.c index ddd60c6b27ea..d86b6a3e750d 100644 --- a/drivers/regulator/lp872x.c +++ b/drivers/regulator/lp872x.c | |||
@@ -86,6 +86,10 @@ | |||
86 | #define EXTERN_DVS_USED 0 | 86 | #define EXTERN_DVS_USED 0 |
87 | #define MAX_DELAY 6 | 87 | #define MAX_DELAY 6 |
88 | 88 | ||
89 | /* Default DVS Mode */ | ||
90 | #define LP8720_DEFAULT_DVS 0 | ||
91 | #define LP8725_DEFAULT_DVS BIT(2) | ||
92 | |||
89 | /* dump registers in regmap-debugfs */ | 93 | /* dump registers in regmap-debugfs */ |
90 | #define MAX_REGISTERS 0x0F | 94 | #define MAX_REGISTERS 0x0F |
91 | 95 | ||
@@ -750,8 +754,13 @@ static int lp872x_check_dvs_validity(struct lp872x *lp) | |||
750 | static int lp872x_init_dvs(struct lp872x *lp) | 754 | static int lp872x_init_dvs(struct lp872x *lp) |
751 | { | 755 | { |
752 | int ret, gpio; | 756 | int ret, gpio; |
753 | struct lp872x_dvs *dvs = lp->pdata->dvs; | 757 | struct lp872x_dvs *dvs = lp->pdata ? lp->pdata->dvs : NULL; |
754 | enum lp872x_dvs_state pinstate; | 758 | enum lp872x_dvs_state pinstate; |
759 | u8 mask[] = { LP8720_EXT_DVS_M, LP8725_DVS1_M | LP8725_DVS2_M }; | ||
760 | u8 default_dvs_mode[] = { LP8720_DEFAULT_DVS, LP8725_DEFAULT_DVS }; | ||
761 | |||
762 | if (!dvs) | ||
763 | goto set_default_dvs_mode; | ||
755 | 764 | ||
756 | ret = lp872x_check_dvs_validity(lp); | 765 | ret = lp872x_check_dvs_validity(lp); |
757 | if (ret) { | 766 | if (ret) { |
@@ -776,6 +785,10 @@ static int lp872x_init_dvs(struct lp872x *lp) | |||
776 | lp->dvs_gpio = gpio; | 785 | lp->dvs_gpio = gpio; |
777 | 786 | ||
778 | return 0; | 787 | return 0; |
788 | |||
789 | set_default_dvs_mode: | ||
790 | return lp872x_update_bits(lp, LP872X_GENERAL_CFG, mask[lp->chipid], | ||
791 | default_dvs_mode[lp->chipid]); | ||
779 | } | 792 | } |
780 | 793 | ||
781 | static int lp872x_config(struct lp872x *lp) | 794 | static int lp872x_config(struct lp872x *lp) |