Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / ath / carl9170 / phy.c
index b72c09cf43a4c614a56d5b63ca1f34f11b28d4f0..07f82234c860e35eebbddded079ef267dc2f13ee 100644 (file)
@@ -1569,16 +1569,14 @@ static enum carl9170_bw nl80211_to_carl(enum nl80211_channel_type type)
 }
 
 int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
-                        enum nl80211_channel_type _bw,
-                        enum carl9170_rf_init_mode rfi)
+                        enum nl80211_channel_type _bw)
 {
        const struct carl9170_phy_freq_params *freqpar;
        struct carl9170_rf_init_result rf_res;
        struct carl9170_rf_init rf;
-       u32 cmd, tmp, offs = 0, new_ht = 0;
+       u32 tmp, offs = 0, new_ht = 0;
        int err;
        enum carl9170_bw bw;
-       bool warm_reset;
        struct ieee80211_channel *old_channel = NULL;
 
        bw = nl80211_to_carl(_bw);
@@ -1592,51 +1590,27 @@ int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
        /* may be NULL at first setup */
        if (ar->channel) {
                old_channel = ar->channel;
-               warm_reset = (old_channel->band != channel->band) ||
-                            (old_channel->center_freq ==
-                             channel->center_freq) ||
-                            (ar->ht_settings != new_ht);
-
                ar->channel = NULL;
-       } else {
-               warm_reset = true;
        }
 
-       /* HW workaround */
-       if (!ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] &&
-           channel->center_freq <= 2417)
-               warm_reset = true;
-
-       if (rfi != CARL9170_RFI_NONE || warm_reset) {
-               u32 val;
-
-               if (rfi == CARL9170_RFI_COLD)
-                       val = AR9170_PWR_RESET_BB_COLD_RESET;
-               else
-                       val = AR9170_PWR_RESET_BB_WARM_RESET;
-
-               /* warm/cold reset BB/ADDA */
-               err = carl9170_write_reg(ar, AR9170_PWR_REG_RESET, val);
-               if (err)
-                       return err;
-
-               err = carl9170_write_reg(ar, AR9170_PWR_REG_RESET, 0x0);
-               if (err)
-                       return err;
+       /* cold reset BB/ADDA */
+       err = carl9170_write_reg(ar, AR9170_PWR_REG_RESET,
+                                AR9170_PWR_RESET_BB_COLD_RESET);
+       if (err)
+               return err;
 
-               err = carl9170_init_phy(ar, channel->band);
-               if (err)
-                       return err;
+       err = carl9170_write_reg(ar, AR9170_PWR_REG_RESET, 0x0);
+       if (err)
+               return err;
 
-               err = carl9170_init_rf_banks_0_7(ar,
-                       channel->band == IEEE80211_BAND_5GHZ);
-               if (err)
-                       return err;
+       err = carl9170_init_phy(ar, channel->band);
+       if (err)
+               return err;
 
-               cmd = CARL9170_CMD_RF_INIT;
-       } else {
-               cmd = CARL9170_CMD_FREQUENCY;
-       }
+       err = carl9170_init_rf_banks_0_7(ar,
+                                        channel->band == IEEE80211_BAND_5GHZ);
+       if (err)
+               return err;
 
        err = carl9170_exec_cmd(ar, CARL9170_CMD_FREQ_START, 0, NULL, 0, NULL);
        if (err)
@@ -1648,8 +1622,8 @@ int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
                return err;
 
        err = carl9170_init_rf_bank4_pwr(ar,
-               channel->band == IEEE80211_BAND_5GHZ,
-               channel->center_freq, bw);
+                                        channel->band == IEEE80211_BAND_5GHZ,
+                                        channel->center_freq, bw);
        if (err)
                return err;
 
@@ -1703,13 +1677,8 @@ int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
        rf.delta_slope_coeff_man = cpu_to_le32(freqpar->coeff_man);
        rf.delta_slope_coeff_exp_shgi = cpu_to_le32(freqpar->coeff_exp_shgi);
        rf.delta_slope_coeff_man_shgi = cpu_to_le32(freqpar->coeff_man_shgi);
-
-       if (rfi != CARL9170_RFI_NONE)
-               rf.finiteLoopCount = cpu_to_le32(2000);
-       else
-               rf.finiteLoopCount = cpu_to_le32(1000);
-
-       err = carl9170_exec_cmd(ar, cmd, sizeof(rf), &rf,
+       rf.finiteLoopCount = cpu_to_le32(2000);
+       err = carl9170_exec_cmd(ar, CARL9170_CMD_RF_INIT, sizeof(rf), &rf,
                                sizeof(rf_res), &rf_res);
        if (err)
                return err;
@@ -1724,9 +1693,8 @@ int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
                          old_channel->center_freq : -1, channel->center_freq,
                          err);
 
-               if ((rfi == CARL9170_RFI_COLD) || (ar->chan_fail > 3)) {
-                       /*
-                        * We have tried very hard to change to _another_
+               if (ar->chan_fail > 3) {
+                       /* We have tried very hard to change to _another_
                         * channel and we've failed to do so!
                         * Chances are that the PHY/RF is no longer
                         * operable (due to corruptions/fatal events/bugs?)
@@ -1736,8 +1704,7 @@ int carl9170_set_channel(struct ar9170 *ar, struct ieee80211_channel *channel,
                        return 0;
                }
 
-               err = carl9170_set_channel(ar, channel, _bw,
-                                          CARL9170_RFI_COLD);
+               err = carl9170_set_channel(ar, channel, _bw);
                if (err)
                        return err;
        } else {