carl9170: Only specify interface combinations if more than one interface is possible
authorChristian Lamparter <chunkeey@googlemail.com>
Mon, 17 Dec 2012 13:54:19 +0000 (14:54 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 7 Jan 2013 20:16:52 +0000 (15:16 -0500)
Otherwise carl9170 triggers a warning in cfg80211, from net/wireless/core.c

/* Combinations with just one interface aren't real */
if (WARN_ON(c->max_interfaces < 2))

Note: The number of supported interfaces is set by
the carl9170 firmware. The default number of
supported interfaces for all current firmwares is 2.
Therefore this warning can only be observed with
custom firmwares.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/carl9170/fw.c

index 5a8a9f891dd89be4d6cdf6a9015cf5b3b51ea618..401a080a30f121cbaf894b04190762bfac4df1d3 100644 (file)
@@ -215,6 +215,24 @@ static int carl9170_fw_tx_sequence(struct ar9170 *ar)
        return 0;
 }
 
+static void carl9170_fw_set_if_combinations(struct ar9170 *ar,
+                                           u16 if_comb_types)
+{
+       if (ar->fw.vif_num < 2)
+               return;
+
+       ar->if_comb_limits[0].max = ar->fw.vif_num;
+       ar->if_comb_limits[0].types = if_comb_types;
+
+       ar->if_combs[0].num_different_channels = 1;
+       ar->if_combs[0].max_interfaces = ar->fw.vif_num;
+       ar->if_combs[0].limits = ar->if_comb_limits;
+       ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits);
+
+       ar->hw->wiphy->iface_combinations = ar->if_combs;
+       ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs);
+}
+
 static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
 {
        const struct carl9170fw_otus_desc *otus_desc;
@@ -341,16 +359,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
                }
        }
 
-       ar->if_comb_limits[0].max = ar->fw.vif_num;
-       ar->if_comb_limits[0].types = if_comb_types;
-
-       ar->if_combs[0].num_different_channels = 1;
-       ar->if_combs[0].max_interfaces = ar->fw.vif_num;
-       ar->if_combs[0].limits = ar->if_comb_limits;
-       ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits);
-
-       ar->hw->wiphy->iface_combinations = ar->if_combs;
-       ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs);
+       carl9170_fw_set_if_combinations(ar, if_comb_types);
 
        ar->hw->wiphy->interface_modes |= if_comb_types;