From 428ae38ac41430902c2146fff8565924dce3bc8b Mon Sep 17 00:00:00 2001 From: Tomas Winkler Date: Thu, 24 Apr 2008 11:55:36 -0700 Subject: [PATCH] --- yaml --- r: 102503 b: refs/heads/master c: e86fe9f64d7cc3da9f445f3d0a2c5fd265fcd445 h: refs/heads/master i: 102501: 9f55ecff1274642365d542baa64f2e692cfcbb62 102499: 2501258d48b3ea762e843283afa27563817054fc 102495: 66e9a0166d7acdabd83a73a816b6bb98798fee11 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/iwlwifi/iwl-5000.c | 33 +++++++++++++++++++ .../drivers/net/wireless/iwlwifi/iwl-eeprom.h | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b155e8c8239a..e2586755b534 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f1f6941500602504fa9cd97294bfb3df7f22384f +refs/heads/master: e86fe9f64d7cc3da9f445f3d0a2c5fd265fcd445 diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-5000.c b/trunk/drivers/net/wireless/iwlwifi/iwl-5000.c index d8e3dd70423a..df6283536676 100644 --- a/trunk/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/trunk/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -86,6 +86,38 @@ static int iwl5000_apm_init(struct iwl_priv *priv) return ret; } +static void iwl5000_nic_init(struct iwl_priv *priv) +{ + unsigned long flags; + u16 radio_cfg; + u8 val_link; + + spin_lock_irqsave(&priv->lock, flags); + + pci_read_config_byte(priv->pci_dev, PCI_LINK_CTRL, &val_link); + + /* disable L1 entry -- workaround for pre-B1 */ + pci_write_config_byte(priv->pci_dev, PCI_LINK_CTRL, val_link & ~0x02); + + radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG); + + /* write radio config values to register */ + if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) < EEPROM_5000_RF_CFG_TYPE_MAX) + iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, + EEPROM_RF_CFG_TYPE_MSK(radio_cfg) | + EEPROM_RF_CFG_STEP_MSK(radio_cfg) | + EEPROM_RF_CFG_DASH_MSK(radio_cfg)); + + /* set CSR_HW_CONFIG_REG for uCode use */ + iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, + CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI | + CSR_HW_IF_CONFIG_REG_BIT_MAC_SI); + + spin_unlock_irqrestore(&priv->lock, flags); +} + + + /* * EEPROM */ @@ -407,6 +439,7 @@ static struct iwl_lib_ops iwl5000_lib = { .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl, .apm_ops = { .init = iwl5000_apm_init, + .config = iwl5000_nic_init, .set_pwr_src = iwl4965_set_pwr_src, }, .eeprom_ops = { diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/trunk/drivers/net/wireless/iwlwifi/iwl-eeprom.h index 06ed30044a4d..dc1f027c66a0 100644 --- a/trunk/drivers/net/wireless/iwlwifi/iwl-eeprom.h +++ b/trunk/drivers/net/wireless/iwlwifi/iwl-eeprom.h @@ -295,6 +295,7 @@ struct iwl_eeprom_calib_info { #define EEPROM_3945_RF_CFG_TYPE_MAX 0x0 #define EEPROM_4965_RF_CFG_TYPE_MAX 0x1 +#define EEPROM_5000_RF_CFG_TYPE_MAX 0x3 /* * Per-channel regulatory data.