diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c | 45 |
1 files changed, 3 insertions, 42 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c index 27b5a3eec9dc..2ef9448b1c20 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * GPL LICENSE SUMMARY | 6 | * GPL LICENSE SUMMARY |
7 | * | 7 | * |
8 | * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved. | 8 | * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of version 2 of the GNU General Public License as | 11 | * it under the terms of version 2 of the GNU General Public License as |
@@ -30,7 +30,7 @@ | |||
30 | * | 30 | * |
31 | * BSD LICENSE | 31 | * BSD LICENSE |
32 | * | 32 | * |
33 | * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved. | 33 | * Copyright(c) 2005 - 2011 Intel Corporation. All rights reserved. |
34 | * All rights reserved. | 34 | * All rights reserved. |
35 | * | 35 | * |
36 | * Redistribution and use in source and binary forms, with or without | 36 | * Redistribution and use in source and binary forms, with or without |
@@ -81,52 +81,13 @@ | |||
81 | * | 81 | * |
82 | ******************************************************************************/ | 82 | ******************************************************************************/ |
83 | 83 | ||
84 | /* | ||
85 | * The device's EEPROM semaphore prevents conflicts between driver and uCode | ||
86 | * when accessing the EEPROM; each access is a series of pulses to/from the | ||
87 | * EEPROM chip, not a single event, so even reads could conflict if they | ||
88 | * weren't arbitrated by the semaphore. | ||
89 | */ | ||
90 | int iwlcore_eeprom_acquire_semaphore(struct iwl_priv *priv) | ||
91 | { | ||
92 | u16 count; | ||
93 | int ret; | ||
94 | |||
95 | for (count = 0; count < EEPROM_SEM_RETRY_LIMIT; count++) { | ||
96 | /* Request semaphore */ | ||
97 | iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, | ||
98 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM); | ||
99 | |||
100 | /* See if we got it */ | ||
101 | ret = iwl_poll_bit(priv, CSR_HW_IF_CONFIG_REG, | ||
102 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM, | ||
103 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM, | ||
104 | EEPROM_SEM_TIMEOUT); | ||
105 | if (ret >= 0) { | ||
106 | IWL_DEBUG_IO(priv, | ||
107 | "Acquired semaphore after %d tries.\n", | ||
108 | count+1); | ||
109 | return ret; | ||
110 | } | ||
111 | } | ||
112 | |||
113 | return ret; | ||
114 | } | ||
115 | |||
116 | void iwlcore_eeprom_release_semaphore(struct iwl_priv *priv) | ||
117 | { | ||
118 | iwl_clear_bit(priv, CSR_HW_IF_CONFIG_REG, | ||
119 | CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM); | ||
120 | |||
121 | } | ||
122 | |||
123 | int iwl_eeprom_check_version(struct iwl_priv *priv) | 84 | int iwl_eeprom_check_version(struct iwl_priv *priv) |
124 | { | 85 | { |
125 | u16 eeprom_ver; | 86 | u16 eeprom_ver; |
126 | u16 calib_ver; | 87 | u16 calib_ver; |
127 | 88 | ||
128 | eeprom_ver = iwl_eeprom_query16(priv, EEPROM_VERSION); | 89 | eeprom_ver = iwl_eeprom_query16(priv, EEPROM_VERSION); |
129 | calib_ver = priv->cfg->ops->lib->eeprom_ops.calib_version(priv); | 90 | calib_ver = iwlagn_eeprom_calib_version(priv); |
130 | 91 | ||
131 | if (eeprom_ver < priv->cfg->eeprom_ver || | 92 | if (eeprom_ver < priv->cfg->eeprom_ver || |
132 | calib_ver < priv->cfg->eeprom_calib_ver) | 93 | calib_ver < priv->cfg->eeprom_calib_ver) |