static irqreturn_t brcms_isr(int irq, void *dev_id)
 {
        struct brcms_info *wl;
-       bool ours, wantdpc;
+       irqreturn_t ret = IRQ_NONE;
 
        wl = (struct brcms_info *) dev_id;
 
        spin_lock(&wl->isr_lock);
 
        /* call common first level interrupt handler */
-       ours = brcms_c_isr(wl->wlc, &wantdpc);
-       if (ours) {
-               /* if more to do... */
-               if (wantdpc) {
-
-                       /* ...and call the second level interrupt handler */
-                       /* schedule dpc */
-                       tasklet_schedule(&wl->tasklet);
-               }
+       if (brcms_c_isr(wl->wlc)) {
+               /* schedule second level handler */
+               tasklet_schedule(&wl->tasklet);
+               ret = IRQ_HANDLED;
        }
 
        spin_unlock(&wl->isr_lock);
 
-       return IRQ_RETVAL(ours);
+       return ret;
 }
 
 /*
 
        if (macintstatus == 0)
                return 0;
 
-       /* interrupts are already turned off for CFE build
-        * Caution: For CFE Turning off the interrupts again has some undesired
-        * consequences
-        */
        /* turn off the interrupts */
        bcma_write32(core, D11REGOFFS(macintmask), 0);
        (void)bcma_read32(core, D11REGOFFS(macintmask));
 
 /*
  * First-level interrupt processing.
- * Return true if this was our interrupt, false otherwise.
- * *wantdpc will be set to true if further brcms_c_dpc() processing is required,
+ * Return true if this was our interrupt
+ * and if further brcms_c_dpc() processing is required,
  * false otherwise.
  */
-bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc)
+bool brcms_c_isr(struct brcms_c_info *wlc)
 {
        struct brcms_hardware *wlc_hw = wlc->hw;
        u32 macintstatus;
 
-       *wantdpc = false;
-
        if (!wlc_hw->up || !wlc->macintmask)
                return false;
 
        /* read and clear macintstatus and intstatus registers */
        macintstatus = wlc_intstatus(wlc, true);
 
-       if (macintstatus == 0xffffffff)
+       if (macintstatus == 0xffffffff) {
                brcms_err(wlc_hw->d11core,
                          "DEVICEREMOVED detected in the ISR code path\n");
+               return false;
+       }
 
        /* it is not for us */
        if (macintstatus == 0)
                return false;
 
-       *wantdpc = true;
-
        /* save interrupt status bits */
        wlc->macintstatus = macintstatus;
 
 
 extern u32 brcms_c_intrsoff(struct brcms_c_info *wlc);
 extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask);
 extern bool brcms_c_intrsupd(struct brcms_c_info *wlc);
-extern bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc);
+extern bool brcms_c_isr(struct brcms_c_info *wlc);
 extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded);
 extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc,
                                     struct sk_buff *sdu,