AA: kernel: refresh patches
[12.09/openwrt.git] / package / mac80211 / patches / 701-mwl8k-don-t-overwrite-regulatory-settings.patch
1 From f340b99171e923eb6b54c1d0c22c15b45df40647 Mon Sep 17 00:00:00 2001
2 From: Jonas Gorski <jogo@openwrt.org>
3 Date: Mon, 11 Mar 2013 17:17:28 +0100
4 Subject: [PATCH] mwl8k: don't overwrite regulatory settings
5
6 Currently the caps are parsed on every firmware reload, causing any
7 channel flags to be cleared.
8 When there is a firmware to interface mode mismatch, the triggered
9 firmware reload causes a reset of the regulatory settings, causing all
10 channels to become available:
11
12 root@openrouter:/# iw phy phy0 info
13 Wiphy phy0
14         Band 1:
15                 (...)
16                 Frequencies:
17                         * 2412 MHz [1] (0.0 dBm)
18                         * 2417 MHz [2] (0.0 dBm)
19                         * 2422 MHz [3] (0.0 dBm)
20                         * 2427 MHz [4] (0.0 dBm)
21                         * 2432 MHz [5] (0.0 dBm)
22                         * 2437 MHz [6] (0.0 dBm)
23                         * 2442 MHz [7] (0.0 dBm)
24                         * 2447 MHz [8] (0.0 dBm)
25                         * 2452 MHz [9] (0.0 dBm)
26                         * 2457 MHz [10] (0.0 dBm)
27                         * 2462 MHz [11] (0.0 dBm)
28                         * 2467 MHz [12] (0.0 dBm)
29                         * 2472 MHz [13] (0.0 dBm)
30                         * 2484 MHz [14] (0.0 dBm)
31                 (...)
32
33 To prevent this, only parse the caps on the first firmware load during
34 hardware probe, and store them locally to know we have already parsed
35 them.
36
37 Signed-off-by: Jonas Gorski <jogo@openwrt.org>
38 ---
39  drivers/net/wireless/mwl8k.c |    6 ++++++
40  1 file changed, 6 insertions(+)
41
42 --- a/drivers/net/wireless/mwl8k.c
43 +++ b/drivers/net/wireless/mwl8k.c
44 @@ -232,6 +232,7 @@ struct mwl8k_priv {
45         u16 num_mcaddrs;
46         u8 hw_rev;
47         u32 fw_rev;
48 +       u32 caps;
49  
50         /*
51          * Running count of TX packets in flight, to avoid
52 @@ -2401,6 +2402,9 @@ mwl8k_set_caps(struct ieee80211_hw *hw, 
53  {
54         struct mwl8k_priv *priv = hw->priv;
55  
56 +       if (priv->caps)
57 +               return;
58 +
59         if ((caps & MWL8K_CAP_2GHZ4) || !(caps & MWL8K_CAP_BAND_MASK)) {
60                 mwl8k_setup_2ghz_band(hw);
61                 if (caps & MWL8K_CAP_MIMO)
62 @@ -2412,6 +2416,8 @@ mwl8k_set_caps(struct ieee80211_hw *hw, 
63                 if (caps & MWL8K_CAP_MIMO)
64                         mwl8k_set_ht_caps(hw, &priv->band_50, caps);
65         }
66 +
67 +       priv->caps = caps;
68  }
69  
70  static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw)