aports: add soc-fairphone-fp6-audio (topology, amp config, UCM)

Files copied byte-identical from the tested dev phone; installed to the
exact deployed paths (the spaced tplg/UCM filenames come from the machine
driver's card name). Wired into the image via extra_packages.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jorijn van der Graaf 2026-08-08 20:48:28 +02:00
commit 719a10a997
7 changed files with 141 additions and 3 deletions

View file

@ -73,8 +73,9 @@ with the `aports/` overlay in this repository:
## Roadmap
- [ ] End-to-end pipeline validation (`build.sh` has TODO(validate) markers)
- [ ] Speaker-audio userspace files (AudioReach topology + UCM; firmware
redistribution being sorted out)
- [x] End-to-end pipeline validation (first complete image built 2026-08-08)
- [x] Speaker-audio userspace files (`soc-fairphone-fp6-audio`: topology,
amp config, UCM — byte-identical to the tested dev-phone set; blob
provenance to be settled before this repo goes public)
- [ ] imsd 0.3.0 tag (aport currently needs it published)
- [ ] Nightly schedule once the first dispatched run is green

View file

@ -0,0 +1,38 @@
# Audio userspace files for the Fairphone 6 that no upstream package ships
# yet: the AudioReach topology (built from Catcrafts/audioreach-topology
# branch fp6), the AW88261 amp config blob, and the UCM profile. Files are
# byte-identical to the ones deployed and tested on the development FP6.
# The tplg/UCM target filenames contain spaces, hence the safe source names.
maintainer="Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>"
pkgname=soc-fairphone-fp6-audio
pkgver=1
pkgrel=0
pkgdesc="Fairphone 6 audio topology, amp firmware and UCM profile"
url="https://forgejo.catcrafts.net/Catcrafts/audioreach-topology"
arch="noarch"
license="BSD-3-Clause"
options="!check"
source="
fp6-tplg.bin
aw88261_acf.bin
ucm-milos-fp6.conf
HiFi.conf
"
package() {
install -Dm644 "$srcdir"/fp6-tplg.bin \
"$pkgdir/usr/lib/firmware/qcom/milos/Fairphone (Gen. 6)-tplg.bin"
install -Dm644 "$srcdir"/aw88261_acf.bin \
"$pkgdir"/usr/lib/firmware/qcom/milos/fairphone/fp6/aw88261_acf.bin
install -Dm644 "$srcdir"/ucm-milos-fp6.conf \
"$pkgdir/usr/share/alsa/ucm2/conf.d/milos/Fairphone (Gen. 6).conf"
install -Dm644 "$srcdir"/HiFi.conf \
"$pkgdir"/usr/share/alsa/ucm2/Fairphone/fp6/HiFi.conf
}
sha512sums="
51071c574b9f5899c78ba9fe1b6f3bbda2195e6d274014a05869ae56ed0ff18e15678bd7d78cd68846900d3c579556328e229842152cffd943186d43344ed33c fp6-tplg.bin
a84b0595ae71b0bb594034a9f5fd77b984c9086cd917f32524c4b5172bc72a426e5d188d18dbccdb587f66d60fa15cad441fffcd48a3a1ce66335199b61e0350 aw88261_acf.bin
3bb268f9fcb8d1c0b42741b67da42b6361bab259e7211d9930919995ebe7dcf67826e6d4f00ff5e4fe5b52067fe90d00212158c3b4879d1bee481e87f0623206 ucm-milos-fp6.conf
2a189c3141fedc43f8eb19f4df1e43487223d524e27da3f948556d224cca1f493f6815ada191953fb79a19d5c5abadb21de7b3ece7b74b0929338c216e21e84a HiFi.conf
"

View file

@ -0,0 +1,86 @@
SectionVerb {
Value {
TQ "HiFi"
}
EnableSequence [
cset "name='SEN_MI2S_RX Audio Mixer MultiMedia1' 1"
cset "name='MultiMedia2 Mixer TX_CODEC_DMA_TX_3' 1"
]
}
SectionDevice."Speaker" {
Comment "Internal stereo speakers (2x AW88261)"
EnableSequence [
cset "name='Amplifier L PCM Playback Volume' 352"
cset "name='Amplifier R PCM Playback Volume' 352"
]
DisableSequence [
cset "name='Amplifier L PCM Playback Volume' 0"
cset "name='Amplifier R PCM Playback Volume' 0"
]
Value {
PlaybackPriority 100
PlaybackPCM "hw:${CardId},0"
}
}
SectionDevice."Mic" {
Comment "Handset microphone (AMIC1, bottom edge)"
# WCD9378 ADC1 -> SoundWire -> TX macro DEC0 -> TX_CODEC_DMA_TX_3.
# 'TX SMIC MUX0' takes the mux item name SWR_MIC0, not the
# SWR_INPUT0 widget it routes from.
#
# The codec-side controls only exist when the stock wcd9378
# driver owns the TX slave. With the SDCA-class prototype driver
# (sdca-mobile branch) the codec bring-up happens in the kernel
# on PDE power-up and the card exposes no codec controls; only
# the TX macro half of the sequence applies then.
If.codec {
Condition {
Type ControlExists
Control "name='ADC1 MUX'"
}
True {
EnableSequence [
cset "name='ADC1 MUX' CH1_AMIC1"
cset "name='ADC1 Switch' 1"
cset "name='ADC1 Volume' 12"
cset "name='TX0 MODE' ADC_NORMAL"
cset "name='TX0 SEQUENCER Switch' 1"
cset "name='TX SMIC MUX0' SWR_MIC0"
cset "name='TX DEC0 MUX' SWR_MIC"
cset "name='TX_DEC0 Volume' 84"
cset "name='TX_AIF1_CAP Mixer DEC0' 1"
]
DisableSequence [
cset "name='TX_AIF1_CAP Mixer DEC0' 0"
cset "name='TX0 SEQUENCER Switch' 0"
cset "name='ADC1 Switch' 0"
cset "name='TX SMIC MUX0' ZERO"
]
}
False {
EnableSequence [
cset "name='TX SMIC MUX0' SWR_MIC0"
cset "name='TX DEC0 MUX' SWR_MIC"
cset "name='TX_DEC0 Volume' 84"
cset "name='TX_AIF1_CAP Mixer DEC0' 1"
]
DisableSequence [
cset "name='TX_AIF1_CAP Mixer DEC0' 0"
cset "name='TX SMIC MUX0' ZERO"
]
}
}
Value {
CapturePriority 100
CapturePCM "hw:${CardId},1"
}
}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,11 @@
Syntax 4
SectionUseCase."HiFi" {
File "/Fairphone/fp6/HiFi.conf"
Comment "HiFi quality Music"
}
BootSequence [
cset "name='Amplifier L PCM Playback Volume' 352"
cset "name='Amplifier R PCM Playback Volume' 352"
]

View file

@ -75,6 +75,7 @@ git clone -q --depth=1 "$PMAPORTS_REPO" "$WORK/pmaports"
rm -rf "$WORK/pmaports/device/testing/linux-postmarketos-qcom-milos" \
"$WORK/pmaports/main/postmarketos-config-nftables"
cp -r aports/device/linux-postmarketos-qcom-milos "$WORK/pmaports/device/testing/"
cp -r aports/device/soc-fairphone-fp6-audio "$WORK/pmaports/device/"
cp -r aports/main/postmarketos-config-nftables "$WORK/pmaports/main/"
cp -r aports/modem/imsd "$WORK/pmaports/modem/"
@ -109,6 +110,7 @@ aports = $WORK/pmaports
device = fairphone-fp6
ui = plasma-mobile
systemd = always
extra_packages = soc-fairphone-fp6-audio
EOF
pmbootstrap checksum linux-postmarketos-qcom-milos