static void au0828_restart_dvb_streaming(struct work_struct *work);
 
+static void au0828_bulk_timeout(unsigned long data)
+{
+       struct au0828_dev *dev = (struct au0828_dev *) data;
+
+       dprintk(1, "%s called\n", __func__);
+       dev->bulk_timeout_running = 0;
+       schedule_work(&dev->restart_streaming);
+}
+
 /*-------------------------------------------------------------------*/
 static void urb_completion(struct urb *purb)
 {
                        ptr[0], purb->actual_length);
                schedule_work(&dev->restart_streaming);
                return;
+       } else if (dev->bulk_timeout_running == 1) {
+               /* The URB handler has fired, so cancel timer which would
+                * restart endpoint if we hadn't
+                */
+               dprintk(1, "%s cancelling bulk timeout\n", __func__);
+               dev->bulk_timeout_running = 0;
+               del_timer(&dev->bulk_timeout);
        }
 
        /* Feed the transport payload into the kernel demux */
        if (!dev->urb_streaming)
                return 0;
 
+       if (dev->bulk_timeout_running == 1) {
+               dev->bulk_timeout_running = 0;
+               del_timer(&dev->bulk_timeout);
+       }
+
        dev->urb_streaming = false;
        for (i = 0; i < URB_COUNT; i++) {
                if (dev->urbs[i]) {
        }
 
        dev->urb_streaming = true;
+
+       /* If we don't valid data within 1 second, restart stream */
+       mod_timer(&dev->bulk_timeout, jiffies + (HZ));
+       dev->bulk_timeout_running = 1;
+
        return 0;
 }
 
                return ret;
        }
 
+       dev->bulk_timeout.function = au0828_bulk_timeout;
+       dev->bulk_timeout.data = (unsigned long) dev;
+       init_timer(&dev->bulk_timeout);
+
        return 0;
 }