pcm sound levels on my Dell GX240 are much lower than expected. i am using a known good set of speakers that work well on a older Dell box with identical FreeBSD version. sound is inaudible unless mixer pcm & ogain are both set above 80%, mixer vol setting makes no difference. output levels appear identical on the speaker jack and headphone jack. headphones sound ok at ogain=50, pcm=75-100; speakers get enough volume for a small quiet room at ogain=95-100, pcm=75-100 but sound is clipped and distorted (probably due to nearly maximum settings) the application used does not seem to matter. i've tested w/ xmms, mpg123, realplay and a variety of audio formats. this patch (inspired by kern/66422) made no difference =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pcm/ac97.c,v retrieving revision 1.51 diff -u -r1.51 ac97.c --- ac97.c 8 May 2004 03:41:40 -0000 1.51 +++ ac97.c 22 Oct 2004 06:14:11 -0000 @@ -548,7 +548,7 @@ ac97_wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); ac97_reset(codec); - ac97_wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); + ac97_wrcd(codec, AC97_REG_POWER, 0x8000); i = ac97_rdcd(codec, AC97_REG_RESET); codec->caps = i & 0x03ff; @@ -663,7 +663,7 @@ ac97_wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); ac97_reset(codec); - ac97_wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); + ac97_wrcd(codec, AC97_REG_POWER, 0x8000); if (!codec->noext) { ac97_wrcd(codec, AC97_REGEXT_STAT, codec->extstat); sound works great on a Dell GX200 (p3, Intel ICH 82801AA) running the same build of FreeBSD-Current, and plays louder than I can comfortably listen to if i turn the mixer settings up to similar levels. How-To-Repeat: run any audio application
Responsible Changed From-To: freebsd-bugs->sound Over to mailing list alias.
State Changed From-To: open->feedback To submitter: I'm very sorry this PR has laid untouched for so long. Do you know if this is still a problem on newer versions of FreeBSD?
I have just switched to an Intel D845WN motherboard and am experiencing the same issue. Sound is very low even when the volume on my speakers are maxed. Regards, -- Russell Wood <http://www.dynode.net/~rjw/>
Hello. At Sat, 27 Dec 2008 18:50:07 GMT, Russell J. Wood wrote: > I have just switched to an Intel D845WN motherboard and am experiencing > the same issue. > > Sound is very low even when the volume on my speakers are maxed. > > Regards, (1) Would you try the patch attached below? I don't know whether this patch is correct or not... (2) After applied the patch, can you hear any difference between the following commands? # sysctl dev.pcm.0.eapd=0 # sysctl dev.pcm.0.eapd=1 --- sys/dev/sound/pcm/ac97.c.releng70 2007-10-30 03:47:47.000000000 +0900 +++ sys/dev/sound/pcm/ac97.c 2008-12-31 17:26:45.000000000 +0900 @@ -133,7 +133,7 @@ { 0x41445303, 0x00, 0, "AD1819", 0 }, { 0x41445340, 0x00, 0, "AD1881", 0 }, { 0x41445348, 0x00, 0, "AD1881A", 0 }, - { 0x41445360, 0x00, 0, "AD1885", 0 }, + { 0x41445360, 0x00, 0, "AD1885", ad1885_patch }, { 0x41445361, 0x00, 0, "AD1886", ad1886_patch }, { 0x41445362, 0x00, 0, "AD1887", 0 }, { 0x41445363, 0x00, 0, "AD1886A", 0 }, @@ -141,8 +141,8 @@ { 0x41445370, 0x00, 0, "AD1980", ad198x_patch }, { 0x41445372, 0x00, 0, "AD1981A", 0 }, { 0x41445374, 0x00, 0, "AD1981B", ad1981b_patch }, - { 0x41445375, 0x00, 0, "AD1985", ad198x_patch }, - { 0x41445378, 0x00, 0, "AD1986", ad198x_patch }, + { 0x41445375, 0x00, 0, "AD1985", ad1985_patch }, + { 0x41445378, 0x00, 0, "AD1986", ad1986_patch }, { 0x414b4d00, 0x00, 1, "AK4540", 0 }, { 0x414b4d01, 0x00, 1, "AK4542", 0 }, { 0x414b4d02, 0x00, 1, "AK4543", 0 }, --- sys/dev/sound/pcm/ac97_patch.c.releng70 2007-10-30 03:47:27.000000000 +0900 +++ sys/dev/sound/pcm/ac97_patch.c 2008-12-31 18:01:41.000000000 +0900 @@ -30,6 +30,23 @@ SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/ac97_patch.c,v 1.10.2.1 2007/10/29 18:47:27 ariff Exp $"); +void ad1885_patch(struct ac97_info* codec) +{ +#define AC97_AD_JACK_SPDIF 0x72 + /* + * JS0 and EAPD shares the same pin (no.47). + * To use the EAPD function, we should disable jack sense(?). + */ + switch (ac97_getsubvendor(codec)) { + /* case 0xXXXXXXXX: */ + /* break; */ + default: + ac97_wrcd(codec, AC97_AD_JACK_SPDIF, + ac97_rdcd(codec, AC97_AD_JACK_SPDIF) | 0x1110); + break; + } +} + void ad1886_patch(struct ac97_info* codec) { #define AC97_AD_JACK_SPDIF 0x72 @@ -44,6 +61,9 @@ void ad198x_patch(struct ac97_info* codec) { + /* + * Swap the aim of the LINE_OUT and SURR_OUT/HP_OUT pins. + */ switch (ac97_getsubvendor(codec)) { case 0x11931043: /* Not for ASUS A9T (probably else too). */ break; @@ -69,6 +89,68 @@ } } +void ad1985_patch(struct ac97_info* codec) +{ + /* + * Swap the aim of the LINE_OUT and SURR_OUT/HP_OUT pins. + * Disable outputs of the LINE_OUT and CENTER_OUT/LFE_OUT pins. + * Select the CENTER_OUT/LFE_OUT pins as the MIC inputs. + * Enable the stereo microphone mode. + * + * Set the voltage of the VREFOUT pin. + */ + switch (ac97_getsubvendor(codec)) { + case 0x80f31043: /* ASUS P4P800 Deluxe (SE) */ + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0420); + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x1800); + ac97_wrcd(codec, 0x74, ac97_rdcd(codec, 0x74) | 0x0200); + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0040); + + /* + * 0x0 = 2.25V (default) + * 0x1 = High-Z + * 0x2 = 3.7V + * 0x3 = 0V + */ + ac97_wrcd(codec, 0x76, (ac97_rdcd(codec, 0x76) & ~0xc) + | 0x0 << 2); + break; + default: + break; + } +} + +void ad1986_patch(struct ac97_info* codec) +{ + /* + * Disable outputs of the SURR_OUT and CENTER_OUT/LFE_OUT pins. + * Select the SURR_OUT pins as the LINE_IN inputs. + * Select the CENTER_OUT/LFE_OUT pins as the MIC inputs. + * Enable the stereo microphone mode. + * + * Set the voltage of the C/LFE VREF_OUT pin. + */ + switch (ac97_getsubvendor(codec)) { + case 0x818f1043: /* ASUS P5SD2-X (SE) */ + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x1800); + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0004); + ac97_wrcd(codec, 0x74, ac97_rdcd(codec, 0x74) | 0x0200); + ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0040); + + /* + * 0x0 = High-Z (default) + * 0x1 = 2.25V + * 0x2 = 0V + * 0x4 = 3.70V + */ + ac97_wrcd(codec, 0x70, (ac97_rdcd(codec, 0x70) & ~0x1c) + | 0x1 << 2); + break; + default: + break; + } +} + void cmi9739_patch(struct ac97_info* codec) { /* --- sys/dev/sound/pcm/ac97_patch.h.releng70 2007-04-19 22:54:22.000000000 +0900 +++ sys/dev/sound/pcm/ac97_patch.h 2008-12-31 17:44:18.000000000 +0900 @@ -28,8 +28,11 @@ typedef void (*ac97_patch)(struct ac97_info*); +void ad1885_patch(struct ac97_info*); void ad1886_patch(struct ac97_info*); void ad198x_patch(struct ac97_info*); void ad1981b_patch(struct ac97_info*); +void ad1985_patch(struct ac97_info*); +void ad1986_patch(struct ac97_info*); void cmi9739_patch(struct ac97_info*); void alc655_patch(struct ac97_info*); --- WATANABE Kazuhiro (CQG00620@nifty.ne.jp)
I no longer have this hardware. please feel free to close PR if no one else cares
For bugs matching the following criteria: Status: In Progress Changed: (is less than) 2014-06-01 Reset to default assignee and clear in-progress tags. Mail being skipped