Commit fd2c7fe0 authored by Zhu Yi's avatar Zhu Yi Committed by John W. Linville

iwmc3200wifi: simplify calibration map

The patch simplifies calibration map by combining the init_calib_map
and periodic_calib_map into one calib_map in struct iwm_conf. Now the
initial calibration map is stored in the lower 16 bits of calib_map
and the periodic calibration map is stored in the higher 16 bits.
Signed-off-by: default avatarZhu Yi <yi.zhu@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent dd13fd64
...@@ -275,6 +275,7 @@ static int iwm_load_lmac(struct iwm_priv *iwm, const char *img_name) ...@@ -275,6 +275,7 @@ static int iwm_load_lmac(struct iwm_priv *iwm, const char *img_name)
*/ */
int iwm_load_fw(struct iwm_priv *iwm) int iwm_load_fw(struct iwm_priv *iwm)
{ {
unsigned long init_calib_map, periodic_calib_map;
int ret; int ret;
/* We first start downloading the UMAC */ /* We first start downloading the UMAC */
...@@ -315,23 +316,25 @@ int iwm_load_fw(struct iwm_priv *iwm) ...@@ -315,23 +316,25 @@ int iwm_load_fw(struct iwm_priv *iwm)
return ret; return ret;
} }
init_calib_map = iwm->conf.calib_map & IWM_CALIB_MAP_INIT_MSK;
periodic_calib_map = IWM_CALIB_MAP_PER_LMAC(iwm->conf.calib_map);
#ifdef CONFIG_IWM_B0_HW_SUPPORT #ifdef CONFIG_IWM_B0_HW_SUPPORT
if (iwm->conf.hw_b0) { if (iwm->conf.hw_b0) {
clear_bit(PHY_CALIBRATE_RX_IQ_CMD, &iwm->conf.init_calib_map); clear_bit(PHY_CALIBRATE_RX_IQ_CMD, &init_calib_map);
clear_bit(PHY_CALIBRATE_RX_IQ_CMD, clear_bit(PHY_CALIBRATE_RX_IQ_CMD, &periodic_calib_map);
&iwm->conf.periodic_calib_map);
} }
#endif #endif
/* Read RX IQ calibration result from EEPROM */ /* Read RX IQ calibration result from EEPROM */
if (test_bit(PHY_CALIBRATE_RX_IQ_CMD, &iwm->conf.init_calib_map)) { if (test_bit(PHY_CALIBRATE_RX_IQ_CMD, &init_calib_map)) {
iwm_store_rxiq_calib_result(iwm); iwm_store_rxiq_calib_result(iwm);
set_bit(PHY_CALIBRATE_RX_IQ_CMD, &iwm->calib_done_map); set_bit(PHY_CALIBRATE_RX_IQ_CMD, &iwm->calib_done_map);
} }
iwm_send_prio_table(iwm); iwm_send_prio_table(iwm);
iwm_send_init_calib_cfg(iwm, iwm->conf.init_calib_map); iwm_send_init_calib_cfg(iwm, init_calib_map);
while (iwm->calib_done_map != iwm->conf.init_calib_map) { while (iwm->calib_done_map != init_calib_map) {
ret = iwm_notif_handle(iwm, CALIBRATION_RES_NOTIFICATION, ret = iwm_notif_handle(iwm, CALIBRATION_RES_NOTIFICATION,
IWM_SRC_LMAC, WAIT_NOTIF_TIMEOUT); IWM_SRC_LMAC, WAIT_NOTIF_TIMEOUT);
if (ret) { if (ret) {
...@@ -340,7 +343,7 @@ int iwm_load_fw(struct iwm_priv *iwm) ...@@ -340,7 +343,7 @@ int iwm_load_fw(struct iwm_priv *iwm)
} }
IWM_DBG_FW(iwm, DBG, "Got calibration result. calib_done_map: " IWM_DBG_FW(iwm, DBG, "Got calibration result. calib_done_map: "
"0x%lx, requested calibrations: 0x%lx\n", "0x%lx, requested calibrations: 0x%lx\n",
iwm->calib_done_map, iwm->conf.init_calib_map); iwm->calib_done_map, init_calib_map);
} }
/* Handle LMAC CALIBRATION_COMPLETE notification */ /* Handle LMAC CALIBRATION_COMPLETE notification */
...@@ -378,7 +381,7 @@ int iwm_load_fw(struct iwm_priv *iwm) ...@@ -378,7 +381,7 @@ int iwm_load_fw(struct iwm_priv *iwm)
iwm_send_prio_table(iwm); iwm_send_prio_table(iwm);
iwm_send_calib_results(iwm); iwm_send_calib_results(iwm);
iwm_send_periodic_calib_cfg(iwm, iwm->conf.periodic_calib_map); iwm_send_periodic_calib_cfg(iwm, periodic_calib_map);
return 0; return 0;
......
...@@ -65,8 +65,7 @@ ...@@ -65,8 +65,7 @@
struct iwm_conf { struct iwm_conf {
u32 sdio_ior_timeout; u32 sdio_ior_timeout;
unsigned long init_calib_map; unsigned long calib_map;
unsigned long periodic_calib_map;
bool reset_on_fatal_err; bool reset_on_fatal_err;
bool auto_connect; bool auto_connect;
bool wimax_not_present; bool wimax_not_present;
......
...@@ -396,6 +396,10 @@ enum { ...@@ -396,6 +396,10 @@ enum {
CALIBRATION_CMD_NUM, CALIBRATION_CMD_NUM,
}; };
#define IWM_CALIB_MAP_INIT_MSK 0xFFFF
#define IWM_CALIB_MAP_PER_LMAC(m) ((m & 0xFF0000) >> 16)
#define IWM_CALIB_MAP_PER_UMAC(m) ((m & 0xFF000000) >> 24)
struct iwm_lmac_calib_hdr { struct iwm_lmac_calib_hdr {
u8 opcode; u8 opcode;
u8 first_grp; u8 first_grp;
......
...@@ -53,11 +53,7 @@ ...@@ -53,11 +53,7 @@
static struct iwm_conf def_iwm_conf = { static struct iwm_conf def_iwm_conf = {
.sdio_ior_timeout = 5000, .sdio_ior_timeout = 5000,
.init_calib_map = BIT(PHY_CALIBRATE_DC_CMD) | .calib_map = BIT(PHY_CALIBRATE_DC_CMD) |
BIT(PHY_CALIBRATE_LO_CMD) |
BIT(PHY_CALIBRATE_TX_IQ_CMD) |
BIT(PHY_CALIBRATE_RX_IQ_CMD),
.periodic_calib_map = BIT(PHY_CALIBRATE_DC_CMD) |
BIT(PHY_CALIBRATE_LO_CMD) | BIT(PHY_CALIBRATE_LO_CMD) |
BIT(PHY_CALIBRATE_TX_IQ_CMD) | BIT(PHY_CALIBRATE_TX_IQ_CMD) |
BIT(PHY_CALIBRATE_RX_IQ_CMD) | BIT(PHY_CALIBRATE_RX_IQ_CMD) |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment