|
|
@@ -836,6 +836,17 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b)
|
|
|
return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, len, &cmd);
|
|
|
}
|
|
|
|
|
|
+static bool iwl_mvm_sar_geo_support(struct iwl_mvm *mvm)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * The GEO_TX_POWER_LIMIT command is not supported on earlier
|
|
|
+ * firmware versions. Unfortunately, we don't have a TLV API
|
|
|
+ * flag to rely on, so rely on the major version which is in
|
|
|
+ * the first byte of ucode_ver.
|
|
|
+ */
|
|
|
+ return IWL_UCODE_SERIAL(mvm->fw->ucode_ver) >= 41;
|
|
|
+}
|
|
|
+
|
|
|
int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm)
|
|
|
{
|
|
|
struct iwl_geo_tx_power_profiles_resp *resp;
|
|
|
@@ -851,6 +862,9 @@ int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm)
|
|
|
.data = { &geo_cmd },
|
|
|
};
|
|
|
|
|
|
+ if (!iwl_mvm_sar_geo_support(mvm))
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+
|
|
|
ret = iwl_mvm_send_cmd(mvm, &cmd);
|
|
|
if (ret) {
|
|
|
IWL_ERR(mvm, "Failed to get geographic profile info %d\n", ret);
|
|
|
@@ -876,13 +890,7 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
|
|
|
int ret, i, j;
|
|
|
u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT);
|
|
|
|
|
|
- /*
|
|
|
- * This command is not supported on earlier firmware versions.
|
|
|
- * Unfortunately, we don't have a TLV API flag to rely on, so
|
|
|
- * rely on the major version which is in the first byte of
|
|
|
- * ucode_ver.
|
|
|
- */
|
|
|
- if (IWL_UCODE_SERIAL(mvm->fw->ucode_ver) < 41)
|
|
|
+ if (!iwl_mvm_sar_geo_support(mvm))
|
|
|
return 0;
|
|
|
|
|
|
ret = iwl_mvm_sar_get_wgds_table(mvm);
|