{
        dma_addr_t              deq;
        union xhci_trb          *evt;
+       enum evtreturn          ret = EVT_DONE;
        u32                     ctrl, portsc;
        bool                    update_erdp = false;
 
                        break;
                case TRB_TYPE(TRB_TRANSFER):
                        dbc_handle_xfer_event(dbc, evt);
+                       ret = EVT_XFER_DONE;
                        break;
                default:
                        break;
                lo_hi_writeq(deq, &dbc->regs->erdp);
        }
 
-       return EVT_DONE;
+       return ret;
 }
 
 static void xhci_dbc_handle_events(struct work_struct *work)
        struct xhci_dbc         *dbc;
        unsigned long           flags;
        unsigned int            poll_interval;
+       unsigned long           busypoll_timelimit;
 
        dbc = container_of(to_delayed_work(work), struct xhci_dbc, event_work);
        poll_interval = dbc->poll_interval;
                        dbc->driver->disconnect(dbc);
                break;
        case EVT_DONE:
-               /* set fast poll rate if there are pending data transfers */
+               /*
+                * Set fast poll rate if there are pending out transfers, or
+                * a transfer was recently processed
+                */
+               busypoll_timelimit = dbc->xfer_timestamp +
+                       msecs_to_jiffies(DBC_XFER_INACTIVITY_TIMEOUT);
+
                if (!list_empty(&dbc->eps[BULK_OUT].list_pending) ||
-                   !list_empty(&dbc->eps[BULK_IN].list_pending))
+                   time_is_after_jiffies(busypoll_timelimit))
                        poll_interval = 0;
                break;
+       case EVT_XFER_DONE:
+               dbc->xfer_timestamp = jiffies;
+               poll_interval = 0;
+               break;
        default:
                dev_info(dbc->dev, "stop handling dbc events\n");
                return;
 
 #define DBC_WRITE_BUF_SIZE             8192
 #define DBC_POLL_INTERVAL_DEFAULT      64      /* milliseconds */
 #define DBC_POLL_INTERVAL_MAX          5000    /* milliseconds */
+#define DBC_XFER_INACTIVITY_TIMEOUT    10      /* milliseconds */
 /*
  * Private structure for DbC hardware state:
  */
        enum dbc_state                  state;
        struct delayed_work             event_work;
        unsigned int                    poll_interval;  /* ms */
+       unsigned long                   xfer_timestamp;
        unsigned                        resume_required:1;
        struct dbc_ep                   eps[2];
 
 enum evtreturn {
        EVT_ERR = -1,
        EVT_DONE,
+       EVT_XFER_DONE,
        EVT_GSER,
        EVT_DISC,
 };