diff options
author | David S. Miller <davem@davemloft.net> | 2008-12-13 01:20:51 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-12-13 01:20:51 -0500 |
commit | 56bde885903bdb9d9531fd569096ec8c7a2d60ee (patch) | |
tree | dcb9428e525b3c57aea00706fa969805251de444 /drivers/net/wireless/iwlwifi/iwl-eeprom.c | |
parent | a7a81fc060f050ad4ba7f6ef5cdc583dad2f7b21 (diff) | |
parent | a7b75207bd37cbbfa0b4ee7dbaf0dc6bafec8fea (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-eeprom.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-eeprom.c | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c index 792a3c15f172..ce2f47306cea 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c | |||
@@ -25,7 +25,7 @@ | |||
25 | * in the file called LICENSE.GPL. | 25 | * in the file called LICENSE.GPL. |
26 | * | 26 | * |
27 | * Contact Information: | 27 | * Contact Information: |
28 | * Tomas Winkler <tomas.winkler@intel.com> | 28 | * Intel Linux Wireless <ilw@linux.intel.com> |
29 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | 29 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
30 | * | 30 | * |
31 | * BSD LICENSE | 31 | * BSD LICENSE |
@@ -169,10 +169,9 @@ int iwlcore_eeprom_acquire_semaphore(struct iwl_priv *priv) | |||
169 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM); | 169 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM); |
170 | 170 | ||
171 | /* See if we got it */ | 171 | /* See if we got it */ |
172 | ret = iwl_poll_bit(priv, CSR_HW_IF_CONFIG_REG, | 172 | ret = iwl_poll_direct_bit(priv, CSR_HW_IF_CONFIG_REG, |
173 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM, | 173 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM, |
174 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM, | 174 | EEPROM_SEM_TIMEOUT); |
175 | EEPROM_SEM_TIMEOUT); | ||
176 | if (ret >= 0) { | 175 | if (ret >= 0) { |
177 | IWL_DEBUG_IO("Acquired semaphore after %d tries.\n", | 176 | IWL_DEBUG_IO("Acquired semaphore after %d tries.\n", |
178 | count+1); | 177 | count+1); |
@@ -210,10 +209,8 @@ int iwl_eeprom_init(struct iwl_priv *priv) | |||
210 | { | 209 | { |
211 | u16 *e; | 210 | u16 *e; |
212 | u32 gp = iwl_read32(priv, CSR_EEPROM_GP); | 211 | u32 gp = iwl_read32(priv, CSR_EEPROM_GP); |
213 | u32 r; | ||
214 | int sz = priv->cfg->eeprom_size; | 212 | int sz = priv->cfg->eeprom_size; |
215 | int ret; | 213 | int ret; |
216 | int i; | ||
217 | u16 addr; | 214 | u16 addr; |
218 | 215 | ||
219 | /* allocate eeprom */ | 216 | /* allocate eeprom */ |
@@ -241,22 +238,19 @@ int iwl_eeprom_init(struct iwl_priv *priv) | |||
241 | 238 | ||
242 | /* eeprom is an array of 16bit values */ | 239 | /* eeprom is an array of 16bit values */ |
243 | for (addr = 0; addr < sz; addr += sizeof(u16)) { | 240 | for (addr = 0; addr < sz; addr += sizeof(u16)) { |
244 | _iwl_write32(priv, CSR_EEPROM_REG, addr << 1); | 241 | u32 r; |
245 | _iwl_clear_bit(priv, CSR_EEPROM_REG, CSR_EEPROM_REG_BIT_CMD); | 242 | |
246 | 243 | _iwl_write32(priv, CSR_EEPROM_REG, | |
247 | for (i = 0; i < IWL_EEPROM_ACCESS_TIMEOUT; | 244 | CSR_EEPROM_REG_MSK_ADDR & (addr << 1)); |
248 | i += IWL_EEPROM_ACCESS_DELAY) { | ||
249 | r = _iwl_read_direct32(priv, CSR_EEPROM_REG); | ||
250 | if (r & CSR_EEPROM_REG_READ_VALID_MSK) | ||
251 | break; | ||
252 | udelay(IWL_EEPROM_ACCESS_DELAY); | ||
253 | } | ||
254 | 245 | ||
255 | if (!(r & CSR_EEPROM_REG_READ_VALID_MSK)) { | 246 | ret = iwl_poll_direct_bit(priv, CSR_EEPROM_REG, |
247 | CSR_EEPROM_REG_READ_VALID_MSK, | ||
248 | IWL_EEPROM_ACCESS_TIMEOUT); | ||
249 | if (ret < 0) { | ||
256 | IWL_ERROR("Time out reading EEPROM[%d]\n", addr); | 250 | IWL_ERROR("Time out reading EEPROM[%d]\n", addr); |
257 | ret = -ETIMEDOUT; | ||
258 | goto done; | 251 | goto done; |
259 | } | 252 | } |
253 | r = _iwl_read_direct32(priv, CSR_EEPROM_REG); | ||
260 | e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16)); | 254 | e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16)); |
261 | } | 255 | } |
262 | ret = 0; | 256 | ret = 0; |