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

Stefan Oltmanns stefan-oltmanns at gmx.net
Tue Jan 6 23:23:18 CET 2015


Am 06.01.2015 um 10:47 schrieb Takashi Iwai:
> 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 non-modified driver with the new frimware, S/PDIF not
working (nothing is working).


>> 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...

I got analog stereo audio working again by changeing spec->out_pins[0]
to anything between 0x1 and 0x4 (function ca0132_config). With 0x5 I get
a mono downmix ("speaker-test -D hw:0,0 -c 2" gives a constant signal on
both channels). Values above 0x5 result in no output all.
I only get output from stereo out and headphone out (always same
signal). I also tried increasing number of channels, same weird downmix
as before.
I looked into the inf file of the windows driver to see if there are
some settings like pin ids in plaintext (unfortunately no), but what I
noticed lspci reports the device as 8086:1e20, the windows driver is for
1102:0011. Subsys is in both cases 1458a016. Why the difference?

Stefan



More information about the Alsa-devel mailing list