ath6kl: report antenna configuration
authorBen Greear <greearb@candelatech.com>
Wed, 21 Oct 2015 21:53:19 +0000 (14:53 -0700)
committerKalle Valo <kvalo@qca.qualcomm.com>
Thu, 29 Oct 2015 11:06:52 +0000 (13:06 +0200)
This lets 'iw phy phy0 info' report antennas for
the radio device:

...
Available Antennas: TX 0x2 RX 0x2
Configured Antennas: TX 0x2 RX 0x2
...

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/core.h

index 76b682e566ab217f842648cbd3e4e0177d3ef1da..6430ab663e37497db8a7995d00effec4254d5e1e 100644 (file)
@@ -3231,6 +3231,15 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
                                        wait, buf, len, no_cck);
 }
 
+static int ath6kl_get_antenna(struct wiphy *wiphy,
+                             u32 *tx_ant, u32 *rx_ant)
+{
+       struct ath6kl *ar = wiphy_priv(wiphy);
+       *tx_ant = ar->hw.tx_ant;
+       *rx_ant = ar->hw.rx_ant;
+       return 0;
+}
+
 static void ath6kl_mgmt_frame_register(struct wiphy *wiphy,
                                       struct wireless_dev *wdev,
                                       u16 frame_type, bool reg)
@@ -3447,6 +3456,7 @@ static struct cfg80211_ops ath6kl_cfg80211_ops = {
        .cancel_remain_on_channel = ath6kl_cancel_remain_on_channel,
        .mgmt_tx = ath6kl_mgmt_tx,
        .mgmt_frame_register = ath6kl_mgmt_frame_register,
+       .get_antenna = ath6kl_get_antenna,
        .sched_scan_start = ath6kl_cfg80211_sscan_start,
        .sched_scan_stop = ath6kl_cfg80211_sscan_stop,
        .set_bitrate_mask = ath6kl_cfg80211_set_bitrate,
@@ -3794,11 +3804,18 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
                ath6kl_band_5ghz.ht_cap.mcs.rx_mask[0] = 0xff;
                ath6kl_band_2ghz.ht_cap.mcs.rx_mask[1] = 0xff;
                ath6kl_band_5ghz.ht_cap.mcs.rx_mask[1] = 0xff;
+               ar->hw.tx_ant = 2;
+               ar->hw.rx_ant = 2;
        } else {
                ath6kl_band_2ghz.ht_cap.mcs.rx_mask[0] = 0xff;
                ath6kl_band_5ghz.ht_cap.mcs.rx_mask[0] = 0xff;
+               ar->hw.tx_ant = 1;
+               ar->hw.rx_ant = 1;
        }
 
+       wiphy->available_antennas_tx = ar->hw.tx_ant;
+       wiphy->available_antennas_rx = ar->hw.rx_ant;
+
        if (band_2gig)
                wiphy->bands[IEEE80211_BAND_2GHZ] = &ath6kl_band_2ghz;
        if (band_5gig)
index 2b78c863d03095b035991d3d123ea375b35a4cb6..5f3acfe6015e55b3f4b5f9e8ade1329b68384602 100644 (file)
@@ -782,6 +782,8 @@ struct ath6kl {
                u32 refclk_hz;
                u32 uarttx_pin;
                u32 testscript_addr;
+               u8 tx_ant;
+               u8 rx_ant;
                enum wmi_phy_cap cap;
 
                u32 flags;