aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k/wmi.c
diff options
context:
space:
mode:
authorTamizh chelvam <c_traja@qti.qualcomm.com>2017-02-23 08:18:22 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2017-03-16 04:53:49 -0400
commit523f6701dbabbe63b35d16bb676d35212b22e204 (patch)
tree92ca6ff1130b6ca02c3201d2450cc304f2b07c3f /drivers/net/wireless/ath/ath10k/wmi.c
parentca07baab0b1e627ae1d4a55d190fb1c9d32a3445 (diff)
ath10k: update available channel list for 5G radio
If a 5 GHz radio is calibrated for operation in both the low band (channels 36 to 64) and high band(channels 100 to 169), hardware allows operations in all the listed channels. However, if the chip has been calibrated only for the low/high band and a high/low band channel is configured, due to lack of calibration there will be potentially invalid signal on those non calibrated channels. To avoid this problem this patch sets IEEE80211_CHAN_DISABLED flag for those non calibrated channels by using low_5ghz_chan and high_5ghz_chan values which we get from target through wmi service ready event. Driver initialized flags are getting re initialized in handle_channel in cfg80211. So calling the function to disable the non supported channel from reg_notifier(). Signed-off-by: Tamizh chelvam <c_traja@qti.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/wmi.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 2f1743e60fa1..b31c4f71b413 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -4593,6 +4593,8 @@ ath10k_wmi_main_op_pull_svc_rdy_ev(struct ath10k *ar, struct sk_buff *skb,
4593 arg->phy_capab = ev->phy_capability; 4593 arg->phy_capab = ev->phy_capability;
4594 arg->num_rf_chains = ev->num_rf_chains; 4594 arg->num_rf_chains = ev->num_rf_chains;
4595 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; 4595 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd;
4596 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan;
4597 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan;
4596 arg->num_mem_reqs = ev->num_mem_reqs; 4598 arg->num_mem_reqs = ev->num_mem_reqs;
4597 arg->service_map = ev->wmi_service_bitmap; 4599 arg->service_map = ev->wmi_service_bitmap;
4598 arg->service_map_len = sizeof(ev->wmi_service_bitmap); 4600 arg->service_map_len = sizeof(ev->wmi_service_bitmap);
@@ -4629,6 +4631,8 @@ ath10k_wmi_10x_op_pull_svc_rdy_ev(struct ath10k *ar, struct sk_buff *skb,
4629 arg->phy_capab = ev->phy_capability; 4631 arg->phy_capab = ev->phy_capability;
4630 arg->num_rf_chains = ev->num_rf_chains; 4632 arg->num_rf_chains = ev->num_rf_chains;
4631 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; 4633 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd;
4634 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan;
4635 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan;
4632 arg->num_mem_reqs = ev->num_mem_reqs; 4636 arg->num_mem_reqs = ev->num_mem_reqs;
4633 arg->service_map = ev->wmi_service_bitmap; 4637 arg->service_map = ev->wmi_service_bitmap;
4634 arg->service_map_len = sizeof(ev->wmi_service_bitmap); 4638 arg->service_map_len = sizeof(ev->wmi_service_bitmap);
@@ -4682,6 +4686,8 @@ static void ath10k_wmi_event_service_ready_work(struct work_struct *work)
4682 ar->phy_capability = __le32_to_cpu(arg.phy_capab); 4686 ar->phy_capability = __le32_to_cpu(arg.phy_capab);
4683 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); 4687 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains);
4684 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd); 4688 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd);
4689 ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan);
4690 ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan);
4685 4691
4686 ath10k_dbg_dump(ar, ATH10K_DBG_WMI, NULL, "wmi svc: ", 4692 ath10k_dbg_dump(ar, ATH10K_DBG_WMI, NULL, "wmi svc: ",
4687 arg.service_map, arg.service_map_len); 4693 arg.service_map, arg.service_map_len);