Signed-off-by: Mike McCormack <[email protected]>
---
 drivers/staging/rtl8192e/ieee80211/ieee80211.h |    1 +
 drivers/staging/rtl8192e/r8192E_core.c         |   58 +++++++++++------------
 2 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211.h 
b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
index d100db9..0b26fbd 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211.h
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
@@ -1798,6 +1798,7 @@ struct ieee80211_ops {
        int (*tx)(struct ieee80211_device *hw, struct sk_buff *skb);
        int (*config)(struct ieee80211_device *hw, u32 changed);
        int (*start)(struct ieee80211_device *hw);
+       void (*stop)(struct ieee80211_device *hw);
 };
 
 struct ieee80211_device {
diff --git a/drivers/staging/rtl8192e/r8192E_core.c 
b/drivers/staging/rtl8192e/r8192E_core.c
index 2c27baa..195373c 100644
--- a/drivers/staging/rtl8192e/r8192E_core.c
+++ b/drivers/staging/rtl8192e/r8192E_core.c
@@ -757,16 +757,17 @@ void PHY_SetRtl8192eRfOff(struct r8192_priv *priv)
        write_nic_byte(priv, ANAPAR_FOR_8192PciE, 0x07);
 }
 
-static void rtl8192_halt_adapter(struct r8192_priv *priv, bool reset)
+static void rtl8192_stop(struct ieee80211_device *ieee)
 {
+       struct r8192_priv *priv = ieee80211_priv(ieee->dev);
        int i;
        u8 OpMode;
        u32 ulRegRead;
 
        OpMode = RT_OP_MODE_NO_LINK;
-       priv->ieee80211->SetHwRegHandler(priv->ieee80211, HW_VAR_MEDIA_STATUS, 
&OpMode);
+       ieee->SetHwRegHandler(ieee, HW_VAR_MEDIA_STATUS, &OpMode);
 
-       if (!priv->ieee80211->bSupportRemoteWakeUp) {
+       if (!ieee->bSupportRemoteWakeUp) {
                /*
                 * disable tx/rx. In 8185 we write 0x10 (Reset bit),
                 * but here we make reference to WMAC and wirte 0x0
@@ -774,33 +775,29 @@ static void rtl8192_halt_adapter(struct r8192_priv *priv, 
bool reset)
                write_nic_byte(priv, CMDR, 0);
        }
 
-       mdelay(20);
+       mdelay(170);
 
-       if (!reset) {
-               mdelay(150);
+       priv->bHwRfOffAction = 2;
 
-               priv->bHwRfOffAction = 2;
+       /*
+        * Call MgntActSet_RF_State instead to
+        * prevent RF config race condition.
+        */
+       if (!priv->ieee80211->bSupportRemoteWakeUp) {
+               PHY_SetRtl8192eRfOff(priv);
+               ulRegRead = read_nic_dword(priv, CPU_GEN);
+               ulRegRead |= CPU_GEN_SYSTEM_RESET;
+               write_nic_dword(priv,CPU_GEN, ulRegRead);
+       } else {
+               /* for WOL */
+               write_nic_dword(priv, WFCRC0, 0xffffffff);
+               write_nic_dword(priv, WFCRC1, 0xffffffff);
+               write_nic_dword(priv, WFCRC2, 0xffffffff);
 
-               /*
-                * Call MgntActSet_RF_State instead to
-                * prevent RF config race condition.
-                */
-               if (!priv->ieee80211->bSupportRemoteWakeUp) {
-                       PHY_SetRtl8192eRfOff(priv);
-                       ulRegRead = read_nic_dword(priv, CPU_GEN);
-                       ulRegRead |= CPU_GEN_SYSTEM_RESET;
-                       write_nic_dword(priv,CPU_GEN, ulRegRead);
-               } else {
-                       /* for WOL */
-                       write_nic_dword(priv, WFCRC0, 0xffffffff);
-                       write_nic_dword(priv, WFCRC1, 0xffffffff);
-                       write_nic_dword(priv, WFCRC2, 0xffffffff);
-
-                       /* Write PMR register */
-                       write_nic_byte(priv, PMR, 0x5);
-                       /* Disable tx, enanble rx */
-                       write_nic_byte(priv, MacBlkCtrl, 0xa);
-               }
+               /* Write PMR register */
+               write_nic_byte(priv, PMR, 0x5);
+               /* Disable tx, enanble rx */
+               write_nic_byte(priv, MacBlkCtrl, 0xa);
        }
 
        for(i = 0; i < MAX_QUEUE_SIZE; i++) {
@@ -3464,7 +3461,7 @@ int rtl8192_down(struct net_device *dev)
 
        ieee80211_softmac_stop_protocol(priv->ieee80211,true);
 
-       rtl8192_halt_adapter(priv, false);
+       rtl8192_stop(priv->ieee80211);
        memset(&priv->ieee80211->current_network, 0 , offsetof(struct 
ieee80211_network, list));
 
        RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
@@ -3481,7 +3478,7 @@ void rtl8192_commit(struct r8192_priv *priv)
        ieee80211_softmac_stop_protocol(priv->ieee80211,true);
 
        rtl8192_irq_disable(priv);
-       rtl8192_halt_adapter(priv, true);
+       rtl8192_stop(priv->ieee80211);
        _rtl8192_up(priv);
 }
 
@@ -4539,6 +4536,7 @@ static const struct ieee80211_ops r8192e_ops = {
        .tx =                           rtl8192_hard_start_xmit,
        .config =                       rtl8192_config,
        .start =                        rtl8192_start,
+       .stop =                         rtl8192_stop,
 };
 
 static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
@@ -5040,7 +5038,7 @@ bool NicIFDisableNIC(struct r8192_priv *priv)
        // <2> Stop all timer
 
        // <3> Disable Adapter
-       rtl8192_halt_adapter(priv, false);
+       rtl8192_stop(priv->ieee80211);
 //     priv->bdisable_nic = true;
 
        return status;
-- 
1.7.0.4


_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to