Update of /cvsroot/alsa/alsa-kernel/pci/ac97
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14792/pci/ac97
Modified Files:
ac97_codec.c
Log Message:
try to mute and power down in the destructor (to shut up noises).
Index: ac97_codec.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/ac97/ac97_codec.c,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -r1.131 -r1.132
--- ac97_codec.c 19 Apr 2004 18:11:29 -0000 1.131
+++ ac97_codec.c 3 May 2004 17:32:57 -0000 1.132
@@ -999,6 +999,8 @@
*
*/
+static void snd_ac97_powerdown(ac97_t *ac97);
+
static int snd_ac97_bus_free(ac97_bus_t *bus)
{
if (bus) {
@@ -1034,6 +1036,7 @@
static int snd_ac97_dev_free(snd_device_t *device)
{
ac97_t *ac97 = snd_magic_cast(ac97_t, device->device_data, return -ENXIO);
+ snd_ac97_powerdown(ac97); /* for avoiding click noises during shut down */
return snd_ac97_free(ac97);
}
@@ -1995,18 +1998,16 @@
return 0;
}
-#ifdef CONFIG_PM
-/**
- * snd_ac97_suspend - General suspend function for AC97 codec
- * @ac97: the ac97 instance
+
+/*
+ * Power down the chip.
*
- * Suspends the codec, power down the chip.
* MASTER and HEADPHONE registers are muted but the register cache values
* are not changed, so that the values can be restored in snd_ac97_resume().
*/
-void snd_ac97_suspend(ac97_t *ac97)
+static void snd_ac97_powerdown(ac97_t *ac97)
{
- unsigned short power = (ac97->regs[AC97_POWERDOWN] ^ 0x8000) & ~0x8000; /*
invert EAPD */
+ unsigned short power;
if (ac97_is_audio(ac97)) {
/* some codecs have stereo mute bits */
@@ -2014,6 +2015,7 @@
snd_ac97_write(ac97, AC97_HEADPHONE, 0x9f9f);
}
+ power = ac97->regs[AC97_POWERDOWN] | 0x8000; /* EAPD */
power |= 0x4000; /* Headphone amplifier powerdown */
power |= 0x0300; /* ADC & DAC powerdown */
snd_ac97_write(ac97, AC97_POWERDOWN, power);
@@ -2021,8 +2023,24 @@
power |= 0x0400; /* Analog Mixer powerdown (Vref on) */
snd_ac97_write(ac97, AC97_POWERDOWN, power);
udelay(100);
+#if 0
+ /* FIXME: this causes click noises on some boards at resume */
power |= 0x3800; /* AC-link powerdown, internal Clk disable */
snd_ac97_write(ac97, AC97_POWERDOWN, power);
+#endif
+}
+
+
+#ifdef CONFIG_PM
+/**
+ * snd_ac97_suspend - General suspend function for AC97 codec
+ * @ac97: the ac97 instance
+ *
+ * Suspends the codec, power down the chip.
+ */
+void snd_ac97_suspend(ac97_t *ac97)
+{
+ snd_ac97_powerdown(ac97);
}
/**
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog