The latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has changed the CCK and OFDM power setting code as compared with previous versions. This patch implements those changes for the Linux driver. Signed-off-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx> --- Piter, Does this help your devices? Larry Index: wireless-testing/drivers/net/wireless/rtl8187_rtl8225.c =================================================================== --- wireless-testing.orig/drivers/net/wireless/rtl8187_rtl8225.c +++ wireless-testing/drivers/net/wireless/rtl8187_rtl8225.c @@ -578,23 +578,27 @@ static void rtl8225z2_b_rf_set_tx_power( { struct rtl8187_priv *priv = dev->priv; u8 cck_power, ofdm_power; + u8 min_cck_power = (priv->hw_rev == RTL8187BvB) ? 0 : 7; + u8 max_cck_power = (priv->hw_rev == RTL8187BvB) ? 15 : 22; + u8 min_ofdm_power = (priv->hw_rev == RTL8187BvB) ? 2 : 10; + u8 max_ofdm_power = (priv->hw_rev == RTL8187BvB) ? 17 : 25; const u8 *tmp; int i; cck_power = priv->channels[channel - 1].hw_value & 0xF; ofdm_power = priv->channels[channel - 1].hw_value >> 4; - if (cck_power > 15) - cck_power = (priv->hw_rev == RTL8187BvB) ? 15 : 22; + if (cck_power > max_cck_power - min_cck_power) + cck_power = max_cck_power; else - cck_power += (priv->hw_rev == RTL8187BvB) ? 0 : 7; + cck_power += min_cck_power; cck_power += priv->txpwr_base & 0xF; cck_power = min(cck_power, (u8)35); - if (ofdm_power > 15) - ofdm_power = (priv->hw_rev == RTL8187BvB) ? 17 : 25; + if (ofdm_power > max_ofdm_power - min_ofdm_power) + ofdm_power = max_ofdm_power; else - ofdm_power += (priv->hw_rev == RTL8187BvB) ? 2 : 10; + ofdm_power += min_ofdm_power; ofdm_power += (priv->txpwr_base >> 4) & 0xF; ofdm_power = min(ofdm_power, (u8)35); @@ -625,7 +629,7 @@ static void rtl8225z2_b_rf_set_tx_power( rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++); rtl818x_iowrite8(priv, &priv->map->TX_GAIN_CCK, - rtl8225z2_tx_gain_cck_ofdm[cck_power]); + rtl8225z2_tx_gain_cck_ofdm[cck_power] << 1); msleep(1); rtl818x_iowrite8(priv, &priv->map->TX_GAIN_OFDM, -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html