[alsa-devel] HDA cs8409 codec support

Joël Krähemann weedlight at gmail.com
Tue May 16 14:41:03 CEST 2017


Hi again

Excuse me. It is a macbook pro 2016 model 13,1
and the codec of the HDA soundcard is a Cirrus
Logic 8409

bests,
Joël



On Tue, May 16, 2017 at 2:29 PM, Joël Krähemann <weedlight at gmail.com> wrote:
> Hi all
>
> First I was working with the cirrus datasheet of the wm8850
> codec to get a better understanding of verbs and how a vendor
> specific implementation might look like.
>
> Now, I am seeking for a working pin configuration. Thus I have
> created a systemd start script which does for the 17 reboots it
> does try a different firmware configuration.
>
> It adjust different pins with the headphone address and does
> the appropriate pin complex configure as such.
>
> In the beginning I tried to configure hp and speaker at the very
> same time. As a continues configuration block. But now I think
> it is easier to do it separately.
>
> My biggest issue is to understand vendor coefficients and GPIO.
> The following vendor coefficient enables pins 0, 2 and 3.
>
> static const struct hda_verb cs8409_coef_init_verbs[] = {
>   { 0x01, AC_VERB_SET_POWER_STATE, 0x00 }, /* AFG: D0 */
>   { 0x47, AC_VERB_SET_PROC_STATE, 0x1 },
>   { 0x47, AC_VERB_SET_COEF_INDEX, 0x3 },
>   { 0x47, AC_VERB_SET_PROC_COEF, 0x146a },
>   { 0x47, AC_VERB_SET_COEF_INDEX, 0x0033 },
>   { 0x47, AC_VERB_SET_PROC_COEF, 0x0001 },
>   { 0x47, AC_VERB_SET_COEF_INDEX, 0x0034 },
>   { 0x47, AC_VERB_SET_PROC_COEF, 0x1c01 },
>   {} /* terminator */
> };
>
> I think the coefficient index 0x3 is responsible for it. What is
> the difference between enabling data pins by coefficient on
> vendor node 0x47 and by appropriate verb on node 0x1
> audio configuration group?
>
> I didn't have the chance to study the generic HDA driver. One of
> my faults was enabling streams during early firmware patching,
> thought. Since the datasheet says it shall be the last called verbs
> of a configuration sequence.
>
> During early firmware patching I configured certain nodes as
> speaker left and right. But I am unsure what shall happen during
> early firmware patching and what does the generic driver.
>
> Here is a piece of my systemd start script what configures speaker
> left:
>
> # power D0
> printf "0x%02x 0x705 0x0\n" $nid >> /lib/firmware/hda-jack-retask.fw
> # set processing state on
> printf "0x%02x 0x3 0x1\n" $nid >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x706 0x10\n" $nid >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x70c 0x2\n" $nid >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x773 0x0\n" $nid >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x705 0x00\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x707 0x45\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x708 0x80\n" $pin >> /lib/firmware/hda-jack-retask.fw
> # EAPD/BTL enable
> printf "0x%02x 0x70c 0x2\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x71c 0x10\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x71d 0x0\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x71e 0x17\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x71f 0x43\n" $pin >> /lib/firmware/hda-jack-retask.fw
> printf "0x%02x 0x724 0x3\n" $nid >> /lib/firmware/hda-jack-retask.fw
> # enable stream 1 channel 0
> printf "0x%02x 0x2 0x4011\n" $nid >> /lib/firmware/hda-jack-retask.fw
>
>
> Bests,
> Joël
>
>
> On Tue, May 16, 2017 at 7:38 AM, Takashi Iwai <tiwai at suse.de> wrote:
>> On Sun, 14 May 2017 02:16:18 +0200,
>> Joël Krähemann wrote:
>>>
>>> Hi all
>>>
>>> First of all, I am new to kernel programming and an other attempt
>>> already failed to do so.
>>>
>>> However I got familiar with the Intel HDA Codec specification. So I
>>> did a start script to log dmesg and mixer controls of different
>>> configurations.
>>>
>>> But I am not sure if I got a functional kernel driver setup to test
>>> things. It seems there is something wrong.
>>>
>>> The codec has 8 GPIOs and first I didn't set any mask within the
>>> kernel. Now, I just compile a kernel set it to 0xff.
>>>
>>> Any help is appreciated. Finally here is my work:
>>>
>>> https://github.com/joelkraehemann/hda-tool/
>>
>> Well, from your description, it's not clear at all what you've tested
>> on which machine, what result you got, and what still doesn't work.
>>
>> How about to begin with explaining from that?  Not many people have
>> crystal balls and can't help you without the proper explanation.
>>
>>
>> Takashi


More information about the Alsa-devel mailing list