aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2008-04-24 14:55:36 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-07 15:02:25 -0400
commite86fe9f64d7cc3da9f445f3d0a2c5fd265fcd445 (patch)
tree419ffca5aff28b3a4f4fa5ad7d65b39f2a0e68b9 /drivers/net/wireless
parentf1f6941500602504fa9cd97294bfb3df7f22384f (diff)
iwlwifi-5000: add nic config handler for 5000 HW
This patch adds nic config handler for 5000 HW Family Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c33
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom.h1
2 files changed, 34 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index d8e3dd70423a..df6283536676 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -86,6 +86,38 @@ static int iwl5000_apm_init(struct iwl_priv *priv)
86 return ret; 86 return ret;
87} 87}
88 88
89static void iwl5000_nic_init(struct iwl_priv *priv)
90{
91 unsigned long flags;
92 u16 radio_cfg;
93 u8 val_link;
94
95 spin_lock_irqsave(&priv->lock, flags);
96
97 pci_read_config_byte(priv->pci_dev, PCI_LINK_CTRL, &val_link);
98
99 /* disable L1 entry -- workaround for pre-B1 */
100 pci_write_config_byte(priv->pci_dev, PCI_LINK_CTRL, val_link & ~0x02);
101
102 radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);
103
104 /* write radio config values to register */
105 if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) < EEPROM_5000_RF_CFG_TYPE_MAX)
106 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
107 EEPROM_RF_CFG_TYPE_MSK(radio_cfg) |
108 EEPROM_RF_CFG_STEP_MSK(radio_cfg) |
109 EEPROM_RF_CFG_DASH_MSK(radio_cfg));
110
111 /* set CSR_HW_CONFIG_REG for uCode use */
112 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
113 CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
114 CSR_HW_IF_CONFIG_REG_BIT_MAC_SI);
115
116 spin_unlock_irqrestore(&priv->lock, flags);
117}
118
119
120
89/* 121/*
90 * EEPROM 122 * EEPROM
91 */ 123 */
@@ -407,6 +439,7 @@ static struct iwl_lib_ops iwl5000_lib = {
407 .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl, 439 .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl,
408 .apm_ops = { 440 .apm_ops = {
409 .init = iwl5000_apm_init, 441 .init = iwl5000_apm_init,
442 .config = iwl5000_nic_init,
410 .set_pwr_src = iwl4965_set_pwr_src, 443 .set_pwr_src = iwl4965_set_pwr_src,
411 }, 444 },
412 .eeprom_ops = { 445 .eeprom_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
index 06ed30044a4d..dc1f027c66a0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom.h
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
@@ -295,6 +295,7 @@ struct iwl_eeprom_calib_info {
295 295
296#define EEPROM_3945_RF_CFG_TYPE_MAX 0x0 296#define EEPROM_3945_RF_CFG_TYPE_MAX 0x0
297#define EEPROM_4965_RF_CFG_TYPE_MAX 0x1 297#define EEPROM_4965_RF_CFG_TYPE_MAX 0x1
298#define EEPROM_5000_RF_CFG_TYPE_MAX 0x3
298 299
299/* 300/*
300 * Per-channel regulatory data. 301 * Per-channel regulatory data.