diff mbox series

[master/wrynose,v2,3/4] recipes-multimedia: Add wireplumber audio configuration

Message ID 20260916160547.1287287-4-p-bhagat@ti.com
State New
Headers show
Series Add PipeWire audio stack | expand

Commit Message

Paresh Bhagat Sept. 16, 2026, 4:05 p.m. UTC
Extend the wireplumber recipe to enable the session manager on all
plaorms and provide AM62D2 EVM specific audio initialization.
A set-audio-defaults.sh script is packaged to configure default audio
sinks and sources at runtime, managed by a dedicated systemd service
that runs after wireplumber starts.

Signed-off-by: Paresh Bhagat <p-bhagat@ti.com>
---
 .../wireplumber/wireplumber-arago.inc         | 25 +++++++++++++++
 .../wireplumber/set-audio-defaults.service    | 21 ++++++++++++
 .../wireplumber/set-audio-defaults.sh         | 32 +++++++++++++++++++
 .../wireplumber/wireplumber_%.bbappend        |  4 +++
 4 files changed, 82 insertions(+)
 create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
 create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
 create mode 100755 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
 create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend

Comments

Yogesh Hegde Sept. 17, 2026, 9:20 a.m. UTC | #1
Hi Paresh, 

On 21:35-20260916, Paresh Bhagat wrote:
> Extend the wireplumber recipe to enable the session manager on all
> plaorms and provide AM62D2 EVM specific audio initialization.
> A set-audio-defaults.sh script is packaged to configure default audio
> sinks and sources at runtime, managed by a dedicated systemd service
> that runs after wireplumber starts.
> 
> Signed-off-by: Paresh Bhagat <p-bhagat@ti.com>
> ---
>  .../wireplumber/wireplumber-arago.inc         | 25 +++++++++++++++
>  .../wireplumber/set-audio-defaults.service    | 21 ++++++++++++
>  .../wireplumber/set-audio-defaults.sh         | 32 +++++++++++++++++++
>  .../wireplumber/wireplumber_%.bbappend        |  4 +++
>  4 files changed, 82 insertions(+)
>  create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
>  create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
>  create mode 100755 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
>  create mode 100644 meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend
> 
> diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
> new file mode 100644
> index 00000000..c90107b4
> --- /dev/null
> +++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
> @@ -0,0 +1,25 @@
> +PR:append = ".arago1"
> +
> +FILESEXTRAPATHS:prepend:am62dxx-evm := "${THISDIR}/wireplumber:"
> +
> +SRC_URI:append:am62dxx-evm = " \
> +    file://set-audio-defaults.sh \
> +    file://set-audio-defaults.service \
> +"
> +
> +do_install:append:am62dxx-evm() {
> +    install -d ${D}${bindir}
> +    install -m 0755 ${UNPACKDIR}/set-audio-defaults.sh ${D}${bindir}/
> +
> +    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
> +        install -d ${D}${systemd_system_unitdir}
> +        install -m 0644 ${UNPACKDIR}/set-audio-defaults.service ${D}${systemd_system_unitdir}/
> +    fi
> +}
> +
> +SYSTEMD_SERVICE:${PN}:append = " wireplumber.service"
> +SYSTEMD_SERVICE:${PN}:append:am62dxx-evm = " set-audio-defaults.service"
> +
> +FILES:${PN} += " \
> +    ${bindir} \
> +"

Adding the whole ${bindir} folder to the package is not the standard, use ${bindir}/set-audio-defaults.sh and limit it to only am62dxx-evm. 

> diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
> new file mode 100644
> index 00000000..191b89f5
> --- /dev/null
> +++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
> @@ -0,0 +1,21 @@
> +[Unit]
> +Description=Set PipeWire Default Audio Devices
> +# Wait for pipewire and wireplumber services to be started
> +After=pipewire.service wireplumber.service
> +# Ensure udev has settled so audio devices are available
> +After=systemd-udev-settle.service

Using systemd-udev-settle.service is not recommended [0]. Please use
appropriate `.device` dependency. 

> +Wants=pipewire.service wireplumber.service
> +
> +[Service]
> +Type=oneshot
> +ExecStart=/usr/bin/set-audio-defaults.sh
> +StandardOutput=append:/var/log/set-audio-defaults-output.log
> +StandardError=append:/var/log/set-audio-defaults-error.log
> +RemainAfterExit=yes
> +TimeoutStartSec=90
> +# Restart on failure with delay
> +Restart=on-failure
> +RestartSec=5
> +
> +[Install]
> +WantedBy=multi-user.target
> diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
> new file mode 100755
> index 00000000..49be177e
> --- /dev/null
> +++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
> @@ -0,0 +1,32 @@
> +#!/bin/sh
> +
> +# Wait for WirePlumber to be ready
> +i=1
> +while [ "$i" -le 30 ]; do
> +    wpctl status >/dev/null 2>&1 && break
> +    sleep 1
> +    i=$((i + 1))
> +done
> +
> +# Additional delay for nodes to appear
> +sleep 2
> +
> +# Find audio sink ID
> +SINK_ID=$(pw-cli info alsa_audio_sink 2>/dev/null | head -n 1 | awk '{print $2}')
> +if [ -n "$SINK_ID" ]; then
> +    wpctl set-default "$SINK_ID"
> +    echo "Set default sink to ID: $SINK_ID (alsa_audio_sink)"
> +else
> +    echo "Could not find alsa_audio_sink"
> +fi
> +
> +# Find audio source ID
> +SOURCE_ID=$(pw-cli info alsa_audio_source 2>/dev/null | head -n 1 | awk '{print $2}')
> +if [ -n "$SOURCE_ID" ]; then
> +    wpctl set-default "$SOURCE_ID"
> +    echo "Set default source to ID: $SOURCE_ID (alsa_audio_source)"
> +else
> +    echo "Could not find alsa_audio_source"
> +fi
> +
> +echo "Done"
> diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend
> new file mode 100644
> index 00000000..541b2963
> --- /dev/null
> +++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend
> @@ -0,0 +1,4 @@
> +WIREPLUMBER_ARAGO = ""
> +WIREPLUMBER_ARAGO:arago = "wireplumber-arago.inc"
> +
> +require ${WIREPLUMBER_ARAGO}

[0]: https://www.freedesktop.org/software/systemd/man/latest/systemd-udev-settle.service.html?__goaway_challenge=meta-refresh&__goaway_id=2f5c485c56371e4d518938d3bebe4b33&__goaway_referer=https%3A%2F%2Fwww.google.com%2F

-- Yogesh
diff mbox series

Patch

diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
new file mode 100644
index 00000000..c90107b4
--- /dev/null
+++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber-arago.inc
@@ -0,0 +1,25 @@ 
+PR:append = ".arago1"
+
+FILESEXTRAPATHS:prepend:am62dxx-evm := "${THISDIR}/wireplumber:"
+
+SRC_URI:append:am62dxx-evm = " \
+    file://set-audio-defaults.sh \
+    file://set-audio-defaults.service \
+"
+
+do_install:append:am62dxx-evm() {
+    install -d ${D}${bindir}
+    install -m 0755 ${UNPACKDIR}/set-audio-defaults.sh ${D}${bindir}/
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${systemd_system_unitdir}
+        install -m 0644 ${UNPACKDIR}/set-audio-defaults.service ${D}${systemd_system_unitdir}/
+    fi
+}
+
+SYSTEMD_SERVICE:${PN}:append = " wireplumber.service"
+SYSTEMD_SERVICE:${PN}:append:am62dxx-evm = " set-audio-defaults.service"
+
+FILES:${PN} += " \
+    ${bindir} \
+"
diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
new file mode 100644
index 00000000..191b89f5
--- /dev/null
+++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.service
@@ -0,0 +1,21 @@ 
+[Unit]
+Description=Set PipeWire Default Audio Devices
+# Wait for pipewire and wireplumber services to be started
+After=pipewire.service wireplumber.service
+# Ensure udev has settled so audio devices are available
+After=systemd-udev-settle.service
+Wants=pipewire.service wireplumber.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/set-audio-defaults.sh
+StandardOutput=append:/var/log/set-audio-defaults-output.log
+StandardError=append:/var/log/set-audio-defaults-error.log
+RemainAfterExit=yes
+TimeoutStartSec=90
+# Restart on failure with delay
+Restart=on-failure
+RestartSec=5
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
new file mode 100755
index 00000000..49be177e
--- /dev/null
+++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber/set-audio-defaults.sh
@@ -0,0 +1,32 @@ 
+#!/bin/sh
+
+# Wait for WirePlumber to be ready
+i=1
+while [ "$i" -le 30 ]; do
+    wpctl status >/dev/null 2>&1 && break
+    sleep 1
+    i=$((i + 1))
+done
+
+# Additional delay for nodes to appear
+sleep 2
+
+# Find audio sink ID
+SINK_ID=$(pw-cli info alsa_audio_sink 2>/dev/null | head -n 1 | awk '{print $2}')
+if [ -n "$SINK_ID" ]; then
+    wpctl set-default "$SINK_ID"
+    echo "Set default sink to ID: $SINK_ID (alsa_audio_sink)"
+else
+    echo "Could not find alsa_audio_sink"
+fi
+
+# Find audio source ID
+SOURCE_ID=$(pw-cli info alsa_audio_source 2>/dev/null | head -n 1 | awk '{print $2}')
+if [ -n "$SOURCE_ID" ]; then
+    wpctl set-default "$SOURCE_ID"
+    echo "Set default source to ID: $SOURCE_ID (alsa_audio_source)"
+else
+    echo "Could not find alsa_audio_source"
+fi
+
+echo "Done"
diff --git a/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend
new file mode 100644
index 00000000..541b2963
--- /dev/null
+++ b/meta-arago-distro/recipes-multimedia/wireplumber/wireplumber_%.bbappend
@@ -0,0 +1,4 @@ 
+WIREPLUMBER_ARAGO = ""
+WIREPLUMBER_ARAGO:arago = "wireplumber-arago.inc"
+
+require ${WIREPLUMBER_ARAGO}