On Wed, Oct 06, 2010 at 09:16:01AM +0530, Siju George wrote:

> $ mixerctl -av
> outputs.dig-dac-0:1_sou=hdaudio  [ hdaudio adc-0:1 ]
> inputs.dac-0:1_mute=off  [ off on ]
> inputs.dac-0:1=248,248
> inputs.dac-2:3_mute=off  [ off on ]
> inputs.dac-2:3=248,248
> inputs.dac-4:5_mute=off  [ off on ]
> inputs.dac-4:5=248,248
> inputs.mix_source=dac-0:1,mix3,sel8,cd,sel7  { dac-0:1 mix3 sel8 cd sel7 }
> inputs.mix2_source=mix  { mix }
> outputs.mix3_mute=off  [ off on ]
> inputs.mix3_source=dac-2:3,dac-4:5  { dac-2:3 dac-4:5 }
> inputs.hp_source=mix  [ mix dac-2:3 dac-4:5 ]
> inputs.line-grn_source=mix  [ mix dac-2:3 ]
> inputs.line-blu_source=dac-2:3  [ dac-2:3 mix ]
> inputs.line-pnk_source=dac-4:5  [ dac-4:5 mix2 ]
> inputs.sel6_source=mic  [ mic line-in line-pnk line-pnk mix4 mix5 mix6 mix7 ]
> outputs.sel6=255,255
> inputs.sel7_source=line-in  [ line-in line-blu mic ]
> inputs.sel8_source=sel6  [ sel6 mix8 ]
> record.adc-0:1_source=sel8  [ sel8 cd sel7 mix mix2 ]
> record.adc-0:1_mute=off  [ off on ]
> record.adc-0:1=255,255
> inputs.sel8_mute=off  [ off on ]
> inputs.sel8=248,248
> inputs.cd_mute=off  [ off on ]
> inputs.cd=248,248
> inputs.sel7_mute=off  [ off on ]
> inputs.sel7=248,248
> outputs.hp_mute=off  [ off on ]
> outputs.hp=248,248
> outputs.hp_boost=off  [ off on ]
> outputs.line-grn_mute=off  [ off on ]
> outputs.line-grn=248,248
> outputs.line-grn_boost=off  [ off on ]
> outputs.line-grn_eapd=on  [ off on ]
> outputs.line-blu_mute=off  [ off on ]
> outputs.line-blu=248,248
> outputs.line-blu_dir=output  [ none output input ]
> outputs.line-pnk_mute=off  [ off on ]
> outputs.line-pnk=248,248
> outputs.line-pnk_dir=output  [ none output input input-vr0 input-vr50
> input-vr80 ]
> outputs.mic_dir=input-vr80  [ none input input-vr0 input-vr50 input-vr80 ]
> outputs.line-in_dir=input  [ none input input-vr0 input-vr50 input-vr80 ]
> outputs.SPDIF_source=dig-dac-0:1  [ dig-dac-0:1 ]
> inputs.mix4_source=mic,line-pnk  { mic line-pnk }
> inputs.mix5_source=mic,line-in  { mic line-in }
> inputs.mix6_source=line-pnk,line-in  { line-pnk line-in }
> inputs.mix7_source=mic,line-pnk,line-in  { mic line-pnk line-in }
> inputs.mix8_source=sel6  { sel6 }
> outputs.hp_sense=unplugged  [ unplugged plugged ]
> outputs.line-grn_sense=plugged  [ unplugged plugged ]
> outputs.line-blu_sense=plugged  [ unplugged plugged ]
> outputs.line-pnk_sense=unplugged  [ unplugged plugged ]
> outputs.mic_sense=unplugged  [ unplugged plugged ]
> outputs.line-in_sense=unplugged  [ unplugged plugged ]
> outputs.master=255,255
> outputs.master.mute=off  [ off on ]
> outputs.master.slaves=dac-0:1,hp,line-grn  { dac-0:1 dac-2:3 dac-4:5
> mix3 sel6 sel8 cd sel7 hp line-grn line-blu line-pnk }
> record.volume=255,255
> record.volume.mute=off  [ off on ]
> record.volume.slaves=adc-0:1  { adc-0:1 }
> outputs.mode=analog  [ analog digital ]
> $

first, 'line-pnk' is almost certainly the rear mic input, and 'mic'
is the front mic input.  let's stick with the rear jacks for now.

so you want this:
> outputs.line-pnk_dir=output  [ none output input input-vr0 input-vr50
> input-vr80 ]

to get to this:
> record.adc-0:1_source=sel8  [ sel8 cd sel7 mix mix2 ]

first step, set line-pnk to be a mic input:

$ mixerctl outputs.line-pnk=input-vr80

I bet that's what kills it for other OSes.  shame on the BIOS vendor for
naming it like that and shame on the board vendor for using such a silly
codec.  anyway ...

now we want to see what line-pnk can feed into:

$ mixerctl -v | grep '_source=.*line-pnk'
inputs.sel6_source=mic  [ mic line-in line-pnk line-pnk mix4 mix5 mix6 mix7 ]
inputs.mix4_source=mic,line-pnk  { mic line-pnk }
inputs.mix6_source=line-pnk,line-in  { line-pnk line-in }
inputs.mix7_source=mic,line-pnk,line-in  { mic line-pnk line-in }

hmm, we're trying to get to
> record.adc-0:1_source=sel8  [ sel8 cd sel7 mix mix2 ]
but none of sel6, mix4, mix6 or mix7 are choices.  let's see what sel6
can feed:
$ mixerctl -v | grep '_source=.*sel6'
inputs.sel8_source=sel6  [ sel6 mix8 ]
inputs.mix8_source=sel6  { sel6 }

aha, we can have line-pnk -> sel6 -> sel8 -> adc-0:1, and that appears
to be the shortest routing (there are others, but ignore those for now).

there's only one more thing to change:

$ mixerctl inputs.sel6_source=line-pnk

now, it's strange there are two line-pnk choices for sel6_source.
that's really a bug in azalia(4).  oh well.  most likely, one is the
jack itself and one is an amp.  it's hard to tell, even with a
datasheet, what's really going on, as nodes can be labeled by the BIOS.
I'm guessing you don't have the code to the BIOS.  you could build a
kernel with AZALIA_DEBUG defined and get a better picture.

anyway, I think that's all you should have to do to record from the rear
mic jack:

$ mixerctl outputs.line-pnk_dir=input-vr80
$ mixerctl inputs.sel6_source=line-pnk
$ mixerctl inputs.sel8_source=sel6
$ mixerctl record.adc-0:1_source=sel8

alternatively, to get around the "double line-pnk choice" in sel6, route
through mix4 instead:

$ mixerctl outputs.line-pnk_dir=input-vr80
$ mixerctl inputs.mix4=line-pnk,mic
$ mixerctl inputs.sel6_source=mix4
$ mixerctl inputs.sel8_source=sel6
$ mixerctl record.adc-0:1_source=sel8

that actually will record from both the front and rear mic jacks
simultaneously, assuming the front panel is connected correctly.

and, if the front panel is connected correctly, this might work for
recording from the front mic:

$ mixerctl inputs.sel7_source=mic
$ mixerctl record.adc-0:1_source=sel7

all this assumes everything is labeled correctly by the BIOS.  if neither
of the above works, build a kernel with AZALIA_DEBUG defined and send
the resulting dmesg, then we'll look at the datasheet and see what's
going on.

-- 
jake...@sdf.lonestar.org
SDF Public Access UNIX System - http://sdf.lonestar.org

Reply via email to