u8 cck[RTL8723A_MAX_RF_PATHS], ofdm[RTL8723A_MAX_RF_PATHS];
        u8 ofdmbase[RTL8723A_MAX_RF_PATHS], mcsbase[RTL8723A_MAX_RF_PATHS];
        u32 val32, ofdm_a, ofdm_b, mcs_a, mcs_b;
-       u8 val8;
+       u8 val8, base;
        int group, i;
 
        group = rtl8xxxu_gen1_channel_to_group(channel);
 
-       cck[0] = priv->cck_tx_power_index_A[group] - 1;
-       cck[1] = priv->cck_tx_power_index_B[group] - 1;
+       cck[0] = priv->cck_tx_power_index_A[group];
+       cck[1] = priv->cck_tx_power_index_B[group];
 
        if (priv->hi_pa) {
                if (cck[0] > 0x20)
 
        ofdm[0] = priv->ht40_1s_tx_power_index_A[group];
        ofdm[1] = priv->ht40_1s_tx_power_index_B[group];
-       if (ofdm[0])
-               ofdm[0] -= 1;
-       if (ofdm[1])
-               ofdm[1] -= 1;
 
        ofdmbase[0] = ofdm[0] + priv->ofdm_tx_power_index_diff[group].a;
        ofdmbase[1] = ofdm[1] + priv->ofdm_tx_power_index_diff[group].b;
 
        rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS15_MCS12,
                         mcs_a + power_base->reg_0e1c);
+       val8 = u32_get_bits(mcs_a + power_base->reg_0e1c, 0xff000000);
        for (i = 0; i < 3; i++) {
-               if (i != 2)
-                       val8 = (mcsbase[0] > 8) ? (mcsbase[0] - 8) : 0;
-               else
-                       val8 = (mcsbase[0] > 6) ? (mcsbase[0] - 6) : 0;
+               base = i != 2 ? 8 : 6;
+               val8 = max_t(int, val8 - base, 0);
                rtl8xxxu_write8(priv, REG_OFDM0_XC_TX_IQ_IMBALANCE + i, val8);
        }
+
        rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS15_MCS12,
                         mcs_b + power_base->reg_0868);
+       val8 = u32_get_bits(mcs_b + power_base->reg_0868, 0xff000000);
        for (i = 0; i < 3; i++) {
-               if (i != 2)
-                       val8 = (mcsbase[1] > 8) ? (mcsbase[1] - 8) : 0;
-               else
-                       val8 = (mcsbase[1] > 6) ? (mcsbase[1] - 6) : 0;
+               base = i != 2 ? 8 : 6;
+               val8 = max_t(int, val8 - base, 0);
                rtl8xxxu_write8(priv, REG_OFDM0_XD_TX_IQ_IMBALANCE + i, val8);
        }
 }