Explorar o código

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 %!s(int64=5) %!d(string=hai) anos
pai
achega
68c2881b76
Modificáronse 1 ficheiros con 31 adicións e 14 borrados
  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) {