diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-5000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 5155b8a760a7..c1300fb71615 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -429,20 +429,19 @@ static const u8 *iwl5000_eeprom_query_addr(const struct iwl_priv *priv, | |||
429 | /* | 429 | /* |
430 | * Calibration | 430 | * Calibration |
431 | */ | 431 | */ |
432 | static int iwl5000_send_Xtal_calib(struct iwl_priv *priv) | 432 | static int iwl5000_set_Xtal_calib(struct iwl_priv *priv) |
433 | { | 433 | { |
434 | u8 data[sizeof(struct iwl5000_calib_hdr) + | ||
435 | sizeof(struct iwl_cal_xtal_freq)]; | ||
436 | struct iwl5000_calib_cmd *cmd = (struct iwl5000_calib_cmd *)data; | ||
437 | struct iwl_cal_xtal_freq *xtal = (struct iwl_cal_xtal_freq *)cmd->data; | ||
434 | u16 *xtal_calib = (u16 *)iwl_eeprom_query_addr(priv, EEPROM_5000_XTAL); | 438 | u16 *xtal_calib = (u16 *)iwl_eeprom_query_addr(priv, EEPROM_5000_XTAL); |
435 | 439 | ||
436 | struct iwl5000_calibration cal_cmd = { | 440 | cmd->hdr.op_code = IWL5000_PHY_CALIBRATE_CRYSTAL_FRQ_CMD; |
437 | .op_code = IWL5000_PHY_CALIBRATE_CRYSTAL_FRQ_CMD, | 441 | xtal->cap_pin1 = (u8)xtal_calib[0]; |
438 | .data = { | 442 | xtal->cap_pin2 = (u8)xtal_calib[1]; |
439 | (u8)xtal_calib[0], | 443 | return iwl_calib_set(&priv->calib_results[IWL5000_CALIB_XTAL], |
440 | (u8)xtal_calib[1], | 444 | data, sizeof(data)); |
441 | } | ||
442 | }; | ||
443 | |||
444 | return iwl_send_cmd_pdu(priv, REPLY_PHY_CALIBRATION_CMD, | ||
445 | sizeof(cal_cmd), &cal_cmd); | ||
446 | } | 445 | } |
447 | 446 | ||
448 | static int iwl5000_send_calib_cfg(struct iwl_priv *priv) | 447 | static int iwl5000_send_calib_cfg(struct iwl_priv *priv) |
@@ -784,10 +783,8 @@ static int iwl5000_alive_notify(struct iwl_priv *priv) | |||
784 | 783 | ||
785 | iwl5000_send_wimax_coex(priv); | 784 | iwl5000_send_wimax_coex(priv); |
786 | 785 | ||
787 | iwl5000_send_Xtal_calib(priv); | 786 | iwl5000_set_Xtal_calib(priv); |
788 | 787 | iwl_send_calib_results(priv); | |
789 | if (priv->ucode_type == UCODE_RT) | ||
790 | iwl_send_calib_results(priv); | ||
791 | 788 | ||
792 | return 0; | 789 | return 0; |
793 | } | 790 | } |
@@ -844,6 +841,23 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv) | |||
844 | break; | 841 | break; |
845 | } | 842 | } |
846 | 843 | ||
844 | /* Set initial calibration set */ | ||
845 | switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) { | ||
846 | case CSR_HW_REV_TYPE_5100: | ||
847 | case CSR_HW_REV_TYPE_5300: | ||
848 | case CSR_HW_REV_TYPE_5350: | ||
849 | priv->hw_params.calib_init_cfg = | ||
850 | BIT(IWL5000_CALIB_XTAL) | | ||
851 | BIT(IWL5000_CALIB_LO) | | ||
852 | BIT(IWL5000_CALIB_TX_IQ) | | ||
853 | BIT(IWL5000_CALIB_TX_IQ_PERD); | ||
854 | break; | ||
855 | case CSR_HW_REV_TYPE_5150: | ||
856 | priv->hw_params.calib_init_cfg = 0; | ||
857 | break; | ||
858 | } | ||
859 | |||
860 | |||
847 | return 0; | 861 | return 0; |
848 | } | 862 | } |
849 | 863 | ||