brcm80211: smac: always set channel specified by mac80211
In some situations brcmsmac is choosing a channel internally. This makes it difficult at times to know what channel to use for enforcing regulatory constraints, so instead always use the channel from the mac80211 configuration. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
0bd8b79fe9
commit
9169129552
|
@ -3139,20 +3139,6 @@ void brcms_c_reset(struct brcms_c_info *wlc)
|
||||||
brcms_b_reset(wlc->hw);
|
brcms_b_reset(wlc->hw);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the channel the driver should initialize during brcms_c_init.
|
|
||||||
* the channel may have to be changed from the currently configured channel
|
|
||||||
* if other configurations are in conflict (bandlocked, 11n mode disabled,
|
|
||||||
* invalid channel for current country, etc.)
|
|
||||||
*/
|
|
||||||
static u16 brcms_c_init_chanspec(struct brcms_c_info *wlc)
|
|
||||||
{
|
|
||||||
u16 chanspec =
|
|
||||||
1 | WL_CHANSPEC_BW_20 | WL_CHANSPEC_CTL_SB_NONE |
|
|
||||||
WL_CHANSPEC_BAND_2G;
|
|
||||||
|
|
||||||
return chanspec;
|
|
||||||
}
|
|
||||||
|
|
||||||
void brcms_c_init_scb(struct scb *scb)
|
void brcms_c_init_scb(struct scb *scb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -5129,6 +5115,8 @@ static void brcms_c_wme_retries_write(struct brcms_c_info *wlc)
|
||||||
/* make interface operational */
|
/* make interface operational */
|
||||||
int brcms_c_up(struct brcms_c_info *wlc)
|
int brcms_c_up(struct brcms_c_info *wlc)
|
||||||
{
|
{
|
||||||
|
struct ieee80211_channel *ch;
|
||||||
|
|
||||||
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
|
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
|
||||||
|
|
||||||
/* HW is turned off so don't try to access it */
|
/* HW is turned off so don't try to access it */
|
||||||
|
@ -5195,8 +5183,9 @@ int brcms_c_up(struct brcms_c_info *wlc)
|
||||||
wlc->pub->up = true;
|
wlc->pub->up = true;
|
||||||
|
|
||||||
if (wlc->bandinit_pending) {
|
if (wlc->bandinit_pending) {
|
||||||
|
ch = wlc->pub->ieee_hw->conf.channel;
|
||||||
brcms_c_suspend_mac_and_wait(wlc);
|
brcms_c_suspend_mac_and_wait(wlc);
|
||||||
brcms_c_set_chanspec(wlc, wlc->default_bss->chanspec);
|
brcms_c_set_chanspec(wlc, ch20mhz_chspec(ch->hw_value));
|
||||||
wlc->bandinit_pending = false;
|
wlc->bandinit_pending = false;
|
||||||
brcms_c_enable_mac(wlc);
|
brcms_c_enable_mac(wlc);
|
||||||
}
|
}
|
||||||
|
@ -8201,19 +8190,12 @@ bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded)
|
||||||
void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx)
|
void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx)
|
||||||
{
|
{
|
||||||
struct bcma_device *core = wlc->hw->d11core;
|
struct bcma_device *core = wlc->hw->d11core;
|
||||||
|
struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
|
||||||
u16 chanspec;
|
u16 chanspec;
|
||||||
|
|
||||||
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
|
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
|
||||||
|
|
||||||
/*
|
chanspec = ch20mhz_chspec(ch->hw_value);
|
||||||
* This will happen if a big-hammer was executed. In
|
|
||||||
* that case, we want to go back to the channel that
|
|
||||||
* we were on and not new channel
|
|
||||||
*/
|
|
||||||
if (wlc->pub->associated)
|
|
||||||
chanspec = wlc->home_chanspec;
|
|
||||||
else
|
|
||||||
chanspec = brcms_c_init_chanspec(wlc);
|
|
||||||
|
|
||||||
brcms_b_init(wlc->hw, chanspec);
|
brcms_b_init(wlc->hw, chanspec);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue