mainThe OpenVortex Project - Support: sr #103090, STAC9708 ac97_code.c and...


sr #103090: STAC9708 ac97_code.c and ac97_patch.c

Submitter:  None
Submitted:  Tue 25 May 2004 05:21:58 AM UTC
Category:  None Priority:  5 - Normal
Severity:  6 - Security Status:  None
Privacy:  Public Assigned to:  None
Originator Email:  -email is unavailable- Open/Closed:  Open
Operating System:  None
* Mandatory Fields

Add a New Comment Rich Markup

Jump to the original submission

Mon 14 Feb 2005 07:31:49 AM UTC, comment #10: 
Sun 27 Jun 2004 09:49:55 AM UTC, comment #9: 

It is not a good fix for the bug. ( changing ac97->caps )

Tue 22 Jun 2004 08:21:28 AM UTC, comment #8: 

This also affect au8830 with STAC9704 and STAC9721 - use register 04 as LNLVL_OUT

Sat 19 Jun 2004 12:43:51 AM UTC, comment #7: 
Wed 26 May 2004 02:10:26 AM UTC, comment #6: 

As the Surround DAC Mixer control is disappeared (muted by default), the rear channels will never mix with the front channels by the AC97 mixer.

The mystery is the "PCM Out Path & Mute" control seem to be useless after this Surround DAC Mixer control disappeared.

Tue 25 May 2004 03:56:17 PM UTC, comment #5: 

Refer to

6.1.1 PCM out path and optional 3D bypass of AC97 2.1 Specification


5.5.1 Analog Mixer Output of AC97 2.2 Specification

If analog 3D stereo enhancement is supported in AC ‘97 it is desirable that the PCM out source be mixable pre- or post-analog 3D processing.  This allows digital 3D audio (rendered with volume, pan, reverb, Doppler, HRTF, etc.) on PCM out to bypass the analog 3D processing regardless of whether analog 3D is enabled or disabled.   This prevents “smearing” of digital 3D audio, and also enables digital 3D audio sources to be mixed with 3D stereo enhanced analog sources (CD, AUX, etc).

The default PCM out path is through volume, mute, and analog 3D stereo enhancement.  However, if the AC ’97 Controller implements digital 3D audio, and detects analog 3D stereo enhancement support in the AC ’97 analog,  it can enable the 3D bypass path.  This capability to switch to post 3D can also be exposed via API’s to support SW which emulates or accelerates digital 3D rendering.
In either PCM out scenario it is advantageous for the AC ‘97 Controller to use the post D/A analog volume control to support full resolution D/A conversions followed by analog attenuation as a means of achieving high SNR.

Tue 25 May 2004 03:28:38 PM UTC, comment #4: 

Refer to page 26 of STAC9708 specification.

Any reserved bits, Marked X, can be written to but are don't care upon read back.

It seem that snd_ac97_try_bit alway true for bit 15 of register 0x20 ( General Purpose ) of STAC9708 but
the bit 15 "PCM Out Path & Mute" is not defined in STAC9708 specification.

/* build PCM out path & mute control */
if (snd_ac97_try_bit(ac97, AC97_GENERAL_PURPOSE, 15)) {
if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_general[AC97_GENERAL_PCM_OUT], ac97))) < 0)
return err;

Tue 25 May 2004 01:08:41 PM UTC, comment #3: 

STAC9708 using register 04 as SDAC Mixer volume control and  STAC9721 using register as LNLVL volume control with bit4 of register 0 is zero ( default 6940 )

Tue 25 May 2004 08:21:51 AM UTC, comment #2: 

static int patch_sigmatel_stac9708_specific(ac97_t *ac97)
        int err;
if ((err = snd_ac97_cmix_new(ac97->bus->card, "Surround DAC Mixer", AC97_HEADPHONE, 0, ac97)) < 0)
    return err;
        snd_ac97_rename_vol_ctl(ac97, "Surround Playback", "Surround DAC Master Playback");
return patch_sigmatel_stac97xx_specific(ac97);

Tue 25 May 2004 07:25:31 AM UTC, comment #1: 

A patch for this bug


snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Sigmatel Surround Playback");

in ac97_patch.c by

        int err;
if ((err = snd_ac97_cmix_new(ac97->bus->card, "Sigmatel Surround DAC Mixer", AC97_HEADPHONE, 0, ac97)) < 0)
    return err;

You need to declare snd_ac97_cmix_new() in ac97_local.h and make it non-static in ac97_codec.c

Tue 25 May 2004 05:21:58 AM UTC, original submission:  


snd_ac97_try_volume_mix() use bit 4 (headphone support) of ac97 register 0 to create headphone volume control.

Therefore the headphone volume control will not be created for STAC9708 in ac97_codec.c and cannot be rename to "Sigmatel Surround Playback" in ac97_patch.c

You will need to create Sigmatel Surround Playback Switch and Volume controls in ac97_patch.c instead of rename it from headphone.

AC97_DOUBLE() is only defined in ac97_codec.c

It will need to define AC97_DOUBLE_VALUE (similar to AC97_SINGLE_VALUE ) and declare


in ac97_local.h



(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:

No files currently attached


Depends on the following items: None found

Items that depend on this one: None found


CC list is empty


There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

Only logged-in users can vote.


No changes have been made to this item

Back to the top

Powered by Savane 3.13-7c56.
Corresponding source code