diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/trans.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index 16f66c1a23de..f9507807b486 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
@@ -178,6 +178,28 @@ static int iwl_pcie_apm_init(struct iwl_trans *trans) | |||
178 | goto out; | 178 | goto out; |
179 | } | 179 | } |
180 | 180 | ||
181 | if (trans->cfg->host_interrupt_operation_mode) { | ||
182 | /* | ||
183 | * This is a bit of an abuse - This is needed for 7260 / 3160 | ||
184 | * only check host_interrupt_operation_mode even if this is | ||
185 | * not related to host_interrupt_operation_mode. | ||
186 | * | ||
187 | * Enable the oscillator to count wake up time for L1 exit. This | ||
188 | * consumes slightly more power (100uA) - but allows to be sure | ||
189 | * that we wake up from L1 on time. | ||
190 | * | ||
191 | * This looks weird: read twice the same register, discard the | ||
192 | * value, set a bit, and yet again, read that same register | ||
193 | * just to discard the value. But that's the way the hardware | ||
194 | * seems to like it. | ||
195 | */ | ||
196 | iwl_read_prph(trans, OSC_CLK); | ||
197 | iwl_read_prph(trans, OSC_CLK); | ||
198 | iwl_set_bits_prph(trans, OSC_CLK, OSC_CLK_FORCE_CONTROL); | ||
199 | iwl_read_prph(trans, OSC_CLK); | ||
200 | iwl_read_prph(trans, OSC_CLK); | ||
201 | } | ||
202 | |||
181 | /* | 203 | /* |
182 | * Enable DMA clock and wait for it to stabilize. | 204 | * Enable DMA clock and wait for it to stabilize. |
183 | * | 205 | * |