staging: rtl8723au: Do not write garbage to REG_SPS0_CTRL
authorJes Sorensen <Jes.Sorensen@redhat.com>
Sun, 30 Nov 2014 21:05:04 +0000 (16:05 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Dec 2014 00:40:00 +0000 (16:40 -0800)
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>
drivers/staging/rtl8723au/hal/usb_halinit.c

index 762c514..6c66013 100644 (file)
@@ -776,9 +776,11 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
                                int bRegSSPwrLvl)
 {
        struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 value8;
+       u8 value8, sps0;
        u8 bytetmp;
 
+       sps0 = rtl8723au_read8(Adapter, REG_SPS0_CTRL);
+
        switch (eRFPowerState) {
        case rf_on:
                if (bRegSSPwrLvl == 1) {
@@ -788,8 +790,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
 
                        /*  2. Force PWM, Enable SPS18_LDO_Marco_Block */
                        rtl8723au_write8(Adapter, REG_SPS0_CTRL,
-                                        rtl8723au_read8(Adapter, REG_SPS0_CTRL) |
-                                        BIT(0) | BIT(3));
+                                        sps0 | BIT(0) | BIT(3));
 
                        /*  3. restore BB, AFE control register. */
                        /* RF */
@@ -832,8 +833,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
 
                        /*  2. Force PWM, Enable SPS18_LDO_Marco_Block */
                        rtl8723au_write8(Adapter, REG_SPS0_CTRL,
-                                        rtl8723au_read8(Adapter, REG_SPS0_CTRL) |
-                                        BIT(0) | BIT(3));
+                                        sps0 | BIT(0) | BIT(3));
 
                        /*  3. restore BB, AFE control register. */
                        /* RF */
@@ -882,11 +882,10 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
                break;
        case rf_sleep:
        case rf_off:
-               value8 = rtl8723au_read8(Adapter, REG_SPS0_CTRL);
                if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-                       value8 &= ~BIT(0);
+                       sps0 &= ~BIT(0);
                else
-                       value8 &= ~(BIT(0) | BIT(3));
+                       sps0 &= ~(BIT(0) | BIT(3));
                if (bRegSSPwrLvl == 1) {
                        RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL1\n"));
                        /*  Disable RF and BB only for SelectSuspend. */
@@ -936,7 +935,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
                                             bRFRegOffsetMask, 0);
 
                        /*  4. Force PFM , disable SPS18_LDO_Marco_Block */
-                       rtl8723au_write8(Adapter, REG_SPS0_CTRL, value8);
+                       rtl8723au_write8(Adapter, REG_SPS0_CTRL, sps0);
                } else {        /*  Level 2 or others. */
                        RT_TRACE(_module_hal_init_c_, _drv_err_, ("SS LVL2\n"));
                        {
@@ -1009,7 +1008,7 @@ static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
                                             bRFRegOffsetMask, 0);
 
                        /*  4. Force PFM , disable SPS18_LDO_Marco_Block */
-                       rtl8723au_write8(Adapter, REG_SPS0_CTRL, value8);
+                       rtl8723au_write8(Adapter, REG_SPS0_CTRL, sps0);
 
                        /*  2010/10/13 MH/Isaachsu exchange sequence. */
                        /* h.   AFE_PLL_CTRL 0x28[7:0] = 0x80