urb->status);
}
-#if 0 /* Bad idea. There are problems that cause a load of valid, but
- empty, data packets. Don't reset the timeout unless we've actually
- got a frame. I've had xawtv hang in free_buffer due to this! */
- if (rc >= 0)
- mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
-#endif
spin_unlock_irqrestore(&dev->slock,flags);
}
dev->isoc_ctl.num_bufs=0;
- // em28xx_capture_start(dev, 0); - FIXME - how could I restart it?
+ em28xx_capture_start(dev, 0);
}
init_waitqueue_head(&dma_q->wq);
+ em28xx_capture_start(dev, 1);
+
/* submit urbs and enables IRQ */
for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC);
return 0;
}
-
static void em28xx_vid_timeout(unsigned long data)
{
struct em28xx *dev = (struct em28xx*)data;
em28xx_videodbg("em28xx/0: [%p/%d] timeout\n",
buf, buf->vb.i);
}
+ /* Instead of trying to restart, just sets timeout again */
+ mod_timer(&vidq->timeout, jiffies + BUFFER_TIMEOUT);
- /* restart_video_queue(vidq); */
spin_unlock_irqrestore(&dev->slock,flags);
}
if (rc<0)
goto fail;
- /* FIXME - should probably be done in response to STREAMON */
rc = em28xx_start_thread(vidq);
if (rc<0)
goto fail;
get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
em28xx_set_alternate(dev);
- em28xx_capture_start(dev, 1); /* ??? */
em28xx_resolution_set(dev);
mutex_unlock(&dev->lock);
if (unlikely(res_get(fh) < 0))
return -EBUSY;
- /* We can't do this from buffer_queue or anything called from
- there, since it's called with IRQs disabled and the spinlock held,
- and this uses USB functions that may sleep
-
- FIXME FIXME FIXME - putting this here means it may not always
- be called when it needs to be */
- em28xx_capture_start(dev, 1);
-
return (videobuf_streamon(&fh->vb_vidq));
}