Update of /cvsroot/alsa/alsa-kernel/pci/ice1712 In directory sc8-pr-cvs1:/tmp/cvs-serv1202
Modified Files: ice1724.c Log Message: use SIZE register to get the current DMA position. this register seems more reliable than BASE register. Index: ice1724.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/ice1724.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ice1724.c 16 Aug 2003 09:58:29 -0000 1.16 +++ ice1724.c 10 Sep 2003 16:26:26 -0000 1.17 @@ -482,8 +482,6 @@ return 0; } -#define CHECK_INVALID_PTR - static snd_pcm_uframes_t snd_vt1724_playback_pro_pointer(snd_pcm_substream_t * substream) { ice1712_t *ice = snd_pcm_substream_chip(substream); @@ -491,20 +489,28 @@ if (!(inl(ICEMT1724(ice, DMA_CONTROL)) & VT1724_PDMA0_START)) return 0; +#if 0 /* read PLAYBACK_ADDR */ ptr = inl(ICEMT1724(ice, PLAYBACK_ADDR)); -#ifdef CHECK_INVALID_PTR if (ptr < substream->runtime->dma_addr) { snd_printd("ice1724: invalid negative ptr\n"); return 0; } -#endif ptr -= substream->runtime->dma_addr; ptr = bytes_to_frames(substream->runtime, ptr); -#ifdef CHECK_INVALID_PTR if (ptr >= substream->runtime->buffer_size) { snd_printd("ice1724: invalid ptr %d (size=%d)\n", (int)ptr, (int)substream->runtime->period_size); return 0; } +#else /* read PLAYBACK_SIZE */ + ptr = inl(ICEMT1724(ice, PLAYBACK_SIZE)) & 0xffffff; + ptr = (ptr + 1) << 2; + ptr = bytes_to_frames(substream->runtime, ptr); + if (ptr <= substream->runtime->buffer_size) + ptr = substream->runtime->buffer_size - ptr; + else { + snd_printd("ice1724: invalid ptr %d (size=%d)\n", (int)ptr, (int)substream->runtime->buffer_size); + ptr = 0; + } #endif return ptr; } @@ -536,9 +542,22 @@ if (!(inl(ICEMT1724(ice, DMA_CONTROL)) & reg->start)) return 0; +#if 0 /* use ADDR register */ ptr = inl(ice->profi_port + reg->addr); ptr -= substream->runtime->dma_addr; return bytes_to_frames(substream->runtime, ptr); +#else /* use SIZE register */ + ptr = inw(ice->profi_port + reg->size); + ptr = (ptr + 1) << 2; + ptr = bytes_to_frames(substream->runtime, ptr); + if (ptr <= substream->runtime->buffer_size) + ptr = substream->runtime->buffer_size - ptr; + else { + snd_printd("ice1724: invalid ptr %d (size=%d)\n", (int)ptr, (int)substream->runtime->buffer_size); + ptr = 0; + } + return ptr; +#endif } const static struct vt1724_pcm_reg vt1724_capture_pro_reg = { ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog