Merge tag 'arc-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc
[firefly-linux-kernel-4.4.55.git] / drivers / staging / vt6655 / baseband.c
index f212b88c8cecae650fa502523b062a34bfae6028..86c72ba0a0cd5cc019ef068dcec54886f88e7653 100644 (file)
  *      BBvCaculateParameter   - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
  *      BBbReadEmbedded         - Embedded read baseband register via MAC
  *      BBbWriteEmbedded        - Embedded write baseband register via MAC
- *      BBbIsRegBitsOn         - Test if baseband register bits on
- *      BBbIsRegBitsOff        - Test if baseband register bits off
  *      BBbVT3253Init          - VIA VT3253 baseband chip init code
- *      BBvReadAllRegs         - Read All Baseband Registers
- *      BBvLoopbackOn          - Turn on BaseBand Loopback mode
- *      BBvLoopbackOff         - Turn off BaseBand Loopback mode
  *
  * Revision History:
  *      06-10-2003 Bryan YC Fan:  Re-write codes to support VT3253 spec.
  */
 
 #include "tmacro.h"
-#include "tether.h"
 #include "mac.h"
 #include "baseband.h"
 #include "srom.h"
 #include "rf.h"
 
-/*---------------------  Static Definitions -------------------------*/
-/* static int          msglevel                =MSG_LEVEL_DEBUG; */
-static int msglevel = MSG_LEVEL_INFO;
-
 /*---------------------  Static Classes  ----------------------------*/
 
 /*---------------------  Static Variables  --------------------------*/
@@ -1704,46 +1694,47 @@ static unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = {
        {0xF0, 0x00},
 };
 
-static const unsigned short awcFrameTime[MAX_RATE] =
-{10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
+static const unsigned short awcFrameTime[MAX_RATE] = {
+               10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
+};
 
 /*---------------------  Static Functions  --------------------------*/
 
 static
 unsigned long
-s_ulGetRatio(PSDevice pDevice);
+s_ulGetRatio(struct vnt_private *priv);
 
 static
 void
 s_vChangeAntenna(
-       PSDevice pDevice
+       struct vnt_private *priv
 );
 
 static
 void
 s_vChangeAntenna(
-       PSDevice pDevice
+       struct vnt_private *priv
 )
 {
-       if (pDevice->dwRxAntennaSel == 0) {
-               pDevice->dwRxAntennaSel = 1;
-               if (pDevice->bTxRxAntInv == true)
-                       BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
+       if (priv->dwRxAntennaSel == 0) {
+               priv->dwRxAntennaSel = 1;
+               if (priv->bTxRxAntInv == true)
+                       BBvSetRxAntennaMode(priv, ANT_A);
                else
-                       BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
+                       BBvSetRxAntennaMode(priv, ANT_B);
        } else {
-               pDevice->dwRxAntennaSel = 0;
-               if (pDevice->bTxRxAntInv == true)
-                       BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
+               priv->dwRxAntennaSel = 0;
+               if (priv->bTxRxAntInv == true)
+                       BBvSetRxAntennaMode(priv, ANT_B);
                else
-                       BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
+                       BBvSetRxAntennaMode(priv, ANT_A);
        }
-       if (pDevice->dwTxAntennaSel == 0) {
-               pDevice->dwTxAntennaSel = 1;
-               BBvSetTxAntennaMode(pDevice->PortOffset, ANT_B);
+       if (priv->dwTxAntennaSel == 0) {
+               priv->dwTxAntennaSel = 1;
+               BBvSetTxAntennaMode(priv, ANT_B);
        } else {
-               pDevice->dwTxAntennaSel = 0;
-               BBvSetTxAntennaMode(pDevice->PortOffset, ANT_A);
+               priv->dwTxAntennaSel = 0;
+               BBvSetTxAntennaMode(priv, ANT_A);
        }
 }
 
@@ -1795,18 +1786,17 @@ BBuGetFrameTime(
                        uFrameTime++;
 
                return uPreamble + uFrameTime;
-       } else {
-               uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */
-               uTmp = ((uFrameTime * uRate) - 22) / 8;
-               if (cbFrameLength != uTmp)
-                       uFrameTime++;
+       }
+       uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */
+       uTmp = ((uFrameTime * uRate) - 22) / 8;
+       if (cbFrameLength != uTmp)
+               uFrameTime++;
 
-               uFrameTime = uFrameTime * 4;    /* ??????? */
-               if (byPktType != PK_TYPE_11A)
-                       uFrameTime += 6;     /* ?????? */
+       uFrameTime = uFrameTime * 4;    /* ??????? */
+       if (byPktType != PK_TYPE_11A)
+               uFrameTime += 6;     /* ?????? */
 
-               return 20 + uFrameTime; /* ?????? */
-       }
+       return 20 + uFrameTime; /* ?????? */
 }
 
 /*
@@ -1814,163 +1804,147 @@ BBuGetFrameTime(
  *
  * Parameters:
  *  In:
- *      pDevice         - Device Structure
- *      cbFrameLength   - Tx Frame Length
- *      wRate           - Tx Rate
+ *      priv         - Device Structure
+ *      frame_length   - Tx Frame Length
+ *      tx_rate           - Tx Rate
  *  Out:
- *      pwPhyLen        - pointer to Phy Length field
- *      pbyPhySrv       - pointer to Phy Service field
- *      pbyPhySgn       - pointer to Phy Signal field
+ *     struct vnt_phy_field *phy
+ *             - pointer to Phy Length field
+ *             - pointer to Phy Service field
+ *             - pointer to Phy Signal field
  *
  * Return Value: none
  *
  */
-void
-BBvCalculateParameter(
-       PSDevice pDevice,
-       unsigned int cbFrameLength,
-       unsigned short wRate,
-       unsigned char byPacketType,
-       unsigned short *pwPhyLen,
-       unsigned char *pbyPhySrv,
-       unsigned char *pbyPhySgn
-)
+void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
+                      u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy)
 {
-       unsigned int cbBitCount;
-       unsigned int cbUsCount = 0;
-       unsigned int cbTmp;
-       bool bExtBit;
-       unsigned char byPreambleType = pDevice->byPreambleType;
-       bool bCCK = pDevice->bCCK;
+       u32 bit_count;
+       u32 count = 0;
+       u32 tmp;
+       int ext_bit;
+       u8 preamble_type = priv->byPreambleType;
 
-       cbBitCount = cbFrameLength * 8;
-       bExtBit = false;
+       bit_count = frame_length * 8;
+       ext_bit = false;
 
-       switch (wRate) {
+       switch (tx_rate) {
        case RATE_1M:
-               cbUsCount = cbBitCount;
-               *pbyPhySgn = 0x00;
-               break;
+               count = bit_count;
+
+               phy->signal = 0x00;
 
-       case RATE_2M:
-               cbUsCount = cbBitCount / 2;
-               if (byPreambleType == 1)
-                       *pbyPhySgn = 0x09;
-               else /* long preamble */
-                       *pbyPhySgn = 0x01;
                break;
+       case RATE_2M:
+               count = bit_count / 2;
+
+               if (preamble_type == 1)
+                       phy->signal = 0x09;
+               else
+                       phy->signal = 0x01;
 
-       case RATE_5M:
-               if (!bCCK)
-                       cbBitCount++;
-               cbUsCount = (cbBitCount * 10) / 55;
-               cbTmp = (cbUsCount * 55) / 10;
-               if (cbTmp != cbBitCount)
-                       cbUsCount++;
-               if (byPreambleType == 1)
-                       *pbyPhySgn = 0x0a;
-               else /* long preamble */
-                       *pbyPhySgn = 0x02;
                break;
+       case RATE_5M:
+               count = (bit_count * 10) / 55;
+               tmp = (count * 55) / 10;
 
-       case RATE_11M:
+               if (tmp != bit_count)
+                       count++;
+
+               if (preamble_type == 1)
+                       phy->signal = 0x0a;
+               else
+                       phy->signal = 0x02;
 
-               if (!bCCK)
-                       cbBitCount++;
-               cbUsCount = cbBitCount / 11;
-               cbTmp = cbUsCount * 11;
-               if (cbTmp != cbBitCount) {
-                       cbUsCount++;
-                       if ((cbBitCount - cbTmp) <= 3)
-                               bExtBit = true;
-               }
-               if (byPreambleType == 1)
-                       *pbyPhySgn = 0x0b;
-               else /* long preamble */
-                       *pbyPhySgn = 0x03;
                break;
+       case RATE_11M:
+               count = bit_count / 11;
+               tmp = count * 11;
 
-       case RATE_6M:
-               if (byPacketType == PK_TYPE_11A) { /*11a, 5GHZ */
-                       *pbyPhySgn = 0x9B; /* 1001 1011 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8B; /* 1000 1011 */
+               if (tmp != bit_count) {
+                       count++;
+
+                       if ((bit_count - tmp) <= 3)
+                               ext_bit = true;
                }
+
+               if (preamble_type == 1)
+                       phy->signal = 0x0b;
+               else
+                       phy->signal = 0x03;
+
                break;
+       case RATE_6M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9b;
+               else
+                       phy->signal = 0x8b;
 
-       case RATE_9M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9F; /* 1001 1111 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8F; /* 1000 1111 */
-               }
                break;
+       case RATE_9M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9f;
+               else
+                       phy->signal = 0x8f;
 
-       case RATE_12M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9A; /* 1001 1010 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8A; /* 1000 1010 */
-               }
                break;
+       case RATE_12M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9a;
+               else
+                       phy->signal = 0x8a;
 
-       case RATE_18M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9E; /* 1001 1110 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8E; /* 1000 1110 */
-               }
                break;
+       case RATE_18M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9e;
+               else
+                       phy->signal = 0x8e;
 
-       case RATE_24M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x99; /* 1001 1001 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x89; /* 1000 1001 */
-               }
                break;
+       case RATE_24M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x99;
+               else
+                       phy->signal = 0x89;
 
-       case RATE_36M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9D; /* 1001 1101 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8D; /* 1000 1101 */
-               }
                break;
+       case RATE_36M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9d;
+               else
+                       phy->signal = 0x8d;
 
-       case RATE_48M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x98; /* 1001 1000 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x88; /* 1000 1000 */
-               }
                break;
+       case RATE_48M:
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x98;
+               else
+                       phy->signal = 0x88;
 
+               break;
        case RATE_54M:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9C; /* 1001 1100 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8C; /* 1000 1100 */
-               }
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9c;
+               else
+                       phy->signal = 0x8c;
                break;
-
        default:
-               if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
-                       *pbyPhySgn = 0x9C; /* 1001 1100 */
-               } else {/* 11g, 2.4GHZ */
-                       *pbyPhySgn = 0x8C; /* 1000 1100 */
-               }
+               if (pkt_type == PK_TYPE_11A)
+                       phy->signal = 0x9c;
+               else
+                       phy->signal = 0x8c;
                break;
        }
 
-       if (byPacketType == PK_TYPE_11B) {
-               *pbyPhySrv = 0x00;
-               if (bExtBit)
-                       *pbyPhySrv = *pbyPhySrv | 0x80;
-               *pwPhyLen = (unsigned short)cbUsCount;
+       if (pkt_type == PK_TYPE_11B) {
+               phy->service = 0x00;
+               if (ext_bit)
+                       phy->service |= 0x80;
+               phy->len = cpu_to_le16((u16)count);
        } else {
-               *pbyPhySrv = 0x00;
-               *pwPhyLen = (unsigned short)cbFrameLength;
+               phy->service = 0x00;
+               phy->len = cpu_to_le16((u16)frame_length);
        }
 }
 
@@ -1987,8 +1961,10 @@ BBvCalculateParameter(
  * Return Value: true if succeeded; false if failed.
  *
  */
-bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData)
+bool BBbReadEmbedded(struct vnt_private *priv,
+                    unsigned char byBBAddr, unsigned char *pbyData)
 {
+       void __iomem *dwIoBase = priv->PortOffset;
        unsigned short ww;
        unsigned char byValue;
 
@@ -2009,7 +1985,7 @@ bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned ch
 
        if (ww == W_MAX_TIMEOUT) {
                DBG_PORT80(0x30);
-               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " DBG_PORT80(0x30)\n");
+               pr_debug(" DBG_PORT80(0x30)\n");
                return false;
        }
        return true;
@@ -2029,8 +2005,10 @@ bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned ch
  * Return Value: true if succeeded; false if failed.
  *
  */
-bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData)
+bool BBbWriteEmbedded(struct vnt_private *priv,
+                     unsigned char byBBAddr, unsigned char byData)
 {
+       void __iomem *dwIoBase = priv->PortOffset;
        unsigned short ww;
        unsigned char byValue;
 
@@ -2050,56 +2028,12 @@ bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned c
 
        if (ww == W_MAX_TIMEOUT) {
                DBG_PORT80(0x31);
-               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " DBG_PORT80(0x31)\n");
+               pr_debug(" DBG_PORT80(0x31)\n");
                return false;
        }
        return true;
 }
 
-/*
- * Description: Test if all bits are set for the Baseband register
- *
- * Parameters:
- *  In:
- *      dwIoBase    - I/O base address
- *      byBBAddr    - address of register in Baseband
- *      byTestBits  - TestBits
- *  Out:
- *      none
- *
- * Return Value: true if all TestBits are set; false otherwise.
- *
- */
-bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
-{
-       unsigned char byOrgData;
-
-       BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
-       return (byOrgData & byTestBits) == byTestBits;
-}
-
-/*
- * Description: Test if all bits are clear for the Baseband register
- *
- * Parameters:
- *  In:
- *      dwIoBase    - I/O base address
- *      byBBAddr    - address of register in Baseband
- *      byTestBits  - TestBits
- *  Out:
- *      none
- *
- * Return Value: true if all TestBits are clear; false otherwise.
- *
- */
-bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
-{
-       unsigned char byOrgData;
-
-       BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
-       return (byOrgData & byTestBits) == 0;
-}
-
 /*
  * Description: VIA VT3253 Baseband chip init function
  *
@@ -2115,126 +2049,126 @@ bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned ch
  *
  */
 
-bool BBbVT3253Init(PSDevice pDevice)
+bool BBbVT3253Init(struct vnt_private *priv)
 {
        bool bResult = true;
        int        ii;
-       void __iomem *dwIoBase = pDevice->PortOffset;
-       unsigned char byRFType = pDevice->byRFType;
-       unsigned char byLocalID = pDevice->byLocalID;
+       void __iomem *dwIoBase = priv->PortOffset;
+       unsigned char byRFType = priv->byRFType;
+       unsigned char byLocalID = priv->byLocalID;
 
        if (byRFType == RF_RFMD2959) {
                if (byLocalID <= REV_ID_VT3253_A1) {
                        for (ii = 0; ii < CB_VT3253_INIT_FOR_RFMD; ii++)
-                               bResult &= BBbWriteEmbedded(dwIoBase, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]);
+                               bResult &= BBbWriteEmbedded(priv, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]);
 
                } else {
                        for (ii = 0; ii < CB_VT3253B0_INIT_FOR_RFMD; ii++)
-                               bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]);
+                               bResult &= BBbWriteEmbedded(priv, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]);
 
                        for (ii = 0; ii < CB_VT3253B0_AGC_FOR_RFMD2959; ii++)
-                               bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]);
+                               bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]);
 
                        VNSvOutPortD(dwIoBase + MAC_REG_ITRTMSET, 0x23);
-                       MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
+                       MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0));
                }
-               pDevice->abyBBVGA[0] = 0x18;
-               pDevice->abyBBVGA[1] = 0x0A;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -70;
-               pDevice->ldBmThreshold[1] = -50;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+               priv->abyBBVGA[0] = 0x18;
+               priv->abyBBVGA[1] = 0x0A;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -70;
+               priv->ldBmThreshold[1] = -50;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
        } else if ((byRFType == RF_AIROHA) || (byRFType == RF_AL2230S)) {
                for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
 
                for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
-
-               pDevice->abyBBVGA[0] = 0x1C;
-               pDevice->abyBBVGA[1] = 0x10;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -70;
-               pDevice->ldBmThreshold[1] = -48;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
+
+               priv->abyBBVGA[0] = 0x1C;
+               priv->abyBBVGA[1] = 0x10;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -70;
+               priv->ldBmThreshold[1] = -48;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
        } else if (byRFType == RF_UW2451) {
                for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
 
                for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
 
                VNSvOutPortB(dwIoBase + MAC_REG_ITRTMSET, 0x23);
-               MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
-
-               pDevice->abyBBVGA[0] = 0x14;
-               pDevice->abyBBVGA[1] = 0x0A;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -60;
-               pDevice->ldBmThreshold[1] = -50;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+               MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0));
+
+               priv->abyBBVGA[0] = 0x14;
+               priv->abyBBVGA[1] = 0x0A;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -60;
+               priv->ldBmThreshold[1] = -50;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
        } else if (byRFType == RF_UW2452) {
                for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
 
                /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
                /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
                /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
                /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
                /* Select VC1/VC2, CR215 = 0x02->0x06 */
-               bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06);
+               bResult &= BBbWriteEmbedded(priv, 0xd7, 0x06);
 
                /* {{RobertYu:20050125, request by Jack */
-               bResult &= BBbWriteEmbedded(dwIoBase, 0x90, 0x20);
-               bResult &= BBbWriteEmbedded(dwIoBase, 0x97, 0xeb);
+               bResult &= BBbWriteEmbedded(priv, 0x90, 0x20);
+               bResult &= BBbWriteEmbedded(priv, 0x97, 0xeb);
                /* }} */
 
                /* {{RobertYu:20050221, request by Jack */
-               bResult &= BBbWriteEmbedded(dwIoBase, 0xa6, 0x00);
-               bResult &= BBbWriteEmbedded(dwIoBase, 0xa8, 0x30);
+               bResult &= BBbWriteEmbedded(priv, 0xa6, 0x00);
+               bResult &= BBbWriteEmbedded(priv, 0xa8, 0x30);
                /* }} */
-               bResult &= BBbWriteEmbedded(dwIoBase, 0xb0, 0x58);
+               bResult &= BBbWriteEmbedded(priv, 0xb0, 0x58);
 
                for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
-
-               pDevice->abyBBVGA[0] = 0x14;
-               pDevice->abyBBVGA[1] = 0x0A;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -60;
-               pDevice->ldBmThreshold[1] = -50;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
+
+               priv->abyBBVGA[0] = 0x14;
+               priv->abyBBVGA[1] = 0x0A;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -60;
+               priv->ldBmThreshold[1] = -50;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
                /* }} RobertYu */
 
        } else if (byRFType == RF_VT3226) {
                for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
 
                for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
-
-               pDevice->abyBBVGA[0] = 0x1C;
-               pDevice->abyBBVGA[1] = 0x10;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -70;
-               pDevice->ldBmThreshold[1] = -48;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
+
+               priv->abyBBVGA[0] = 0x1C;
+               priv->abyBBVGA[1] = 0x10;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -70;
+               priv->ldBmThreshold[1] = -48;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
                /* Fix VT3226 DFC system timing issue */
                MACvSetRFLE_LatchBase(dwIoBase);
                /* {{ RobertYu: 20050104 */
        } else if (byRFType == RF_AIROHA7230) {
                for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
 
 
                /* {{ RobertYu:20050223, request by JerryChung */
@@ -2247,150 +2181,37 @@ bool BBbVT3253Init(PSDevice pDevice)
                /* }} */
 
                for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
-                       bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
-
-               pDevice->abyBBVGA[0] = 0x1C;
-               pDevice->abyBBVGA[1] = 0x10;
-               pDevice->abyBBVGA[2] = 0x0;
-               pDevice->abyBBVGA[3] = 0x0;
-               pDevice->ldBmThreshold[0] = -70;
-               pDevice->ldBmThreshold[1] = -48;
-               pDevice->ldBmThreshold[2] = 0;
-               pDevice->ldBmThreshold[3] = 0;
+                       bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
+
+               priv->abyBBVGA[0] = 0x1C;
+               priv->abyBBVGA[1] = 0x10;
+               priv->abyBBVGA[2] = 0x0;
+               priv->abyBBVGA[3] = 0x0;
+               priv->ldBmThreshold[0] = -70;
+               priv->ldBmThreshold[1] = -48;
+               priv->ldBmThreshold[2] = 0;
+               priv->ldBmThreshold[3] = 0;
                /* }} RobertYu */
        } else {
                /* No VGA Table now */
-               pDevice->bUpdateBBVGA = false;
-               pDevice->abyBBVGA[0] = 0x1C;
+               priv->bUpdateBBVGA = false;
+               priv->abyBBVGA[0] = 0x1C;
        }
 
        if (byLocalID > REV_ID_VT3253_A1) {
-               BBbWriteEmbedded(dwIoBase, 0x04, 0x7F);
-               BBbWriteEmbedded(dwIoBase, 0x0D, 0x01);
+               BBbWriteEmbedded(priv, 0x04, 0x7F);
+               BBbWriteEmbedded(priv, 0x0D, 0x01);
        }
 
        return bResult;
 }
 
-/*
- * Description: Read All Baseband Registers
- *
- * Parameters:
- *  In:
- *      dwIoBase    - I/O base address
- *      pbyBBRegs   - Point to struct that stores Baseband Registers
- *  Out:
- *      none
- *
- * Return Value: none
- *
- */
-void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs)
-{
-       int  ii;
-       unsigned char byBase = 1;
-
-       for (ii = 0; ii < BB_MAX_CONTEXT_SIZE; ii++) {
-               BBbReadEmbedded(dwIoBase, (unsigned char)(ii*byBase), pbyBBRegs);
-               pbyBBRegs += byBase;
-       }
-}
-
-/*
- * Description: Turn on BaseBand Loopback mode
- *
- * Parameters:
- *  In:
- *      dwIoBase    - I/O base address
- *      bCCK        - If CCK is set
- *  Out:
- *      none
- *
- * Return Value: none
- *
- */
-
-void BBvLoopbackOn(PSDevice pDevice)
-{
-       unsigned char byData;
-       void __iomem *dwIoBase = pDevice->PortOffset;
-
-       /* CR C9 = 0x00 */
-       BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */
-       BBbWriteEmbedded(dwIoBase, 0xC9, 0);
-       BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d); /* CR77 */
-       BBbWriteEmbedded(dwIoBase, 0x4D, 0x90);
-
-       /* CR 88 = 0x02(CCK), 0x03(OFDM) */
-       BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88); /* CR136 */
-
-       if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
-               /* Enable internal digital loopback: CR33 |= 0000 0001 */
-               BBbReadEmbedded(dwIoBase, 0x21, &byData); /* CR33 */
-               BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01)); /* CR33 */
-               /* CR154 = 0x00 */
-               BBbWriteEmbedded(dwIoBase, 0x9A, 0);    /* CR154 */
-
-               BBbWriteEmbedded(dwIoBase, 0x88, 0x02); /* CR239 */
-       } else { /* OFDM */
-               /* Enable internal digital loopback:CR154 |= 0000 0001 */
-               BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
-               BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01)); /* CR154 */
-               /* CR33 = 0x00 */
-               BBbWriteEmbedded(dwIoBase, 0x21, 0);    /* CR33 */
-
-               BBbWriteEmbedded(dwIoBase, 0x88, 0x03); /* CR239 */
-       }
-
-       /* CR14 = 0x00 */
-       BBbWriteEmbedded(dwIoBase, 0x0E, 0); /* CR14 */
-
-       /* Disable TX_IQUN */
-       BBbReadEmbedded(pDevice->PortOffset, 0x09, &pDevice->byBBCR09);
-       BBbWriteEmbedded(pDevice->PortOffset, 0x09, (unsigned char)(pDevice->byBBCR09 & 0xDE));
-}
-
-/*
- * Description: Turn off BaseBand Loopback mode
- *
- * Parameters:
- *  In:
- *      pDevice         - Device Structure
- *
- *  Out:
- *      none
- *
- * Return Value: none
- *
- */
-void BBvLoopbackOff(PSDevice pDevice)
-{
-       unsigned char byData;
-       void __iomem *dwIoBase = pDevice->PortOffset;
-
-       BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */
-       BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */
-       BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09); /* CR136 */
-       BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d); /* CR77  */
-
-       if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
-               /* Set the CR33 Bit2 to disable internal Loopback. */
-               BBbReadEmbedded(dwIoBase, 0x21, &byData);/* CR33 */
-               BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE)); /* CR33 */
-       } else { /* OFDM */
-               BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
-               BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE)); /* CR154 */
-       }
-       BBbReadEmbedded(dwIoBase, 0x0E, &byData); /* CR14 */
-       BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80)); /* CR14 */
-}
-
 /*
  * Description: Set ShortSlotTime mode
  *
  * Parameters:
  *  In:
- *      pDevice     - Device Structure
+ *      priv     - Device Structure
  *  Out:
  *      none
  *
@@ -2398,42 +2219,42 @@ void BBvLoopbackOff(PSDevice pDevice)
  *
  */
 void
-BBvSetShortSlotTime(PSDevice pDevice)
+BBvSetShortSlotTime(struct vnt_private *priv)
 {
        unsigned char byBBRxConf = 0;
        unsigned char byBBVGA = 0;
 
-       BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
+       BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
 
-       if (pDevice->bShortSlotTime)
+       if (priv->bShortSlotTime)
                byBBRxConf &= 0xDF; /* 1101 1111 */
        else
                byBBRxConf |= 0x20; /* 0010 0000 */
 
        /* patch for 3253B0 Baseband with Cardbus module */
-       BBbReadEmbedded(pDevice->PortOffset, 0xE7, &byBBVGA);
-       if (byBBVGA == pDevice->abyBBVGA[0])
+       BBbReadEmbedded(priv, 0xE7, &byBBVGA);
+       if (byBBVGA == priv->abyBBVGA[0])
                byBBRxConf |= 0x20; /* 0010 0000 */
 
-       BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
+       BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
 }
 
-void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData)
+void BBvSetVGAGainOffset(struct vnt_private *priv, unsigned char byData)
 {
        unsigned char byBBRxConf = 0;
 
-       BBbWriteEmbedded(pDevice->PortOffset, 0xE7, byData);
+       BBbWriteEmbedded(priv, 0xE7, byData);
 
-       BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
+       BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
        /* patch for 3253B0 Baseband with Cardbus module */
-       if (byData == pDevice->abyBBVGA[0])
+       if (byData == priv->abyBBVGA[0])
                byBBRxConf |= 0x20; /* 0010 0000 */
-       else if (pDevice->bShortSlotTime)
+       else if (priv->bShortSlotTime)
                byBBRxConf &= 0xDF; /* 1101 1111 */
        else
                byBBRxConf |= 0x20; /* 0010 0000 */
-       pDevice->byBBVGACurrent = byData;
-       BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
+       priv->byBBVGACurrent = byData;
+       BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
 }
 
 /*
@@ -2449,12 +2270,12 @@ void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData)
  *
  */
 void
-BBvSoftwareReset(void __iomem *dwIoBase)
+BBvSoftwareReset(struct vnt_private *priv)
 {
-       BBbWriteEmbedded(dwIoBase, 0x50, 0x40);
-       BBbWriteEmbedded(dwIoBase, 0x50, 0);
-       BBbWriteEmbedded(dwIoBase, 0x9C, 0x01);
-       BBbWriteEmbedded(dwIoBase, 0x9C, 0);
+       BBbWriteEmbedded(priv, 0x50, 0x40);
+       BBbWriteEmbedded(priv, 0x50, 0);
+       BBbWriteEmbedded(priv, 0x9C, 0x01);
+       BBbWriteEmbedded(priv, 0x9C, 0);
 }
 
 /*
@@ -2470,13 +2291,13 @@ BBvSoftwareReset(void __iomem *dwIoBase)
  *
  */
 void
-BBvPowerSaveModeON(void __iomem *dwIoBase)
+BBvPowerSaveModeON(struct vnt_private *priv)
 {
        unsigned char byOrgData;
 
-       BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
-       byOrgData |= BIT0;
-       BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
+       BBbReadEmbedded(priv, 0x0D, &byOrgData);
+       byOrgData |= BIT(0);
+       BBbWriteEmbedded(priv, 0x0D, byOrgData);
 }
 
 /*
@@ -2492,13 +2313,13 @@ BBvPowerSaveModeON(void __iomem *dwIoBase)
  *
  */
 void
-BBvPowerSaveModeOFF(void __iomem *dwIoBase)
+BBvPowerSaveModeOFF(struct vnt_private *priv)
 {
        unsigned char byOrgData;
 
-       BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
-       byOrgData &= ~(BIT0);
-       BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
+       BBbReadEmbedded(priv, 0x0D, &byOrgData);
+       byOrgData &= ~(BIT(0));
+       BBbWriteEmbedded(priv, 0x0D, byOrgData);
 }
 
 /*
@@ -2506,7 +2327,7 @@ BBvPowerSaveModeOFF(void __iomem *dwIoBase)
  *
  * Parameters:
  *  In:
- *      pDevice          - Device Structure
+ *      priv          - Device Structure
  *      byAntennaMode    - Antenna Mode
  *  Out:
  *      none
@@ -2516,11 +2337,11 @@ BBvPowerSaveModeOFF(void __iomem *dwIoBase)
  */
 
 void
-BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
+BBvSetTxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode)
 {
        unsigned char byBBTxConf;
 
-       BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf); /* CR09 */
+       BBbReadEmbedded(priv, 0x09, &byBBTxConf); /* CR09 */
        if (byAntennaMode == ANT_DIVERSITY) {
                /* bit 1 is diversity */
                byBBTxConf |= 0x02;
@@ -2531,7 +2352,7 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
                byBBTxConf &= 0xFD; /* 1111 1101 */
                byBBTxConf |= 0x04;
        }
-       BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf); /* CR09 */
+       BBbWriteEmbedded(priv, 0x09, byBBTxConf); /* CR09 */
 }
 
 /*
@@ -2539,7 +2360,7 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  *
  * Parameters:
  *  In:
- *      pDevice          - Device Structure
+ *      priv          - Device Structure
  *      byAntennaMode    - Antenna Mode
  *  Out:
  *      none
@@ -2549,11 +2370,11 @@ BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  */
 
 void
-BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
+BBvSetRxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode)
 {
        unsigned char byBBRxConf;
 
-       BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf); /* CR10 */
+       BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
        if (byAntennaMode == ANT_DIVERSITY) {
                byBBRxConf |= 0x01;
 
@@ -2563,7 +2384,7 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
                byBBRxConf &= 0xFE; /* 1111 1110 */
                byBBRxConf |= 0x02;
        }
-       BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf); /* CR10 */
+       BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
 }
 
 /*
@@ -2571,7 +2392,7 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  *
  * Parameters:
  *  In:
- *      pDevice          - Device Structure
+ *      priv          - Device Structure
  *  Out:
  *      none
  *
@@ -2579,109 +2400,109 @@ BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
  *
  */
 void
-BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
+BBvSetDeepSleep(struct vnt_private *priv, unsigned char byLocalID)
 {
-       BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */
-       BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */
+       BBbWriteEmbedded(priv, 0x0C, 0x17); /* CR12 */
+       BBbWriteEmbedded(priv, 0x0D, 0xB9); /* CR13 */
 }
 
 void
-BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
+BBvExitDeepSleep(struct vnt_private *priv, unsigned char byLocalID)
 {
-       BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */
-       BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */
+       BBbWriteEmbedded(priv, 0x0C, 0x00); /* CR12 */
+       BBbWriteEmbedded(priv, 0x0D, 0x01); /* CR13 */
 }
 
 static
 unsigned long
-s_ulGetRatio(PSDevice pDevice)
+s_ulGetRatio(struct vnt_private *priv)
 {
        unsigned long ulRatio = 0;
        unsigned long ulMaxPacket;
        unsigned long ulPacketNum;
 
        /* This is a thousand-ratio */
-       ulMaxPacket = pDevice->uNumSQ3[RATE_54M];
-       if (pDevice->uNumSQ3[RATE_54M] != 0) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       ulMaxPacket = priv->uNumSQ3[RATE_54M];
+       if (priv->uNumSQ3[RATE_54M] != 0) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_54M;
        }
-       if (pDevice->uNumSQ3[RATE_48M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_48M] > ulMaxPacket) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_48M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_48M];
+               ulMaxPacket = priv->uNumSQ3[RATE_48M];
        }
-       if (pDevice->uNumSQ3[RATE_36M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
-                       pDevice->uNumSQ3[RATE_36M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_36M] > ulMaxPacket) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
+                       priv->uNumSQ3[RATE_36M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_36M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_36M];
+               ulMaxPacket = priv->uNumSQ3[RATE_36M];
        }
-       if (pDevice->uNumSQ3[RATE_24M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
-                       pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_24M] > ulMaxPacket) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
+                       priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_24M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_24M];
+               ulMaxPacket = priv->uNumSQ3[RATE_24M];
        }
-       if (pDevice->uNumSQ3[RATE_18M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
-                       pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
-                       pDevice->uNumSQ3[RATE_18M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_18M] > ulMaxPacket) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
+                       priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] +
+                       priv->uNumSQ3[RATE_18M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_18M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_18M];
+               ulMaxPacket = priv->uNumSQ3[RATE_18M];
        }
-       if (pDevice->uNumSQ3[RATE_12M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
-                       pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
-                       pDevice->uNumSQ3[RATE_18M] + pDevice->uNumSQ3[RATE_12M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_12M] > ulMaxPacket) {
+               ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
+                       priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] +
+                       priv->uNumSQ3[RATE_18M] + priv->uNumSQ3[RATE_12M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_12M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_12M];
+               ulMaxPacket = priv->uNumSQ3[RATE_12M];
        }
-       if (pDevice->uNumSQ3[RATE_11M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
-                       pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
-                       pDevice->uNumSQ3[RATE_6M] - pDevice->uNumSQ3[RATE_9M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_11M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
+                       priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] -
+                       priv->uNumSQ3[RATE_6M] - priv->uNumSQ3[RATE_9M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_11M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_11M];
+               ulMaxPacket = priv->uNumSQ3[RATE_11M];
        }
-       if (pDevice->uNumSQ3[RATE_9M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
-                       pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
-                       pDevice->uNumSQ3[RATE_6M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_9M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
+                       priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] -
+                       priv->uNumSQ3[RATE_6M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_9M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_9M];
+               ulMaxPacket = priv->uNumSQ3[RATE_9M];
        }
-       if (pDevice->uNumSQ3[RATE_6M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
-                       pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_6M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
+                       priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_6M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_6M];
+               ulMaxPacket = priv->uNumSQ3[RATE_6M];
        }
-       if (pDevice->uNumSQ3[RATE_5M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
-                       pDevice->uNumSQ3[RATE_2M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_5M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
+                       priv->uNumSQ3[RATE_2M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_55M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_5M];
+               ulMaxPacket = priv->uNumSQ3[RATE_5M];
        }
-       if (pDevice->uNumSQ3[RATE_2M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M];
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_2M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M];
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_2M;
-               ulMaxPacket = pDevice->uNumSQ3[RATE_2M];
+               ulMaxPacket = priv->uNumSQ3[RATE_2M];
        }
-       if (pDevice->uNumSQ3[RATE_1M] > ulMaxPacket) {
-               ulPacketNum = pDevice->uDiversityCnt;
-               ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
+       if (priv->uNumSQ3[RATE_1M] > ulMaxPacket) {
+               ulPacketNum = priv->uDiversityCnt;
+               ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
                ulRatio += TOP_RATE_1M;
        }
 
@@ -2689,13 +2510,13 @@ s_ulGetRatio(PSDevice pDevice)
 }
 
 void
-BBvClearAntDivSQ3Value(PSDevice pDevice)
+BBvClearAntDivSQ3Value(struct vnt_private *priv)
 {
        unsigned int ii;
 
-       pDevice->uDiversityCnt = 0;
+       priv->uDiversityCnt = 0;
        for (ii = 0; ii < MAX_RATE; ii++)
-               pDevice->uNumSQ3[ii] = 0;
+               priv->uNumSQ3[ii] = 0;
 }
 
 /*
@@ -2703,7 +2524,7 @@ BBvClearAntDivSQ3Value(PSDevice pDevice)
  *
  * Parameters:
  *  In:
- *      pDevice          - Device Structure
+ *      priv          - Device Structure
  *      byRSR            - RSR from received packet
  *      bySQ3            - SQ3 value from received packet
  *  Out:
@@ -2713,68 +2534,75 @@ BBvClearAntDivSQ3Value(PSDevice pDevice)
  *
  */
 
-void
-BBvAntennaDiversity(PSDevice pDevice, unsigned char byRxRate, unsigned char bySQ3)
+void BBvAntennaDiversity(struct vnt_private *priv,
+                        unsigned char byRxRate, unsigned char bySQ3)
 {
-       if ((byRxRate >= MAX_RATE) || (pDevice->wAntDiversityMaxRate >= MAX_RATE))
+       if ((byRxRate >= MAX_RATE) || (priv->wAntDiversityMaxRate >= MAX_RATE))
                return;
 
-       pDevice->uDiversityCnt++;
+       priv->uDiversityCnt++;
 
-       pDevice->uNumSQ3[byRxRate]++;
+       priv->uNumSQ3[byRxRate]++;
 
-       if (pDevice->byAntennaState == 0) {
-               if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
-                       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ulDiversityNValue=[%d],54M-[%d]\n",
-                               (int)pDevice->ulDiversityNValue, (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate]);
+       if (priv->byAntennaState == 0) {
+               if (priv->uDiversityCnt > priv->ulDiversityNValue) {
+                       pr_debug("ulDiversityNValue=[%d],54M-[%d]\n",
+                                (int)priv->ulDiversityNValue,
+                                (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate]);
 
-                       if (pDevice->uNumSQ3[pDevice->wAntDiversityMaxRate] < pDevice->uDiversityCnt/2) {
-                               pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
-                               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "SQ3_State0, rate = [%08x]\n", (int)pDevice->ulRatio_State0);
+                       if (priv->uNumSQ3[priv->wAntDiversityMaxRate] < priv->uDiversityCnt/2) {
+                               priv->ulRatio_State0 = s_ulGetRatio(priv);
+                               pr_debug("SQ3_State0, rate = [%08x]\n",
+                                        (int)priv->ulRatio_State0);
 
-                               if (pDevice->byTMax == 0)
+                               if (priv->byTMax == 0)
                                        return;
-                               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "1.[%08x], uNumSQ3[%d]=%d, %d\n",
-                                       (int)pDevice->ulRatio_State0, (int)pDevice->wAntDiversityMaxRate,
-                                       (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], (int)pDevice->uDiversityCnt);
-
-                               s_vChangeAntenna(pDevice);
-                               pDevice->byAntennaState = 1;
-                               del_timer(&pDevice->TimerSQ3Tmax3);
-                               del_timer(&pDevice->TimerSQ3Tmax2);
-                               pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
-                               add_timer(&pDevice->TimerSQ3Tmax1);
+                               pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n",
+                                        (int)priv->ulRatio_State0,
+                                        (int)priv->wAntDiversityMaxRate,
+                                        (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
+                                        (int)priv->uDiversityCnt);
+
+                               s_vChangeAntenna(priv);
+                               priv->byAntennaState = 1;
+                               del_timer(&priv->TimerSQ3Tmax3);
+                               del_timer(&priv->TimerSQ3Tmax2);
+                               priv->TimerSQ3Tmax1.expires =  RUN_AT(priv->byTMax * HZ);
+                               add_timer(&priv->TimerSQ3Tmax1);
 
                        } else {
-                               pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
-                               add_timer(&pDevice->TimerSQ3Tmax3);
+                               priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
+                               add_timer(&priv->TimerSQ3Tmax3);
                        }
-                       BBvClearAntDivSQ3Value(pDevice);
+                       BBvClearAntDivSQ3Value(priv);
 
                }
        } else { /* byAntennaState == 1 */
 
-               if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
-                       del_timer(&pDevice->TimerSQ3Tmax1);
-
-                       pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
-                       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n",
-                               (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1);
-
-                       if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
-                               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
-                                       (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1,
-                                       (int)pDevice->wAntDiversityMaxRate,
-                                       (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], (int)pDevice->uDiversityCnt);
-
-                               s_vChangeAntenna(pDevice);
-                               pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
-                               pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
-                               add_timer(&pDevice->TimerSQ3Tmax3);
-                               add_timer(&pDevice->TimerSQ3Tmax2);
+               if (priv->uDiversityCnt > priv->ulDiversityMValue) {
+                       del_timer(&priv->TimerSQ3Tmax1);
+
+                       priv->ulRatio_State1 = s_ulGetRatio(priv);
+                       pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n",
+                                (int)priv->ulRatio_State0,
+                                (int)priv->ulRatio_State1);
+
+                       if (priv->ulRatio_State1 < priv->ulRatio_State0) {
+                               pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
+                                        (int)priv->ulRatio_State0,
+                                        (int)priv->ulRatio_State1,
+                                        (int)priv->wAntDiversityMaxRate,
+                                        (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
+                                        (int)priv->uDiversityCnt);
+
+                               s_vChangeAntenna(priv);
+                               priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
+                               priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
+                               add_timer(&priv->TimerSQ3Tmax3);
+                               add_timer(&priv->TimerSQ3Tmax2);
                        }
-                       pDevice->byAntennaState = 0;
-                       BBvClearAntDivSQ3Value(pDevice);
+                       priv->byAntennaState = 0;
+                       BBvClearAntDivSQ3Value(priv);
                }
        } /* byAntennaState */
 }
@@ -2795,26 +2623,30 @@ BBvAntennaDiversity(PSDevice pDevice, unsigned char byRxRate, unsigned char bySQ
 
 void
 TimerSQ3CallBack(
-       void *hDeviceContext
+       unsigned long data
 )
 {
-       PSDevice        pDevice = (PSDevice)hDeviceContext;
+       struct vnt_private *priv = (struct vnt_private *)data;
+       unsigned long flags;
+
+       pr_debug("TimerSQ3CallBack...\n");
 
-       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "TimerSQ3CallBack...");
-       spin_lock_irq(&pDevice->lock);
+       spin_lock_irqsave(&priv->lock, flags);
 
-       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "3.[%08x][%08x], %d\n", (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1, (int)pDevice->uDiversityCnt);
+       pr_debug("3.[%08x][%08x], %d\n",
+                (int)priv->ulRatio_State0, (int)priv->ulRatio_State1,
+                (int)priv->uDiversityCnt);
 
-       s_vChangeAntenna(pDevice);
-       pDevice->byAntennaState = 0;
-       BBvClearAntDivSQ3Value(pDevice);
+       s_vChangeAntenna(priv);
+       priv->byAntennaState = 0;
+       BBvClearAntDivSQ3Value(priv);
 
-       pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
-       pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
-       add_timer(&pDevice->TimerSQ3Tmax3);
-       add_timer(&pDevice->TimerSQ3Tmax2);
+       priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
+       priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
+       add_timer(&priv->TimerSQ3Tmax3);
+       add_timer(&priv->TimerSQ3Tmax2);
 
-       spin_unlock_irq(&pDevice->lock);
+       spin_unlock_irqrestore(&priv->lock, flags);
 }
 
 /*+
@@ -2837,40 +2669,46 @@ TimerSQ3CallBack(
 
 void
 TimerState1CallBack(
-       void *hDeviceContext
+       unsigned long data
 )
 {
-       PSDevice        pDevice = (PSDevice)hDeviceContext;
+       struct vnt_private *priv = (struct vnt_private *)data;
+       unsigned long flags;
 
-       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "TimerState1CallBack...");
+       pr_debug("TimerState1CallBack...\n");
 
-       spin_lock_irq(&pDevice->lock);
-       if (pDevice->uDiversityCnt < pDevice->ulDiversityMValue/100) {
-               s_vChangeAntenna(pDevice);
-               pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
-               pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
-               add_timer(&pDevice->TimerSQ3Tmax3);
-               add_timer(&pDevice->TimerSQ3Tmax2);
+       spin_lock_irqsave(&priv->lock, flags);
+
+       if (priv->uDiversityCnt < priv->ulDiversityMValue/100) {
+               s_vChangeAntenna(priv);
+               priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
+               priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
+               add_timer(&priv->TimerSQ3Tmax3);
+               add_timer(&priv->TimerSQ3Tmax2);
        } else {
-               pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
-               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "SQ3_State1, rate0 = %08x,rate1 = %08x\n",
-                       (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1);
-
-               if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
-                       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
-                               (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1,
-                               (int)pDevice->wAntDiversityMaxRate,
-                               (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate], (int)pDevice->uDiversityCnt);
-
-                       s_vChangeAntenna(pDevice);
-
-                       pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
-                       pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
-                       add_timer(&pDevice->TimerSQ3Tmax3);
-                       add_timer(&pDevice->TimerSQ3Tmax2);
+               priv->ulRatio_State1 = s_ulGetRatio(priv);
+               pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n",
+                        (int)priv->ulRatio_State0,
+                        (int)priv->ulRatio_State1);
+
+               if (priv->ulRatio_State1 < priv->ulRatio_State0) {
+                       pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
+                                (int)priv->ulRatio_State0,
+                                (int)priv->ulRatio_State1,
+                                (int)priv->wAntDiversityMaxRate,
+                                (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
+                                (int)priv->uDiversityCnt);
+
+                       s_vChangeAntenna(priv);
+
+                       priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
+                       priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
+                       add_timer(&priv->TimerSQ3Tmax3);
+                       add_timer(&priv->TimerSQ3Tmax2);
                }
        }
-       pDevice->byAntennaState = 0;
-       BBvClearAntDivSQ3Value(pDevice);
-       spin_unlock_irq(&pDevice->lock);
+       priv->byAntennaState = 0;
+       BBvClearAntDivSQ3Value(priv);
+
+       spin_unlock_irqrestore(&priv->lock, flags);
 }