aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/pcie/trans.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/trans.c')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c22
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 *