diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2007-07-28 18:45:50 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-10-09 21:05:32 -0400 |
commit | 37093b1ea600d84fbf7252baf12eedec85ae40f1 (patch) | |
tree | ba78b73933c0d7b8989831c49a86f16c26f99b04 /drivers/media/video/ivtv/ivtv-streams.c | |
parent | f4071b85ea0ca3bd06f63c330562b4cfdffa8473 (diff) |
V4L/DVB (6047): ivtv: Fix scatter/gather DMA timeouts
It turns out that the cx23415/6 DMA engine cannot do scatter/gather DMA
reliably. Every so often depending on the phase of the moon and your
hardware configuration the cx2341x DMA engine simply chokes on it and
you have to reboot to get it working again.
This change replaced the scatter/gather DMA by single transfers at a time,
where the driver is now responsible for DMA-ing each buffer.
UDMA is still done using scatter/gather DMA, that will be fixed soon.
Many thanks to Mark Bryars <mark.bryars@etvinteractive.com> for discovering
the link between scatter/gather and the DMA timeouts.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/ivtv/ivtv-streams.c')
-rw-r--r-- | drivers/media/video/ivtv/ivtv-streams.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/media/video/ivtv/ivtv-streams.c b/drivers/media/video/ivtv/ivtv-streams.c index 0582b9d57c55..d1cc366c2a35 100644 --- a/drivers/media/video/ivtv/ivtv-streams.c +++ b/drivers/media/video/ivtv/ivtv-streams.c | |||
@@ -154,7 +154,7 @@ static void ivtv_stream_init(struct ivtv *itv, int type) | |||
154 | spin_lock_init(&s->qlock); | 154 | spin_lock_init(&s->qlock); |
155 | init_waitqueue_head(&s->waitq); | 155 | init_waitqueue_head(&s->waitq); |
156 | s->id = -1; | 156 | s->id = -1; |
157 | s->SG_handle = IVTV_DMA_UNMAPPED; | 157 | s->sg_handle = IVTV_DMA_UNMAPPED; |
158 | ivtv_queue_init(&s->q_free); | 158 | ivtv_queue_init(&s->q_free); |
159 | ivtv_queue_init(&s->q_full); | 159 | ivtv_queue_init(&s->q_full); |
160 | ivtv_queue_init(&s->q_dma); | 160 | ivtv_queue_init(&s->q_dma); |