The Panther Lake XPS 13 (audio subsystem 1028:0e54) drives all of its
speakers through two CS35L56 amplifiers behind the CS42L43 codec. Their
DSP firmware aliases (cs35l56-b2-dsp1-misc-10280e54-spkid{1,2,3}) were
added to linux-firmware on 2026-08-18 and ship in Arch's
linux-firmware-cirrus 20260910-2, but the stable channel's Arch snapshot
is still on 20260810-2. Without them the amps run ROM firmware and the
machine is completely silent; upstream 7.2 already selects the sidecar
amplifier path for this SSID, so no kernel change is involved.
Ship the 20260910-2 payload to stable as a self-retiring shim:
- fast ring, no upstream watch (sync: false): the version is deliberately
20260810-3, above the snapshot's 20260810-2 and below Arch's real
20260910-2, so the genuine package supersedes it in the same
transaction that upgrades linux-firmware-other once the snapshot
advances. Bumping pkgver would defeat that.
- the signed Arch package is verified against the Arch packager key in
keys/pgp/ and reinstalled as-is, minus the cs42l45 SDCA tree that Arch
moved out of linux-firmware-other in 20260910: on the stable snapshot
those 190 files are still owned by -other 20260810-2 and would
conflict. The nine 10280e54 links and the 39 new SDCA files are kept.
Verified on a DX13260: cold boot loads 10280e54-spkid1 v4.5.9 on both
amps with "Calibration applied", and a 440 Hz tone measured through the
internal microphones peaks 238x over the noise floor on the stock UCM
bridge route. Delete this recipe once stable's snapshot carries
linux-firmware >= 20260910.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
64 lines
2.9 KiB
Bash
64 lines
2.9 KiB
Bash
# Maintainer: Spencer Bull <spencerbull2554@gmail.com>
|
|
#
|
|
# Self-retiring shim: ships Arch's linux-firmware-cirrus 20260910-2 payload to
|
|
# the stable channel while stable's pinned Arch snapshot is still on
|
|
# linux-firmware 20260810-2 (which lacks the Dell XPS 13 DX13260 / 1028:0e54
|
|
# CS35L56 amplifier firmware aliases, leaving that machine's speakers silent).
|
|
#
|
|
# Nothing is rebuilt. The signed Arch package is verified against the Arch
|
|
# packager key and its payload reinstalled as-is, minus the files that Arch
|
|
# moved out of linux-firmware-other in 20260910 (the cs42l45 SDCA tree): on
|
|
# the stable snapshot those are still owned by linux-firmware-other 20260810-2
|
|
# and would conflict, so they are left to that package.
|
|
#
|
|
# Versioning is deliberate: 20260810-3 orders above the snapshot's 20260810-2
|
|
# and BELOW Arch's real 20260910-2, so as soon as the stable snapshot advances
|
|
# pacman replaces this shim with the genuine package in the same transaction
|
|
# that upgrades linux-firmware-other, and nothing is lost. Delete this recipe
|
|
# once stable's snapshot is at linux-firmware >= 20260910.
|
|
|
|
pkgname=linux-firmware-cirrus
|
|
pkgver=20260810
|
|
pkgrel=3
|
|
_fwver=20260910
|
|
_fwrel=2
|
|
_basever=20260810
|
|
_baserel=2
|
|
pkgdesc="Firmware files for Linux - Firmware for Cirrus Logic audio devices (Arch - payload, stable-snapshot shim)"
|
|
arch=('any')
|
|
url="https://gitlab.com/kernel-firmware/linux-firmware"
|
|
license=('LicenseRef-WHENCE' 'LicenseRef-cirrus')
|
|
depends=('linux-firmware-whence')
|
|
options=('!strip' '!debug')
|
|
_cirrus="linux-firmware-cirrus-${_fwver}-${_fwrel}-any.pkg.tar.zst"
|
|
_other="linux-firmware-other-${_basever}-${_baserel}-any.pkg.tar.zst"
|
|
source=(
|
|
"https://archive.archlinux.org/packages/l/linux-firmware-cirrus/${_cirrus}"
|
|
"https://archive.archlinux.org/packages/l/linux-firmware-cirrus/${_cirrus}.sig"
|
|
"https://archive.archlinux.org/packages/l/linux-firmware-other/${_other}"
|
|
"https://archive.archlinux.org/packages/l/linux-firmware-other/${_other}.sig"
|
|
)
|
|
noextract=("${_cirrus}" "${_other}")
|
|
sha256sums=('70100c551b079bd8abec3d9c96a16defd04766b2a4afc6d7be9128d37e9840f7'
|
|
'SKIP'
|
|
'b0f016ee0d0532b977211b0cbb630bca75184f68a9ace82675eb3cf9acce4f6c'
|
|
'SKIP')
|
|
# Jan Alexander Steffens (heftig) <heftig@archlinux.org>, Arch Linux packager
|
|
validpgpkeys=('83BC8889351B5DEBBB68416EB8AC08600F108CDF')
|
|
|
|
package() {
|
|
# Payload only; makepkg regenerates .PKGINFO/.MTREE/.BUILDINFO.
|
|
bsdtar -xf "${srcdir}/${_cirrus}" -C "${pkgdir}" \
|
|
--exclude='.PKGINFO' --exclude='.MTREE' --exclude='.BUILDINFO' \
|
|
--exclude='.INSTALL' --exclude='.CHANGELOG'
|
|
|
|
# Drop every file the snapshot's linux-firmware-other still owns.
|
|
local f
|
|
while IFS= read -r f; do
|
|
[[ -e "${pkgdir}/${f}" || -L "${pkgdir}/${f}" ]] && rm -f "${pkgdir}/${f}"
|
|
done < <(bsdtar -tf "${srcdir}/${_other}" | grep -v '^\.' | grep -v '/$')
|
|
|
|
# Remove directories emptied by the step above.
|
|
find "${pkgdir}/usr/lib/firmware" -depth -type d -empty -delete
|
|
}
|