|
@@ -1531,6 +1531,14 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
|
|
|
if (adapter->ps_state == PS_STATE_SLEEP_CFM) {
|
|
|
mwifiex_process_sleep_confirm_resp(adapter, skb->data,
|
|
|
skb->len);
|
|
|
+ mwifiex_pcie_enable_host_int(adapter);
|
|
|
+ if (mwifiex_write_reg(adapter,
|
|
|
+ PCIE_CPU_INT_EVENT,
|
|
|
+ CPU_INTR_SLEEP_CFM_DONE)) {
|
|
|
+ dev_warn(adapter->dev,
|
|
|
+ "Write register failed\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
while (reg->sleep_cookie && (count++ < 10) &&
|
|
|
mwifiex_pcie_ok_to_access_hw(adapter))
|
|
|
usleep_range(50, 60);
|
|
@@ -1999,23 +2007,9 @@ static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter)
|
|
|
adapter->int_status |= pcie_ireg;
|
|
|
spin_unlock_irqrestore(&adapter->int_lock, flags);
|
|
|
|
|
|
- if (pcie_ireg & HOST_INTR_CMD_DONE) {
|
|
|
- if ((adapter->ps_state == PS_STATE_SLEEP_CFM) ||
|
|
|
- (adapter->ps_state == PS_STATE_SLEEP)) {
|
|
|
- mwifiex_pcie_enable_host_int(adapter);
|
|
|
- if (mwifiex_write_reg(adapter,
|
|
|
- PCIE_CPU_INT_EVENT,
|
|
|
- CPU_INTR_SLEEP_CFM_DONE)
|
|
|
- ) {
|
|
|
- dev_warn(adapter->dev,
|
|
|
- "Write register failed\n");
|
|
|
- return;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (!adapter->pps_uapsd_mode &&
|
|
|
- adapter->ps_state == PS_STATE_SLEEP &&
|
|
|
- mwifiex_pcie_ok_to_access_hw(adapter)) {
|
|
|
+ if (!adapter->pps_uapsd_mode &&
|
|
|
+ adapter->ps_state == PS_STATE_SLEEP &&
|
|
|
+ mwifiex_pcie_ok_to_access_hw(adapter)) {
|
|
|
/* Potentially for PCIe we could get other
|
|
|
* interrupts like shared. Don't change power
|
|
|
* state until cookie is set */
|