Re: [alsa-devel] [regression] 2.6.25-rc4 snd-es18xx broken on Alpha

From: Rene Herman
Date: Mon Mar 17 2008 - 17:59:57 EST


On 13-03-08 05:24, Bob Tracy wrote:

Rene Herman wrote:
Okay, and applying the attached just makes your sound completely dead in the water?
(patch to delete es1888_init function)

Oddly enough, the patch had no effect whatsoever (at least with the
ALSA drivers: I didn't try building a kernel with the OSS "sb" driver).
Just to make sure I wasn't "benefiting" from initialization inherited
from a prior boot, I even powered-down the machine for 30 seconds
before booting on the new kernel. snd-sb8 still works, and snd-es18xx
is still broken (in exactly the same way as before).

Okay, thought I'd stare at this thing a bit -- there's no specific 1888 documentation available it seems but I did notice something in the 1878 datasheet which might mean something. The docs says that bits 0-1 are don't care for DMA but don't for IRQ, so could it possibly be as simple as the attached?

1878 sheet doesn't document register 0x7f, it seems...

Assuming it's not just this, this thing is going to require quite a bit of trial and error and without the hardware this will be troublesome. I expect this is not it, since the arch init code also doesn't care about bit 0 when setting that same register for IRQ 5.

If this is not it -- I'd try s/0x50/0x10/ in that line, even completely commenting out the IRQ setting line (with the arch code built in) and just generally frolic around 'till something blows up...

Rene.

diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index 90498e4..71d1b96 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -1449,16 +1449,16 @@ static int __devinit snd_es18xx_initialize(struct snd_es18xx *chip)
switch (chip->irq) {
case 2:
case 9:
- irqmask = 0;
+ irqmask = 0x0;
break;
case 5:
- irqmask = 1;
+ irqmask = 0x5;
break;
case 7:
- irqmask = 2;
+ irqmask = 0xa;
break;
case 10:
- irqmask = 3;
+ irqmask = 0xf;
break;
default:
snd_printk(KERN_ERR "invalid irq %d\n", chip->irq);
@@ -1497,7 +1497,7 @@ static int __devinit snd_es18xx_initialize(struct snd_es18xx *chip)
}

/* Enable and set Audio 1 IRQ */
- snd_es18xx_write(chip, 0xB1, 0x50 | (irqmask << 2));
+ snd_es18xx_write(chip, 0xB1, 0x50 | irqmask);
/* Enable and set Audio 1 DMA */
snd_es18xx_write(chip, 0xB2, 0x50 | (dma1mask << 2));
/* Set Audio 2 DMA */
@@ -1513,7 +1513,9 @@ static int __devinit snd_es18xx_initialize(struct snd_es18xx *chip)
FM enabled */
snd_es18xx_mixer_write(chip, 0x40, 0x43 | (chip->mpu_port & 0xf0) >> 1);
}
+#if 0
snd_es18xx_mixer_write(chip, 0x7f, ((irqmask + 1) << 1) | 0x01);
+#endif
}
if (chip->caps & ES18XX_NEW_RATE) {
/* Change behaviour of register A1