summaryrefslogtreecommitdiffstats
path: root/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl
diff options
context:
space:
mode:
Diffstat (limited to 'meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl')
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf5
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf29
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf111
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf41
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf15
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua45
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf13
7 files changed, 259 insertions, 0 deletions
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf
new file mode 100644
index 000000000..7dc8938fc
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf
@@ -0,0 +1,5 @@
+context.properties = {
+ # F=fatal, E=critical, W=warning, N=notice, I=info, D=debug, T=trace
+ # See https://pipewire.pages.freedesktop.org/wireplumber/daemon/logging.html
+ log.level = "N"
+}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf
new file mode 100644
index 000000000..d029887df
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf
@@ -0,0 +1,29 @@
+# This configuration fragment sets up the split-instance profiles to include
+# the standard "embedded" configuration of running systemwide without
+# maintaining user state across reboots.
+# In addition, runtime settings support is disabled on the device monitor
+# instances, as it depends on the "sm-settings" metadata, which lives on the
+# policy instance. In containerized setups (such as the IC demo), the policy
+# instance runs in a container and the device monitors should not wait for it
+# or depend on it in any other way.
+
+wireplumber.profiles = {
+ policy = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ }
+
+ audio = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+
+ bluetooth = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+
+ video-capture = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf
new file mode 100644
index 000000000..9af95413b
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf
@@ -0,0 +1,111 @@
+# Default AGL WirePlumber ALSA monitor configuration
+
+monitor.alsa.rules = [
+ #
+ # Bump priority of well-known output devices
+ # Higher priority means it gets selected as the default if it's present
+ #
+
+ # USB output
+ {
+ matches = [
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.driver = "USB-Audio"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 1300
+ priority.session = 1300
+ }
+ }
+ }
+
+ # USB input
+ {
+ matches = [
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.driver = "USB-Audio"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 2300
+ priority.session = 2300
+ }
+ }
+ }
+
+ # well-known internal output devices
+ {
+ matches = [
+ # ak4613
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "ak4613"
+ api.alsa.pcm.device = "0"
+ }
+ # imx8mq
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "wm8524audio"
+ }
+ # rcarsound
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "rcarsound"
+ api.alsa.pcm.device = "0"
+ }
+ # rpi3
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.pcm.name = "bcm2835 ALSA"
+ }
+ # nanopc-t6
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "realtekrt5616co"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 1100
+ priority.session = 1100
+ }
+ }
+ }
+
+ # well-known internal input devices
+ {
+ matches = [
+ # ak4613
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "ak4613"
+ }
+ # imx8mq
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "wm8524audio"
+ }
+ # rcarsound
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "rcarsound"
+ }
+ # nanopc-t6
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "realtekrt5616co"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 2100
+ priority.session = 2100
+ }
+ }
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf
new file mode 100644
index 000000000..db5b20dc2
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf
@@ -0,0 +1,41 @@
+# Default AGL WirePlumber Bluetooth monitor configuration
+
+monitor.bluez.properties = {
+ ## HFP/HSP backend (default: native).
+ ## Available values: any, none, hsphfpd, ofono, native
+ bluez5.hfphsp-backend = "ofono"
+}
+
+monitor.bluez.rules = [
+ {
+ matches = [
+ {
+ ## This matches all bluetooth devices.
+ device.name = "~bluez_card.*"
+ }
+ ]
+ actions = {
+ update-props = {
+ ## Auto-connect as headset/sink on start up or when only partial
+ ## profiles have connected.
+ bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink ]
+ }
+ }
+ }
+
+ # Make output a2dp stream nodes go through the Multimedia sink
+ # We cannot match on "media.class" here because this property
+ # is not known before the node is created
+ {
+ matches = [
+ {
+ api.bluez5.profile = "a2dp-source"
+ }
+ ]
+ actions = {
+ update-props = {
+ media.role = "Multimedia"
+ }
+ }
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf
new file mode 100644
index 000000000..93687501c
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf
@@ -0,0 +1,15 @@
+wireplumber.profiles = {
+ # Run on the "audio" instance, which runs the ALSA monitor on the host
+ audio = {
+ agl.script.pipewire-ic-ipc.alsa-suspend = required
+ }
+}
+
+wireplumber.components = [
+ # Mutes ALSA sinks when requested by pipewire-ic-ipc
+ {
+ name = alsa-suspend.lua, type = script/lua
+ provides = agl.script.pipewire-ic-ipc.alsa-suspend
+ requires = [ api.mixer ]
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua
new file mode 100644
index 000000000..55edd12cf
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua
@@ -0,0 +1,45 @@
+-- WirePlumber
+--
+-- This script mutes all ALSA sinks when the "suspend.playback" metadata
+-- key is set to 1; compliments pipewire-ic-ipc and the respective support
+-- for handling "suspend.playback" in the policy scripts
+--
+-- Copyright © 2021 Collabora Ltd.
+-- @author George Kiagiadakis <george.kiagiadakis@collabora.com>
+--
+-- SPDX-License-Identifier: MIT
+
+mixer_api = Plugin.find("mixer-api")
+
+nodes_om = ObjectManager {
+ Interest { type = "node",
+ Constraint { "media.class", "matches", "Audio/Sink" },
+ Constraint { "object.path", "matches", "alsa:pcm:*" },
+ },
+}
+
+metadata_om = ObjectManager {
+ Interest { type = "metadata",
+ Constraint { "metadata.name", "=", "default" },
+ }
+}
+
+metadata_om:connect("object-added", function (om, metadata)
+ metadata:connect("changed", function (m, subject, key, t, value)
+ if key == "suspend.playback" then
+ local suspended = (value == "1")
+
+ Log.info(string.format("%s ALSA nodes for IC sound",
+ suspended and "muting" or "unmuting"))
+
+ for n in nodes_om:iterate() do
+ mixer_api:call("set-volume", n["bound-id"], {
+ ["mute"] = suspended,
+ })
+ end
+ end
+ end)
+end)
+
+nodes_om:activate()
+metadata_om:activate()
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf
new file mode 100644
index 000000000..950e6a5d2
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf
@@ -0,0 +1,13 @@
+<!-- This configuration file specifies the required security policies
+ for wireplumber to talk to system bluetooth-related services. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+ <policy user="pipewire">
+ <allow send_destination="org.bluez"/>
+ <allow send_destination="org.ofono"/>
+ </policy>
+
+</busconfig>