mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-02-20 07:14:44 +02:00
ath9k: merge a channel change fix from linux-wireless
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29684 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
0dad098602
commit
4cd49acd61
@ -348,7 +348,29 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1752,18 +1708,12 @@ static int ath9k_config(struct ieee80211
|
@@ -1678,7 +1634,6 @@ static int ath9k_config(struct ieee80211
|
||||||
|
|
||||||
|
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
|
||||||
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
||||||
|
- struct ath9k_channel old_chan;
|
||||||
|
int pos = curchan->hw_value;
|
||||||
|
int old_pos = -1;
|
||||||
|
unsigned long flags;
|
||||||
|
@@ -1704,11 +1659,8 @@ static int ath9k_config(struct ieee80211
|
||||||
|
* Preserve the current channel values, before updating
|
||||||
|
* the same channel
|
||||||
|
*/
|
||||||
|
- if (old_pos == pos) {
|
||||||
|
- memcpy(&old_chan, &sc->sc_ah->channels[pos],
|
||||||
|
- sizeof(struct ath9k_channel));
|
||||||
|
- ah->curchan = &old_chan;
|
||||||
|
- }
|
||||||
|
+ if (ah->curchan && (old_pos == pos))
|
||||||
|
+ ath9k_hw_getnf(ah, ah->curchan);
|
||||||
|
|
||||||
|
ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
|
||||||
|
curchan, conf->channel_type);
|
||||||
|
@@ -1752,18 +1704,12 @@ static int ath9k_config(struct ieee80211
|
||||||
ath_dbg(common, ATH_DBG_CONFIG,
|
ath_dbg(common, ATH_DBG_CONFIG,
|
||||||
"Set power: %d\n", conf->power_level);
|
"Set power: %d\n", conf->power_level);
|
||||||
sc->config.txpowlimit = 2 * conf->power_level;
|
sc->config.txpowlimit = 2 * conf->power_level;
|
||||||
@ -368,7 +390,7 @@
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -2331,9 +2281,6 @@ static void ath9k_flush(struct ieee80211
|
@@ -2331,9 +2277,6 @@ static void ath9k_flush(struct ieee80211
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,7 +400,7 @@
|
|||||||
for (j = 0; j < timeout; j++) {
|
for (j = 0; j < timeout; j++) {
|
||||||
bool npend = false;
|
bool npend = false;
|
||||||
|
|
||||||
@@ -2351,21 +2298,22 @@ static void ath9k_flush(struct ieee80211
|
@@ -2351,21 +2294,22 @@ static void ath9k_flush(struct ieee80211
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!npend)
|
if (!npend)
|
||||||
@ -1347,3 +1369,13 @@
|
|||||||
__sta_info_free(local, sta);
|
__sta_info_free(local, sta);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/calib.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/calib.c
|
||||||
|
@@ -402,6 +402,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
|
||||||
|
ah->noise = ath9k_hw_getchan_noise(ah, chan);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(ath9k_hw_getnf);
|
||||||
|
|
||||||
|
void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah,
|
||||||
|
struct ath9k_channel *chan)
|
||||||
|
@ -90,19 +90,19 @@
|
|||||||
{
|
{
|
||||||
struct ath_softc *sc = hw->priv;
|
struct ath_softc *sc = hw->priv;
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
@@ -1616,9 +1616,10 @@ static int ath9k_config(struct ieee80211
|
@@ -1616,9 +1616,11 @@ static int ath9k_config(struct ieee80211
|
||||||
|
|
||||||
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
|
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
|
||||||
struct ieee80211_channel *curchan = hw->conf.channel;
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
||||||
- struct ath9k_channel old_chan;
|
+ struct ath9k_channel *hchan;
|
||||||
+ struct ath9k_channel old_chan, *hchan;
|
|
||||||
int pos = curchan->hw_value;
|
int pos = curchan->hw_value;
|
||||||
int old_pos = -1;
|
int old_pos = -1;
|
||||||
+ u32 oldflags;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
+ u32 oldflags;
|
||||||
|
|
||||||
if (ah->curchan)
|
if (ah->curchan)
|
||||||
@@ -1671,7 +1672,23 @@ static int ath9k_config(struct ieee80211
|
old_pos = ah->curchan - &ah->channels[0];
|
||||||
|
@@ -1667,7 +1669,23 @@ static int ath9k_config(struct ieee80211
|
||||||
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
|
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1694,6 +1694,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1691,6 +1691,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
/*
|
/*
|
||||||
* The most recent snapshot of channel->noisefloor for the old
|
* The most recent snapshot of channel->noisefloor for the old
|
||||||
* channel is only available after the hardware reset. Copy it to
|
* channel is only available after the hardware reset. Copy it to
|
||||||
@@ -1709,6 +1711,7 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1706,6 +1708,7 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
sc->config.txpowlimit = 2 * conf->power_level;
|
sc->config.txpowlimit = 2 * conf->power_level;
|
||||||
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
||||||
sc->config.txpowlimit, &sc->curtxpow);
|
sc->config.txpowlimit, &sc->curtxpow);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
@@ -474,6 +474,9 @@ void ath9k_btcoex_timer_pause(struct ath
|
@@ -475,6 +475,9 @@ void ath9k_btcoex_timer_pause(struct ath
|
||||||
#ifdef CONFIG_MAC80211_LEDS
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
void ath_init_leds(struct ath_softc *sc);
|
void ath_init_leds(struct ath_softc *sc);
|
||||||
void ath_deinit_leds(struct ath_softc *sc);
|
void ath_deinit_leds(struct ath_softc *sc);
|
||||||
@ -10,7 +10,7 @@
|
|||||||
#else
|
#else
|
||||||
static inline void ath_init_leds(struct ath_softc *sc)
|
static inline void ath_init_leds(struct ath_softc *sc)
|
||||||
{
|
{
|
||||||
@@ -594,6 +597,13 @@ struct ath9k_vif_iter_data {
|
@@ -595,6 +598,13 @@ struct ath9k_vif_iter_data {
|
||||||
int nothers; /* number of vifs not specified above. */
|
int nothers; /* number of vifs not specified above. */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -24,7 +24,7 @@
|
|||||||
struct ath_softc {
|
struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@@ -637,9 +647,8 @@ struct ath_softc {
|
@@ -638,9 +648,8 @@ struct ath_softc {
|
||||||
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_LEDS
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user