regulator: Fix restoring pmic.dcdcx_hib_mode settings in wm8350_dcdc_set_suspend_enable
PATCH 1/2 regulator: Fix restoring pmic.dcdcx_hib_mode settings in wm8350_dcdc_set_suspend_enable
What we want is to restore wm8350->pmic.dcdcx_hib_mode settings to WM8350_DCDCx_LOW_POWER registers. Current code also clears all other bits of WM8350_DCDCx_LOW_POWER registers which is wrong.
--- drivers/regulator/wm8350-regulator.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/regulator/wm8350-regulator.c +4 -4
@@ -495,25 +495,25 @@ static int wm8350_dcdc_set_suspend_enable(struct regulator_dev *rdev) val =wm8350_reg_read (wm8350,WM8350_DCDC1_LOW_POWER ) & ~WM8350_DCDC_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC1_LOW_POWER , - wm8350->pmic.dcdc1_hib_mode); + val | wm8350->pmic.dcdc1_hib_mode);break ;case WM8350_DCDC_3 : val =wm8350_reg_read (wm8350,WM8350_DCDC3_LOW_POWER ) & ~WM8350_DCDC_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC3_LOW_POWER , - wm8350->pmic.dcdc3_hib_mode); + val | wm8350->pmic.dcdc3_hib_mode);break ;case WM8350_DCDC_4 : val =wm8350_reg_read (wm8350,WM8350_DCDC4_LOW_POWER ) & ~WM8350_DCDC_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC4_LOW_POWER , - wm8350->pmic.dcdc4_hib_mode); + val | wm8350->pmic.dcdc4_hib_mode);break ;case WM8350_DCDC_6 : val =wm8350_reg_read (wm8350,WM8350_DCDC6_LOW_POWER ) & ~WM8350_DCDC_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC6_LOW_POWER , - wm8350->pmic.dcdc6_hib_mode); + val | wm8350->pmic.dcdc6_hib_mode);break ;case WM8350_DCDC_2 :case WM8350_DCDC_5 :
Signature · 1 line
1.7.5.4
PATCH 2/2 regulator: Do proper shift to set correct bit for DC[2|5]_HIB_MODE setting
DC[2|5]_HIB_MODE is BIT 12 of DCDC[2|5] Control register. WM8350_DC2_HIB_MODE_ACTIVE/WM8350_DC2_HIB_MODE_DISABLE are defined as 1/0. Thus we need to left shift WM8350_DC2_HIB_MODE_SHIFT bits.
--- drivers/regulator/wm8350-regulator.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
drivers/regulator/wm8350-regulator.c +6 -6
@@ -575,13 +575,13 @@ static int wm8350_dcdc25_set_suspend_enable(struct regulator_dev *rdev) val =wm8350_reg_read (wm8350,WM8350_DCDC2_CONTROL ) & ~WM8350_DC2_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC2_CONTROL , val | -WM8350_DC2_HIB_MODE_ACTIVE ); + (WM8350_DC2_HIB_MODE_ACTIVE <<WM8350_DC2_HIB_MODE_SHIFT ));break ;case WM8350_DCDC_5 : val =wm8350_reg_read (wm8350,WM8350_DCDC5_CONTROL ) - & ~WM8350_DC2_HIB_MODE_MASK ; + & ~WM8350_DC5_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC5_CONTROL , val | -WM8350_DC5_HIB_MODE_ACTIVE ); + (WM8350_DC5_HIB_MODE_ACTIVE <<WM8350_DC5_HIB_MODE_SHIFT ));break ;default :return -EINVAL ;
@@ -600,13 +600,13 @@ static int wm8350_dcdc25_set_suspend_disable(struct regulator_dev *rdev) val =wm8350_reg_read (wm8350,WM8350_DCDC2_CONTROL ) & ~WM8350_DC2_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC2_CONTROL , val | -WM8350_DC2_HIB_MODE_DISABLE ); + (WM8350_DC2_HIB_MODE_DISABLE <<WM8350_DC2_HIB_MODE_SHIFT ));break ;case WM8350_DCDC_5 : val =wm8350_reg_read (wm8350,WM8350_DCDC5_CONTROL ) - & ~WM8350_DC2_HIB_MODE_MASK ; + & ~WM8350_DC5_HIB_MODE_MASK ;wm8350_reg_write (wm8350,WM8350_DCDC5_CONTROL , val | -WM8350_DC2_HIB_MODE_DISABLE ); + (WM8350_DC5_HIB_MODE_DISABLE <<WM8350_DC5_HIB_MODE_SHIFT ));break ;default :return -EINVAL ;
Signature · 1 line
1.7.5.4
Mark Brown
AppliedQuoted 3 lines · Axel Lin
What we want is to restore
wm8350->pmic.dcdcx_hib_modesettings toWM8350_DCDCx_LOW_POWERregisters. Current code also clears all other bits ofWM8350_DCDCx_LOW_POWERregisters which is wrong.
Applied both, thanks.