System info:
- Device: MacBook Air (M1, 2020) — device class
j313ap, product type MacBookAir10,1
- Distro: Ubuntu Asahi (Ubuntu Desktop 26.04)
- Kernel:
7.0.0-1002-asahi-arm
- RAM: 8GB
Summary:
On fresh install, no audio playback device is present (aplay -l returns empty). Kernel log shows the machine driver stuck waiting on the headphone jack codec:
platform sound: deferred probe pending: snd-soc-macaudio: parsing CODEC DAI of link 'Headphone Jack' at /sound/dai-link@1/codec
Devicetree inspection (dtc -I fs -O dts /proc/device-tree) shows the codec node correctly identifies as:
codec@48 {
interrupts = <0xb7 0x08>;
interrupt-parent = <0x3f>;
#sound-dai-cells = <0x00>;
reset-gpios = <0x4b 0x0b 0x00>;
sound-name-prefix = "Jack";
compatible = "cirrus,cs42l83";
reg = <0x48>;
cirrus,ts-inv = <0x01>;
phandle = <0xbf>;
};
Root cause identified: the kernel ships a snd_soc_cs42l84 module by default, whose driver only matches compatible = "cirrus,cs42l84" — it does not match cs42l83, so it never even attempts to bind (zero related dmesg output).
After manually loading the correct driver:
sudo modprobe snd_soc_cs42l83_i2c
The correct module (snd-soc-cs42l83-i2c, confirmed present at /lib/modules/$(uname -r)/kernel/sound/soc/codecs/snd-soc-cs42l83-i2c.ko.zst) does bind to the device, but fails at the ID-read stage:
[ 2.791242] cs42l83 0-0048: supply VA not found, using dummy regulator
[ 2.801979] cs42l83 0-0048: supply VP not found, using dummy regulator
[ 2.822129] cs42l83 0-0048: supply VCP not found, using dummy regulator
[ 2.856673] cs42l83 0-0048: supply VD_FILT not found, using dummy regulator
[ 2.857329] cs42l83 0-0048: supply VL not found, using dummy regulator
[ 2.865112] cs42l83 0-0048: Failed to read device ID: -6
System info:
j313ap, product typeMacBookAir10,17.0.0-1002-asahi-armSummary:
On fresh install, no audio playback device is present (
aplay -lreturns empty). Kernel log shows the machine driver stuck waiting on the headphone jack codec:Devicetree inspection (
dtc -I fs -O dts /proc/device-tree) shows the codec node correctly identifies as:Root cause identified: the kernel ships a
snd_soc_cs42l84module by default, whose driver only matchescompatible = "cirrus,cs42l84"— it does not matchcs42l83, so it never even attempts to bind (zero related dmesg output).After manually loading the correct driver:
sudo modprobe snd_soc_cs42l83_i2c
The correct module (
snd-soc-cs42l83-i2c, confirmed present at/lib/modules/$(uname -r)/kernel/sound/soc/codecs/snd-soc-cs42l83-i2c.ko.zst) does bind to the device, but fails at the ID-read stage: