Comment 19 for bug 1721987

Revision history for this message
In , tiwai (tiwai-linux-kernel-bugs) wrote :

(In reply to jcs from comment #7)
> Here is the magic sequence of CORB commands needed to enable both speakers.
> This is actually part of a much larger sequence that the Windows driver
> does, but through trial and error, this is the minimum required to make both
> speakers work.

That's great!

> I can attach the full PCI I/O and CORB logs if needed, but it's 4.6Mb.

If the minimal verbs work, it's fine without the full log.

> I have no idea what these commands do, but nid 0x6 is a DAC and 0x20 is a
> vendor-specific nid. It looks like the same sequence repeating over and
> over, but the params to 0x400 and 0x500 commands change slightly.

Right, NID 0x20 is the typical widget Realtek codecs use for accessing the COEFs.
NID 0x06 is the DAC, but the verb issued there (0x73e) looks like some non-standard one. Judging from the value used with the verb (0x00 and 0x80), it might be an extra AMP control or such.

The verb 0x500 and 0x400 are in a pair to set the COEF index and value, respectively.
The verb 0xc00 is the verb to read the COEF value of the current index.
So, it implies that Windows driver performs some reads & modify sequences.
But we cannot know which bits are actually tested, so we have to stick with the static values.

That is, likely you can remove the sequence 0x5xx:xx 0xCxx:xx.

BTW, the verb and the parameter compose 20bit values, so verb 0x4f0 param 0x00 is equivalent with the verb 0x400 param 0xf000.