[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Openvortex-dev] pause - resume playback
From: |
Wilfried Weissmann |
Subject: |
[Openvortex-dev] pause - resume playback |
Date: |
Tue, 18 May 2004 21:24:52 +0200 |
User-agent: |
Mozilla Thunderbird 0.5 (X11/20040306) |
hi,
i still need to resetup the dma registers to get the right samples after
resuming audio playback. i thought that this has something to do with
the samples crossing the 4k alignment boarders, but in my tests all
samples were properly aligned.
the attached patch applies aganist kernel 2.6.6 with the latest aureal
fastplay/slowrecord patch applied.
bye,
wilfried
Binary files linux-2.6.6/sound/pci/au88x0/au8810.o and
linux-2.6.6-aureal/sound/pci/au88x0/au8810.o differ
Binary files linux-2.6.6/sound/pci/au88x0/au8820.o and
linux-2.6.6-aureal/sound/pci/au88x0/au8820.o differ
Binary files linux-2.6.6/sound/pci/au88x0/au8830.o and
linux-2.6.6-aureal/sound/pci/au88x0/au8830.o differ
diff -Nurp linux-2.6.6/sound/pci/au88x0/au88x0.h
linux-2.6.6-aureal/sound/pci/au88x0/au88x0.h
--- linux-2.6.6/sound/pci/au88x0/au88x0.h 2004-05-15 11:57:48.000000000
+0200
+++ linux-2.6.6-aureal/sound/pci/au88x0/au88x0.h 2004-05-17
20:47:31.000000000 +0200
@@ -208,6 +208,7 @@ static void vortex_adbdma_startfifo(vort
static void vortex_adbdma_pausefifo(vortex_t * vortex, int adbdma);
static void vortex_adbdma_resumefifo(vortex_t * vortex, int adbdma);
static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma);
+void vortex_adbdma_resetup(vortex_t *vortex, int adbdma);
#ifndef CHIP_AU8810
static void vortex_wtdma_startfifo(vortex_t * vortex, int wtdma);
diff -Nurp linux-2.6.6/sound/pci/au88x0/au88x0_core.c
linux-2.6.6-aureal/sound/pci/au88x0/au88x0_core.c
--- linux-2.6.6/sound/pci/au88x0/au88x0_core.c 2004-03-30 05:27:16.000000000
+0200
+++ linux-2.6.6-aureal/sound/pci/au88x0/au88x0_core.c 2004-05-16
15:40:28.000000000 +0200
@@ -1170,6 +1170,33 @@ vortex_adbdma_setmode(vortex_t * vortex,
hwread(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2));
}
+void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) {
+ stream_t *dma = &vortex->dma_adb[adbdma];
+ int p, pp, i;
+
+ /* refresh hw page table */
+ for (i=0 ; i < 4 && i < dma->nr_periods; i++) {
+ /* p: audio buffer page index */
+ p = dma->period_virt + i;
+ if (p >= dma->nr_periods)
+ p -= dma->nr_periods;
+ /* pp: hardware DMA page index. */
+ pp = dma->period_real + i;
+ if( dma->nr_periods < 4) {
+ if (pp >= dma->nr_periods)
+ pp -= dma->nr_periods;
+ }
+ else {
+ if (pp >= 4)
+ pp -= 4;
+ }
+ hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE+(((adbdma << 2)+pp)
<< 2), snd_sgbuf_get_addr(dma->sgbuf, dma->period_bytes * p));
+ /* Force write thru cache. */
+ hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (((adbdma <<
2)+pp) << 2));
+ }
+}
+
+
static int vortex_adbdma_bufshift(vortex_t * vortex, int adbdma)
{
stream_t *dma = &vortex->dma_adb[adbdma];
diff -Nurp linux-2.6.6/sound/pci/au88x0/au88x0_pcm.c
linux-2.6.6-aureal/sound/pci/au88x0/au88x0_pcm.c
--- linux-2.6.6/sound/pci/au88x0/au88x0_pcm.c 2004-03-30 05:26:15.000000000
+0200
+++ linux-2.6.6-aureal/sound/pci/au88x0/au88x0_pcm.c 2004-05-17
20:47:10.000000000 +0200
@@ -314,8 +314,10 @@ static int snd_vortex_pcm_trigger(snd_pc
// do something to start the PCM engine
//printk(KERN_INFO "vortex: start %d\n", dma);
stream->fifo_enabled = 1;
- if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT)
+ if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
+ vortex_adbdma_resetup(chip, dma);
vortex_adbdma_startfifo(chip, dma);
+ }
#ifndef CHIP_AU8810
else {
printk(KERN_INFO "vortex: wt start %d\n", dma);
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8810.ko and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8810.ko differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8810.mod.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8810.mod.o differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8810.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8810.o differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8820.ko and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8820.ko differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8820.mod.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8820.mod.o differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8820.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8820.o differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8830.ko and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8830.ko differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8830.mod.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8830.mod.o differ
Binary files linux-2.6.6/sound/pci/au88x0/snd-au8830.o and
linux-2.6.6-aureal/sound/pci/au88x0/snd-au8830.o differ
- [Openvortex-dev] pause - resume playback,
Wilfried Weissmann <=