iwlwifi: 5150 compute ct kill threshold
authorTomas Winkler <tomas.winkler@intel.com>
Tue, 2 Dec 2008 00:32:20 +0000 (16:32 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 5 Dec 2008 14:35:49 +0000 (09:35 -0500)
This patch adds computation of ct kill threshold
for 5150. Threshold is computed from calibration
data in the EEPROM.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-5000.c
drivers/net/wireless/iwlwifi/iwl-eeprom.h

index c1e7a4264086b8c22c26afa62aefdbf22c76edf6..26e04eccaa85de823e2e48fa24478d5bbaefc1a1 100644 (file)
@@ -426,6 +426,17 @@ static const u8 *iwl5000_eeprom_query_addr(const struct iwl_priv *priv,
        return &priv->eeprom[address];
 }
 
+static s32 iwl5150_get_ct_threshold(struct iwl_priv *priv)
+{
+       const s32 volt2temp_coef = -5;
+       u16 *temp_calib = (u16 *)iwl_eeprom_query_addr(priv,
+                                               EEPROM_5000_TEMPERATURE);
+       /* offset =  temperate -  voltage / coef */
+       s32 offset = temp_calib[0] - temp_calib[1] / volt2temp_coef;
+       s32 threshold = (s32)CELSIUS_TO_KELVIN(CT_KILL_THRESHOLD) - offset;
+       return threshold * volt2temp_coef;
+}
+
 /*
  *  Calibration
  */
@@ -859,7 +870,7 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv)
        case CSR_HW_REV_TYPE_5150:
                /* 5150 wants in Kelvin */
                priv->hw_params.ct_kill_threshold =
-                               CELSIUS_TO_KELVIN(CT_KILL_THRESHOLD);
+                               iwl5150_get_ct_threshold(priv);
                break;
        }
 
index 997f23c8db2e8245edd461bd404722c496960b6d..8f6b05fa2330b9c1a968720e71afae64aef3c716 100644 (file)
@@ -147,6 +147,7 @@ struct iwl_eeprom_channel {
 /*5000 calibrations */
 #define EEPROM_5000_CALIB_ALL  (INDIRECT_ADDRESS | INDIRECT_CALIBRATION)
 #define EEPROM_5000_XTAL       ((2*0x128) | EEPROM_5000_CALIB_ALL)
+#define EEPROM_5000_TEMPERATURE ((2*0x12A) | EEPROM_5000_CALIB_ALL)
 
 /* 5000 links */
 #define EEPROM_5000_LINK_HOST             (2*0x64)