diff options
Diffstat (limited to 'meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl')
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> |