2000-11-20 16:33:11

by Georg Nikodym

[permalink] [raw]
Subject: [PATCH] maestro 2E not enabled


Second try (probably since I didn't correctly follow all the rules
before, thanks for the timely discussion).

The Maestro 2E on my laptop, which worked on 2.2 kernels, stopped
working on 2.4.0. Where stopped working means no sound and "pauses"
when interacting with the driver.

The symptom was hundreds of:

maestro: APU register select failed.

messages (there were other messages, but they were difficult to find
in all the noise) when the driver was loaded and a few hundred more if
anybody attempted to talk to the device.

maestro.c had not changed significantly since 2.2 (certainly not
anywhere close to the code emitting these messages).

lspci showed that the device was "[disabled]". Quick comparison
against other drivers showed that maestro.c was missing a call to
pci_enable_device().

Attached (well, inlined, really) is a patch that adds that call plus
some teardown logic in the event of failure.

By way of full disclosure, I have previously sent out this patch to
lkml and the maestro-users list. Zach has added it to what sounds
like a huge list but not explicitly blessed it (which is
understandable since I didn't really provide any of the above
information in said posting).

Thanks.

===== maestro.c 1.12 vs 1.13 =====
--- 1.12/drivers/sound/maestro.c Sat Nov 11 13:33:13 2000
+++ 1.13/drivers/sound/maestro.c Mon Nov 20 10:19:38 2000
@@ -3392,6 +3392,19 @@

ess = &card->channels[0];

+ if (pci_enable_device(pcidev)) {
+ printk (KERN_ERR "maestro: pci_enable_device() failed\n");
+ for (i = 0; i < NR_DSPS; i++) {
+ struct ess_state *s = &card->channels[i];
+ if (s->dev_audio != -1)
+ unregister_sound_dsp(s->dev_audio);
+ }
+ release_region(card->iobase, 256);
+ unregister_reboot_notifier(&maestro_nb);
+ kfree(card);
+ return 0;
+ }
+
/*
* Ok card ready. Begin setup proper
*/