I’ve not used my FW13 for a bit. Been on my desktop but got back on there and definitely wish the speakers were better. Any chance someone could document the verbs hw eq from the realtek datasheet? I probably won’t try to reverse it.
Thanks for this! This is now my preferred EQ that I’ve applied that’s minimized some of the distortion that I was getting when using my laptop as a temporary video player.
For others: this was done on my Framework 13 AMD Edition bought back in 2024. I’ll try to note which speaker version I’ve got the next time I open up it up.
Where are these being applied? It doesn’t seem like I can write to these using hda-verb and they are not listed in dumped coeffs?
Also if I try to read Node ID 0x53 for instance it returns something different each time and does not match the verbs above unfortunately. Seems rather strange.
Making some progress. Here is a dump from my hardware. It seems to match but the
05350000h
0 = codec
53 = Node ID
5 = Verb
0000 = parameter
Dump of my system for 0x53 and 0x54
+--------+-------+--------+-------+-------+
| NID | Index | Verb | Param | Value |
+--------+-------+--------+-------+-------+
| 0x53 | 0x00 | 0xc00 | 0x0 | 0x601a|
| 0x53 | 0x01 | 0xc00 | 0x0 | 0xc00 |
| 0x53 | 0x02 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x03 | 0xc00 | 0x0 | 0x1f61|
| 0x53 | 0x04 | 0xc00 | 0x0 | 0xfe43|
| 0x53 | 0x05 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x06 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x07 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x08 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x09 | 0xc00 | 0x0 | 0x200 |
| 0x53 | 0x0a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x0b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x0c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x0d | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x0e | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x0f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x10 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x11 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x12 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x13 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x14 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x15 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x16 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x17 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x18 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x19 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x1a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x1b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x1c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x1d | 0xc00 | 0x0 | 0x800 |
| 0x53 | 0x1e | 0xc00 | 0x0 | 0x800 |
| 0x53 | 0x1f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x20 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x21 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x22 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x23 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x24 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x25 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x26 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x27 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x28 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x29 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2d | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2e | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x2f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x30 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x31 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x32 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x33 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x34 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x35 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x36 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x37 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x38 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x39 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3d | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3e | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x3f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x40 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x41 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x42 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x43 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x44 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x45 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x46 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x47 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x48 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x49 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4d | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4e | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x4f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x50 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x51 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x52 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x53 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x54 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x55 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x56 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x57 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x58 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x59 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5a | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5b | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5c | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5d | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5e | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x5f | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x60 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x61 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x62 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x63 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x64 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x65 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x66 | 0xc00 | 0x0 | 0x0 |
| 0x53 | 0x67 | 0xc00 | 0x0 | 0x0 |
+--------+-------+--------+-------+-------+
+--------+-------+--------+-------+-------+
| NID | Index | Verb | Param | Value |
+--------+-------+--------+-------+-------+
| 0x54 | 0x00 | 0xc00 | 0x0 | 0x2000|
| 0x54 | 0x01 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x02 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x03 | 0xc00 | 0x0 | 0x1f61|
| 0x54 | 0x04 | 0xc00 | 0x0 | 0xfe43|
| 0x54 | 0x05 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x06 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x07 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x08 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x09 | 0xc00 | 0x0 | 0x200 |
| 0x54 | 0x0a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x0b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x0c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x0d | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x0e | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x0f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x10 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x11 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x12 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x13 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x14 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x15 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x16 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x17 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x18 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x19 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x1a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x1b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x1c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x1d | 0xc00 | 0x0 | 0x800 |
| 0x54 | 0x1e | 0xc00 | 0x0 | 0x800 |
| 0x54 | 0x1f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x20 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x21 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x22 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x23 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x24 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x25 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x26 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x27 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x28 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x29 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2d | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2e | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x2f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x30 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x31 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x32 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x33 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x34 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x35 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x36 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x37 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x38 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x39 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3d | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3e | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x3f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x40 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x41 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x42 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x43 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x44 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x45 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x46 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x47 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x48 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x49 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4d | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4e | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x4f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x50 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x51 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x52 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x53 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x54 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x55 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x56 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x57 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x58 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x59 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5a | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5b | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5c | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5d | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5e | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x5f | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x60 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x61 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x62 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x63 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x64 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x65 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x66 | 0xc00 | 0x0 | 0x0 |
| 0x54 | 0x67 | 0xc00 | 0x0 | 0x0 |
+--------+-------+--------+-------+-------+
Still playing around. You can apply the framework 16 eq and it sounds quite a bit different. Quieter though.
You need alsa-tools
sudo apt install alsa-tools
To apply framework 13 eq
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1F61
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xFE43
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x2000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1F61
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xFE43
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xE01A
sudo hda-verb /dev/snd/hwC1D0 0x20 0x500 0x0038
sudo hda-verb /dev/snd/hwC1D0 0x20 0x400 0x4909
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0006
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4C50
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0002
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4204
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x6F6F
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0001
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0xD790
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0009
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x51FF
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0006
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4E50
To apply framework 16 eq
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x219A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x219A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1CD0
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0012
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xD934
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0013
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x09FE
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0014
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xF405
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0015
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xDEB8
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0016
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x127A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0017
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1D18
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x2000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1CD0
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0012
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xD934
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0013
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x09FE
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0014
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xF405
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0015
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xDEB8
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0016
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x127A
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0017
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1D18
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xE19A
sudo hda-verb /dev/snd/hwC1D0 0x20 0x500 0x0038
sudo hda-verb /dev/snd/hwC1D0 0x20 0x400 0x7909
To disable fw13 eq
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201a
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201a
To enable fw13 eq
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xe01a
FW13 with Tempo 92HD95B Audio Codec
If you have an Intel Framework 13 with the Tempo 92HD95B audio codec the datasheet is publicly available and shows you that you can use bi-quad filters to set up EQ independently for the left and right speakers. I do not have an Intel mainboard and can’t this at all.
There are 5 bands of parametric EQ (bi-quad) per channel. Due to the flexibility of the bi-quad implementation, each filter band may be configured as a high-pass, low-pass, band-pass, high shelving, low shelving, or other function.
Each band has an independent set of coefficients. A bi-quad filter has 6 coefficients. One coefficient is normalized to 1 and 5 are programmed into the core. Each band supports up to +15dB boost or up to -36dB cut.
See pages 29, 204-207 of the datasheet for more information
FW13 with Realtek ALC295 Audio Codec
I believe all AMD mainboards and some early 11th gen mainboards use the Realtek ALC295. Unfortunately the datasheet for this is not public and there is basically zero information online outside of this thread about EQ.
Current understanding of ALC295 EQ:
------------
Node ID 0x53
------------
Index 0x0000
Bit 15 1000 0000 0000 0000 Update
Should be 0 unless you set to 1
Bit 14 0100 0000 0000 0000
0 EQ off
1 EQ on
Bit 13:0 0011 1111 1111 1111
I believe these bits enable or disable each filter
Disable EQ: set bit 15:14 to 0. 0x2XXX
Enable EQ: set bit 15:13 to 1. 0xEXXX
On State: register tends to read 0x6XXX
------------
Node ID 0x54
------------
Index 0x0000
Bit 15:1 Not sure what used for
Always set to 0x2000
FW13 EQ verbs
# First disable EQ twice probably for redundancy
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x201A
# Left Speaker
# Gains
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
# I believe this is A1 (Frequency?) and H0 (Gain) of a High Pass Filter
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1F61
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xFE43
# Right Speaker
# Enable right speaker EQ?
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x2000
# Gains
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
# I believe this is A1 (Frequency?) and H0 (Gain) of a High Pass Filter
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1F61
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xFE43
# Enable EQ
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xE01A
# First 4 bits seems to set some kind of gain/volume
# 4909 on FW13 and 7909 on FW16
sudo hda-verb /dev/snd/hwC1D0 0x20 0x500 0x0038
sudo hda-verb /dev/snd/hwC1D0 0x20 0x400 0x4909
# Doesn't seem to effect the EQ when testing
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0006
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4C50
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0002
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4204
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x6F6F
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0001
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0xD790
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0009
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x51FF
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x500 0x0006
sudo hda-verb /dev/snd/hwC1D0 0x5D 0x400 0x4E50
FW16 EQ verbs
# First disable EQ twice. Notice different EQ are enabled
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x219A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x219A
# Left Speaker
# Gains
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0800
# I believe this is A1 (Frequency?) and H0 (Gain) of a High Pass Filter
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1CD0
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x0000
# These seem to be additional filters
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0012
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xD934
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0013
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x09FE
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0014
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xF405
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0015
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xDEB8
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0016
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x127A
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0017
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0x1D18
# Right Speaker
# Enable right speaker EQ?
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x2000
# Gains
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001D
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x001E
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0800
# I believe this is A1 (Frequency?) and H0 (Gain) of a High Pass Filter
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0003
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1CD0
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0004
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x0000
# These seem to be additional filters
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0012
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xD934
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0013
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x09FE
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0014
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xF405
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0015
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0xDEB8
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0016
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x127A
sudo hda-verb /dev/snd/hwC1D0 0x54 0x500 0x0017
sudo hda-verb /dev/snd/hwC1D0 0x54 0x400 0x1D18
# Enable EQ
sudo hda-verb /dev/snd/hwC1D0 0x53 0x500 0x0000
sudo hda-verb /dev/snd/hwC1D0 0x53 0x400 0xE19A
# First 4 bits are processing
sudo hda-verb /dev/snd/hwC1D0 0x20 0x500 0x0038
sudo hda-verb /dev/snd/hwC1D0 0x20 0x400 0x7909
FW13 node id 0x53 index range testing
0x0003 HPF A1 cuts/pops/distorts < 0xe000 cuts/pops/distorts > 0x2000
0x0004 HPF H0 gain 0x8000 0X7FFF
0x0012 BPF Center? noise; freq increase as you get closer < 0xD700 noise; freq increase as you get closer> 0x3000
0x0013 BPF width? noise; freq increase as you get closer < 0x0a00 noise; freq increase as you get closer > 0x2000
0x0014 Gain?
0x0015 ??? cuts out < 0xcd87 0xffff
Notes/Observations
-
Looks like you can test each index to find out if it’s some kind of gain or some kind of coefficient for a filter.
-
The filters should map out to discrete enable bits in 0x53 0x0000 which would help figure out how many dang filters there are
-
ALC5642 is an older codec that has EQ information in it’s datasheet and is easily findable online. It has two EQ control registers and a EQ register that holds all the filters. It contains 2 HPF (A1 + gain), 4 BPF (A1, A2 and gain) and 1 LPF (A1 + gain). Gains: 2’s complement in 3.13 format. (The range is from –4~3.99, the H0 should be in -4 ~ 3.99). Coefficients: 2’s complement in 3.13 format. (The range is from –4~3.99, the a2 should be in -2 ~ 1.99). Though this 3.13 format and constrained range doesn’t seem to match ALC295.
-
It looks like the only filter on the FW13 seems to be a High Pass to reduce DC?
-
I set 0x53 0x0003 to 0x1000 and 0x53 0x0004 to 0x2000 and it matched REW HP1 EQ filter set to 5300Hz. Dark blue and purple lines.
Any chance someone who knows their stuff could do the same work for Framework 12?
What audio codec is the Framework 12?
That’s a good question. I’m not sure if it’s been mentioned what audio chip the FWL12 uses. There is no Schematic overview as of yet on github.
Unless someone with a FWL12 wants to give us the parts numbers of chips around the area, or Nrp swings by to drop info from sky (as he does sometimes
), we may have to wait.
Someone just needs to check driver information or audio information on linux likely. But there needs to be more digging first if it’s ALC295. Tempo you can create biquads and stuff em in.
Is this equivalent to GraceFu’s Edits Easy Effects profile?
The work ain’t completed yet. A lot of guessing still at the layout for the filters. I haven’t done much more work as it is rather laborious. Sucks that this information isn’t out there unlike the other chip they used in some other generations.
Ah I see, yeah I can imagine.
I wonder if Framework has contacted the vendor to get permission to share more information?
They gave the information to go on so far above. No additional responses though. Doubt Realtek will okay documentation release.
If you could post the commands to run to get the info you need for FW12, that would be great. I’m getting one for a friend soon, and it’ll have Linux on it.
I just checked with a friend, FW12 is using ALC285
$cat /proc/asound/card0/codec* | grep Codec
Codec: Realtek ALC285
Codec: Intel Raptor Lake P HDMI
@parawizard Is there anything I can do to help in figuring out those EQ verbs? FW13 with AI 300 Series mainboard here. I do have access to a UMIK-2 in case that is required.
Similar state with the FW13 that have the ALC295 then. No public documentation. Someone needs to trial and error to figure out the filters like I was doing above. Long tedious process without documentation. I wish Framework would use that other chip instead that has open documentation.

