V4L/DVB (6506): saa7134-alsa: Fix mmap support
Trent Piepho wrote: > I do not think the saa7134-alsa driver supports mmap. The cx88-alsa driver > also claimed to support mmap, but it never worked until I fixed it. It's > pretty clear that the code in saa7134-alsa was based on the same code as > cx88-alsa, so it's likely it has the same bug. You are right. The patch below (based on your cx88 patch, but I don't really understand it) fixes mmap support in saa7134-alsa for me. Recording via mmap (arecord -M -f S16_LE -c 2 -r 32000 -D hw:1) didn't work at all before, works now, tested for at least 20 minutes (but, unfortunately, with one overrun at least 0.719 ms long). Signed-off-by: Alexander E. Patrakov <patrakov@ums.usu.ru> Acked-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
f21daa41d1
commit
32d111a9f0
1 changed files with 15 additions and 1 deletions
|
@ -543,8 +543,10 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
|
|||
V4L functions, and force ALSA to use that as the DMA area */
|
||||
|
||||
substream->runtime->dma_area = dev->dmasound.dma.vmalloc;
|
||||
substream->runtime->dma_bytes = dev->dmasound.bufsize;
|
||||
substream->runtime->dma_addr = 0;
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
@ -651,6 +653,17 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* page callback (needed for mmap)
|
||||
*/
|
||||
|
||||
static struct page *snd_card_saa7134_page(struct snd_pcm_substream *substream,
|
||||
unsigned long offset)
|
||||
{
|
||||
void *pageptr = substream->runtime->dma_area + offset;
|
||||
return vmalloc_to_page(pageptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* ALSA capture callbacks definition
|
||||
*/
|
||||
|
@ -664,6 +677,7 @@ static struct snd_pcm_ops snd_card_saa7134_capture_ops = {
|
|||
.prepare = snd_card_saa7134_capture_prepare,
|
||||
.trigger = snd_card_saa7134_capture_trigger,
|
||||
.pointer = snd_card_saa7134_capture_pointer,
|
||||
.page = snd_card_saa7134_page,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue