All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: "Tais M. Hansen" <tais.hansen@osd.dk>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: Re: [Alsa-user] Upgrade problems -addendum
Date: Fri, 24 Jan 2003 14:30:50 +0100	[thread overview]
Message-ID: <s5hd6mmptdh.wl@alsa2.suse.de> (raw)
In-Reply-To: <200301241341.09518.tais.hansen@osd.dk>

[-- Attachment #1: Type: text/plain, Size: 1081 bytes --]

At Fri, 24 Jan 2003 13:41:06 +0100,
Tais M. Hansen <tais.hansen@osd.dk> wrote:
> 
> [1  <text/plain; iso-8859-1 (quoted-printable)>]
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On Friday 24 January 2003 10:12, Takashi Iwai wrote:
> > > Ok, log output attached, 3 files with loads of gibberish ;). Same
> > > behavior btw.
> > thanks.  sigh, this chip is really weird.
> > perhaps in the last patch, the recoverd pointer overtook the actual
> > pointer and got the driver confused.
> > take 6:  the calculation of recovered pointer is changed.
> >          and the register value of CURRPTR is shown as reference.
> >          if it's more acculate, we can refer to it instead...
> > as usual, debug messages appear by enabling DEBUG_POITNER.
> 
> Same deal as before, another 3 files filled with debug output. Good luck. :)

it seems that we need to use CURRPTR always on your chip.
i guess this depends on the board, how reliable IDX register is.

if the attached new patch works, i'll add a module option to enable
this behavior.


good luck for you, too :)


Takashi

[-- Attachment #2: via-pointer-test7.dif --]
[-- Type: application/octet-stream, Size: 3926 bytes --]

Index: alsa-kernel/pci/via82xx.c
===================================================================
RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/via82xx.c,v
retrieving revision 1.21
diff -u -r1.21 via82xx.c
--- alsa-kernel/pci/via82xx.c	22 Jan 2003 14:21:05 -0000	1.21
+++ alsa-kernel/pci/via82xx.c	24 Jan 2003 13:27:39 -0000
@@ -88,7 +88,7 @@
 MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l");
 MODULE_PARM_DESC(mpu_port, "MPU-401 port.");
 MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC);
-MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "l");
+MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
 MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz).");
 MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:48000");
 
@@ -481,8 +481,9 @@
 	/* disable interrupts */
 	outb(0x00, port + VIA_REG_OFFSET_CONTROL);
 	/* clear interrupts */
-	outb(0x03, port + VIA_REG_OFFSET_STATUS);
-	outb(0x00, port + VIA_REG_OFFSET_TYPE); /* for via686 */
+	outb(0x07, port + VIA_REG_OFFSET_STATUS);
+	if (chip->chip_type == TYPE_VIA686)
+		outb(0x00, port + VIA_REG_OFFSET_TYPE);
 	outl(0, port + VIA_REG_OFFSET_CURR_PTR);
 	viadev->lastpos = 0;
 }
@@ -512,10 +513,17 @@
 	/* check status for each stream */
 	for (i = 0; i < chip->num_devs; i++) {
 		viadev_t *viadev = &chip->devs[i];
-		if (inb(chip->port + viadev->reg_offset) & (VIA_REG_STAT_EOL|VIA_REG_STAT_FLAG)) {
-			outb(VIA_REG_STAT_FLAG | VIA_REG_STAT_EOL, VIAREG(chip, OFFSET_STATUS) + viadev->reg_offset);
+		unsigned long port = chip->port + viadev->reg_offset; /* STATUS */
+		unsigned char status = inb(port) & 0x07;
+		if (! status)
+			continue;
+		outb(status, port); /* ack */
+		if (status & (VIA_REG_STAT_EOL|VIA_REG_STAT_FLAG)) {
 			if (viadev->substream && viadev->running) {
 				spin_unlock(&chip->reg_lock);
+#ifdef POINTER_DEBUG
+				snd_printd("period elapsed\n");
+#endif
 				snd_pcm_period_elapsed(viadev->substream);
 				spin_lock(&chip->reg_lock);
 			}
@@ -585,17 +593,17 @@
 	/* check the validity of the calculated position */
 	if (size < count || (res < viadev->lastpos && (res >= viadev->bufsize2 || viadev->lastpos < viadev->bufsize2))) {
 #ifdef POINTER_DEBUG
-		printk("fail: idx = %i/%i, lastpos = 0x%x, bufsize2 = 0x%x, offsize = 0x%x, size = 0x%x, count = 0x%x\n", idx, viadev->tbl_entries, viadev->lastpos, viadev->bufsize2, viadev->idx_table[idx].offset, viadev->idx_table[idx].size, count);
+		snd_printd("fail: idx = %i/%i, lastpos = 0x%x, bufsize2 = 0x%x, offsize = 0x%x, size = 0x%x, count = 0x%x\n", idx, viadev->tbl_entries, viadev->lastpos, viadev->bufsize2, viadev->idx_table[idx].offset, viadev->idx_table[idx].size, count);
 #endif
 		/* count register returns full size when end of buffer is reached */
 		if (size != count) {
-			snd_printd(KERN_ERR "invalid via82xx_cur_ptr, using last valid pointer\n");
-			res = viadev->lastpos;
+			snd_printd("invalid via82xx_cur_ptr, using last valid pointer\n");
+			return viadev->lastpos;
 		} else {
 			res = viadev->idx_table[idx].offset + size;
 			if (res < viadev->lastpos && (res >= viadev->bufsize2 || viadev->lastpos < viadev->bufsize2)) {
-				snd_printd(KERN_ERR "invalid via82xx_cur_ptr (2), using last valid pointer\n");
-				res = viadev->lastpos;
+				snd_printd("invalid via82xx_cur_ptr (2), using last valid pointer\n");
+				return viadev->lastpos;
 			}
 		}
 	}
@@ -648,8 +656,18 @@
 		return 0;
 	spin_lock(&chip->reg_lock);
 	count = inl(VIAREG(chip, OFFSET_CURR_COUNT) + viadev->reg_offset);
-	idx = count >> 24;
+	idx = (count >> 24) & viadev->tbl_entries;
 	count &= 0xffffff;
+#if 1 /* FIXME */
+	{
+		unsigned int ptr;
+		ptr = inl(VIAREG(chip, OFFSET_CURR_PTR) + viadev->reg_offset);
+		if (ptr <= (unsigned int)viadev->table_addr)
+			idx = 0;
+		else
+			idx = (ptr - (unsigned int)viadev->table_addr - 4) / 8;
+	}
+#endif
 	res = calc_linear_pos(viadev, idx, count);
 	spin_unlock(&chip->reg_lock);
 

  reply	other threads:[~2003-01-24 13:30 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200301221234.33054.tais.hansen@osd.dk>
     [not found] ` <200301221543.52285.tais.hansen@osd.dk>
     [not found]   ` <s5hznpt1bn2.wl@alsa2.suse.de>
     [not found]     ` <200301221647.05780.tais.hansen@osd.dk>
2003-01-22 16:23       ` [Alsa-user] Upgrade problems -addendum Takashi Iwai
2003-01-23  0:35         ` Tais M. Hansen
2003-01-23 10:03           ` Takashi Iwai
2003-01-23 11:15             ` Tais M. Hansen
2003-01-23 11:46               ` Takashi Iwai
2003-01-23 12:36                 ` Tais M. Hansen
2003-01-23 15:08                   ` Takashi Iwai
2003-01-23 17:50                     ` Tais M. Hansen
2003-01-23 18:07                       ` Takashi Iwai
2003-01-23 18:43                         ` Tais M. Hansen
2003-01-24  9:12                           ` Takashi Iwai
2003-01-24 12:41                             ` Tais M. Hansen
2003-01-24 13:30                               ` Takashi Iwai [this message]
2003-01-24 14:12                                 ` Tais M. Hansen
2003-01-24 15:45                                   ` Takashi Iwai
2003-01-24 16:40                                     ` Tais M. Hansen
2003-01-24 17:08                                       ` Takashi Iwai
2003-01-24 21:24                                         ` Tais M. Hansen
2003-01-27 10:42                                           ` Takashi Iwai
2003-01-27 14:42                                             ` Tais M. Hansen
2003-01-27 15:15                                               ` Takashi Iwai
2003-01-27 17:01                                                 ` Tais M. Hansen
2003-01-27 17:27                                                   ` Takashi Iwai
2003-01-28  0:43                                                     ` VIA823x testing Tais M. Hansen
2003-01-28  9:31                                                       ` Takashi Iwai
2003-01-28 13:25                                                         ` Tais M. Hansen
2003-01-28 16:21                                                           ` Takashi Iwai
2003-01-28 23:19                                                             ` Tais M. Hansen
2003-01-24 16:42                                     ` Re: [Alsa-user] Upgrade problems -addendum Tais M. Hansen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hd6mmptdh.wl@alsa2.suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=tais.hansen@osd.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.