瀏覽代碼

qcacmn: Init Agile Spectral capability based on HW generation

Initialize Agile Spectral capability from chain mask table for
3rd Spectral generation chipsets onwards. Chipsets before 3rd
generation doesn't support Agile Spectral.

CRs-Fixed: 2566328
Change-Id: I46fa7a9232f610fce06cffd67d81a59b7d6fead4
Edayilliam Jayadev 5 年之前
父節點
當前提交
68c2881b76
共有 1 個文件被更改,包括 31 次插入14 次删除
  1. 31 14
      target_if/spectral/target_if_spectral.c

+ 31 - 14
target_if/spectral/target_if_spectral.c

@@ -1407,14 +1407,6 @@ target_if_init_spectral_capability(struct target_if_spectral *spectral)
 	num_bin_scaling_params = ext_svc_param->num_bin_scaling_params;
 	scaling_params = target_psoc_get_spectral_scaling_params(tgt_psoc_info);
 	pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
-	mac_phy_cap_arr = target_psoc_get_mac_phy_cap(tgt_psoc_info);
-	mac_phy_cap = &mac_phy_cap_arr[pdev_id];
-	table_id = mac_phy_cap->chainmask_table_id;
-	table =  &ext_svc_param->chainmask_table[table_id];
-	if (!table) {
-		spectral_err("chainmask table not found");
-		return QDF_STATUS_E_FAILURE;
-	}
 
 	/* XXX : Workaround: Set Spectral capability */
 	pcap = &spectral->capability;
@@ -1423,13 +1415,38 @@ target_if_init_spectral_capability(struct target_if_spectral *spectral)
 	pcap->spectral_cap = 1;
 	pcap->advncd_spectral_cap = 1;
 	pcap->hw_gen = spectral->spectral_gen;
-	for (j = 0; j < table->num_valid_chainmasks; j++) {
-		pcap->agile_spectral_cap |=
-			table->cap_list[j].supports_aSpectral;
-		pcap->agile_spectral_cap_160 |=
-			table->cap_list[j].supports_aSpectral_160;
+	if (spectral->spectral_gen >= SPECTRAL_GEN3) {
+		mac_phy_cap_arr = target_psoc_get_mac_phy_cap(tgt_psoc_info);
+		if (!mac_phy_cap_arr) {
+			spectral_err("mac phy cap array is null");
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		mac_phy_cap = &mac_phy_cap_arr[pdev_id];
+		if (!mac_phy_cap) {
+			spectral_err("mac phy cap is null");
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		table_id = mac_phy_cap->chainmask_table_id;
+		table =  &ext_svc_param->chainmask_table[table_id];
+		if (!table) {
+			spectral_err("chainmask table not found");
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		for (j = 0; j < table->num_valid_chainmasks; j++) {
+			pcap->agile_spectral_cap |=
+				table->cap_list[j].supports_aSpectral;
+			pcap->agile_spectral_cap_160 |=
+				table->cap_list[j].supports_aSpectral_160;
+		}
+		pcap->agile_spectral_cap_80p80 = pcap->agile_spectral_cap_160;
+	} else {
+		pcap->agile_spectral_cap = false;
+		pcap->agile_spectral_cap_160 = false;
+		pcap->agile_spectral_cap_80p80 = false;
 	}
-	pcap->agile_spectral_cap_80p80 = pcap->agile_spectral_cap_160;
 
 	for (param_idx = 0; param_idx < num_bin_scaling_params; param_idx++) {
 		if (scaling_params[param_idx].pdev_id == pdev_id) {