[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