Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb35dc14 authored by Moshe Harel's avatar Moshe Harel Committed by Luca Coelho
Browse files

iwlwifi: nvm: force 1x1 antenna in Series 8000



This is a workaround to an OTP bug. In Series 8000 1x1, the OTP
0xA052 defines 2x2 antenna configuration. This workaround overrides
the decision based on HW id and MIMO disabled bit which is correct
in the OTP and set to disabled.

Signed-off-by: default avatarMoshe Harel <moshe.harel@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 09eef330
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -580,13 +580,15 @@ static void iwl_set_hw_address_family_8000(struct device *dev,
	IWL_ERR_DEV(dev, "mac address is not found\n");
}

#define IWL_4165_DEVICE_ID 0x5501

struct iwl_nvm_data *
iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
		   const __le16 *nvm_hw, const __le16 *nvm_sw,
		   const __le16 *nvm_calib, const __le16 *regulatory,
		   const __le16 *mac_override, const __le16 *phy_sku,
		   u8 tx_chains, u8 rx_chains, bool lar_fw_supported,
		   u32 mac_addr0, u32 mac_addr1)
		   u32 mac_addr0, u32 mac_addr1, u32 hw_id)
{
	struct iwl_nvm_data *data;
	u32 sku;
@@ -625,6 +627,17 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
				    (sku & NVM_SKU_CAP_11AC_ENABLE);
	data->sku_cap_mimo_disabled = sku & NVM_SKU_CAP_MIMO_DISABLE;

	/*
	 * OTP 0x52 bug work around
	 * define antenna 1x1 according to MIMO disabled
	 */
	if (hw_id == IWL_4165_DEVICE_ID && data->sku_cap_mimo_disabled) {
		data->valid_tx_ant = ANT_B;
		data->valid_rx_ant = ANT_B;
		tx_chains = ANT_B;
		rx_chains = ANT_B;
	}

	data->n_hw_addrs = iwl_get_n_hw_addrs(cfg, nvm_sw);

	if (cfg->device_family != IWL_DEVICE_FAMILY_8000) {
+1 −1
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
		   const __le16 *nvm_calib, const __le16 *regulatory,
		   const __le16 *mac_override, const __le16 *phy_sku,
		   u8 tx_chains, u8 rx_chains, bool lar_fw_supported,
		   u32 mac_addr0, u32 mac_addr1);
		   u32 mac_addr0, u32 mac_addr1, u32 hw_id);

/**
 * iwl_parse_mcc_info - parse MCC (mobile country code) info coming from FW
+2 −1
Original line number Diff line number Diff line
@@ -316,7 +316,8 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
	return iwl_parse_nvm_data(mvm->trans->dev, mvm->cfg, hw, sw, calib,
				  regulatory, mac_override, phy_sku,
				  mvm->fw->valid_tx_ant, mvm->fw->valid_rx_ant,
				  lar_enabled, mac_addr0, mac_addr1);
				  lar_enabled, mac_addr0, mac_addr1,
				  mvm->trans->hw_id);
}

#define MAX_NVM_FILE_LEN	16384