Repository navigation
MacBookPro12,1 (2015): CS4208 woofers silent; Air pin map + ACP 4.0 dead analog #12217
Description
Summary
On a 2015 13" MacBook Pro (MacBookPro12,1) running Omarchy 4.0.4 / kernel 7.2.5-3-omarchy, internal tweeters work and internal woofers do not. Sound is thin/tinny. This is the same class of hardware quirk Omarchy already ships for other machines (e.g. install/hardware/lenovo/fix-yoga-pro7-bass-speakers.sh).
Hardware
- DMI:
MacBookPro12,1 - Codec: Cirrus Logic CS4208 (
0x10134208), subsystem0x106b7b00 - HDA controller: Intel Wildcat Point-LP
8086:9ca0, PCI subsystem8086:7270 - Four drivers: L/R tweeters (DAC
0x03→ pin0x12) and L/R woofers (DAC0x04→ pin0x13)
Root cause (kernel)
snd-hda-codec-cs420x matches PCI ID 8086:7270 as MacBook Air 7,2 and applies the MBA6 pin table, which sets pin 0x13 to 0x500000f0 (disabled). Tweeters-only is why it sounds tinny.
The same driver table has MacBookPro 12,1 → CS4208_MBP11 keyed on codec SSID 106b:7b00, but snd_hda_pick_fixup() uses PCI lookup, so MBA6 wins.
BIOS pin for the woofers is 0x13 0x90100112.
What we tried (isolated)
| Setup | Result |
|---|---|
| Stock analog-stereo (MBA6 pins) | Tweeters only. Works, tinny. |
Enable pin 0x13 (0x90100112 or 0x90100140), analog-stereo, Bass Speaker 100% |
Mixer/DAC 0x04 looks active (D0, unmuted, stream assigned). No audible bass. 200 Hz with tweeters muted: silence. 4 kHz: tweeters work. |
output:analog-surround-40 (api.alsa.path=surround40:1), Master up, no pin reconfig |
Both DACs look active. Complete silence (even tweeters). Not a PipeWire crash; converters were running. |
aplay -D hw:PCH,0 4-channel, energy only on ch2/ch3 (woofers) |
PipeWire stopped. User reported a possible faint low tone. Worth treating hw: 4ch as a different path from ACP surround40. |
GPIO0 (speaker EAPD) is on whenever tweeters work. Enabling GPIO1 as well did not make muted-tweeter 200 Hz audible.
Suggested Omarchy workaround
Same pattern as the Yoga bass-speaker install hook: match MacBookPro12,1 and ship:
- HDA firmware patch restoring pin
0x13(woofers present in mixer). - Do not select ACP
analog-surround-40on this codec — it is analog-silent even when DACs look busy. - Stay on analog-stereo for tweeters until a working 4ch
hw:(notsurround40) path is proven. - Optional: document that macOS-style crossover/EQ is still missing.
Happy to turn this into install/hardware/apple/fix-mbp12-speakers.sh if you want the hook.
Upstream
The durable fix is in sound/hda/codecs/cirrus/cs420x.c: cs4208_mac_fixup_tbl should match codec SSID 106b:7b00 for MacBookPro 12,1 instead of letting PCI 8086:7270 select MBA6. Extra DAC analog bring-up for pin 0x13 may still be required; exposing Bass Speaker / 4.0 is not enough on 7.2.
System
- Omarchy 4.0.4-1
linux-omarchy7.2.5-3- PipeWire 1.6.x, analog-stereo default
Activity
TRIBUSeric commentedon Sep 17, 2026
Follow-up: raw
hw:PCH,04-channel is analog-silent on the woofers too.Isolated test: pro-audio profile,
api.alsa.path=hw:PCH,0, 4ch FL/FR/RL/RR, simple upmix. Tweeters muted (Speakermixer), Bass Speaker 100%, 250 Hz for 6s. DAC0x04was D0, unmuted, stream on channel 2. Acoustic result: silence.So this is not limited to ACP
surround40:1. Both the extra-out copy on analog-stereo and explicit 4chhw:leave the woofer DAC looking busy and the drivers silent. Tweeters on analog-stereo still work.We’ve put the machine back on analog-stereo (tweeters only).
the-lerhin commentedon Oct 3, 2026
Follow-up from another MacBookPro12,1: codec ground truth + why the woofers stay silent
Same machine as the report (
MacBookPro12,1, CS42080x10134208, codec SSID106b:7b00,controller
8086:9ca0/ PCI SSID8086:7270). Omarchy 4.0.4-1, kernel7.2.5-4-omarchy.I went one level deeper into the codec and can add hard data to this issue.
1. The Air pin map is confirmed as a real, separate bug
model=,mbp11(forced on card1 — the model array is per HDA controller, so the plainmodel=mbp11that fixes the iMac lands on the HDMI controller instead) gives:vs
line_outs=1 (0x12)under the8086:7270quirk. So yes — keying the CS4208 quirk on thegeneric Intel PCI SSID really is what drops the second speaker pin here (see omarchy-pkgs#510).
2. Ground-truth EFI codec capture (driverless, via MMIO)
Booted once with
snd_hda_intelblacklisted and read the CS4208 over the controller'simmediate-command registers (
ICOI/ICII/ICIS) — i.e. the state EFI leaves before Linux touchesthe link. Compared against the driver's state afterwards:
0x1f0x330x340x180x030x12/0x13…110/…112, ctl0x400x00/0x01/0x010x01/0x01/0x01So EFI leaves the codec clock-locked with both speaker pins enabled, and it is the
driver bring-up that changes exactly three coefficients. This is the same failure signature
@thomas-shirley documented on MacBook8,1 (
0x1f:0x0good,0x400latched clock fault).Restoring the EFI values of
0x33/0x34at runtime did not wake the woofers, and0x1fcannot be cleared while the driver is bound (writing
0x0reads back0x400) — also matchingthat write-up.
3. The clock fault is preventable on 12,1 — but it does not fix the woofers
I built the two non-TDM parts of the MacBook8,1 fix against 7.2.5 (both patches are
hardware-gated on our exact IDs, so they compiled unmodified):
snd-hda-intel→ attach to the live EFI link without reset (hda_intel_init_chip(chip, false))for
8086:9ca0/ ssid8086:7270; dmesg showsMacBook8,1: attaching to running EFI link without reset.snd-hda-codec-generic→ skipinit_aamix_paths/init_analog_input/init_input_src/init_digitalfor
vendor_id 0x10134208(as on the 8,1 this is what re-latches the fault even without the reset).options snd-hda-intel single_cmd=1 power_save=0.Result:
coef 0x1f = 0x0end-to-end — the latch is gone, first time the codec has stayedclock-locked under Linux here. So the "prevent the latch, don't repair it" strategy genuinely
applies to this board too.
But the woofers still produce no sound. With the clean codec state, force-routed 150 Hz into
the woofer DAC only (
analog-surround-40, tone only inRL/RR, both ALSA controls untouched):Acoustic result: silence (tweeter path still works). So neither the Air pin map, nor routing,
nor the clock fault is what keeps the woofers quiet.
(Side note for whoever picks this up: muting either ALSA control —
SpeakerorBass Speaker— silences the whole output, e.g. 3 kHz withBass Speakeroff is inaudible eventhough node
0x03's amp stays at0x7f. There is a shared output stage behind both controls, soper-DAC muting cannot be used to isolate the two drivers.)
4. Where I'd look next
On MacBook8,1 the CS4208 speakers are a 4-channel TDM stream into an external class-D amp
(
converter 0x0a → pin 0x1d), not the analog DAC. This board exposes the same digital blocks(
0x0a/0x0b8-ch digital, pins0x1d/0x1e, vendor node0x24) even though the analog0x03/0x04 → 0x12/0x13path is what the auto-parser picks. It is worth checking whether the12,1 woofers actually sit on the TDM/class-D path and only the tweeters are analog — which
would explain why analog bring-up alone never reaches them. I did not test the TDM/
cs420xsideof the 8,1 fix here (it also rewrites the TDM
prepareand re-applies the 8,1 EFI coef image,and would have taken the machine further from stock while breaking the internal mic).
Reproduce / data
/etc/modprobe.d/cs4208-mbp121.conf→options snd-hda-intel model=,mbp11.pmgart/macbook8-1-debian-guideaudio/diagnostics/read-clock-driverless.py(adapted; reads coefs
0x00..0x3f, GPIO, pins0x10/0x12/0x13).install.azx.driver.sh+install.generic.driver.shfromthomas-shirley/macbook8.1-speaker-driver, unmodified (their gates are hardware-ID based).Happy to test a candidate
cs420x/TDM patch if someone takes this on.omarchybot commentedon Oct 12, 2026
Checked against current
quattro(9480d1b) and the current kernel package in omacom/omarchy-pkgs. Claude Opus 5.5 did the diagnosis. Codex at medium effort reviewed it separately as a second opinion and agreed; it could not reach the GitHub API, so it read the issue body but not the comments, and its independence is not guaranteed. Nothing was reproduced: a VM has no CS4208, so this is a reading of the source and of the data in this thread, not a test.The Air pin map is confirmed in source, and it is Omarchy's own patch. The
8086:7270entries are not upstream. They are added bypkgbuilds/linux-omarchy-bore/0514-sound-fixes-2.patchin omarchy-pkgs, which is still onmaster(linux-omarchyis now a meta package forlinux-omarchy-bore). The patch putsSND_PCI_QUIRK(0x8086, 0x7270, "MacBookAir 7,2", CS4208_MAC_AUTO)incs4208_fixup_tblandSND_PCI_QUIRK(0x8086, 0x7270, "MacBookAir 7,2", CS4208_MBA6)incs4208_mac_fixup_tbl.snd_hda_pick_fixupmatches PCI subsystem IDs before it falls back to the codec subsystem ID. So whenCS4208_MAC_AUTOdoes its second lookup,8086:7270 → MBA6wins before the upstream106b:7b00 → MBP11entry for this machine is ever tried. That matches thepicked fixup … for PCI SSID 8086:7270andline_outs=1 (0x12)both of you saw. omacom/omarchy-pkgs#510 reports the same quirk silencing an iMac16,2. Fixing it means keying that entry on the MacBook Air's codec SSID instead, in omarchy-pkgs, which is outside what this bot works on.Fixing the pin map will not bring the woofers back on its own. @the-lerhin forced
mbp11, gotline_outs=2 (0x12/0x13), kept the codec clock-locked, and the woofers were still silent. So nothing here establishes why they stay quiet. The suggestion that the woofers sit on the CS4208 digital/TDM path (converter0x0a→ pin0x1d) rather than on DAC0x04→ pin0x13is plausible but untested on this model. It fits how the Late 2015 iMacs and the MacBook8,1 drive their speakers, but no one has yet played sound through0x0a→0x1don a MacBookPro12,1. The faint tone on rawhw:4-channel in the original report doesn't settle it either way.Nothing in
omarchyfixes this today.quattroships nothing for MacBookPro12,1 audio, and no open pull request covers it. #10458 and #12689 set iMac16,x speakers to Analog Surround 4.0, and both detectors exclude MacBookPro12,1. That is right, since surround-40 was silent here. I have not filed a hook. The install script suggested in the report would bring back the second pin but not the sound, so it would not fix the problem. Neither model found a duplicate issue in this repository.This waits on the maintainer for the
8086:7270quirk in omarchy-pkgs (tracked in omacom/omarchy-pkgs#510). The woofers stay open until someone shows sound through the digital path on this board.