diff options
author | Jes Sorensen <Jes.Sorensen@redhat.com> | 2014-11-30 16:05:04 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-02 19:40:00 -0500 |
commit | 6e1c29fd9e10af8aff4f9fe628e1ca9d337e90a9 (patch) | |
tree | e93d94ea0c23cceb5e75be78b8879eec0c3ff03c /drivers/staging | |
parent | 2098778f562123c09cace4a15cd08f0cc26f0e48 (diff) |
staging: rtl8723au: Do not write garbage to REG_SPS0_CTRL
Use a separate variable to hold the value of REG_SPS0_CTRL to avoid it
getting clobbered and writing out garbage to it, for the case of
eRFPowerState == rf_sleep/rf_off && bRegSSPwrLvl == 1.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/rtl8723au/hal/usb_halinit.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 762c51427958..6c6601332035 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c | |||
@@ -776,9 +776,11 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
776 | int bRegSSPwrLvl) | 776 | int bRegSSPwrLvl) |
777 | { | 777 | { |
778 | struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); | 778 | struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); |
779 | u8 value8; | 779 | u8 value8, sps0; |
780 | u8 bytetmp; | 780 | u8 bytetmp; |
781 | 781 | ||
782 | sps0 = rtl8723au_read8(Adapter, REG_SPS0_CTRL); | ||
783 | |||
782 | switch (eRFPowerState) { | 784 | switch (eRFPowerState) { |
783 | case rf_on: | 785 | case rf_on: |
784 | if (bRegSSPwrLvl == 1) { | 786 | if (bRegSSPwrLvl == 1) { |
@@ -788,8 +790,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
788 | 790 | ||
789 | /* 2. Force PWM, Enable SPS18_LDO_Marco_Block */ | 791 | /* 2. Force PWM, Enable SPS18_LDO_Marco_Block */ |
790 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, | 792 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, |
791 | rtl8723au_read8(Adapter, REG_SPS0_CTRL) | | 793 | sps0 | BIT(0) | BIT(3)); |
792 | BIT(0) | BIT(3)); | ||
793 | 794 | ||
794 | /* 3. restore BB, AFE control register. */ | 795 | /* 3. restore BB, AFE control register. */ |
795 | /* RF */ | 796 | /* RF */ |
@@ -832,8 +833,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
832 | 833 | ||
833 | /* 2. Force PWM, Enable SPS18_LDO_Marco_Block */ | 834 | /* 2. Force PWM, Enable SPS18_LDO_Marco_Block */ |
834 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, | 835 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, |
835 | rtl8723au_read8(Adapter, REG_SPS0_CTRL) | | 836 | sps0 | BIT(0) | BIT(3)); |
836 | BIT(0) | BIT(3)); | ||
837 | 837 | ||
838 | /* 3. restore BB, AFE control register. */ | 838 | /* 3. restore BB, AFE control register. */ |
839 | /* RF */ | 839 | /* RF */ |
@@ -882,11 +882,10 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
882 | break; | 882 | break; |
883 | case rf_sleep: | 883 | case rf_sleep: |
884 | case rf_off: | 884 | case rf_off: |
885 | value8 = rtl8723au_read8(Adapter, REG_SPS0_CTRL); | ||
886 | if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)) | 885 | if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)) |
887 | value8 &= ~BIT(0); | 886 | sps0 &= ~BIT(0); |
888 | else | 887 | else |
889 | value8 &= ~(BIT(0) | BIT(3)); | 888 | sps0 &= ~(BIT(0) | BIT(3)); |
890 | if (bRegSSPwrLvl == 1) { | 889 | if (bRegSSPwrLvl == 1) { |
891 | RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL1\n")); | 890 | RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL1\n")); |
892 | /* Disable RF and BB only for SelectSuspend. */ | 891 | /* Disable RF and BB only for SelectSuspend. */ |
@@ -936,7 +935,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
936 | bRFRegOffsetMask, 0); | 935 | bRFRegOffsetMask, 0); |
937 | 936 | ||
938 | /* 4. Force PFM , disable SPS18_LDO_Marco_Block */ | 937 | /* 4. Force PFM , disable SPS18_LDO_Marco_Block */ |
939 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, value8); | 938 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, sps0); |
940 | } else { /* Level 2 or others. */ | 939 | } else { /* Level 2 or others. */ |
941 | RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL2\n")); | 940 | RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL2\n")); |
942 | { | 941 | { |
@@ -1009,7 +1008,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter, | |||
1009 | bRFRegOffsetMask, 0); | 1008 | bRFRegOffsetMask, 0); |
1010 | 1009 | ||
1011 | /* 4. Force PFM , disable SPS18_LDO_Marco_Block */ | 1010 | /* 4. Force PFM , disable SPS18_LDO_Marco_Block */ |
1012 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, value8); | 1011 | rtl8723au_write8(Adapter, REG_SPS0_CTRL, sps0); |
1013 | 1012 | ||
1014 | /* 2010/10/13 MH/Isaachsu exchange sequence. */ | 1013 | /* 2010/10/13 MH/Isaachsu exchange sequence. */ |
1015 | /* h. AFE_PLL_CTRL 0x28[7:0] = 0x80 | 1014 | /* h. AFE_PLL_CTRL 0x28[7:0] = 0x80 |