[alsa-devel] Intel HDA / ca0132: Multichannel + S/PDIF support

Takashi Iwai tiwai at suse.de
Tue Jan 6 10:47:14 CET 2015


At Tue, 06 Jan 2015 02:06:36 +0100,
Stefan Oltmanns wrote:
> 
> Am 05.01.2015 um 09:05 schrieb Takashi Iwai:
> > At Sun, 04 Jan 2015 22:26:44 +0100,
> > Stefan Oltmanns wrote:
> >>
> >> Am 04.01.2015 um 21:33 schrieb Dylan Reid:
> >>> On Sat, Jan 3, 2015 at 2:43 AM, Stefan Oltmanns <stefan-oltmanns at gmx.net> wrote:
> >>>> Am 03.01.2015 um 02:30 schrieb Dylan Reid:
> >>>>> On Tue, Dec 30, 2014 at 8:05 AM, Stefan Oltmanns
> >>>>> <stefan-oltmanns at gmx.net> wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> I own a Gigabyte G1.Sniper M3 Z77 mainboard with ca0132 onboard audio.
> >>>>>> Currently only stereo out and headphone out (at the back, always same
> >>>>>> signal) work by default.
> >>>>>> I was able to fix S/PDIF out by changing the headphone pin in function
> >>>>>> ca0132_config to something below 0x0d, like:
> >>>>>>
> >>>>>> spec->out_pins[1] = 0x0a;
> >>>>>>
> >>>>>> No idea why this fixes S/PDIF, but no other effects noticed. No idea if
> >>>>>> it´s going to break something on other devices. Original value is 0x10.
> >>>>>>
> >>>>>> In this function also 3 DACs are listed. The board has a total of 5
> >>>>>> stereo outputs:
> >>>>>>
> >>>>>> -Frontpanel (HDA pin connector on mainboard)
> >>>>>> 4x 3,5mm output at backpanel:
> >>>>>> -Stereo out
> >>>>>> -Headphone out
> >>>>>> -Rear out
> >>>>>> -Center/LFE out
> >>>>>>
> >>>>>> I tried to increase the number of channels and create additional outputs
> >>>>>> and connected to the other DACs. The maximum I´m able to is to get
> >>>>>> different signals out of stereo out and front headphone (not useful,
> >>>>>> just some weird mixes) or same signal from all 3 outputs. Rear and c/lfe
> >>>>>> out always no signal.
> >>>>>>
> >>>>>> During initialization snd_hda_parse_pin_def_config is called and two
> >>>>>> outputs are found. I tried to override that and change spec->autocfg
> >>>>>> after that function is called, no success.
> >>>>>> Also no matter what I change there, a little later I get this kernel
> >>>>>> messages:
> >>>>>>
> >>>>>> kernel: [    2.642972] input: HDA Intel PCH Line Out as
> >>>>>> /devices/pci0000:00/0000:00:1b.0/sound/card0/input8
> >>>>>> kernel: [    2.643142] input: HDA Intel PCH Front Headphone as
> >>>>>> /devices/pci0000:00/0000:00:1b.0/sound/card0/input7
> >>>>>> kernel: [    2.644932] input: HDA Intel PCH Line as
> >>>>>> /devices/pci0000:00/0000:00:1b.0/sound/card0/input6
> >>>>>> kernel: [    2.645050] input: HDA Intel PCH Mic as
> >>>>>> /devices/pci0000:00/0000:00:1b.0/sound/card0/input5
> >>>>>>
> >>>>>> I could not find the code where this messages are generated, where is that?
> >>>>>>
> >>>>>> Any ideas what I could/should try to get multichannel support working?
> >>>>>> Is there any kind of documentation on the ca0132 that could be helpful?
> >>>>>
> >>>>> A lot of these capabilities need to be exposed by the DSP on the
> >>>>> ca0132.  What firmware are you loading on it?
> >>>>
> >>>> I tried the one included and none, makes no difference for that problem.
> >>>> Also the firmware gets loaded after all the input/output configuration,
> >>>> you´re sure the firmware is needed for multichannel support? Is it
> >>>> possible/legal to extract it from the windows driver somehow?
> >>>>
> >>>
> >>> I'm not sure you need the DSP to do this.  You could try the widows
> >>> firmware, but I don't think the driver will know how to communicate
> >>> with it.
> >>> Sorry I don't have anything more encouraging.
> >>>
> >>
> >> The firmware seems to be directly included in the driver (file is called
> >> ctHda.sys), as I can find the byte sequence MXFL many times in it (this
> >> is how the ctefx.bin file starts). Unfortunately it does not even to be
> >> in one part (there are strings in between). Is there any information
> >> available of the file format of the firmware, like header structure, so
> >> I can find out length of it?
> >>
> >> Still the question remains, the input/outputs seem to be generated
> >> before the firmware is loaded, how is that done? How does the driver
> >> know that there are this 4 I/Os and that they are named like that?
> >> That´s not from the patch_ca1032.c. I cannot find any code for that.
> > 
> > It's parsed from the pin-default config values set by the hardware.
> > In the case of onboard audio, usually this is set by BIOS.
> > Stand-alone boards should set it by themselves, too.
> > 
> > The SPDIF I/O itself has worked even without the DSP (but some volume
> > controls didn't), IIRC, at least on a Recon3D board I've tested in the
> > past.
> > 
> > Reassigning the pin is the right fix for your board.  The correct way
> > would be to add a fixup entry depending on the PCI or codec SSID.
> > 
> > 
> > thanks,
> > 
> > Takashi
> > 
> 
> I was able to extract the firmware from the windows driver, it is loaded
> without any problem "ca0132 DOWNLOAD OK :-) DSP IS RUNNING"
> Unfortunately after that no analog output at all, digital out is still
> working.

You still need your patch, right?  Or does it work without patching if
the firmawre is loaded?

> I tried the inputs, while device 0,0 gives me digital silence, device
> 0,2 (mic 2) is only analog silence (there is some very silent random
> background noise), so there is an ADC working (tried both inputs-> no
> success).
> There is still no difference at all in the I/Os found. Where/how are
> this fix-up entries done? Is there an good example for a similar device?

Looking back at patch_ca0132, I have to correct my memory.  The pins
are hard-coded there, and this might be a part of the problem.
We need a bit more surgery there...


Takashi


More information about the Alsa-devel mailing list