From d8b390202b7d1f47b1c8e1ddbfc6bdb408a4e264 Mon Sep 17 00:00:00 2001 From: Connor Eliffe <connor@inclementaviary.uk> Date: Sun, 9 Mar 2025 21:52:30 +0000 Subject: [PATCH] device-amazon-biscuit: add alsa and pulseaudio configs - Add UCM2 configurations for biscuit - Add udev rule to switch headphone output - Add asound config - Add pulseaudio configs This commit provides a basic pulseaudio setup for biscuit. The device appears to only support 48kHz audio. Resampled 44kHz audio crackles and pops currently due to the buffer underrunning. Some more tweaking may be needed to improve audio playback quality. Part-of: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6304 [ci:skip-build]: already built successfully in CI --- .../99-biscuit-hp-switch.rules | 2 + device/testing/device-amazon-biscuit/APKBUILD | 44 ++++++++++++++++++- .../testing/device-amazon-biscuit/asound.conf | 9 ++++ .../pulse-daemon-biscuit.conf | 5 +++ .../pulse-default-biscuit.pa | 1 + .../device-amazon-biscuit/ucm2/HiFi.conf | 36 +++++++++++++++ .../device-amazon-biscuit/ucm2/init.conf | 35 +++++++++++++++ .../ucm2/mt8163_biscuit.conf | 12 +++++ 8 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 device/testing/device-amazon-biscuit/99-biscuit-hp-switch.rules create mode 100644 device/testing/device-amazon-biscuit/asound.conf create mode 100644 device/testing/device-amazon-biscuit/pulse-daemon-biscuit.conf create mode 100644 device/testing/device-amazon-biscuit/pulse-default-biscuit.pa create mode 100644 device/testing/device-amazon-biscuit/ucm2/HiFi.conf create mode 100644 device/testing/device-amazon-biscuit/ucm2/init.conf create mode 100644 device/testing/device-amazon-biscuit/ucm2/mt8163_biscuit.conf diff --git a/device/testing/device-amazon-biscuit/99-biscuit-hp-switch.rules b/device/testing/device-amazon-biscuit/99-biscuit-hp-switch.rules new file mode 100644 index 00000000000..89c14ba7995 --- /dev/null +++ b/device/testing/device-amazon-biscuit/99-biscuit-hp-switch.rules @@ -0,0 +1,2 @@ +SUBSYSTEM=="switch", ACTION=="change", ENV{SWITCH_NAME}=="h2w", ENV{SWITCH_STATE}=="0", RUN+="/usr/bin/alsaucm -c mt-snd-card set _verb HiFi set _enadev Speaker" +SUBSYSTEM=="switch", ACTION=="change", ENV{SWITCH_NAME}=="h2w", ENV{SWITCH_STATE}=="1", RUN+="/usr/bin/alsaucm -c mt-snd-card set _verb HiFi set _enadev Headphones" diff --git a/device/testing/device-amazon-biscuit/APKBUILD b/device/testing/device-amazon-biscuit/APKBUILD index 6012308ce80..a54c52e65e9 100644 --- a/device/testing/device-amazon-biscuit/APKBUILD +++ b/device/testing/device-amazon-biscuit/APKBUILD @@ -1,7 +1,7 @@ # Reference: <https://postmarketos.org/devicepkg> pkgname=device-amazon-biscuit pkgdesc="Amazon Echo Dot (2nd gen)" -pkgver=2 +pkgver=3 pkgrel=0 url="https://postmarketos.org" license="MIT" @@ -12,14 +12,26 @@ depends=" mtk-mkimage mkbootimg postmarketos-base + alsa-ucm-conf " makedepends="devicepkg-dev" source=" deviceinfo + asound.conf + 99-biscuit-hp-switch.rules + pulse-daemon-biscuit.conf + pulse-default-biscuit.pa + ucm2/init.conf + ucm2/HiFi.conf + ucm2/mt8163_biscuit.conf led.start led.stop " +subpackages=" + $pkgname-pulseaudio:pulseaudio +" + build() { devicepkg_build $startdir $pkgname } @@ -28,10 +40,40 @@ package() { devicepkg_package $startdir $pkgname install -Dm755 "$srcdir"/led.start "$pkgdir"/etc/local.d/led.start install -Dm755 "$srcdir"/led.stop "$pkgdir"/etc/local.d/led.stop + + # ALSA configs + install -Dm644 "$srcdir"/asound.conf "$pkgdir"/etc/asound.conf + install -Dm644 -t "$pkgdir"/usr/share/alsa/ucm2/MediaTek/mt8163_biscuit/ \ + "$srcdir"/init.conf \ + "$srcdir"/HiFi.conf \ + "$srcdir"/mt8163_biscuit.conf + mkdir -p "$pkgdir"/usr/share/alsa/ucm2/conf.d/mt-snd-card/ + ln -s ../../MediaTek/mt8163_biscuit/mt8163_biscuit.conf \ + "$pkgdir"/usr/share/alsa/ucm2/conf.d/mt-snd-card/mt-snd-card.conf + + # Speaker/HP switch rule + install -Dm644 "$srcdir"/99-biscuit-hp-switch.rules \ + "$pkgdir"/usr/lib/udev/rules.d/99-biscuit-hp-switch.rules +} + +pulseaudio() { + pkgdesc="PulseAudio Configuration Files" + install_if="$pkgname=$pkgver-r$pkgrel pulseaudio" + install -Dm644 "$srcdir"/pulse-daemon-biscuit.conf \ + "$subpkgdir"/etc/pulse/daemon.conf.d/daemon-biscuit.conf + install -Dm644 "$srcdir"/pulse-default-biscuit.pa \ + "$subpkgdir"/etc/pulse/default.pa.d/default-biscuit.pa } sha512sums=" ac9ac01dc69a6434bf0f6210df7960e3dee5ddcec96829cc6e9a5a100fededa1fd9fa935cee364026c6913506b0ff3975087ea786216279c74190d869d1f5150 deviceinfo +dd379fea44560b3b89dc19521096fd8c019ad69f0d06072ae3b9a591db4178d9268fc38ed2e7371d86c4ff5845c857ca0af6932abe205ea38492cf8dd39fd770 asound.conf +68cb37bbd1d8c653a7a20fc641b6041e2b2f60825e77f7ef79856d5624c2a41a5bddfdeaba07dec955e91c024e15d3663e30456df1c73571295183942e486fec 99-biscuit-hp-switch.rules +acc93ffeaa7dc8e57af7432dba2aee5ec339166064d898d0db1c1d8f0ad887fb6ab986168d145b739cabd04e15f59484ec037487511cc1f0a0e31ab94e6189f7 pulse-daemon-biscuit.conf +d66d6f2129f8aef4449137a1506fb3b3a1275c98502238537ac4dd0c174145706bac971e7e100d3599c9b8aa9c62319c302884d39aad5ba99c9bdcbe1e54bc23 pulse-default-biscuit.pa +5f46b2f7f9dbbd445b6a70f8ad7e4753bd105e802a05b8693f38283f6705ce233f4173db3cdd945eaf54caaa08f8d9b8a35266186ad72edcdd34e37901121104 init.conf +e92f07b643ce6e26259038a7b3b1f4a2ac7e6113717b0384fe4cb33946bf6a0e45e6609a5baf7ab2de8c941159e7f11610101609647e817165b07fca72be6e51 HiFi.conf +c93349fc1fb797ecc8bc7756837c970aa83c7d8cf281e5afd8f0a243ea2f3c7772a3f383a3deeecfb140954bbedb34d00b3ae0172ae7814b14af0fcac71355a5 mt8163_biscuit.conf a72f042f5afdb4d47d22c46906cee4d84a23584bc719bfec99678251a6e7784fdfb67c284ecafd11721f7c90783a93283957c43ad845a1ff586b0610234523a3 led.start d10a06899a48a090042047a9b4917604a0d408701f6e15fc559a5f8444d61f91a3b6c201cbdb227ae0f19d1dff3424e40c41e32e2e91f37b9a69f6e0bd67eb30 led.stop " diff --git a/device/testing/device-amazon-biscuit/asound.conf b/device/testing/device-amazon-biscuit/asound.conf new file mode 100644 index 00000000000..cf6a0b8dc0f --- /dev/null +++ b/device/testing/device-amazon-biscuit/asound.conf @@ -0,0 +1,9 @@ +pcm.!default { + type asym + playback.pcm "hw:0,23" +} + +ctl.!default { + type hw + card 0 +} diff --git a/device/testing/device-amazon-biscuit/pulse-daemon-biscuit.conf b/device/testing/device-amazon-biscuit/pulse-daemon-biscuit.conf new file mode 100644 index 00000000000..8a17b92f83e --- /dev/null +++ b/device/testing/device-amazon-biscuit/pulse-daemon-biscuit.conf @@ -0,0 +1,5 @@ +resample-method = trivial +exit-idle-time = -1 +default-sample-rate = 48000 +default-fragments = 16 +default-fragment-size-msec = 50 diff --git a/device/testing/device-amazon-biscuit/pulse-default-biscuit.pa b/device/testing/device-amazon-biscuit/pulse-default-biscuit.pa new file mode 100644 index 00000000000..7397be65cf5 --- /dev/null +++ b/device/testing/device-amazon-biscuit/pulse-default-biscuit.pa @@ -0,0 +1 @@ +unload-module module-suspend-on-idle diff --git a/device/testing/device-amazon-biscuit/ucm2/HiFi.conf b/device/testing/device-amazon-biscuit/ucm2/HiFi.conf new file mode 100644 index 00000000000..e6f6a0f3269 --- /dev/null +++ b/device/testing/device-amazon-biscuit/ucm2/HiFi.conf @@ -0,0 +1,36 @@ +SectionDevice."Speaker" { + Comment "Speaker" + + Value { + PlaybackPriority 200 + PlaybackPCM "hw:${CardId},23" + PlaybackRate 48000 + } + + EnableSequence [ + cset "name='Ext_Speaker_Amp_Switch' On" + cset "name='Ignore Ramp Up' Off" + cset "name='Audio_DacMux_Setting' Off" + cset "name='Right Channel Only' On" + cset "name='HP Driver Gain Volume' 6" + cset "name='PCM Playback Volume' 127,127" + ] +} + +SectionDevice."Headphones" { + Comment "Headphones/Line Out" + + Value { + PlaybackPriority 100 + PlaybackPCM "hw:${CardId},23" + } + + EnableSequence [ + cset "name='Ext_Speaker_Amp_Switch' Off" + cset "name='Ignore Ramp Up' On" + cset "name='HP Driver Gain Volume' 11" + cset "name='Audio_DacMux_Setting' On" + cset "name='Right Channel Only' Off" + ] +} + diff --git a/device/testing/device-amazon-biscuit/ucm2/init.conf b/device/testing/device-amazon-biscuit/ucm2/init.conf new file mode 100644 index 00000000000..3dbe341c798 --- /dev/null +++ b/device/testing/device-amazon-biscuit/ucm2/init.conf @@ -0,0 +1,35 @@ +FixedBootSequence [ + cset "name='ADC_A Left Ip Select ADC_A DIF1_L switch' 1" + cset "name='ADC_A Right Ip Select ADC_A DIF1_R switch' 1" + cset "name='ADC_B Left Ip Select ADC_B DIF1_L switch' 1" + cset "name='ADC_B Right Ip Select ADC_B DIF1_R switch' 1" + cset "name='ADC_C Left Ip Select ADC_C DIF1_L switch' 1" + cset "name='ADC_C Right Ip Select ADC_C DIF1_R switch' 1" + cset "name='ADC_D Left Ip Select ADC_D DIF1_L switch' 1" + cset "name='ADC_D Right Ip Select ADC_D DIF1_R switch' 1" + + cset "name='ADC_A MICPGA Volume Ctrl' 40" + cset "name='ADC_B MICPGA Volume Ctrl' 40" + cset "name='ADC_C MICPGA Volume Ctrl' 40" + cset "name='ADC_D MICPGA Volume Ctrl' 40" + + cset "name='ADC_A DIF1_L Input Gain' 0" + cset "name='ADC_A DIF1_R Input Gain' 0" + cset "name='ADC_B DIF1_L Input Gain' 0" + cset "name='ADC_B DIF1_R Input Gain' 0" + cset "name='ADC_C DIF1_L Input Gain' 0" + cset "name='ADC_C DIF1_R Input Gain' 0" + cset "name='ADC_D DIF1_L Input Gain' 0" + cset "name='ADC_D DIF1_R Input Gain' 0" + + cset "name='SpiTimeStamps' 0" + + cset "name='HPL Output Mixer L_DAC Switch' 1" + cset "name='HPR Output Mixer R_DAC Switch' 1" + + cset "name='Ext_Speaker_Amp_Switch' Off" + cset "name='Audio_DacMux_Setting' On" + cset "name='Ignore Ramp Up' Off" + cset "name='HP Driver Gain Volume' 0" + cset "name='biquad coefficients' 128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,128,0,1,0,0,0,0,0,0,0,0,0,0,0,0,127,247,0,0,128,9,0,0,127,239,0,0,0,17,0,0,0,17,0,0,127,222,0,0,15,0,0" +] diff --git a/device/testing/device-amazon-biscuit/ucm2/mt8163_biscuit.conf b/device/testing/device-amazon-biscuit/ucm2/mt8163_biscuit.conf new file mode 100644 index 00000000000..d1fd504aa9e --- /dev/null +++ b/device/testing/device-amazon-biscuit/ucm2/mt8163_biscuit.conf @@ -0,0 +1,12 @@ +Comment "MT8163 sound card for Amazon Echo Dot 2G (biscuit)" +Syntax 4 + +SectionUseCase."HiFi" { + File "/MediaTek/mt8163_biscuit/HiFi.conf" + Comment "Default" +} + +Include.card-init.File "/lib/card-init.conf" +Include.ctl-remap.File "/lib/ctl-remap.conf" +Include.init.File "/MediaTek/mt8163_biscuit/init.conf" + -- GitLab