lbs_deb_enter(LBS_DEB_CS);
 
        int_cause = if_cs_read16(card, IF_CS_C_INT_CAUSE);
-       switch (int_cause) {
-       case 0x0000:
-               /* not for us */
+       if(int_cause == 0x0) {
+               /* Not for us */
                return IRQ_NONE;
-       case 0xffff:
-               /* if one reads junk, then probably the card was removed */
+
+       } else if(int_cause == 0xffff) {
+               /* Read in junk, the card has probably been removed */
                card->priv->adapter->surpriseremoved = 1;
-               break;
-       case IF_CS_H_IC_TX_OVER:
-               if (card->priv->adapter->connect_status == LIBERTAS_CONNECTED)
-                       netif_wake_queue(card->priv->dev);
-               /* fallthrought */
-       default:
+
+       } else {
+               if(int_cause & IF_CS_H_IC_TX_OVER) {
+                       card->priv->dnld_sent = DNLD_RES_RECEIVED;
+                       if (!card->priv->adapter->cur_cmd)
+                               wake_up_interruptible(&card->priv->waitq);
+
+                       if (card->priv->adapter->connect_status == LIBERTAS_CONNECTED)
+                               netif_wake_queue(card->priv->dev);
+               }
+
                /* clear interrupt */
                if_cs_write16(card, IF_CS_C_INT_CAUSE, int_cause & IF_CS_C_IC_MASK);
-               if_cs_disable_ints(card);
        }
 
        libertas_interrupt(card->priv->dev);
        if_cs_write16(card, IF_CS_C_INT_CAUSE, int_cause);
 
        *ireg = if_cs_read16(card, IF_CS_C_STATUS) & IF_CS_C_S_MASK;
-       if_cs_enable_ints(card);
 
        if (!*ireg)
                goto sbi_get_int_status_exit;
               p_dev->irq.AssignedIRQ, p_dev->io.BasePort1,
               p_dev->io.BasePort1 + p_dev->io.NumPorts1 - 1);
 
-       if_cs_enable_ints(card);
 
        /* Load the firmware early, before calling into libertas.ko */
        ret = if_cs_prog_helper(card);
                goto out3;
        }
 
+       if_cs_enable_ints(card);
+
        /* And finally bring the card up */
        if (libertas_start_card(priv) != 0) {
                lbs_pr_err("could not activate card\n");
 
        libertas_stop_card(card->priv);
        libertas_remove_card(card->priv);
+       if_cs_disable_ints(card);
        if_cs_release(p_dev);
        kfree(card);