[alsa-devel] stac9200 speaker/hp not detected

Brian Hinz bphinz at hotmail.com
Sun Jul 8 18:54:54 CEST 2007


OK, after a few days of familiarizing myself with the hda and stac9200 
specs, I think I see what's going on.  I tossed out the pin config settings 
from the windows driver and simply derived a set based on the stac9200 
datasheet and my best guesses as to how the hardware is actually configured. 
  At this point, dmesg shows:

line_outs=0 (0x0/0x0/0x0/0x0/0x0)
speaker_outs=1 (0xe/0x0/0x0/0x0/0x0)
hp_outs=1 (0xd/0x0/0x0/0x0/0x0)
inputs: mic=0x10, fmic=0x0, line=0x0, fline=0x0, cd=0x0, aux=0x0

which corresponds at least to the number of external ports. Still no sound, 
BUT, /proc/asound/card0/codec#0 shows something interesting (heh, actually 
it's shown it all along, ignorance is bliss I guess...):

...
Node 0x08 [Pin Complex] wcaps 0x430681: Stereo Digital
  Pincap 0x0810024: IN EAPD Detect
  Pin Default 0x40c001fd: [N/A] SPDIF In at Ext N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x00:
  Power: 0x0
...

the DigInPin is showing EAPD control.  I wasn't sure about the meaning of 
the "Power: 0x0" line in /proc/asound/card0/codec#0 so I put some debug 
statements into patch_sigmatel.c to dump the DigInPin power state and EAPD 
registers:

[ 5701.644000] hda_codec: DigInPin PwrState: 00000033
[ 5701.644000] hda_codec: EAPD Config: 00000000

According to the stac9200 datasheet, a PwrState of 0x3 means that the node 
is powered down.  A value of 0 on the EAPD pin means power down the external 
amp, and a 1 means power up the amp if PwrState is < 0x2. If PwrState >= 
0x2, Pin47 is tri-stated.  And Pin47 is ... GPIO3 (AKA: SPDIF_IN,  EAPD)!  
The stac9200 datasheet also states that "an external pull-down is required 
if EAPD must be low when Pin Widget is powered down."

So I assume that I need to reconfigure this pin to drive a 1 and power up 
the external amp, but what is the correct way to do this?  Does the pin 
config matter much, or do I just need to set the PwrState bits?  I see that 
in stac92xx_enable_eapd GPIO0 is configured as CMOS before it's enabled.  
Since GPIO3 is a digital I/O I obviously don't have to do that.  Any 
suggestions before I take the red pill?

Attached is my latest /proc/asound/card0/codec#0

Thanks,
-brian

Codec: SigmaTel STAC9200
Address: 0
Vendor Id: 0x83847690
Subsystem Id: 0x107b0205
Revision Id: 0x102201
No Modem Function Group found
Default PCM:
    rates [0x7e0]: 44100 48000 88200 96000 176400 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=1
Node 0x02 [Audio Output] wcaps 0xd0401: Stereo
  Power: 0x0
Node 0x03 [Audio Input] wcaps 0x1d0541: Stereo
  Power: 0x0
  Connection: 1
     0x0a
Node 0x04 [Audio Input] wcaps 0x140311: Stereo Digital
  PCM:
    rates [0x160]: 44100 48000 96000
    bits [0xe]: 16 20 24
    formats [0x5]: PCM AC3
  Connection: 1
     0x08
Node 0x05 [Audio Output] wcaps 0x40211: Stereo Digital
  PCM:
    rates [0x1e0]: 44100 48000 88200 96000
    bits [0xe]: 16 20 24
    formats [0x5]: PCM AC3
Node 0x06 [Vendor Defined Widget] wcaps 0xf30201: Stereo Digital
Node 0x07 [Audio Selector] wcaps 0x300901: Stereo
  Connection: 3
     0x02* 0x08 0x0a
Node 0x08 [Pin Complex] wcaps 0x430681: Stereo Digital
  Pincap 0x0810024: IN EAPD Detect
  Pin Default 0x40c001fd: [N/A] SPDIF In at Ext N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x00:
  Power: 0x0
Node 0x09 [Pin Complex] wcaps 0x400301: Stereo Digital
  Pincap 0x0810: OUT
  Pin Default 0x404001fe: [N/A] SPDIF Out at Ext N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x00:
  Connection: 2
     0x05* 0x0a
Node 0x0a [Audio Selector] wcaps 0x30090d: Stereo Amp-Out
  Amp-Out caps: ofs=0x00, nsteps=0x0f, stepsize=0x05, mute=1
  Amp-Out vals:  [0x0d 0x0d]
  Connection: 1
     0x0c
Node 0x0b [Audio Selector] wcaps 0x300105: Stereo Amp-Out
  Amp-Out caps: N/A
  Amp-Out vals:  [0x1f 0x1f]
  Connection: 1
     0x07
Node 0x0c [Audio Selector] wcaps 0x30010d: Stereo Amp-Out
  Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0
  Amp-Out vals:  [0x04 0x04]
  Connection: 5
     0x10* 0x0f 0x0e 0x0d 0x12
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
  Pincap 0x083f: IN OUT HP Detect
  Pin Default 0x042110f1: [Jack] HP Out at Ext Right
    Conn = 1/8, Color = Black
  Pin-ctls: 0xc0: OUT HP
  Connection: 1
     0x0b
Node 0x0e [Pin Complex] wcaps 0x400181: Stereo
  Pincap 0x083f: IN OUT HP Detect
  Pin Default 0x90100110: [Fixed] Speaker at Int N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x00:
  Connection: 1
     0x0b
Node 0x0f [Pin Complex] wcaps 0x400181: Stereo
  Pincap 0x0837: IN OUT Detect
  Pin Default 0x400101ff: [N/A] Line Out at Ext N/A
    Conn = 1/8, Color = Unknown
  Pin-ctls: 0x20: IN
  Connection: 1
     0x0b
Node 0x10 [Pin Complex] wcaps 0x400181: Stereo
  Pincap 0x081737: IN OUT Detect
  Pin Default 0x04a110f2: [Jack] Mic at Ext Right
    Conn = 1/8, Color = Black
  Pin-ctls: 0x24: IN
  Connection: 1
     0x0b
Node 0x11 [Pin Complex] wcaps 0x400104: Mono Amp-Out
  Amp-Out caps: N/A
  Amp-Out vals:  [0x00]
  Pincap 0x0810: OUT
  Pin Default 0x401001f3: [N/A] Speaker at Ext N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x00:
  Connection: 1
     0x13
Node 0x12 [Pin Complex] wcaps 0x400001: Stereo
  Pincap 0x0820: IN
  Pin Default 0x409001f4: [N/A] Aux at Ext N/A
    Conn = Unknown, Color = Unknown
  Pin-ctls: 0x20: IN
Node 0x13 [Audio Mixer] wcaps 0x200100: Mono
  Connection: 1
     0x07
Node 0x14 [Beep Generator Widget] wcaps 0x70000c: Mono Amp-Out
  Amp-Out caps: ofs=0x03, nsteps=0x03, stepsize=0x17, mute=1
  Amp-Out vals:  [0x00]




>From: Takashi Iwai <tiwai at suse.de>
>To: "Brian Hinz" <bphinz at hotmail.com>
>CC: alsa-devel at alsa-project.org
>Subject: Re: [alsa-devel] stac9200 speaker/hp not detected
>Date: Thu, 05 Jul 2007 12:28:56 +0200
>
>At Wed, 04 Jul 2007 15:08:15 -0400,
>Brian Hinz wrote:
> >
> > I found the stac9200 datasheet and went through it, comparing it to the
> > windows ini file and I don't see any obvious issues - everything looks 
>like
> > it's muxed right, except for the fact that there is physically no spdif 
>jack
> > on this particular machine.  The GPIO stuff looks like maybe it's mic 
>boost
> > or something, but what are these init verbs?
>
>GPIO can be used for different purposes depending on the
>implementation.  But, I'm not sure whether the missing GPIO setup is
>the culprit or not.  Anyway, you can set spec->gpio_mute in
>patch_9200().
>
>If it doesn't help, try to change the pin config.  You can ignore the
>first two pins for 0x08 and 0x09, which are for SPDIF I/O.  The rest
>are analog pins and can be configured flexibly.  The value 0x90110010
>corresponds to a built-in speaker, for example.
>
>
>Takashi




More information about the Alsa-devel mailing list