staging: vt6656: rf.c additional power.
authorMalcolm Priestley <tvboxspy@gmail.com>
Sat, 17 May 2014 08:50:18 +0000 (09:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 18 May 2014 16:58:27 +0000 (09:58 -0700)
Provides extra power on weak RSSI.

The values orginate from the vendors driver.

It is applied later in RFbRawSetPower to simplify and check that it doesn't
exceed the max power.

Vendor driver VT6656_Linux_src_v1.21.03_x86_11.04.zip
http://www.viaembedded.com/servlet/downloadSvl?id=1890&download_file_id=14704
This is GPL-licensed code.

vendors code
...
if (pDevice->byRFType == RF_VT3226D0) {
if (lRSSI == 0){
lAdditionalPower = 7;
}
else if ((lRSSI < -60) && (lRSSI >= -65)){
lAdditionalPower = 5;
//lAdditionalPower = 9;
}
else if ((lRSSI < -65) && (lRSSI >= -70)){
lAdditionalPower = 7;
//lAdditionalPower = 9;
}
else if ((lRSSI < -70) && (lRSSI >= -80)){
lAdditionalPower = 9;
}
else if (lRSSI < -80) {
lAdditionalPower = 9;
}
}
else {
if (lRSSI == 0){
lAdditionalPower = 7;
}
else if ((lRSSI < -70) && (lRSSI >= -75)){
lAdditionalPower = 5;
}
else if ((lRSSI < -75) && (lRSSI >= -80)){
lAdditionalPower = 7;
}
else if (lRSSI < -80) {
lAdditionalPower = 9;
}
}

...

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6656/rf.c
drivers/staging/vt6656/rf.h

index 1e8f64bff03c665046c8b51b72bb1cf5809e3aa3..64632e9fff63c25014bc55149bb3da51414419b0 100644 (file)
@@ -769,6 +769,32 @@ int RFbSetPower(struct vnt_private *priv, u32 rate, u32 channel)
        return ret;
 }
 
+static u8 vnt_rf_addpower(struct vnt_private *priv)
+{
+       s32 rssi = -priv->uCurrRSSI;
+
+       if (!rssi)
+               return 7;
+
+       if (priv->byRFType == RF_VT3226D0) {
+               if (rssi < -70)
+                       return 9;
+               else if (rssi < -65)
+                       return 7;
+               else if (rssi < -60)
+                       return 5;
+       } else {
+               if (rssi < -80)
+                       return 9;
+               else if (rssi < -75)
+                       return 7;
+               else if (rssi < -70)
+                       return 5;
+       }
+
+       return 0;
+}
+
 /*
  * Description: Set Tx power
  *
@@ -788,6 +814,10 @@ int RFbRawSetPower(struct vnt_private *priv, u8 power, u32 rate)
        u32 power_setting = 0;
        int ret = true;
 
+       power += vnt_rf_addpower(priv);
+       if (power > VNT_RF_MAX_POWER)
+               power = VNT_RF_MAX_POWER;
+
        if (priv->byCurPwr == power)
                return true;
 
index de5c613b4ef992273b96416b11b79489da80ff12..e9a01fee4127f1a691d2f4948aa7be5d04e56624 100644 (file)
@@ -53,6 +53,8 @@
 #define RF_EMU              0x80
 #define RF_MASK             0x7F
 
+#define VNT_RF_MAX_POWER    0x3f
+
 extern const u8 RFaby11aChannelIndex[200];
 
 int IFRFbWriteEmbedded(struct vnt_private *, u32 dwData);