diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
index 00eb89a279256..5fc6022badb21 100644
--- a/drivers/staging/vt6655/device_main.c
+++ b/drivers/staging/vt6655/device_main.c
@@ -1014,10 +1014,6 @@ static int device_tx_srv(struct vnt_private *pDevice, unsigned int uIdx)
 			}
 			device_free_tx_buf(pDevice, pTD);
 			pDevice->iTDUsed[uIdx]--;
-
-			/* Make sure queue is available */
-			if (AVAIL_TD(pDevice, uIdx))
-				ieee80211_wake_queues(pDevice->hw);
 		}
 	}
 
@@ -1190,6 +1186,14 @@ static  irqreturn_t  device_intr(int irq,  void *dev_instance)
 			}
 		}
 
+		/* If both buffers available wake the queue */
+		if (pDevice->vif) {
+			if (AVAIL_TD(pDevice, TYPE_TXDMA0) &&
+			    AVAIL_TD(pDevice, TYPE_AC0DMA) &&
+			    ieee80211_queue_stopped(pDevice->hw, 0))
+				ieee80211_wake_queues(pDevice->hw);
+		}
+
 		MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr);
 
 		MACvReceive0(pDevice->PortOffset);