diff --git a/.gitignore b/.gitignore
index 527e24f..628571a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/pulseaudio-11.1.tar.xz
+SOURCES/pulseaudio-13.99.1.tar.xz
diff --git a/.pulseaudio.metadata b/.pulseaudio.metadata
index 70ef86f..b853168 100644
--- a/.pulseaudio.metadata
+++ b/.pulseaudio.metadata
@@ -1 +1 @@
-53bde72b6bfe715c19b1519db8845f7a58346b67 SOURCES/pulseaudio-11.1.tar.xz
+3a8f0c81694eb423f7f9ab5f2cb16f81c0ffceb5 SOURCES/pulseaudio-13.99.1.tar.xz
diff --git a/SOURCES/0001-X11-Add-xauthority-parameter.patch b/SOURCES/0001-X11-Add-xauthority-parameter.patch
deleted file mode 100644
index 35cbd85..0000000
--- a/SOURCES/0001-X11-Add-xauthority-parameter.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From 2bb1f0dbd0772ba57ede8837c2f3856b4e7198c0 Mon Sep 17 00:00:00 2001
-From: Wim Taymans <wtaymans@redhat.com>
-Date: Thu, 12 Sep 2019 09:49:40 +0200
-Subject: [PATCH 1/3] X11: Add xauthority parameter
-
-Add an xauthority parameter and use it in the startup script.
-
-Based on patch by Alexander Kurtz <kurtz.alex@googlemail.com>
----
- src/daemon/start-pulseaudio-x11.in        | 6 +++---
- src/modules/x11/module-x11-bell.c         | 8 ++++++++
- src/modules/x11/module-x11-cork-request.c | 8 ++++++++
- src/modules/x11/module-x11-publish.c      | 8 ++++++++
- src/modules/x11/module-x11-xsmp.c         | 8 ++++++++
- 5 files changed, 35 insertions(+), 3 deletions(-)
-
-diff --git a/src/daemon/start-pulseaudio-x11.in b/src/daemon/start-pulseaudio-x11.in
-index 15c79e187..2afa88563 100755
---- a/src/daemon/start-pulseaudio-x11.in
-+++ b/src/daemon/start-pulseaudio-x11.in
-@@ -22,14 +22,14 @@ set -e
- 
- if [ x"$DISPLAY" != x ] ; then
- 
--    @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null
--    @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY" > /dev/null
-+    @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null
-+    @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null
- 
-     if [ x"$KDE_FULL_SESSION" = x"true" ]; then
-        @PACTL_BINARY@ load-module module-device-manager "do_routing=1" > /dev/null
-     fi
- 
-     if [ x"$SESSION_MANAGER" != x ] ; then
--	@PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
-+	@PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY xauthority=$XAUTHORITY session_manager=$SESSION_MANAGER" > /dev/null
-     fi
- fi
-diff --git a/src/modules/x11/module-x11-bell.c b/src/modules/x11/module-x11-bell.c
-index 7b2be57bf..ec63c672f 100644
---- a/src/modules/x11/module-x11-bell.c
-+++ b/src/modules/x11/module-x11-bell.c
-@@ -46,6 +46,7 @@ static const char* const valid_modargs[] = {
-     "sink",
-     "sample",
-     "display",
-+    "xauthority",
-     NULL
- };
- 
-@@ -127,6 +128,13 @@ int pa__init(pa_module*m) {
-     u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
-     u->x11_client = NULL;
- 
-+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
-+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
-+            pa_log("setenv() for $XAUTHORITY failed");
-+            goto fail;
-+        }
-+    }
-+
-     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
-         goto fail;
- 
-diff --git a/src/modules/x11/module-x11-cork-request.c b/src/modules/x11/module-x11-cork-request.c
-index 5c76711f2..966907109 100644
---- a/src/modules/x11/module-x11-cork-request.c
-+++ b/src/modules/x11/module-x11-cork-request.c
-@@ -48,6 +48,7 @@ PA_MODULE_USAGE("display=<X11 display>");
- 
- static const char* const valid_modargs[] = {
-     "display",
-+    "xauthority",
-     NULL
- };
- 
-@@ -130,6 +131,13 @@ int pa__init(pa_module *m) {
-     m->userdata = u = pa_xnew0(struct userdata, 1);
-     u->module = m;
- 
-+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
-+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
-+            pa_log("setenv() for $XAUTHORITY failed");
-+            goto fail;
-+        }
-+    }
-+
-     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
-         goto fail;
- 
-diff --git a/src/modules/x11/module-x11-publish.c b/src/modules/x11/module-x11-publish.c
-index 553b3417e..fcf306bef 100644
---- a/src/modules/x11/module-x11-publish.c
-+++ b/src/modules/x11/module-x11-publish.c
-@@ -58,6 +58,7 @@ static const char* const valid_modargs[] = {
-     "sink",
-     "source",
-     "cookie",
-+    "xauthority",
-     NULL
- };
- 
-@@ -158,6 +159,13 @@ int pa__init(pa_module*m) {
-     if (!(u->auth_cookie = pa_auth_cookie_get(m->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), true, PA_NATIVE_COOKIE_LENGTH)))
-         goto fail;
- 
-+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
-+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
-+            pa_log("setenv() for $XAUTHORITY failed");
-+            goto fail;
-+        }
-+    }
-+
-     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
-         goto fail;
- 
-diff --git a/src/modules/x11/module-x11-xsmp.c b/src/modules/x11/module-x11-xsmp.c
-index 29737c531..8f1d46ad3 100644
---- a/src/modules/x11/module-x11-xsmp.c
-+++ b/src/modules/x11/module-x11-xsmp.c
-@@ -48,6 +48,7 @@ static bool ice_in_use = false;
- static const char* const valid_modargs[] = {
-     "session_manager",
-     "display",
-+    "xauthority",
-     NULL
- };
- 
-@@ -141,6 +142,13 @@ int pa__init(pa_module*m) {
-         goto fail;
-     }
- 
-+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
-+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
-+            pa_log("setenv() for $XAUTHORITY failed");
-+            goto fail;
-+        }
-+    }
-+
-     if (!(u->x11 = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
-         goto fail;
- 
--- 
-2.21.0
-
diff --git a/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch b/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch
deleted file mode 100644
index 7e0e02f..0000000
--- a/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From ba2b748d40f78b9d9f945b5422ca74d05f8d0d07 Mon Sep 17 00:00:00 2001
-From: Felipe Sateler <fsateler@gmail.com>
-Date: Wed, 11 Apr 2018 15:26:19 +0300
-Subject: [PATCH] qpaeq: fix Qt5 mainloop use
-
-This change was missed in the Qt4 -> Qt5 conversion.
----
- src/utils/qpaeq | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/utils/qpaeq b/src/utils/qpaeq
-index 651d3a4e9..53b0ca3e3 100755
---- a/src/utils/qpaeq
-+++ b/src/utils/qpaeq
-@@ -20,7 +20,7 @@ import os,math,sys
- try:
-     import PyQt5,sip
-     from PyQt5 import QtWidgets,QtCore
--    import dbus.mainloop.qt
-+    import dbus.mainloop.pyqt5
-     import dbus
- except ImportError as e:
-     sys.stderr.write('There was an error importing needed libraries\n'
-@@ -565,7 +565,7 @@ def subdivide(xs, t_points):
-     return left+right
- 
- def main():
--    dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)
-+    dbus.mainloop.pyqt5.DBusQtMainLoop(set_as_default=True)
-     app=QtWidgets.QApplication(sys.argv)
-     qpaeq_main=QPaeq()
-     qpaeq_main.show()
--- 
-2.17.1
-
diff --git a/SOURCES/0002-alsa-Use-correct-header-path.patch b/SOURCES/0002-alsa-Use-correct-header-path.patch
deleted file mode 100644
index 2a02d51..0000000
--- a/SOURCES/0002-alsa-Use-correct-header-path.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From 24a9694bfb3734b410b81c4d1a4bdfe0ed16b00b Mon Sep 17 00:00:00 2001
-From: Olaf Hering <olaf@aepfle.de>
-Date: Wed, 27 Mar 2019 09:35:05 +0100
-Subject: [PATCH 2/3] alsa: Use correct header path
-
-Consumers are expected to use <alsa/asoundlib.h> instead of
-<asoundlib.h>.
-
-This is in preparation of an change to pkgconfig(alsa) to
-not pollute CFLAGS with -I/usr/include/alsa anymore.
-
-Signed-off-by: Olaf Hering <olaf@aepfle.de>
----
- src/modules/alsa/alsa-mixer.c         | 2 +-
- src/modules/alsa/alsa-mixer.h         | 2 +-
- src/modules/alsa/alsa-sink.c          | 2 +-
- src/modules/alsa/alsa-source.c        | 2 +-
- src/modules/alsa/alsa-ucm.c           | 2 +-
- src/modules/alsa/alsa-util.c          | 2 +-
- src/modules/alsa/alsa-util.h          | 2 +-
- src/modules/alsa/module-alsa-source.c | 2 +-
- 8 files changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index 7de1c7deb..b2c50e611 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -23,7 +23,7 @@
- #endif
- 
- #include <sys/types.h>
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- #include <math.h>
- 
- #ifdef HAVE_VALGRIND_MEMCHECK_H
-diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
-index 4ebf1922b..8474a3d19 100644
---- a/src/modules/alsa/alsa-mixer.h
-+++ b/src/modules/alsa/alsa-mixer.h
-@@ -21,7 +21,7 @@
-   along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
- ***/
- 
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #include <pulse/sample.h>
- #include <pulse/mainloop-api.h>
-diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
-index 827a65081..9eb9913ff 100644
---- a/src/modules/alsa/alsa-sink.c
-+++ b/src/modules/alsa/alsa-sink.c
-@@ -25,7 +25,7 @@
- #include <signal.h>
- #include <stdio.h>
- 
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #ifdef HAVE_VALGRIND_MEMCHECK_H
- #include <valgrind/memcheck.h>
-diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
-index 6bec188ea..ac919770a 100644
---- a/src/modules/alsa/alsa-source.c
-+++ b/src/modules/alsa/alsa-source.c
-@@ -25,7 +25,7 @@
- #include <signal.h>
- #include <stdio.h>
- 
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #include <pulse/rtclock.h>
- #include <pulse/timeval.h>
-diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
-index b42c04079..235276af2 100644
---- a/src/modules/alsa/alsa-ucm.c
-+++ b/src/modules/alsa/alsa-ucm.c
-@@ -27,7 +27,7 @@
- #include <ctype.h>
- #include <sys/types.h>
- #include <limits.h>
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #ifdef HAVE_VALGRIND_MEMCHECK_H
- #include <valgrind/memcheck.h>
-diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
-index 61fb4903c..f0e5b3642 100644
---- a/src/modules/alsa/alsa-util.c
-+++ b/src/modules/alsa/alsa-util.c
-@@ -23,7 +23,7 @@
- #endif
- 
- #include <sys/types.h>
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #include <pulse/sample.h>
- #include <pulse/xmalloc.h>
-diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
-index 8345a0ba5..24f8d70ee 100644
---- a/src/modules/alsa/alsa-util.h
-+++ b/src/modules/alsa/alsa-util.h
-@@ -21,7 +21,7 @@
-   along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
- ***/
- 
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #include <pulse/sample.h>
- #include <pulse/channelmap.h>
-diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c
-index 45fb1aca8..bbf02af28 100644
---- a/src/modules/alsa/module-alsa-source.c
-+++ b/src/modules/alsa/module-alsa-source.c
-@@ -24,7 +24,7 @@
- 
- #include <stdio.h>
- 
--#include <asoundlib.h>
-+#include <alsa/asoundlib.h>
- 
- #ifdef HAVE_VALGRIND_MEMCHECK_H
- #include <valgrind/memcheck.h>
--- 
-2.21.0
-
diff --git a/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch b/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch
deleted file mode 100644
index d382b3c..0000000
--- a/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 93297a5a87014155540d19e4f619b57d86bcdf6d Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Sun, 21 Apr 2019 11:59:30 +0200
-Subject: [PATCH 3/3] alsa: Fix inclusion of use-case.h
-
-The recent change in ALSA upstream stripped -I$include/alsa path from
-pkgconfig.  We already fixed for this change in some places but still
-the code for UCM was overlooked, and this resulted in the unresolved
-symbols in alsa card module. Fix them as well.
-
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
----
- configure.ac                | 2 +-
- src/modules/alsa/alsa-ucm.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 3a71fd8c2..b09c138b4 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -830,7 +830,7 @@ AS_IF([test "x$enable_alsa" = "xyes" && test "x$HAVE_ALSA" = "x0"],
- AS_IF([test "x$HAVE_ALSA" = "x1"],
-     [
-         save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $ASOUNDLIB_CFLAGS"
--        AC_CHECK_HEADERS([use-case.h], HAVE_ALSA_UCM=1, HAVE_ALSA_UCM=0)
-+        AC_CHECK_HEADERS([alsa/use-case.h], HAVE_ALSA_UCM=1, HAVE_ALSA_UCM=0)
-         CPPFLAGS="$save_CPPFLAGS"
-     ],
-     HAVE_ALSA_UCM=0)
-diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h
-index 53abf3f90..c926f3cc3 100644
---- a/src/modules/alsa/alsa-ucm.h
-+++ b/src/modules/alsa/alsa-ucm.h
-@@ -23,7 +23,7 @@
- ***/
- 
- #ifdef HAVE_ALSA_UCM
--#include <use-case.h>
-+#include <alsa/use-case.h>
- #else
- typedef void snd_use_case_mgr_t;
- #endif
--- 
-2.21.0
-
diff --git a/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch b/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch
deleted file mode 100644
index 1d83034..0000000
--- a/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 60c0edd5286dbb731c671ad3e6886c1e3e1eb067 Mon Sep 17 00:00:00 2001
-From: Hui Wang <hui.wang@canonical.com>
-Date: Fri, 26 May 2017 15:42:40 +0800
-Subject: [PATCH 04/48] alsa-mixer: Add support for usb audio in the Dell dock
- TB16
-
-There are one headset jack on the front panel of TB16, through this
-jack, we have one stereo headphone output (hw:%f,0,0) and one mono
-headset-mic input (hw:%f,0,0); and there is one speaker output jack
-(hw:%f,1,0) on the rear panel of TB16.
-
-The detail information of the Dell dock TB16:
-http://www.dell.com/support/article/sg/en/sgbsdt1/SLN301105
-
-Signed-off-by: Hui Wang <hui.wang@canonical.com>
----
- .../alsa/mixer/profile-sets/90-pulseaudio.rules    |  1 +
- .../profile-sets/dell-dock-tb16-usb-audio.conf     | 55 ++++++++++++++++++++++
- 2 files changed, 56 insertions(+)
- create mode 100644 src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf
-
-diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-index 70e34e6f..805a05b2 100644
---- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-@@ -98,5 +98,6 @@ ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="1021", ENV{PULSE_PROFILE_SET}="nativ
- ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudio-fasttrack-pro.conf"
- ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02bb", ENV{PULSE_PROFILE_SET}="kinect-audio.conf"
- ATTRS{idVendor}=="041e", ATTRS{idProduct}=="322c", ENV{PULSE_PROFILE_SET}="sb-omni-surround-5.1.conf"
-+ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="4014", ENV{PULSE_PROFILE_SET}="dell-dock-tb16-usb-audio.conf"
- 
- LABEL="pulseaudio_end"
-diff --git a/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf b/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf
-new file mode 100644
-index 00000000..11865524
---- /dev/null
-+++ b/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf
-@@ -0,0 +1,55 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+; Dell Dock TB16 USB audio
-+;
-+; This card has two stereo pairs of output, One Mono input.
-+;
-+; See default.conf for an explanation on the directives used here.
-+
-+[General]
-+auto-profiles = no
-+
-+[Mapping analog-stereo-headphone]
-+description = Headphone
-+device-strings = hw:%f,0,0
-+channel-map = left,right
-+direction = output
-+
-+[Mapping analog-stereo-speaker]
-+description = Speaker
-+device-strings = hw:%f,1,0
-+channel-map = left,right
-+direction = output
-+
-+[Mapping analog-stereo-mic]
-+description = Headset-Mic
-+device-strings = hw:%f,0,0
-+channel-map = left,right
-+direction = input
-+
-+
-+[Profile output:analog-stereo-speaker]
-+description = Speaker
-+output-mappings = analog-stereo-speaker
-+priority = 60
-+skip-probe = yes
-+
-+[Profile output:analog-stereo-headphone+input:analog-stereo-mic]
-+description = Headset
-+output-mappings = analog-stereo-headphone
-+input-mappings = analog-stereo-mic
-+priority = 80
-+skip-probe = yes
--- 
-2.13.6
-
diff --git a/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch b/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch
deleted file mode 100644
index 4689456..0000000
--- a/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From ec325304cdca5e2a46f5a84f93c8b614a204d87f Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Fri, 4 Aug 2017 11:14:43 +0300
-Subject: [PATCH 09/48] alsa-mixer: set PCM Capture Source for iec958 input
-
-It was reported that on a certain USB card, identified as
-"0d8c:0102 C-Media Electronics, Inc. CM106 Like Sound Device",
-the "PCM Capture Source" element had to be set to "IEC958 In" before
-the iec958 input would work.
-
-The iec958-stereo-input.conf file didn't exist before, although the path
-was referenced in the default.conf profile configuration file.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=101973
----
- .../alsa/mixer/paths/iec958-stereo-input.conf        | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
- create mode 100644 src/modules/alsa/mixer/paths/iec958-stereo-input.conf
-
-diff --git a/src/modules/alsa/mixer/paths/iec958-stereo-input.conf b/src/modules/alsa/mixer/paths/iec958-stereo-input.conf
-new file mode 100644
-index 00000000..babc8398
---- /dev/null
-+++ b/src/modules/alsa/mixer/paths/iec958-stereo-input.conf
-@@ -0,0 +1,20 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+[Element PCM Capture Source]
-+enumeration = select
-+
-+[Option PCM Capture Source:IEC958 In]
-+name = iec958-input
--- 
-2.13.6
-
diff --git a/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch b/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch
deleted file mode 100644
index 3238bd5..0000000
--- a/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 4e6d9e321400cbb660b4373db6b50bea71707641 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Fri, 4 Aug 2017 16:43:02 +0300
-Subject: [PATCH 10/48] build-sys: add iec958-stereo-input.conf to
- dist_alsapaths_DATA
-
----
- src/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 3ff1139f..1d974037 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1343,6 +1343,7 @@ dist_alsapaths_DATA = \
- 		modules/alsa/mixer/paths/analog-output-headphones-2.conf \
- 		modules/alsa/mixer/paths/analog-output-lineout.conf \
- 		modules/alsa/mixer/paths/analog-output-mono.conf \
-+		modules/alsa/mixer/paths/iec958-stereo-input.conf \
- 		modules/alsa/mixer/paths/iec958-stereo-output.conf \
- 		modules/alsa/mixer/paths/hdmi-output-0.conf \
- 		modules/alsa/mixer/paths/hdmi-output-1.conf \
--- 
-2.13.6
-
diff --git a/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch b/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch
deleted file mode 100644
index 45fff8c..0000000
--- a/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 739a4b3d2318f05eb7101c2baa861e5c636125a5 Mon Sep 17 00:00:00 2001
-From: Ian Ray <ian.ray@ge.com>
-Date: Wed, 30 Aug 2017 11:09:48 +0300
-Subject: [PATCH 15/48] alsa-mixer: round, not truncate, in to_alsa_dB
-
-to_alsa_dB() returns a result rounded to two decimal places (instead of
-using integer truncation) to avoid small errors when converting between
-dB and volume.
-
-Consider playback at -22 dB (which is supported by ALSA) but results in
-the higher level of -21 dB plus software attenuation.
-
-    pa_sw_volume_from_dB(-22) = 28172
-    pa_sw_volume_to_dB(28172) = -21.9997351
-    to_alsa_dB(-21.9997351)   = -2199
-
-    ALSA value 106 = -2200
-    ALSA value 107 = -2100
-    ...
-
-    rounding = +1  /* "accurate or first above" */
-    snd_mixer_selem_ask_playback_dB_vol(me, -2199, rounding, &alsa_val)
-    alsa_val = -2100
-
-Signed-off-by: Ian Ray <ian.ray@ge.com>
----
- src/modules/alsa/alsa-mixer.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index f59cad39..aeaf12c4 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -700,7 +700,7 @@ void pa_alsa_path_set_free(pa_alsa_path_set *ps) {
- }
- 
- static long to_alsa_dB(pa_volume_t v) {
--    return (long) (pa_sw_volume_to_dB(v) * 100.0);
-+    return lround(pa_sw_volume_to_dB(v) * 100.0);
- }
- 
- static pa_volume_t from_alsa_dB(long v) {
--- 
-2.13.6
-
diff --git a/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch b/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch
deleted file mode 100644
index 55e65b8..0000000
--- a/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-From 15386a710c1500f70085a6312fb4d84be4d254c9 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Johan=20Heikkil=C3=A4?= <johan.heikkila@gmail.com>
-Date: Sun, 27 Aug 2017 16:29:37 +0300
-Subject: [PATCH 16/48] alsa-mixer: add support for Steelseries Arctis 7
- headset
-
----
- src/modules/alsa/alsa-mixer.c                      |  1 +
- .../alsa/mixer/paths/steelseries-arctis-input.conf | 25 +++++++++++++
- .../paths/steelseries-arctis-output-mono.conf      | 29 +++++++++++++++
- .../paths/steelseries-arctis-output-stereo.conf    | 27 ++++++++++++++
- .../alsa/mixer/profile-sets/90-pulseaudio.rules    |  1 +
- .../profile-sets/steelseries-arctis-usb-audio.conf | 43 ++++++++++++++++++++++
- 6 files changed, 126 insertions(+)
- create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-input.conf
- create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf
- create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf
- create mode 100644 src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index aeaf12c4..08ea45d3 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -2469,6 +2469,7 @@ static int path_verify(pa_alsa_path *p) {
-         { "analog-input-video",         N_("Video") },
-         { "analog-output",              N_("Analog Output") },
-         { "analog-output-headphones",   N_("Headphones") },
-+        { "analog-output-headphones-mono",    N_("Headphones Mono Output") },
-         { "analog-output-lfe-on-mono",  N_("LFE on Separate Mono Output") },
-         { "analog-output-lineout",      N_("Line Out") },
-         { "analog-output-mono",         N_("Analog Mono Output") },
-diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf
-new file mode 100644
-index 00000000..f3115ba6
---- /dev/null
-+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf
-@@ -0,0 +1,25 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+; Steelseries Arctis 7 USB headset microphone path.
-+
-+[General]
-+description-key = analog-input-microphone-headset
-+
-+[Element Headset]
-+volume = merge
-+switch = mute
-+override-map.1 = all
-+override-map.2 = all-left,all-right
-diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf
-new file mode 100644
-index 00000000..67950618
---- /dev/null
-+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf
-@@ -0,0 +1,29 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+; Steelseries Arctis 7 USB headset mono output path. The headset has two
-+; output devices. The first one is mono, meant for voice audio, and the
-+; second one is stereo, meant for everything else. The purpose of this
-+; unusual design is to provide separate volume controls for voice and
-+; other audio, which can be useful in gaming.
-+
-+[General]
-+description-key = analog-output-headphones-mono
-+
-+[Element PCM]
-+volume = merge
-+switch = mute
-+override-map.1 = all
-+override-map.2 = all-left,all-right
-diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf
-new file mode 100644
-index 00000000..4e10c800
---- /dev/null
-+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf
-@@ -0,0 +1,27 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+; Steelseries Arctis 7 USB headset stereo output path. The headset has two
-+; output devices. The first one is mono, meant for voice audio, and the
-+; second one is stereo, meant for everything else. The purpose of this
-+; unusual design is to provide separate volume controls for voice and
-+; other audio, which can be useful in gaming.
-+;
-+; This path doesn't provide hardware volume control, because the stereo
-+; output is controlled by the PCM element with index 1, and currently
-+; PulseAudio only supports elements with index 0.
-+
-+[General]
-+description-key = analog-output-headphones
-diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-index 805a05b2..2392ca50 100644
---- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
-@@ -99,5 +99,6 @@ ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudi
- ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02bb", ENV{PULSE_PROFILE_SET}="kinect-audio.conf"
- ATTRS{idVendor}=="041e", ATTRS{idProduct}=="322c", ENV{PULSE_PROFILE_SET}="sb-omni-surround-5.1.conf"
- ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="4014", ENV{PULSE_PROFILE_SET}="dell-dock-tb16-usb-audio.conf"
-+ATTRS{idVendor}=="1038", ATTRS{idProduct}=="1260", ENV{PULSE_PROFILE_SET}="steelseries-arctis-usb-audio.conf"
- 
- LABEL="pulseaudio_end"
-diff --git a/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf b/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf
-new file mode 100644
-index 00000000..d3563a16
---- /dev/null
-+++ b/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf
-@@ -0,0 +1,43 @@
-+# This file is part of PulseAudio.
-+#
-+# PulseAudio is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License as
-+# published by the Free Software Foundation; either version 2.1 of the
-+# License, or (at your option) any later version.
-+#
-+# PulseAudio is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-+
-+; Steelseries Arctis 7 USB headset. The headset has a microphone and two output
-+; devices. The first output device is mono, meant for voice audio, and the
-+; second one is stereo, meant for everything else. The purpose of this unusual
-+; design is to provide separate volume controls for voice and other audio,
-+; which can be useful in gaming.
-+;
-+; See default.conf for an explanation on the directives used here.
-+
-+[General]
-+auto-profiles = yes
-+
-+[Mapping analog-mono]
-+device-strings = hw:%f,0,0
-+channel-map = mono
-+paths-output = steelseries-arctis-output-mono
-+paths-input = steelseries-arctis-input
-+
-+[Mapping analog-stereo]
-+device-strings = hw:%f,1,0
-+channel-map = left,right
-+paths-output = steelseries-arctis-output-stereo
-+direction = output
-+
-+[Profile output:analog-mono+output:analog-stereo+input:analog-mono]
-+output-mappings = analog-mono analog-stereo
-+input-mappings = analog-mono
-+priority = 5100
-+skip-probe = yes
--- 
-2.13.6
-
diff --git a/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch b/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch
deleted file mode 100644
index 948aa38..0000000
--- a/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From c7fe78c9f73ded2c3428666722ec9c1af4b82812 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Sat, 2 Sep 2017 18:23:12 +0300
-Subject: [PATCH 18/48] build-sys: add the Arctis configuration
-
----
- src/Makefile.am | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 1d974037..ba2ea97e 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1310,7 +1310,8 @@ dist_alsaprofilesets_DATA = \
- 		modules/alsa/mixer/profile-sets/native-instruments-traktorkontrol-s4.conf \
- 		modules/alsa/mixer/profile-sets/native-instruments-korecontroller.conf \
- 		modules/alsa/mixer/profile-sets/kinect-audio.conf \
--		modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf
-+		modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf \
-+		modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf
- 
- if HAVE_UDEV
- dist_udevrules_DATA = \
-@@ -1352,7 +1353,10 @@ dist_alsapaths_DATA = \
- 		modules/alsa/mixer/paths/hdmi-output-4.conf \
- 		modules/alsa/mixer/paths/hdmi-output-5.conf \
- 		modules/alsa/mixer/paths/hdmi-output-6.conf \
--		modules/alsa/mixer/paths/hdmi-output-7.conf
-+		modules/alsa/mixer/paths/hdmi-output-7.conf \
-+		modules/alsa/mixer/paths/steelseries-arctis-input.conf \
-+		modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf \
-+		modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf
- 
- endif
- 
--- 
-2.13.6
-
diff --git a/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch b/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch
deleted file mode 100644
index 5e4b46e..0000000
--- a/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch
+++ /dev/null
@@ -1,740 +0,0 @@
-From 61217528a1cb5043ca3fa1051a73ad3268cfb3d8 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Tue, 19 Sep 2017 17:25:47 +0300
-Subject: [PATCH 033/106] qpaeq: change license from AGPL to LGPL v2.1
-
-This removes one unnecessary exception in the PulseAudio licensing
-terms. In December 2016 I asked permission from all qpaeq contributors
-for the license change, and all gave the permission. I have archived the
-emails here:
-https://www.freedesktop.org/software/pulseaudio/misc/qpaeq_relicensing_emails.txt
----
- AGPL            | 661 --------------------------------------------------------
- LICENSE         |   4 -
- Makefile.am     |   1 -
- src/utils/qpaeq |   8 +-
- 4 files changed, 4 insertions(+), 670 deletions(-)
- delete mode 100644 AGPL
-
-diff --git a/AGPL b/AGPL
-deleted file mode 100644
-index dba13ed2..00000000
---- a/AGPL
-+++ /dev/null
-@@ -1,661 +0,0 @@
--                    GNU AFFERO GENERAL PUBLIC LICENSE
--                       Version 3, 19 November 2007
--
-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-- Everyone is permitted to copy and distribute verbatim copies
-- of this license document, but changing it is not allowed.
--
--                            Preamble
--
--  The GNU Affero General Public License is a free, copyleft license for
--software and other kinds of works, specifically designed to ensure
--cooperation with the community in the case of network server software.
--
--  The licenses for most software and other practical works are designed
--to take away your freedom to share and change the works.  By contrast,
--our General Public Licenses are intended to guarantee your freedom to
--share and change all versions of a program--to make sure it remains free
--software for all its users.
--
--  When we speak of free software, we are referring to freedom, not
--price.  Our General Public Licenses are designed to make sure that you
--have the freedom to distribute copies of free software (and charge for
--them if you wish), that you receive source code or can get it if you
--want it, that you can change the software or use pieces of it in new
--free programs, and that you know you can do these things.
--
--  Developers that use our General Public Licenses protect your rights
--with two steps: (1) assert copyright on the software, and (2) offer
--you this License which gives you legal permission to copy, distribute
--and/or modify the software.
--
--  A secondary benefit of defending all users' freedom is that
--improvements made in alternate versions of the program, if they
--receive widespread use, become available for other developers to
--incorporate.  Many developers of free software are heartened and
--encouraged by the resulting cooperation.  However, in the case of
--software used on network servers, this result may fail to come about.
--The GNU General Public License permits making a modified version and
--letting the public access it on a server without ever releasing its
--source code to the public.
--
--  The GNU Affero General Public License is designed specifically to
--ensure that, in such cases, the modified source code becomes available
--to the community.  It requires the operator of a network server to
--provide the source code of the modified version running there to the
--users of that server.  Therefore, public use of a modified version, on
--a publicly accessible server, gives the public access to the source
--code of the modified version.
--
--  An older license, called the Affero General Public License and
--published by Affero, was designed to accomplish similar goals.  This is
--a different license, not a version of the Affero GPL, but Affero has
--released a new version of the Affero GPL which permits relicensing under
--this license.
--
--  The precise terms and conditions for copying, distribution and
--modification follow.
--
--                       TERMS AND CONDITIONS
--
--  0. Definitions.
--
--  "This License" refers to version 3 of the GNU Affero General Public License.
--
--  "Copyright" also means copyright-like laws that apply to other kinds of
--works, such as semiconductor masks.
--
--  "The Program" refers to any copyrightable work licensed under this
--License.  Each licensee is addressed as "you".  "Licensees" and
--"recipients" may be individuals or organizations.
--
--  To "modify" a work means to copy from or adapt all or part of the work
--in a fashion requiring copyright permission, other than the making of an
--exact copy.  The resulting work is called a "modified version" of the
--earlier work or a work "based on" the earlier work.
--
--  A "covered work" means either the unmodified Program or a work based
--on the Program.
--
--  To "propagate" a work means to do anything with it that, without
--permission, would make you directly or secondarily liable for
--infringement under applicable copyright law, except executing it on a
--computer or modifying a private copy.  Propagation includes copying,
--distribution (with or without modification), making available to the
--public, and in some countries other activities as well.
--
--  To "convey" a work means any kind of propagation that enables other
--parties to make or receive copies.  Mere interaction with a user through
--a computer network, with no transfer of a copy, is not conveying.
--
--  An interactive user interface displays "Appropriate Legal Notices"
--to the extent that it includes a convenient and prominently visible
--feature that (1) displays an appropriate copyright notice, and (2)
--tells the user that there is no warranty for the work (except to the
--extent that warranties are provided), that licensees may convey the
--work under this License, and how to view a copy of this License.  If
--the interface presents a list of user commands or options, such as a
--menu, a prominent item in the list meets this criterion.
--
--  1. Source Code.
--
--  The "source code" for a work means the preferred form of the work
--for making modifications to it.  "Object code" means any non-source
--form of a work.
--
--  A "Standard Interface" means an interface that either is an official
--standard defined by a recognized standards body, or, in the case of
--interfaces specified for a particular programming language, one that
--is widely used among developers working in that language.
--
--  The "System Libraries" of an executable work include anything, other
--than the work as a whole, that (a) is included in the normal form of
--packaging a Major Component, but which is not part of that Major
--Component, and (b) serves only to enable use of the work with that
--Major Component, or to implement a Standard Interface for which an
--implementation is available to the public in source code form.  A
--"Major Component", in this context, means a major essential component
--(kernel, window system, and so on) of the specific operating system
--(if any) on which the executable work runs, or a compiler used to
--produce the work, or an object code interpreter used to run it.
--
--  The "Corresponding Source" for a work in object code form means all
--the source code needed to generate, install, and (for an executable
--work) run the object code and to modify the work, including scripts to
--control those activities.  However, it does not include the work's
--System Libraries, or general-purpose tools or generally available free
--programs which are used unmodified in performing those activities but
--which are not part of the work.  For example, Corresponding Source
--includes interface definition files associated with source files for
--the work, and the source code for shared libraries and dynamically
--linked subprograms that the work is specifically designed to require,
--such as by intimate data communication or control flow between those
--subprograms and other parts of the work.
--
--  The Corresponding Source need not include anything that users
--can regenerate automatically from other parts of the Corresponding
--Source.
--
--  The Corresponding Source for a work in source code form is that
--same work.
--
--  2. Basic Permissions.
--
--  All rights granted under this License are granted for the term of
--copyright on the Program, and are irrevocable provided the stated
--conditions are met.  This License explicitly affirms your unlimited
--permission to run the unmodified Program.  The output from running a
--covered work is covered by this License only if the output, given its
--content, constitutes a covered work.  This License acknowledges your
--rights of fair use or other equivalent, as provided by copyright law.
--
--  You may make, run and propagate covered works that you do not
--convey, without conditions so long as your license otherwise remains
--in force.  You may convey covered works to others for the sole purpose
--of having them make modifications exclusively for you, or provide you
--with facilities for running those works, provided that you comply with
--the terms of this License in conveying all material for which you do
--not control copyright.  Those thus making or running the covered works
--for you must do so exclusively on your behalf, under your direction
--and control, on terms that prohibit them from making any copies of
--your copyrighted material outside their relationship with you.
--
--  Conveying under any other circumstances is permitted solely under
--the conditions stated below.  Sublicensing is not allowed; section 10
--makes it unnecessary.
--
--  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
--
--  No covered work shall be deemed part of an effective technological
--measure under any applicable law fulfilling obligations under article
--11 of the WIPO copyright treaty adopted on 20 December 1996, or
--similar laws prohibiting or restricting circumvention of such
--measures.
--
--  When you convey a covered work, you waive any legal power to forbid
--circumvention of technological measures to the extent such circumvention
--is effected by exercising rights under this License with respect to
--the covered work, and you disclaim any intention to limit operation or
--modification of the work as a means of enforcing, against the work's
--users, your or third parties' legal rights to forbid circumvention of
--technological measures.
--
--  4. Conveying Verbatim Copies.
--
--  You may convey verbatim copies of the Program's source code as you
--receive it, in any medium, provided that you conspicuously and
--appropriately publish on each copy an appropriate copyright notice;
--keep intact all notices stating that this License and any
--non-permissive terms added in accord with section 7 apply to the code;
--keep intact all notices of the absence of any warranty; and give all
--recipients a copy of this License along with the Program.
--
--  You may charge any price or no price for each copy that you convey,
--and you may offer support or warranty protection for a fee.
--
--  5. Conveying Modified Source Versions.
--
--  You may convey a work based on the Program, or the modifications to
--produce it from the Program, in the form of source code under the
--terms of section 4, provided that you also meet all of these conditions:
--
--    a) The work must carry prominent notices stating that you modified
--    it, and giving a relevant date.
--
--    b) The work must carry prominent notices stating that it is
--    released under this License and any conditions added under section
--    7.  This requirement modifies the requirement in section 4 to
--    "keep intact all notices".
--
--    c) You must license the entire work, as a whole, under this
--    License to anyone who comes into possession of a copy.  This
--    License will therefore apply, along with any applicable section 7
--    additional terms, to the whole of the work, and all its parts,
--    regardless of how they are packaged.  This License gives no
--    permission to license the work in any other way, but it does not
--    invalidate such permission if you have separately received it.
--
--    d) If the work has interactive user interfaces, each must display
--    Appropriate Legal Notices; however, if the Program has interactive
--    interfaces that do not display Appropriate Legal Notices, your
--    work need not make them do so.
--
--  A compilation of a covered work with other separate and independent
--works, which are not by their nature extensions of the covered work,
--and which are not combined with it such as to form a larger program,
--in or on a volume of a storage or distribution medium, is called an
--"aggregate" if the compilation and its resulting copyright are not
--used to limit the access or legal rights of the compilation's users
--beyond what the individual works permit.  Inclusion of a covered work
--in an aggregate does not cause this License to apply to the other
--parts of the aggregate.
--
--  6. Conveying Non-Source Forms.
--
--  You may convey a covered work in object code form under the terms
--of sections 4 and 5, provided that you also convey the
--machine-readable Corresponding Source under the terms of this License,
--in one of these ways:
--
--    a) Convey the object code in, or embodied in, a physical product
--    (including a physical distribution medium), accompanied by the
--    Corresponding Source fixed on a durable physical medium
--    customarily used for software interchange.
--
--    b) Convey the object code in, or embodied in, a physical product
--    (including a physical distribution medium), accompanied by a
--    written offer, valid for at least three years and valid for as
--    long as you offer spare parts or customer support for that product
--    model, to give anyone who possesses the object code either (1) a
--    copy of the Corresponding Source for all the software in the
--    product that is covered by this License, on a durable physical
--    medium customarily used for software interchange, for a price no
--    more than your reasonable cost of physically performing this
--    conveying of source, or (2) access to copy the
--    Corresponding Source from a network server at no charge.
--
--    c) Convey individual copies of the object code with a copy of the
--    written offer to provide the Corresponding Source.  This
--    alternative is allowed only occasionally and noncommercially, and
--    only if you received the object code with such an offer, in accord
--    with subsection 6b.
--
--    d) Convey the object code by offering access from a designated
--    place (gratis or for a charge), and offer equivalent access to the
--    Corresponding Source in the same way through the same place at no
--    further charge.  You need not require recipients to copy the
--    Corresponding Source along with the object code.  If the place to
--    copy the object code is a network server, the Corresponding Source
--    may be on a different server (operated by you or a third party)
--    that supports equivalent copying facilities, provided you maintain
--    clear directions next to the object code saying where to find the
--    Corresponding Source.  Regardless of what server hosts the
--    Corresponding Source, you remain obligated to ensure that it is
--    available for as long as needed to satisfy these requirements.
--
--    e) Convey the object code using peer-to-peer transmission, provided
--    you inform other peers where the object code and Corresponding
--    Source of the work are being offered to the general public at no
--    charge under subsection 6d.
--
--  A separable portion of the object code, whose source code is excluded
--from the Corresponding Source as a System Library, need not be
--included in conveying the object code work.
--
--  A "User Product" is either (1) a "consumer product", which means any
--tangible personal property which is normally used for personal, family,
--or household purposes, or (2) anything designed or sold for incorporation
--into a dwelling.  In determining whether a product is a consumer product,
--doubtful cases shall be resolved in favor of coverage.  For a particular
--product received by a particular user, "normally used" refers to a
--typical or common use of that class of product, regardless of the status
--of the particular user or of the way in which the particular user
--actually uses, or expects or is expected to use, the product.  A product
--is a consumer product regardless of whether the product has substantial
--commercial, industrial or non-consumer uses, unless such uses represent
--the only significant mode of use of the product.
--
--  "Installation Information" for a User Product means any methods,
--procedures, authorization keys, or other information required to install
--and execute modified versions of a covered work in that User Product from
--a modified version of its Corresponding Source.  The information must
--suffice to ensure that the continued functioning of the modified object
--code is in no case prevented or interfered with solely because
--modification has been made.
--
--  If you convey an object code work under this section in, or with, or
--specifically for use in, a User Product, and the conveying occurs as
--part of a transaction in which the right of possession and use of the
--User Product is transferred to the recipient in perpetuity or for a
--fixed term (regardless of how the transaction is characterized), the
--Corresponding Source conveyed under this section must be accompanied
--by the Installation Information.  But this requirement does not apply
--if neither you nor any third party retains the ability to install
--modified object code on the User Product (for example, the work has
--been installed in ROM).
--
--  The requirement to provide Installation Information does not include a
--requirement to continue to provide support service, warranty, or updates
--for a work that has been modified or installed by the recipient, or for
--the User Product in which it has been modified or installed.  Access to a
--network may be denied when the modification itself materially and
--adversely affects the operation of the network or violates the rules and
--protocols for communication across the network.
--
--  Corresponding Source conveyed, and Installation Information provided,
--in accord with this section must be in a format that is publicly
--documented (and with an implementation available to the public in
--source code form), and must require no special password or key for
--unpacking, reading or copying.
--
--  7. Additional Terms.
--
--  "Additional permissions" are terms that supplement the terms of this
--License by making exceptions from one or more of its conditions.
--Additional permissions that are applicable to the entire Program shall
--be treated as though they were included in this License, to the extent
--that they are valid under applicable law.  If additional permissions
--apply only to part of the Program, that part may be used separately
--under those permissions, but the entire Program remains governed by
--this License without regard to the additional permissions.
--
--  When you convey a copy of a covered work, you may at your option
--remove any additional permissions from that copy, or from any part of
--it.  (Additional permissions may be written to require their own
--removal in certain cases when you modify the work.)  You may place
--additional permissions on material, added by you to a covered work,
--for which you have or can give appropriate copyright permission.
--
--  Notwithstanding any other provision of this License, for material you
--add to a covered work, you may (if authorized by the copyright holders of
--that material) supplement the terms of this License with terms:
--
--    a) Disclaiming warranty or limiting liability differently from the
--    terms of sections 15 and 16 of this License; or
--
--    b) Requiring preservation of specified reasonable legal notices or
--    author attributions in that material or in the Appropriate Legal
--    Notices displayed by works containing it; or
--
--    c) Prohibiting misrepresentation of the origin of that material, or
--    requiring that modified versions of such material be marked in
--    reasonable ways as different from the original version; or
--
--    d) Limiting the use for publicity purposes of names of licensors or
--    authors of the material; or
--
--    e) Declining to grant rights under trademark law for use of some
--    trade names, trademarks, or service marks; or
--
--    f) Requiring indemnification of licensors and authors of that
--    material by anyone who conveys the material (or modified versions of
--    it) with contractual assumptions of liability to the recipient, for
--    any liability that these contractual assumptions directly impose on
--    those licensors and authors.
--
--  All other non-permissive additional terms are considered "further
--restrictions" within the meaning of section 10.  If the Program as you
--received it, or any part of it, contains a notice stating that it is
--governed by this License along with a term that is a further
--restriction, you may remove that term.  If a license document contains
--a further restriction but permits relicensing or conveying under this
--License, you may add to a covered work material governed by the terms
--of that license document, provided that the further restriction does
--not survive such relicensing or conveying.
--
--  If you add terms to a covered work in accord with this section, you
--must place, in the relevant source files, a statement of the
--additional terms that apply to those files, or a notice indicating
--where to find the applicable terms.
--
--  Additional terms, permissive or non-permissive, may be stated in the
--form of a separately written license, or stated as exceptions;
--the above requirements apply either way.
--
--  8. Termination.
--
--  You may not propagate or modify a covered work except as expressly
--provided under this License.  Any attempt otherwise to propagate or
--modify it is void, and will automatically terminate your rights under
--this License (including any patent licenses granted under the third
--paragraph of section 11).
--
--  However, if you cease all violation of this License, then your
--license from a particular copyright holder is reinstated (a)
--provisionally, unless and until the copyright holder explicitly and
--finally terminates your license, and (b) permanently, if the copyright
--holder fails to notify you of the violation by some reasonable means
--prior to 60 days after the cessation.
--
--  Moreover, your license from a particular copyright holder is
--reinstated permanently if the copyright holder notifies you of the
--violation by some reasonable means, this is the first time you have
--received notice of violation of this License (for any work) from that
--copyright holder, and you cure the violation prior to 30 days after
--your receipt of the notice.
--
--  Termination of your rights under this section does not terminate the
--licenses of parties who have received copies or rights from you under
--this License.  If your rights have been terminated and not permanently
--reinstated, you do not qualify to receive new licenses for the same
--material under section 10.
--
--  9. Acceptance Not Required for Having Copies.
--
--  You are not required to accept this License in order to receive or
--run a copy of the Program.  Ancillary propagation of a covered work
--occurring solely as a consequence of using peer-to-peer transmission
--to receive a copy likewise does not require acceptance.  However,
--nothing other than this License grants you permission to propagate or
--modify any covered work.  These actions infringe copyright if you do
--not accept this License.  Therefore, by modifying or propagating a
--covered work, you indicate your acceptance of this License to do so.
--
--  10. Automatic Licensing of Downstream Recipients.
--
--  Each time you convey a covered work, the recipient automatically
--receives a license from the original licensors, to run, modify and
--propagate that work, subject to this License.  You are not responsible
--for enforcing compliance by third parties with this License.
--
--  An "entity transaction" is a transaction transferring control of an
--organization, or substantially all assets of one, or subdividing an
--organization, or merging organizations.  If propagation of a covered
--work results from an entity transaction, each party to that
--transaction who receives a copy of the work also receives whatever
--licenses to the work the party's predecessor in interest had or could
--give under the previous paragraph, plus a right to possession of the
--Corresponding Source of the work from the predecessor in interest, if
--the predecessor has it or can get it with reasonable efforts.
--
--  You may not impose any further restrictions on the exercise of the
--rights granted or affirmed under this License.  For example, you may
--not impose a license fee, royalty, or other charge for exercise of
--rights granted under this License, and you may not initiate litigation
--(including a cross-claim or counterclaim in a lawsuit) alleging that
--any patent claim is infringed by making, using, selling, offering for
--sale, or importing the Program or any portion of it.
--
--  11. Patents.
--
--  A "contributor" is a copyright holder who authorizes use under this
--License of the Program or a work on which the Program is based.  The
--work thus licensed is called the contributor's "contributor version".
--
--  A contributor's "essential patent claims" are all patent claims
--owned or controlled by the contributor, whether already acquired or
--hereafter acquired, that would be infringed by some manner, permitted
--by this License, of making, using, or selling its contributor version,
--but do not include claims that would be infringed only as a
--consequence of further modification of the contributor version.  For
--purposes of this definition, "control" includes the right to grant
--patent sublicenses in a manner consistent with the requirements of
--this License.
--
--  Each contributor grants you a non-exclusive, worldwide, royalty-free
--patent license under the contributor's essential patent claims, to
--make, use, sell, offer for sale, import and otherwise run, modify and
--propagate the contents of its contributor version.
--
--  In the following three paragraphs, a "patent license" is any express
--agreement or commitment, however denominated, not to enforce a patent
--(such as an express permission to practice a patent or covenant not to
--sue for patent infringement).  To "grant" such a patent license to a
--party means to make such an agreement or commitment not to enforce a
--patent against the party.
--
--  If you convey a covered work, knowingly relying on a patent license,
--and the Corresponding Source of the work is not available for anyone
--to copy, free of charge and under the terms of this License, through a
--publicly available network server or other readily accessible means,
--then you must either (1) cause the Corresponding Source to be so
--available, or (2) arrange to deprive yourself of the benefit of the
--patent license for this particular work, or (3) arrange, in a manner
--consistent with the requirements of this License, to extend the patent
--license to downstream recipients.  "Knowingly relying" means you have
--actual knowledge that, but for the patent license, your conveying the
--covered work in a country, or your recipient's use of the covered work
--in a country, would infringe one or more identifiable patents in that
--country that you have reason to believe are valid.
--
--  If, pursuant to or in connection with a single transaction or
--arrangement, you convey, or propagate by procuring conveyance of, a
--covered work, and grant a patent license to some of the parties
--receiving the covered work authorizing them to use, propagate, modify
--or convey a specific copy of the covered work, then the patent license
--you grant is automatically extended to all recipients of the covered
--work and works based on it.
--
--  A patent license is "discriminatory" if it does not include within
--the scope of its coverage, prohibits the exercise of, or is
--conditioned on the non-exercise of one or more of the rights that are
--specifically granted under this License.  You may not convey a covered
--work if you are a party to an arrangement with a third party that is
--in the business of distributing software, under which you make payment
--to the third party based on the extent of your activity of conveying
--the work, and under which the third party grants, to any of the
--parties who would receive the covered work from you, a discriminatory
--patent license (a) in connection with copies of the covered work
--conveyed by you (or copies made from those copies), or (b) primarily
--for and in connection with specific products or compilations that
--contain the covered work, unless you entered into that arrangement,
--or that patent license was granted, prior to 28 March 2007.
--
--  Nothing in this License shall be construed as excluding or limiting
--any implied license or other defenses to infringement that may
--otherwise be available to you under applicable patent law.
--
--  12. No Surrender of Others' Freedom.
--
--  If conditions are imposed on you (whether by court order, agreement or
--otherwise) that contradict the conditions of this License, they do not
--excuse you from the conditions of this License.  If you cannot convey a
--covered work so as to satisfy simultaneously your obligations under this
--License and any other pertinent obligations, then as a consequence you may
--not convey it at all.  For example, if you agree to terms that obligate you
--to collect a royalty for further conveying from those to whom you convey
--the Program, the only way you could satisfy both those terms and this
--License would be to refrain entirely from conveying the Program.
--
--  13. Remote Network Interaction; Use with the GNU General Public License.
--
--  Notwithstanding any other provision of this License, if you modify the
--Program, your modified version must prominently offer all users
--interacting with it remotely through a computer network (if your version
--supports such interaction) an opportunity to receive the Corresponding
--Source of your version by providing access to the Corresponding Source
--from a network server at no charge, through some standard or customary
--means of facilitating copying of software.  This Corresponding Source
--shall include the Corresponding Source for any work covered by version 3
--of the GNU General Public License that is incorporated pursuant to the
--following paragraph.
--
--  Notwithstanding any other provision of this License, you have
--permission to link or combine any covered work with a work licensed
--under version 3 of the GNU General Public License into a single
--combined work, and to convey the resulting work.  The terms of this
--License will continue to apply to the part which is the covered work,
--but the work with which it is combined will remain governed by version
--3 of the GNU General Public License.
--
--  14. Revised Versions of this License.
--
--  The Free Software Foundation may publish revised and/or new versions of
--the GNU Affero General Public License from time to time.  Such new versions
--will be similar in spirit to the present version, but may differ in detail to
--address new problems or concerns.
--
--  Each version is given a distinguishing version number.  If the
--Program specifies that a certain numbered version of the GNU Affero General
--Public License "or any later version" applies to it, you have the
--option of following the terms and conditions either of that numbered
--version or of any later version published by the Free Software
--Foundation.  If the Program does not specify a version number of the
--GNU Affero General Public License, you may choose any version ever published
--by the Free Software Foundation.
--
--  If the Program specifies that a proxy can decide which future
--versions of the GNU Affero General Public License can be used, that proxy's
--public statement of acceptance of a version permanently authorizes you
--to choose that version for the Program.
--
--  Later license versions may give you additional or different
--permissions.  However, no additional obligations are imposed on any
--author or copyright holder as a result of your choosing to follow a
--later version.
--
--  15. Disclaimer of Warranty.
--
--  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
--APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
--HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
--OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
--THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
--PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
--IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
--ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
--
--  16. Limitation of Liability.
--
--  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
--WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
--THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
--GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
--USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
--DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
--PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
--EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
--SUCH DAMAGES.
--
--  17. Interpretation of Sections 15 and 16.
--
--  If the disclaimer of warranty and limitation of liability provided
--above cannot be given local legal effect according to their terms,
--reviewing courts shall apply local law that most closely approximates
--an absolute waiver of all civil liability in connection with the
--Program, unless a warranty or assumption of liability accompanies a
--copy of the Program in return for a fee.
--
--                     END OF TERMS AND CONDITIONS
--
--            How to Apply These Terms to Your New Programs
--
--  If you develop a new program, and you want it to be of the greatest
--possible use to the public, the best way to achieve this is to make it
--free software which everyone can redistribute and change under these terms.
--
--  To do so, attach the following notices to the program.  It is safest
--to attach them to the start of each source file to most effectively
--state the exclusion of warranty; and each file should have at least
--the "copyright" line and a pointer to where the full notice is found.
--
--    <one line to give the program's name and a brief idea of what it does.>
--    Copyright (C) <year>  <name of author>
--
--    This program is free software: you can redistribute it and/or modify
--    it under the terms of the GNU Affero General Public License as published by
--    the Free Software Foundation, either version 3 of the License, or
--    (at your option) any later version.
--
--    This program is distributed in the hope that it will be useful,
--    but WITHOUT ANY WARRANTY; without even the implied warranty of
--    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--    GNU Affero General Public License for more details.
--
--    You should have received a copy of the GNU Affero General Public License
--    along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
--Also add information on how to contact you by electronic and paper mail.
--
--  If your software can interact with users remotely through a computer
--network, you should also make sure that it provides a way for users to
--get its source.  For example, if your program is a web application, its
--interface could display a "Source" link that leads users to an archive
--of the code.  There are many ways you could offer source, and different
--solutions will be better for different programs; see section 13 for the
--specific requirements.
--
--  You should also get your employer (if you work as a programmer) or school,
--if any, to sign a "copyright disclaimer" for the program, if necessary.
--For more information on this, and how to apply and follow the GNU AGPL, see
--<http://www.gnu.org/licenses/>.
-diff --git a/LICENSE b/LICENSE
-index 817427ae..8dfc62ad 100644
---- a/LICENSE
-+++ b/LICENSE
-@@ -35,10 +35,6 @@ src/pulsecore/filter/LICENSE.WEBKIT for details.
- Additionally, a more permissive Sun license is used for code that performs
- u-law, A-law and linear PCM conversions.
- 
--The qpaeq program (src/utils/qpaeq) is licensed under the GNU Affero General
--Public License (version 3, or any later version at your discretion). See the
--file AGPL for details.
--
- While we attempt to provide a summary here, it is the ultimate responsibility of
- the packager to ensure the components they use in their build of PulseAudio
- meets their license requirements.
-diff --git a/Makefile.am b/Makefile.am
-index 1f460a97..9a6b42a9 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -16,7 +16,6 @@
- ACLOCAL_AMFLAGS = -I m4
- 
- EXTRA_DIST = \
--	AGPL \
- 	bootstrap.sh \
- 	coverity/model.c \
- 	git-version-gen \
-diff --git a/src/utils/qpaeq b/src/utils/qpaeq
-index ac4b9e4a..f657659d 100755
---- a/src/utils/qpaeq
-+++ b/src/utils/qpaeq
-@@ -3,16 +3,16 @@
- #    Copyright (C) 2009  Jason Newton <nevion@gmail.com
- #
- #    This program is free software: you can redistribute it and/or modify
--#    it under the terms of the GNU Affero General Public License as
--#    published by the Free Software Foundation, either version 3 of the
-+#    it under the terms of the GNU Lesser General Public License as
-+#    published by the Free Software Foundation, either version 2.1 of the
- #    License, or (at your option) any later version.
- #
- #    This program is distributed in the hope that it will be useful,
- #    but WITHOUT ANY WARRANTY; without even the implied warranty of
- #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--#    GNU Affero General Public License for more details.
-+#    GNU Lesser General Public License for more details.
- #
--#    You should have received a copy of the GNU Affero General Public License
-+#    You should have received a copy of the GNU Lesser General Public License
- #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
- 
- 
--- 
-2.14.3
-
diff --git a/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch b/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch
deleted file mode 100644
index b2e54ba..0000000
--- a/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch
+++ /dev/null
@@ -1,380 +0,0 @@
-From 184c28795bb98ad14bdfcef01a475d5ba11e40d5 Mon Sep 17 00:00:00 2001
-From: Kristian Klausen <klausenbusk@hotmail.com>
-Date: Fri, 22 Sep 2017 17:54:14 +0000
-Subject: [PATCH 35/48] alsa-mixer: Prioritize hdmi-* mappings over iec958-*
- mappings
-
-Pulseaudio tries to pick the best profile (on startup or
-hotplugged), the best profile is the profile with the highest
-priority which isn't unavailable.
-Due to the facts that iec958 ports available status always (?)
-is unknown, and that it is generally more likely that a user use
-hdmi than iec958, lets prioritze hdmi over iec958.
-
-This patch shift the analog-* mappings +5 and hdmi-* mappings +5.
----
- src/modules/alsa/mixer/profile-sets/default.conf | 80 ++++++++++++------------
- 1 file changed, 40 insertions(+), 40 deletions(-)
-
-diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf
-index c360e772..f5093830 100644
---- a/src/modules/alsa/mixer/profile-sets/default.conf
-+++ b/src/modules/alsa/mixer/profile-sets/default.conf
-@@ -106,14 +106,14 @@ device-strings = hw:%f
- channel-map = mono
- paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono
- paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headset-mic
--priority = 2
-+priority = 7
- 
- [Mapping analog-stereo]
- device-strings = front:%f
- channel-map = left,right
- paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
- paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
--priority = 10
-+priority = 15
- 
- # If everything else fails, try to use hw:0 as a stereo device.
- [Mapping stereo-fallback]
-@@ -128,35 +128,35 @@ priority = 1
- device-strings = surround21:%f
- channel-map = front-left,front-right,lfe
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 8
-+priority = 13
- direction = output
- 
- [Mapping analog-surround-40]
- device-strings = surround40:%f
- channel-map = front-left,front-right,rear-left,rear-right
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 7
-+priority = 12
- direction = output
- 
- [Mapping analog-surround-41]
- device-strings = surround41:%f
- channel-map = front-left,front-right,rear-left,rear-right,lfe
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 8
-+priority = 13
- direction = output
- 
- [Mapping analog-surround-50]
- device-strings = surround50:%f
- channel-map = front-left,front-right,rear-left,rear-right,front-center
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 7
-+priority = 12
- direction = output
- 
- [Mapping analog-surround-51]
- device-strings = surround51:%f
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 8
-+priority = 13
- direction = output
- 
- [Mapping analog-surround-71]
-@@ -164,7 +164,7 @@ device-strings = surround71:%f
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
- description = Analog Surround 7.1
- paths-output = analog-output analog-output-lineout analog-output-speaker
--priority = 7
-+priority = 12
- direction = output
- 
- [Mapping iec958-stereo]
-@@ -200,7 +200,7 @@ description = Digital Stereo (HDMI)
- device-strings = hdmi:%f
- paths-output = hdmi-output-0
- channel-map = left,right
--priority = 4
-+priority = 9
- direction = output
- 
- [Mapping hdmi-surround]
-@@ -208,7 +208,7 @@ description = Digital Surround 5.1 (HDMI)
- device-strings = hdmi:%f
- paths-output = hdmi-output-0
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 3
-+priority = 8
- direction = output
- 
- [Mapping hdmi-surround71]
-@@ -216,7 +216,7 @@ description = Digital Surround 7.1 (HDMI)
- device-strings = hdmi:%f
- paths-output = hdmi-output-0
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 3
-+priority = 8
- direction = output
- 
- [Mapping hdmi-dts-surround]
-@@ -224,7 +224,7 @@ description = Digital Surround 5.1 (HDMI/DTS)
- device-strings = dcahdmi:%f
- paths-output = hdmi-output-0
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra1]
-@@ -232,7 +232,7 @@ description = Digital Stereo (HDMI 2)
- device-strings = hdmi:%f,1
- paths-output = hdmi-output-1
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra1]
-@@ -240,7 +240,7 @@ description = Digital Surround 5.1 (HDMI 2)
- device-strings = hdmi:%f,1
- paths-output = hdmi-output-1
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra1]
-@@ -248,7 +248,7 @@ description = Digital Surround 7.1 (HDMI 2)
- device-strings = hdmi:%f,1
- paths-output = hdmi-output-1
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra1]
-@@ -256,7 +256,7 @@ description = Digital Surround 5.1 (HDMI 2/DTS)
- device-strings = dcahdmi:%f,1
- paths-output = hdmi-output-1
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra2]
-@@ -264,7 +264,7 @@ description = Digital Stereo (HDMI 3)
- device-strings = hdmi:%f,2
- paths-output = hdmi-output-2
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra2]
-@@ -272,7 +272,7 @@ description = Digital Surround 5.1 (HDMI 3)
- device-strings = hdmi:%f,2
- paths-output = hdmi-output-2
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra2]
-@@ -280,7 +280,7 @@ description = Digital Surround 7.1 (HDMI 3)
- device-strings = hdmi:%f,2
- paths-output = hdmi-output-2
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra2]
-@@ -288,7 +288,7 @@ description = Digital Surround 5.1 (HDMI 3/DTS)
- device-strings = dcahdmi:%f,2
- paths-output = hdmi-output-2
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra3]
-@@ -296,7 +296,7 @@ description = Digital Stereo (HDMI 4)
- device-strings = hdmi:%f,3
- paths-output = hdmi-output-3
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra3]
-@@ -304,7 +304,7 @@ description = Digital Surround 5.1 (HDMI 4)
- device-strings = hdmi:%f,3
- paths-output = hdmi-output-3
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra3]
-@@ -312,7 +312,7 @@ description = Digital Surround 7.1 (HDMI 4)
- device-strings = hdmi:%f,3
- paths-output = hdmi-output-3
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra3]
-@@ -320,7 +320,7 @@ description = Digital Surround 5.1 (HDMI 4/DTS)
- device-strings = dcahdmi:%f,3
- paths-output = hdmi-output-3
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra4]
-@@ -328,7 +328,7 @@ description = Digital Stereo (HDMI 5)
- device-strings = hdmi:%f,4
- paths-output = hdmi-output-4
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra4]
-@@ -336,7 +336,7 @@ description = Digital Surround 5.1 (HDMI 5)
- device-strings = hdmi:%f,4
- paths-output = hdmi-output-4
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra4]
-@@ -344,7 +344,7 @@ description = Digital Surround 7.1 (HDMI 5)
- device-strings = hdmi:%f,4
- paths-output = hdmi-output-4
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra4]
-@@ -352,7 +352,7 @@ description = Digital Surround 5.1 (HDMI 5/DTS)
- device-strings = dcahdmi:%f,4
- paths-output = hdmi-output-4
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra5]
-@@ -360,7 +360,7 @@ description = Digital Stereo (HDMI 6)
- device-strings = hdmi:%f,5
- paths-output = hdmi-output-5
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra5]
-@@ -368,7 +368,7 @@ description = Digital Surround 5.1 (HDMI 6)
- device-strings = hdmi:%f,5
- paths-output = hdmi-output-5
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra5]
-@@ -376,7 +376,7 @@ description = Digital Surround 7.1 (HDMI 6)
- device-strings = hdmi:%f,5
- paths-output = hdmi-output-5
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra5]
-@@ -384,7 +384,7 @@ description = Digital Surround 5.1 (HDMI 6/DTS)
- device-strings = dcahdmi:%f,5
- paths-output = hdmi-output-5
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra6]
-@@ -392,7 +392,7 @@ description = Digital Stereo (HDMI 7)
- device-strings = hdmi:%f,6
- paths-output = hdmi-output-6
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra6]
-@@ -400,7 +400,7 @@ description = Digital Surround 5.1 (HDMI 7)
- device-strings = hdmi:%f,6
- paths-output = hdmi-output-6
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra6]
-@@ -408,7 +408,7 @@ description = Digital Surround 7.1 (HDMI 7)
- device-strings = hdmi:%f,6
- paths-output = hdmi-output-6
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra6]
-@@ -416,7 +416,7 @@ description = Digital Surround 5.1 (HDMI 7/DTS)
- device-strings = dcahdmi:%f,6
- paths-output = hdmi-output-6
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-stereo-extra7]
-@@ -424,7 +424,7 @@ description = Digital Stereo (HDMI 8)
- device-strings = hdmi:%f,7
- paths-output = hdmi-output-7
- channel-map = left,right
--priority = 2
-+priority = 7
- direction = output
- 
- [Mapping hdmi-surround-extra7]
-@@ -432,7 +432,7 @@ description = Digital Surround 5.1 (HDMI 8)
- device-strings = hdmi:%f,7
- paths-output = hdmi-output-7
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-surround71-extra7]
-@@ -440,7 +440,7 @@ description = Digital Surround 7.1 (HDMI 8)
- device-strings = hdmi:%f,7
- paths-output = hdmi-output-7
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping hdmi-dts-surround-extra7]
-@@ -448,7 +448,7 @@ description = Digital Surround 5.1 (HDMI 8/DTS)
- device-strings = dcahdmi:%f,7
- paths-output = hdmi-output-7
- channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
--priority = 1
-+priority = 6
- direction = output
- 
- [Mapping multichannel-output]
--- 
-2.13.6
-
diff --git a/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch b/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch
deleted file mode 100644
index dd5dc96..0000000
--- a/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 2f1dcea363342154a1f6af7bd4ade3f87403b744 Mon Sep 17 00:00:00 2001
-From: Hui Wang <hui.wang@canonical.com>
-Date: Mon, 13 Nov 2017 10:17:19 +0800
-Subject: [PATCH 74/85] build-sys: add the Dell dock TB16 configuration
-
-Signed-off-by: Hui Wang <hui.wang@canonical.com>
----
- src/Makefile.am | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index e610db74..03482502 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1312,7 +1312,8 @@ dist_alsaprofilesets_DATA = \
- 		modules/alsa/mixer/profile-sets/native-instruments-korecontroller.conf \
- 		modules/alsa/mixer/profile-sets/kinect-audio.conf \
- 		modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf \
--		modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf
-+		modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf \
-+		modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf
- 
- if HAVE_UDEV
- dist_udevrules_DATA = \
--- 
-2.14.3
-
diff --git a/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch b/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch
deleted file mode 100644
index afd14bc..0000000
--- a/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 59d264ac56d644f626251daa44ef7b39a9a9fe03 Mon Sep 17 00:00:00 2001
-From: Georg Chini <georg@chini.tk>
-Date: Sun, 3 Dec 2017 22:29:09 +0100
-Subject: [PATCH 84/85] sink, source: Don't finish move if unlink happens after
- pa_*_move_all_start()
-
-When a sink input was unlinked between the calls to pa_sink_move_all_start() and
-pa_sink_move_all_finish(), pa_sink_move_all_finish() tried to finish the move
-of the already unlinked sink input, which lead to an assertion in
-pa_sink_input_finish_move(). The same applies for the source side.
-
-This patch fixes the problem by checking the state of the sink input or
-source output in pa_*_move_all_finish().
-
-Bug report: https://bugs.freedesktop.org/show_bug.cgi?id=103752
----
- src/pulsecore/sink.c   | 6 ++++--
- src/pulsecore/source.c | 6 ++++--
- 2 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
-index 017b9539..39bf18f1 100644
---- a/src/pulsecore/sink.c
-+++ b/src/pulsecore/sink.c
-@@ -920,9 +920,11 @@ void pa_sink_move_all_finish(pa_sink *s, pa_queue *q, bool save) {
-     pa_assert(q);
- 
-     while ((i = PA_SINK_INPUT(pa_queue_pop(q)))) {
--        if (pa_sink_input_finish_move(i, s, save) < 0)
--            pa_sink_input_fail_move(i);
-+        if (PA_SINK_INPUT_IS_LINKED(i->state)) {
-+            if (pa_sink_input_finish_move(i, s, save) < 0)
-+                pa_sink_input_fail_move(i);
- 
-+        }
-         pa_sink_input_unref(i);
-     }
- 
-diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
-index d579c357..6099c10d 100644
---- a/src/pulsecore/source.c
-+++ b/src/pulsecore/source.c
-@@ -860,9 +860,11 @@ void pa_source_move_all_finish(pa_source *s, pa_queue *q, bool save) {
-     pa_assert(q);
- 
-     while ((o = PA_SOURCE_OUTPUT(pa_queue_pop(q)))) {
--        if (pa_source_output_finish_move(o, s, save) < 0)
--            pa_source_output_fail_move(o);
-+        if (PA_SOURCE_OUTPUT_IS_LINKED(o->state)) {
-+            if (pa_source_output_finish_move(o, s, save) < 0)
-+                pa_source_output_fail_move(o);
- 
-+        }
-         pa_source_output_unref(o);
-     }
- 
--- 
-2.14.3
-
diff --git a/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch b/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch
deleted file mode 100644
index e298aae..0000000
--- a/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 2062fc8b0e69f383cfd4c4773bf8b9dcef20e035 Mon Sep 17 00:00:00 2001
-From: Arun Raghavan <arun@arunraghavan.net>
-Date: Fri, 27 Oct 2017 09:29:19 +0530
-Subject: [PATCH 085/106] client-conf: Add a default value for disable-memfd
-
-This got missed while adding the client option.
----
- src/pulse/client-conf.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c
-index a3c9486d..1daaf911 100644
---- a/src/pulse/client-conf.c
-+++ b/src/pulse/client-conf.c
-@@ -65,6 +65,7 @@ static const pa_client_conf default_conf = {
-     .cookie_file_from_client_conf = NULL,
-     .autospawn = true,
-     .disable_shm = false,
-+    .disable_memfd = false,
-     .shm_size = 0,
-     .auto_connect_localhost = false,
-     .auto_connect_display = false
--- 
-2.14.3
-
diff --git a/SOURCES/0090-qpaeq-port-to-PyQt5.patch b/SOURCES/0090-qpaeq-port-to-PyQt5.patch
deleted file mode 100644
index aa4495e..0000000
--- a/SOURCES/0090-qpaeq-port-to-PyQt5.patch
+++ /dev/null
@@ -1,201 +0,0 @@
-From 480e0e74f43565d7ece72141666961ae8cc2ed75 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= <andrius@stikonas.eu>
-Date: Mon, 20 Nov 2017 19:56:53 +0000
-Subject: [PATCH 090/106] qpaeq: port to PyQt5
-
----
- src/utils/qpaeq | 68 ++++++++++++++++++++++++++++-----------------------------
- 1 file changed, 34 insertions(+), 34 deletions(-)
-
-diff --git a/src/utils/qpaeq b/src/utils/qpaeq
-index f657659d..651d3a4e 100755
---- a/src/utils/qpaeq
-+++ b/src/utils/qpaeq
-@@ -18,13 +18,13 @@
- 
- import os,math,sys
- try:
--    import PyQt4,sip
--    from PyQt4 import QtGui,QtCore
-+    import PyQt5,sip
-+    from PyQt5 import QtWidgets,QtCore
-     import dbus.mainloop.qt
-     import dbus
- except ImportError as e:
-     sys.stderr.write('There was an error importing needed libraries\n'
--                     'Make sure you have qt4 and dbus-python installed\n'
-+                     'Make sure you have qt5 and dbus-python installed\n'
-                      'The error that occured was:\n'
-                      '\t%s\n' % (str(e)))
-     sys.exit(-1)
-@@ -62,7 +62,7 @@ def connect():
- prop_iface='org.freedesktop.DBus.Properties'
- eq_iface='org.PulseAudio.Ext.Equalizing1.Equalizer'
- device_iface='org.PulseAudio.Core1.Device'
--class QPaeq(QtGui.QWidget):
-+class QPaeq(QtWidgets.QWidget):
-     manager_path='/org/pulseaudio/equalizing1'
-     manager_iface='org.PulseAudio.Ext.Equalizing1.Manager'
-     core_iface='org.PulseAudio.Core1'
-@@ -70,7 +70,7 @@ class QPaeq(QtGui.QWidget):
-     module_name='module-equalizer-sink'
- 
-     def __init__(self):
--        QtGui.QWidget.__init__(self)
-+        QtWidgets.QWidget.__init__(self)
-         self.setWindowTitle('qpaeq')
-         self.slider_widget=None
-         self.sink_name=None
-@@ -84,50 +84,50 @@ class QPaeq(QtGui.QWidget):
-         self.setMinimumSize(self.sizeHint())
- 
-     def create_layout(self):
--        self.main_layout=QtGui.QVBoxLayout()
-+        self.main_layout=QtWidgets.QVBoxLayout()
-         self.setLayout(self.main_layout)
--        toprow_layout=QtGui.QHBoxLayout()
--        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
-+        toprow_layout=QtWidgets.QHBoxLayout()
-+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
-         sizePolicy.setHorizontalStretch(0)
-         sizePolicy.setVerticalStretch(0)
-         #sizePolicy.setHeightForWidth(self.profile_box.sizePolicy().hasHeightForWidth())
- 
--        toprow_layout.addWidget(QtGui.QLabel('Sink'))
--        self.sink_box = QtGui.QComboBox()
-+        toprow_layout.addWidget(QtWidgets.QLabel('Sink'))
-+        self.sink_box = QtWidgets.QComboBox()
-         self.sink_box.setSizePolicy(sizePolicy)
-         self.sink_box.setDuplicatesEnabled(False)
--        self.sink_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically)
--        #self.sink_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
-+        self.sink_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically)
-+        #self.sink_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
-         toprow_layout.addWidget(self.sink_box)
- 
--        toprow_layout.addWidget(QtGui.QLabel('Channel'))
--        self.channel_box = QtGui.QComboBox()
-+        toprow_layout.addWidget(QtWidgets.QLabel('Channel'))
-+        self.channel_box = QtWidgets.QComboBox()
-         self.channel_box.setSizePolicy(sizePolicy)
-         toprow_layout.addWidget(self.channel_box)
- 
--        toprow_layout.addWidget(QtGui.QLabel('Preset'))
--        self.profile_box = QtGui.QComboBox()
-+        toprow_layout.addWidget(QtWidgets.QLabel('Preset'))
-+        self.profile_box = QtWidgets.QComboBox()
-         self.profile_box.setSizePolicy(sizePolicy)
--        self.profile_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically)
--        #self.profile_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
-+        self.profile_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically)
-+        #self.profile_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
-         toprow_layout.addWidget(self.profile_box)
- 
--        large_icon_size=self.style().pixelMetric(QtGui.QStyle.PM_LargeIconSize)
-+        large_icon_size=self.style().pixelMetric(QtWidgets.QStyle.PM_LargeIconSize)
-         large_icon_size=QtCore.QSize(large_icon_size,large_icon_size)
--        save_profile=QtGui.QToolButton()
--        save_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_DriveFDIcon))
-+        save_profile=QtWidgets.QToolButton()
-+        save_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DriveFDIcon))
-         save_profile.setIconSize(large_icon_size)
-         save_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
-         save_profile.clicked.connect(self.save_profile)
--        remove_profile=QtGui.QToolButton()
--        remove_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_TrashIcon))
-+        remove_profile=QtWidgets.QToolButton()
-+        remove_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_TrashIcon))
-         remove_profile.setIconSize(large_icon_size)
-         remove_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
-         remove_profile.clicked.connect(self.remove_profile)
-         toprow_layout.addWidget(save_profile)
-         toprow_layout.addWidget(remove_profile)
- 
--        reset_button = QtGui.QPushButton('Reset')
-+        reset_button = QtWidgets.QPushButton('Reset')
-         reset_button.clicked.connect(self.reset)
-         toprow_layout.addStretch()
-         toprow_layout.addWidget(reset_button)
-@@ -192,11 +192,11 @@ class QPaeq(QtGui.QWidget):
-     def save_profile(self):
-         #popup dialog box for name
-         current=self.profile_box.currentIndex()
--        profile,ok=QtGui.QInputDialog.getItem(self,'Preset Name','Preset',self.profiles,current)
-+        profile,ok=QtWidgets.QInputDialog.getItem(self,'Preset Name','Preset',self.profiles,current)
-         if not ok or profile=='':
-             return
-         if profile in self.profiles:
--            mbox=QtGui.QMessageBox(self)
-+            mbox=QtWidgets.QMessageBox(self)
-             mbox.setText('%s preset already exists'%(profile,))
-             mbox.setInformativeText('Do you want to save over it?')
-             mbox.setStandardButtons(mbox.Save|mbox.Discard|mbox.Cancel)
-@@ -217,7 +217,7 @@ class QPaeq(QtGui.QWidget):
-         profile=self.profile_box.itemText(x)
-         self.filter_state.load_profile(profile)
-     def select_channel(self,x):
--        self.filter_state.channel = self.channel_box.itemData(x).toPyObject()
-+        self.filter_state.channel = self.channel_box.itemData(x)
-         self._set_profile_name()
-         self.filter_state.readback()
- 
-@@ -295,13 +295,13 @@ class QPaeq(QtGui.QWidget):
-         self.profile_box.blockSignals(False)
- 
- 
--class SliderArray(QtGui.QWidget):
-+class SliderArray(QtWidgets.QWidget):
-     def __init__(self,filter_state,parent=None):
-         super(SliderArray,self).__init__(parent)
-         #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;')
-         #self.setStyleSheet('font-family: monospace;'+outline%('blue'))
-         self.filter_state=filter_state
--        self.setLayout(QtGui.QHBoxLayout())
-+        self.setLayout(QtWidgets.QHBoxLayout())
-         self.sub_array=None
-         self.set_sub_array(SliderArraySub(self.filter_state))
-         self.inhibit_resize=0
-@@ -359,11 +359,11 @@ class SliderArray(QtGui.QWidget):
-         self.set_sub_array(SliderArraySub(self.filter_state))
-         self.inhibit_resize-=1
- 
--class SliderArraySub(QtGui.QWidget):
-+class SliderArraySub(QtWidgets.QWidget):
-     def __init__(self,filter_state,parent=None):
-         super(SliderArraySub,self).__init__(parent)
-         self.filter_state=filter_state
--        self.setLayout(QtGui.QGridLayout())
-+        self.setLayout(QtWidgets.QGridLayout())
-         self.slider=[None]*len(self.filter_state.frequencies)
-         self.label=[None]*len(self.slider)
-         #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;')
-@@ -375,7 +375,7 @@ class SliderArraySub(QtGui.QWidget):
-             self.layout().addWidget(label,1,c,qt.AlignHCenter)
-             self.layout().setColumnMinimumWidth(c,max(label.sizeHint().width(),slider.sizeHint().width()))
-         def create_slider(slider_label):
--            slider=QtGui.QSlider(QtCore.Qt.Vertical,self)
-+            slider=QtWidgets.QSlider(QtCore.Qt.Vertical,self)
-             label=SliderLabel(slider_label,filter_state,self)
-             slider.setRange(-1000,2000)
-             slider.setSingleStep(1)
-@@ -461,7 +461,7 @@ class SliderArraySub(QtGui.QWidget):
-         return int((x-1.0)*1000)
- outline='border-width: 1px; border-style: solid; border-color: %s;'
- 
--class SliderLabel(QtGui.QLabel):
-+class SliderLabel(QtWidgets.QLabel):
-     clicked=QtCore.pyqtSignal()
-     def __init__(self,label_text,filter_state,parent=None):
-         super(SliderLabel,self).__init__(parent)
-@@ -566,7 +566,7 @@ def subdivide(xs, t_points):
- 
- def main():
-     dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)
--    app=QtGui.QApplication(sys.argv)
-+    app=QtWidgets.QApplication(sys.argv)
-     qpaeq_main=QPaeq()
-     qpaeq_main.show()
-     sys.exit(app.exec_())
--- 
-2.14.3
-
diff --git a/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch b/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch
deleted file mode 100644
index ddd7abd..0000000
--- a/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-From 94fc586c011537536cfb434376354699357af785 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Thu, 28 Dec 2017 12:09:17 +0200
-Subject: [PATCH 093/106] alsa: fix infinite loop with Intel HDMI LPE
-
-The Intel HDMI LPE driver works in a peculiar way when the HDMI cable is
-not plugged in: any written audio is immediately discarded and underrun
-is reported. That resulted in an infinite loop, because PulseAudio tried
-to keep the buffer filled, which was futile since the written audio was
-immediately consumed/discarded.
-
-This patch adds special handling for the LPE driver: if the active port
-of the sink is unavailable, the sink suspends itself. A new suspend
-cause is added: PA_SUSPEND_UNAVAILABLE.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
----
- src/modules/alsa/alsa-mixer.h       |  1 +
- src/modules/alsa/alsa-sink.c        | 22 ++++++++++++++++++++++
- src/modules/alsa/module-alsa-card.c | 34 ++++++++++++++++++++++++++++++++++
- src/pulsecore/core.h                |  1 +
- 4 files changed, 58 insertions(+)
-
-diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
-index 4ebf1922..3577f435 100644
---- a/src/modules/alsa/alsa-mixer.h
-+++ b/src/modules/alsa/alsa-mixer.h
-@@ -364,6 +364,7 @@ int pa_alsa_set_mixer_rtpoll(struct pa_alsa_mixer_pdata *pd, snd_mixer_t *mixer,
- struct pa_alsa_port_data {
-     pa_alsa_path *path;
-     pa_alsa_setting *setting;
-+    bool suspend_when_unavailable;
- };
- 
- void pa_alsa_add_ports(void *sink_or_source_new_data, pa_alsa_path_set *ps, pa_card *card);
-diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
-index 7936cfac..a80caab2 100644
---- a/src/modules/alsa/alsa-sink.c
-+++ b/src/modules/alsa/alsa-sink.c
-@@ -1527,6 +1527,11 @@ static int sink_set_port_cb(pa_sink *s, pa_device_port *p) {
-             s->set_volume(s);
-     }
- 
-+    if (data->suspend_when_unavailable && p->available == PA_AVAILABLE_NO)
-+        pa_sink_suspend(s, true, PA_SUSPEND_UNAVAILABLE);
-+    else
-+        pa_sink_suspend(s, false, PA_SUSPEND_UNAVAILABLE);
-+
-     return 0;
- }
- 
-@@ -2460,6 +2465,23 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
-     if (profile_set)
-         pa_alsa_profile_set_free(profile_set);
- 
-+    /* Suspend if necessary. FIXME: It would be better to start suspended, but
-+     * that would require some core changes. It's possible to set
-+     * pa_sink_new_data.suspend_cause, but that has to be done before the
-+     * pa_sink_new() call, and we know if we need to suspend only after the
-+     * pa_sink_new() call when the initial port has been chosen. Calling
-+     * pa_sink_suspend() between pa_sink_new() and pa_sink_put() would
-+     * otherwise work, but currently pa_sink_suspend() will crash if
-+     * pa_sink_put() hasn't been called. */
-+    if (u->sink->active_port) {
-+        pa_alsa_port_data *port_data;
-+
-+        port_data = PA_DEVICE_PORT_DATA(u->sink->active_port);
-+
-+        if (port_data->suspend_when_unavailable && u->sink->active_port->available == PA_AVAILABLE_NO)
-+            pa_sink_suspend(u->sink, true, PA_SUSPEND_UNAVAILABLE);
-+    }
-+
-     return u->sink;
- 
- fail:
-diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
-index 804b4f87..b193d40c 100644
---- a/src/modules/alsa/module-alsa-card.c
-+++ b/src/modules/alsa/module-alsa-card.c
-@@ -426,6 +426,22 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) {
-         if (tp->avail == PA_AVAILABLE_NO)
-            pa_device_port_set_available(tp->port, tp->avail);
- 
-+    for (tp = tports; tp->port; tp++) {
-+        pa_alsa_port_data *data;
-+        pa_sink *sink;
-+        uint32_t idx;
-+
-+        data = PA_DEVICE_PORT_DATA(tp->port);
-+
-+        if (!data->suspend_when_unavailable)
-+            continue;
-+
-+        PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
-+            if (sink->active_port == tp->port)
-+                pa_sink_suspend(sink, tp->avail == PA_AVAILABLE_NO, PA_SUSPEND_UNAVAILABLE);
-+        }
-+    }
-+
-     /* Update profile availabilities. The logic could be improved; for now we
-      * only set obviously unavailable profiles (those that contain only
-      * unavailable ports) to PA_AVAILABLE_NO and all others to
-@@ -836,6 +852,24 @@ int pa__init(pa_module *m) {
-         goto fail;
-     }
- 
-+    /* The Intel HDMI LPE driver needs some special handling. When the HDMI
-+     * cable is not plugged in, trying to play audio doesn't work. Any written
-+     * audio is immediately discarded and an underrun is reported, and that
-+     * results in an infinite loop of "fill buffer, handle underrun". To work
-+     * around this issue, the suspend_when_unavailable flag is used to stop
-+     * playback when the HDMI cable is unplugged. */
-+    if (pa_safe_streq(pa_proplist_gets(data.proplist, "alsa.driver_name"), "snd_hdmi_lpe_audio")) {
-+        pa_device_port *port;
-+        void *state;
-+
-+        PA_HASHMAP_FOREACH(port, data.ports, state) {
-+            pa_alsa_port_data *port_data;
-+
-+            port_data = PA_DEVICE_PORT_DATA(port);
-+            port_data->suspend_when_unavailable = true;
-+        }
-+    }
-+
-     u->card = pa_card_new(m->core, &data);
-     pa_card_new_data_done(&data);
- 
-diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
-index 79a095d2..afe6c25e 100644
---- a/src/pulsecore/core.h
-+++ b/src/pulsecore/core.h
-@@ -34,6 +34,7 @@ typedef enum pa_suspend_cause {
-     PA_SUSPEND_SESSION = 8,      /* Used by module-hal for mark inactive sessions */
-     PA_SUSPEND_PASSTHROUGH = 16, /* Used to suspend monitor sources when the sink is in passthrough mode */
-     PA_SUSPEND_INTERNAL = 32,    /* This is used for short period server-internal suspends, such as for sample rate updates */
-+    PA_SUSPEND_UNAVAILABLE = 64, /* Used by device implementations that have to suspend when the device is unavailable */
-     PA_SUSPEND_ALL = 0xFFFF      /* Magic cause that can be used to resume forcibly */
- } pa_suspend_cause_t;
- 
--- 
-2.14.3
-
diff --git a/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch b/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch
deleted file mode 100644
index f3d3b61..0000000
--- a/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From dfb0460fb4743aec047cdf755a660a9ac2d0f3fb Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Wed, 24 Jan 2018 03:51:49 +0200
-Subject: [PATCH 106/106] memfd-wrappers: only define memfd_create() if not
- already defined
-
-glibc 2.27 is to be released soon, and it will provide memfd_create().
-If glibc provides the function, we must not define it ourselves,
-otherwise building fails due to conflict between the two implementations
-of the same function.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104733
----
- configure.ac                   | 3 +++
- src/pulsecore/memfd-wrappers.h | 7 ++++---
- 2 files changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 0084c86e..0eb44b08 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -610,6 +610,9 @@ AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"],
-     [AC_MSG_ERROR([*** Your Linux kernel does not support memfd shared memory.
-                   *** Use linux v3.17 or higher for such a feature.])])
- 
-+AS_IF([test "x$HAVE_MEMFD" = "x1"],
-+    AC_CHECK_FUNCS([memfd_create]))
-+
- AC_SUBST(HAVE_MEMFD)
- AM_CONDITIONAL([HAVE_MEMFD], [test "x$HAVE_MEMFD" = x1])
- AS_IF([test "x$HAVE_MEMFD" = "x1"], AC_DEFINE([HAVE_MEMFD], 1, [Have memfd shared memory.]))
-diff --git a/src/pulsecore/memfd-wrappers.h b/src/pulsecore/memfd-wrappers.h
-index 3bed9b2b..c7aadfd3 100644
---- a/src/pulsecore/memfd-wrappers.h
-+++ b/src/pulsecore/memfd-wrappers.h
-@@ -20,13 +20,14 @@
-   License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
- ***/
- 
--#ifdef HAVE_MEMFD
-+#if defined(HAVE_MEMFD) && !defined(HAVE_MEMFD_CREATE)
- 
- #include <sys/syscall.h>
- #include <fcntl.h>
- 
- /*
-- * No glibc wrappers exist for memfd_create(2), so provide our own.
-+ * Before glibc version 2.27 there was no wrapper for memfd_create(2),
-+ * so we have to provide our own.
-  *
-  * Also define memfd fcntl sealing macros. While they are already
-  * defined in the kernel header file <linux/fcntl.h>, that file as
-@@ -63,6 +64,6 @@ static inline int memfd_create(const char *name, unsigned int flags) {
- #define F_SEAL_WRITE    0x0008  /* prevent writes */
- #endif
- 
--#endif /* HAVE_MEMFD */
-+#endif /* HAVE_MEMFD && !HAVE_MEMFD_CREATE */
- 
- #endif
--- 
-2.14.3
-
diff --git a/SOURCES/Fix-Intel-HDMI-LPE-problems.patch b/SOURCES/Fix-Intel-HDMI-LPE-problems.patch
deleted file mode 100644
index cb31b30..0000000
--- a/SOURCES/Fix-Intel-HDMI-LPE-problems.patch
+++ /dev/null
@@ -1,621 +0,0 @@
-From patchwork Sun Oct  8 16:48:24 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v2,1/3] alsa-mixer: add hw_device_index to pa_alsa_mapping
-From: Tanu Kaskinen <tanuk@iki.fi>
-X-Patchwork-Id: 181163
-Message-Id: <20171008164826.7588-2-tanuk@iki.fi>
-To: pulseaudio-discuss@lists.freedesktop.org
-Date: Sun,  8 Oct 2017 19:48:24 +0300
-
-We have so far assumed that HDMI always uses device indexes 3, 7, 8, 9,
-10, 11, 12 and 13. These values are hardcoded in the path configuration.
-The Intel HDMI LPE driver, however, uses different device numbering
-scheme. Since the indexes aren't always the same, we need to query the
-hw device index from ALSA.
-
-Later patches will use the queried index for HDMI jack detection and ELD
-information reading.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
----
- src/modules/alsa/alsa-mixer.c | 26 ++++++++++++++++++++++++++
- src/modules/alsa/alsa-mixer.h |  4 ++++
- 2 files changed, 30 insertions(+)
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index 7de1c7deb..02ab4a611 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -3505,6 +3505,7 @@ pa_alsa_mapping *pa_alsa_mapping_get(pa_alsa_profile_set *ps, const char *name)
-     pa_sample_spec_init(&m->sample_spec);
-     pa_channel_map_init(&m->channel_map);
-     m->proplist = pa_proplist_new();
-+    m->hw_device_index = -1;
- 
-     pa_hashmap_put(ps->mappings, m->name, m);
- 
-@@ -4532,6 +4533,25 @@ static int add_profiles_to_probe(
-     return i;
- }
- 
-+static void mapping_query_hw_device(pa_alsa_mapping *mapping, snd_pcm_t *pcm) {
-+    int r;
-+    snd_pcm_info_t* pcm_info;
-+    snd_pcm_info_alloca(&pcm_info);
-+
-+    r = snd_pcm_info(pcm, pcm_info);
-+    if (r < 0) {
-+        pa_log("Mapping %s: snd_pcm_info() failed %s: ", mapping->name, pa_alsa_strerror(r));
-+        return;
-+    }
-+
-+    /* XXX: It's not clear what snd_pcm_info_get_device() does if the device is
-+     * not backed by a hw device or if it's backed by multiple hw devices. We
-+     * only use hw_device_index for HDMI devices, however, and for those the
-+     * return value is expected to be always valid, so this shouldn't be a
-+     * significant problem. */
-+    mapping->hw_device_index = snd_pcm_info_get_device(pcm_info);
-+}
-+
- void pa_alsa_profile_set_probe(
-         pa_alsa_profile_set *ps,
-         const char *dev_id,
-@@ -4622,6 +4642,9 @@ void pa_alsa_profile_set_probe(
-                         }
-                         break;
-                     }
-+
-+                    if (m->hw_device_index < 0)
-+                        mapping_query_hw_device(m, m->output_pcm);
-                 }
- 
-             if (p->input_mappings && p->supported)
-@@ -4643,6 +4666,9 @@ void pa_alsa_profile_set_probe(
-                         }
-                         break;
-                     }
-+
-+                    if (m->hw_device_index < 0)
-+                        mapping_query_hw_device(m, m->input_pcm);
-                 }
- 
-             last = p;
-diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
-index 4ebf1922b..cb482906b 100644
---- a/src/modules/alsa/alsa-mixer.h
-+++ b/src/modules/alsa/alsa-mixer.h
-@@ -275,6 +275,10 @@ struct pa_alsa_mapping {
-     bool exact_channels:1;
-     bool fallback:1;
- 
-+    /* The "y" in "hw:x,y". This is set to -1 before the device index has been
-+     * queried, or if the query failed. */
-+    int hw_device_index;
-+
-     /* Temporarily used during probing */
-     snd_pcm_t *input_pcm;
-     snd_pcm_t *output_pcm;
-
-From patchwork Sun Oct  8 16:48:25 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v2,2/3] alsa-mixer: autodetect the HDMI jack PCM device
-From: Tanu Kaskinen <tanuk@iki.fi>
-X-Patchwork-Id: 181164
-Message-Id: <20171008164826.7588-3-tanuk@iki.fi>
-To: pulseaudio-discuss@lists.freedesktop.org
-Date: Sun,  8 Oct 2017 19:48:25 +0300
-
-This removes the need to hardcode the PCM device index in the HDMI jack
-names. The hardcoded values don't work with the Intel HDMI LPE driver.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
----
- src/modules/alsa/alsa-mixer.c                      | 53 ++++++++++++++++++++--
- src/modules/alsa/alsa-mixer.h                      |  4 +-
- src/modules/alsa/alsa-sink.c                       |  2 +-
- src/modules/alsa/alsa-source.c                     |  2 +-
- .../alsa/mixer/paths/analog-output.conf.common     |  4 ++
- src/modules/alsa/mixer/paths/hdmi-output-0.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-1.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-2.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-3.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-4.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-5.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-6.conf    |  3 +-
- src/modules/alsa/mixer/paths/hdmi-output-7.conf    |  3 +-
- 13 files changed, 73 insertions(+), 16 deletions(-)
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index 02ab4a611..eaee7ea0a 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -1812,12 +1812,31 @@ static int element_probe(pa_alsa_element *e, snd_mixer_t *m) {
-     return 0;
- }
- 
--static int jack_probe(pa_alsa_jack *j, snd_mixer_t *m) {
-+static int jack_probe(pa_alsa_jack *j, pa_alsa_mapping *mapping, snd_mixer_t *m) {
-     bool has_control;
- 
-     pa_assert(j);
-     pa_assert(j->path);
- 
-+    if (j->append_pcm_to_name) {
-+        char *new_name;
-+
-+        if (!mapping) {
-+            /* This could also be an assertion, because this should never
-+             * happen. At the time of writing, mapping can only be NULL when
-+             * module-alsa-sink/source synthesizes a path, and those
-+             * synthesized paths never have any jacks, so jack_probe() should
-+             * never be called with a NULL mapping. */
-+            pa_log("Jack %s: append_pcm_to_name is set, but mapping is NULL. Can't use this jack.", j->name);
-+            return -1;
-+        }
-+
-+        new_name = pa_sprintf_malloc("%s,pcm=%i Jack", j->name, mapping->hw_device_index);
-+        pa_xfree(j->alsa_name);
-+        j->alsa_name = new_name;
-+        j->append_pcm_to_name = false;
-+    }
-+
-     has_control = pa_alsa_mixer_find(m, j->alsa_name, 0) != NULL;
-     pa_alsa_jack_set_has_control(j, has_control);
- 
-@@ -2326,6 +2345,30 @@ static int jack_parse_state(pa_config_parser_state *state) {
-     return 0;
- }
- 
-+static int jack_parse_append_pcm_to_name(pa_config_parser_state *state) {
-+    pa_alsa_path *path;
-+    pa_alsa_jack *jack;
-+    int b;
-+
-+    pa_assert(state);
-+
-+    path = state->userdata;
-+    if (!(jack = jack_get(path, state->section))) {
-+        pa_log("[%s:%u] Option 'append_pcm_to_name' not expected in section '%s'",
-+               state->filename, state->lineno, state->section);
-+        return -1;
-+    }
-+
-+    b = pa_parse_boolean(state->rvalue);
-+    if (b < 0) {
-+        pa_log("[%s:%u] Invalid value for 'append_pcm_to_name': %s", state->filename, state->lineno, state->rvalue);
-+        return -1;
-+    }
-+
-+    jack->append_pcm_to_name = b;
-+    return 0;
-+}
-+
- static int element_set_option(pa_alsa_element *e, snd_mixer_t *m, int alsa_idx) {
-     snd_mixer_selem_id_t *sid;
-     snd_mixer_elem_t *me;
-@@ -2534,6 +2577,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa
-         /* [Jack ...] */
-         { "state.plugged",       jack_parse_state,                  NULL, NULL },
-         { "state.unplugged",     jack_parse_state,                  NULL, NULL },
-+        { "append-pcm-to-name",  jack_parse_append_pcm_to_name,     NULL, NULL },
- 
-         /* [Element ...] */
-         { "switch",              element_parse_switch,              NULL, NULL },
-@@ -2746,7 +2790,7 @@ static void path_create_settings(pa_alsa_path *p) {
-     element_create_settings(p->elements, NULL);
- }
- 
--int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB) {
-+int pa_alsa_path_probe(pa_alsa_path *p, pa_alsa_mapping *mapping, snd_mixer_t *m, bool ignore_dB) {
-     pa_alsa_element *e;
-     pa_alsa_jack *j;
-     double min_dB[PA_CHANNEL_POSITION_MAX], max_dB[PA_CHANNEL_POSITION_MAX];
-@@ -2766,7 +2810,7 @@ int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB) {
-     pa_log_debug("Probing path '%s'", p->name);
- 
-     PA_LLIST_FOREACH(j, p->jacks) {
--        if (jack_probe(j, m) < 0) {
-+        if (jack_probe(j, mapping, m) < 0) {
-             p->supported = false;
-             pa_log_debug("Probe of jack '%s' failed.", j->alsa_name);
-             return -1;
-@@ -3968,9 +4012,8 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
-     }
- 
-     PA_HASHMAP_FOREACH(p, ps->paths, state) {
--        if (pa_alsa_path_probe(p, mixer_handle, m->profile_set->ignore_dB) < 0) {
-+        if (pa_alsa_path_probe(p, m, mixer_handle, m->profile_set->ignore_dB) < 0)
-             pa_hashmap_remove(ps->paths, p);
--        }
-     }
- 
-     path_set_condense(ps, mixer_handle);
-diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
-index cb482906b..7ae40511c 100644
---- a/src/modules/alsa/alsa-mixer.h
-+++ b/src/modules/alsa/alsa-mixer.h
-@@ -171,6 +171,8 @@ struct pa_alsa_jack {
- 
-     pa_dynarray *ucm_devices; /* pa_alsa_ucm_device */
-     pa_dynarray *ucm_hw_mute_devices; /* pa_alsa_ucm_device */
-+
-+    bool append_pcm_to_name;
- };
- 
- pa_alsa_jack *pa_alsa_jack_new(pa_alsa_path *path, const char *name);
-@@ -234,7 +236,7 @@ void pa_alsa_element_dump(pa_alsa_element *e);
- 
- pa_alsa_path *pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa_direction_t direction);
- pa_alsa_path *pa_alsa_path_synthesize(const char *element, pa_alsa_direction_t direction);
--int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB);
-+int pa_alsa_path_probe(pa_alsa_path *p, pa_alsa_mapping *mapping, snd_mixer_t *m, bool ignore_dB);
- void pa_alsa_path_dump(pa_alsa_path *p);
- int pa_alsa_path_get_volume(pa_alsa_path *p, snd_mixer_t *m, const pa_channel_map *cm, pa_cvolume *v);
- int pa_alsa_path_get_mute(pa_alsa_path *path, snd_mixer_t *m, bool *muted);
-diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
-index 827a65081..99ca5061b 100644
---- a/src/modules/alsa/alsa-sink.c
-+++ b/src/modules/alsa/alsa-sink.c
-@@ -1912,7 +1912,7 @@ static void find_mixer(struct userdata *u, pa_alsa_mapping *mapping, const char
-         if (!(u->mixer_path = pa_alsa_path_synthesize(element, PA_ALSA_DIRECTION_OUTPUT)))
-             goto fail;
- 
--        if (pa_alsa_path_probe(u->mixer_path, u->mixer_handle, ignore_dB) < 0)
-+        if (pa_alsa_path_probe(u->mixer_path, NULL, u->mixer_handle, ignore_dB) < 0)
-             goto fail;
- 
-         pa_log_debug("Probed mixer path %s:", u->mixer_path->name);
-diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
-index 6bec188ea..84abbf1d9 100644
---- a/src/modules/alsa/alsa-source.c
-+++ b/src/modules/alsa/alsa-source.c
-@@ -1615,7 +1615,7 @@ static void find_mixer(struct userdata *u, pa_alsa_mapping *mapping, const char
-         if (!(u->mixer_path = pa_alsa_path_synthesize(element, PA_ALSA_DIRECTION_INPUT)))
-             goto fail;
- 
--        if (pa_alsa_path_probe(u->mixer_path, u->mixer_handle, ignore_dB) < 0)
-+        if (pa_alsa_path_probe(u->mixer_path, NULL, u->mixer_handle, ignore_dB) < 0)
-             goto fail;
- 
-         pa_log_debug("Probed mixer path %s:", u->mixer_path->name);
-diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common
-index 17b45278a..baf37660e 100644
---- a/src/modules/alsa/mixer/paths/analog-output.conf.common
-+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common
-@@ -122,6 +122,10 @@
- ;                                      # the required-any are present.
- ; state.plugged = yes | no | unknown   # Normally a plugged jack would mean the port becomes available, and an unplugged means it's
- ; state.unplugged = yes | no | unknown # unavailable, but the port status can be overridden by specifying state.plugged and/or state.unplugged.
-+; append-pcm-to-name = no | yes        # Add ",pcm=N" to the jack name? N is the hw PCM device index. HDMI jacks have
-+;                                      # the PCM device index in their name, but different drivers use different
-+;                                      # numbering schemes, so we can't hardcode the full jack name in our configuration
-+;                                      # files.
- 
- [Element PCM]
- switch = mute
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-0.conf b/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-index 331014709..a87205cea 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-@@ -6,5 +6,6 @@ eld-device = 3
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=3]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-1.conf b/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-index d81ee789c..b513ffd70 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-@@ -6,5 +6,6 @@ eld-device = 7
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=7]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-2.conf b/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-index 349812fc2..a2386650e 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-@@ -6,5 +6,6 @@ eld-device = 8
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=8]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-3.conf b/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-index 81463c946..edceb36e1 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-@@ -6,5 +6,6 @@ eld-device = 9
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=9]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-4.conf b/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-index d61ec7547..0d1401eef 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-@@ -6,5 +6,6 @@ eld-device = 10
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=10]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-5.conf b/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-index 02c15e893..883cccc20 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-@@ -6,5 +6,6 @@ eld-device = 11
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=11]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-6.conf b/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-index 188a1adb3..d8ac2f55c 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-@@ -6,5 +6,6 @@ eld-device = 12
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=12]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-7.conf b/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-index 80f4e3722..dd090855f 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-@@ -6,5 +6,6 @@ eld-device = 13
- [Properties]
- device.icon_name = video-display
- 
--[Jack HDMI/DP,pcm=13]
-+[Jack HDMI/DP]
-+append-pcm-to-name = yes
- required = ignore
-
-From patchwork Sun Oct  8 16:48:26 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v2,3/3] alsa-mixer: autodetect the ELD device
-From: Tanu Kaskinen <tanuk@iki.fi>
-X-Patchwork-Id: 181165
-Message-Id: <20171008164826.7588-4-tanuk@iki.fi>
-To: pulseaudio-discuss@lists.freedesktop.org
-Date: Sun,  8 Oct 2017 19:48:26 +0300
-
-This removes the need to hardcode the ELD device index in the path
-configuration. The hardcoded values don't work with the Intel HDMI LPE
-driver.
-
-BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
----
- src/modules/alsa/alsa-mixer.c                      | 28 ++++++++++++++++++++--
- src/modules/alsa/alsa-mixer.h                      |  1 +
- .../alsa/mixer/paths/analog-output.conf.common     |  8 +++++--
- src/modules/alsa/mixer/paths/hdmi-output-0.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-1.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-2.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-3.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-4.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-5.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-6.conf    |  2 +-
- src/modules/alsa/mixer/paths/hdmi-output-7.conf    |  2 +-
- 11 files changed, 41 insertions(+), 12 deletions(-)
-
-diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
-index eaee7ea0a..a524d6d64 100644
---- a/src/modules/alsa/alsa-mixer.c
-+++ b/src/modules/alsa/alsa-mixer.c
-@@ -2051,6 +2051,28 @@ static int element_parse_enumeration(pa_config_parser_state *state) {
-     return 0;
- }
- 
-+static int parse_eld_device(pa_config_parser_state *state) {
-+    pa_alsa_path *path;
-+    uint32_t eld_device;
-+
-+    path = state->userdata;
-+
-+    if (pa_atou(state->rvalue, &eld_device) >= 0) {
-+        path->autodetect_eld_device = false;
-+        path->eld_device = eld_device;
-+        return 0;
-+    }
-+
-+    if (pa_streq(state->rvalue, "auto")) {
-+        path->autodetect_eld_device = true;
-+        path->eld_device = -1;
-+        return 0;
-+    }
-+
-+    pa_log("[%s:%u] Invalid value for option 'eld-device': %s", state->filename, state->lineno, state->rvalue);
-+    return -1;
-+}
-+
- static int option_parse_priority(pa_config_parser_state *state) {
-     pa_alsa_path *p;
-     pa_alsa_option *o;
-@@ -2568,7 +2590,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa
-         { "description-key",     pa_config_parse_string,            NULL, "General" },
-         { "description",         pa_config_parse_string,            NULL, "General" },
-         { "mute-during-activation", pa_config_parse_bool,           NULL, "General" },
--        { "eld-device",          pa_config_parse_int,               NULL, "General" },
-+        { "eld-device",          parse_eld_device,                  NULL, "General" },
- 
-         /* [Option ...] */
-         { "priority",            option_parse_priority,             NULL, NULL },
-@@ -2608,7 +2630,6 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa
-     items[1].data = &p->description_key;
-     items[2].data = &p->description;
-     items[3].data = &mute_during_activation;
--    items[4].data = &p->eld_device;
- 
-     if (!paths_dir)
-         paths_dir = get_default_paths_dir();
-@@ -4012,6 +4033,9 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
-     }
- 
-     PA_HASHMAP_FOREACH(p, ps->paths, state) {
-+        if (p->autodetect_eld_device)
-+            p->eld_device = m->hw_device_index;
-+
-         if (pa_alsa_path_probe(p, m, mixer_handle, m->profile_set->ignore_dB) < 0)
-             pa_hashmap_remove(ps->paths, p);
-     }
-diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
-index 7ae40511c..15615a615 100644
---- a/src/modules/alsa/alsa-mixer.h
-+++ b/src/modules/alsa/alsa-mixer.h
-@@ -193,6 +193,7 @@ struct pa_alsa_path {
-     char *description_key;
-     char *description;
-     unsigned priority;
-+    bool autodetect_eld_device;
-     int eld_device;
-     pa_proplist *proplist;
- 
-diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common
-index baf37660e..e52830d99 100644
---- a/src/modules/alsa/mixer/paths/analog-output.conf.common
-+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common
-@@ -64,8 +64,12 @@
- ; mute-during-activation = yes | no      # If this path supports hardware mute, should the hw mute be used while activating this
- ;                                        # path? In some cases this can reduce extra noises during port switching, while in other
- ;                                        # cases this can increase such noises. Default: no.
--; eld-device = ...                       # If this is an HDMI port, here's where to specify the device number for the ELD mixer
--;                                        # control. The default is to not make use of ELD information.
-+; eld-device = ...                       # If this is an HDMI port, set to "auto" so that PulseAudio will try to read
-+;                                        # the monitor ELD information from the ALSA mixer. By default the ELD information
-+;                                        # is not read, because it's only applicable with HDMI. Earlier the "auto" option
-+;                                        # didn't exist, and the hw device index had to be manually configured. For
-+;                                        # backwards compatibility, it's still possible to manually configure the device
-+;                                        # index using this option.
- ;
- ; [Properties]                           # Property list for this path. The list is merged into the port property list.
- ; <key> = <value>                        # Each property is defined on its own line.
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-0.conf b/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-index a87205cea..95b1342e9 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-0.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort
- priority = 59
--eld-device = 3
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-1.conf b/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-index b513ffd70..37b945204 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-1.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 2
- priority = 58
--eld-device = 7
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-2.conf b/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-index a2386650e..19c38f2e8 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-2.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 3
- priority = 57
--eld-device = 8
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-3.conf b/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-index edceb36e1..8551570ac 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-3.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 4
- priority = 56
--eld-device = 9
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-4.conf b/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-index 0d1401eef..e36128921 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-4.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 5
- priority = 55
--eld-device = 10
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-5.conf b/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-index 883cccc20..82dc3be79 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-5.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 6
- priority = 54
--eld-device = 11
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-6.conf b/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-index d8ac2f55c..92e8fd1e2 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-6.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 7
- priority = 53
--eld-device = 12
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
-diff --git a/src/modules/alsa/mixer/paths/hdmi-output-7.conf b/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-index dd090855f..abe2b60e6 100644
---- a/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-+++ b/src/modules/alsa/mixer/paths/hdmi-output-7.conf
-@@ -1,7 +1,7 @@
- [General]
- description = HDMI / DisplayPort 8
- priority = 52
--eld-device = 13
-+eld-device = auto
- 
- [Properties]
- device.icon_name = video-display
diff --git a/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch b/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch
deleted file mode 100644
index 810c1ce..0000000
--- a/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From patchwork Wed Nov  8 12:20:22 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [1/2] card-restore: log the correct profile name
-From: Tanu Kaskinen <tanuk@iki.fi>
-X-Patchwork-Id: 187101
-Message-Id: <20171108122023.8147-2-tanuk@iki.fi>
-To: pulseaudio-discuss@lists.freedesktop.org
-Date: Wed,  8 Nov 2017 14:20:22 +0200
-
----
- src/modules/module-card-restore.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c
-index 3c0307bee..2d3a91c01 100644
---- a/src/modules/module-card-restore.c
-+++ b/src/modules/module-card-restore.c
-@@ -561,7 +561,7 @@ static pa_hook_result_t card_choose_initial_profile_callback(pa_core *core, pa_c
- 
-         profile = pa_hashmap_get(card->profiles, e->profile);
-         if (profile) {
--            pa_log_info("Restoring profile '%s' for card %s.", card->active_profile->name, card->name);
-+            pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name);
-             pa_card_set_profile(card, profile, true);
-         } else {
-             pa_log_debug("Tried to restore profile %s for card %s, but the card doesn't have such profile.",
-From patchwork Wed Nov  8 12:20:23 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [2/2] card-restore: don't restore unavailable profiles
-From: Tanu Kaskinen <tanuk@iki.fi>
-X-Patchwork-Id: 187102
-Message-Id: <20171108122023.8147-3-tanuk@iki.fi>
-To: pulseaudio-discuss@lists.freedesktop.org
-Date: Wed,  8 Nov 2017 14:20:23 +0200
-
----
- src/modules/module-card-restore.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c
-index 2d3a91c01..b7189ad53 100644
---- a/src/modules/module-card-restore.c
-+++ b/src/modules/module-card-restore.c
-@@ -561,8 +561,12 @@ static pa_hook_result_t card_choose_initial_profile_callback(pa_core *core, pa_c
- 
-         profile = pa_hashmap_get(card->profiles, e->profile);
-         if (profile) {
--            pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name);
--            pa_card_set_profile(card, profile, true);
-+            if (profile->available != PA_AVAILABLE_NO) {
-+                pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name);
-+                pa_card_set_profile(card, profile, true);
-+            } else
-+                pa_log_debug("Not restoring profile %s for card %s, because the profile is currently unavailable.",
-+                             profile->name, card->name);
-         } else {
-             pa_log_debug("Tried to restore profile %s for card %s, but the card doesn't have such profile.",
-                          e->profile, card->name);
diff --git a/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch b/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch
deleted file mode 100644
index e648398..0000000
--- a/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-diff -up pulseaudio-11.1/src/modules/module-console-kit.c.foo pulseaudio-11.1/src/modules/module-console-kit.c
---- pulseaudio-11.1/src/modules/module-console-kit.c.foo	2016-08-23 07:50:10.000000000 -0500
-+++ pulseaudio-11.1/src/modules/module-console-kit.c	2018-02-28 11:01:50.138465311 -0600
-@@ -120,6 +120,19 @@ static void add_session(struct userdata
- 
-     pa_log_debug("Added new session %s", id);
- 
-+    /* Positive exit_idle_time is only useful when we have no session tracking
-+     * capability, so we can set it to 0 now that we have detected a session.
-+     * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
-+     * immediately when the session ends. That in turn is useful, because some
-+     * systems (those that use pam_systemd but don't use systemd for managing
-+     * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
-+     * services that depend on the files in $XDG_RUNTIME_DIR. The directory
-+     * contains our sockets, and if the sockets are removed without terminating
-+     * pulseaudio, a quick relogin will likely cause trouble, because a new
-+     * instance will be spawned while the old instance is still running. */
-+    if (u->core->exit_idle_time > 0)
-+        pa_core_set_exit_idle_time(u->core, 0);
-+
- fail:
- 
-     if (m)
-diff -up pulseaudio-11.1/src/modules/module-systemd-login.c.foo pulseaudio-11.1/src/modules/module-systemd-login.c
---- pulseaudio-11.1/src/modules/module-systemd-login.c.foo	2018-02-28 11:01:50.138465311 -0600
-+++ pulseaudio-11.1/src/modules/module-systemd-login.c	2018-02-28 11:03:06.053396460 -0600
-@@ -86,6 +86,20 @@ static int add_session(struct userdata *
-     pa_hashmap_put(u->sessions, session->id, session);
- 
-     pa_log_debug("Added new session %s", id);
-+
-+    /* Positive exit_idle_time is only useful when we have no session tracking
-+     * capability, so we can set it to 0 now that we have detected a session.
-+     * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
-+     * immediately when the session ends. That in turn is useful, because some
-+     * systems (those that use pam_systemd but don't use systemd for managing
-+     * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
-+     * services that depend on the files in $XDG_RUNTIME_DIR. The directory
-+     * contains our sockets, and if the sockets are removed without terminating
-+     * pulseaudio, a quick relogin will likely cause trouble, because a new
-+     * instance will be spawned while the old instance is still running. */
-+    if (u->core->exit_idle_time > 0)
-+        pa_core_set_exit_idle_time(u->core, 0);
-+
-     return 0;
- }
- 
-diff -up pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c
---- pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo	2016-08-23 07:50:10.000000000 -0500
-+++ pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c	2018-02-28 11:01:50.138465311 -0600
-@@ -208,6 +208,19 @@ int pa__init(pa_module*m) {
-     if (!u->client)
-         goto fail;
- 
-+    /* Positive exit_idle_time is only useful when we have no session tracking
-+     * capability, so we can set it to 0 now that we have detected a session.
-+     * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
-+     * immediately when the session ends. That in turn is useful, because some
-+     * systems (those that use pam_systemd but don't use systemd for managing
-+     * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
-+     * services that depend on the files in $XDG_RUNTIME_DIR. The directory
-+     * contains our sockets, and if the sockets are removed without terminating
-+     * pulseaudio, a quick relogin will likely cause trouble, because a new
-+     * instance will be spawned while the old instance is still running. */
-+    if (u->core->exit_idle_time > 0)
-+        pa_core_set_exit_idle_time(u->core, 0);
-+
-     pa_modargs_free(ma);
- 
-     return 0;
-diff -up pulseaudio-11.1/src/pulsecore/core.c.foo pulseaudio-11.1/src/pulsecore/core.c
---- pulseaudio-11.1/src/pulsecore/core.c.foo	2018-02-28 11:01:50.137465298 -0600
-+++ pulseaudio-11.1/src/pulsecore/core.c	2018-02-28 11:01:50.139465323 -0600
-@@ -426,6 +426,16 @@ void pa_core_update_default_source(pa_co
-     pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], core->default_source);
- }
- 
-+void pa_core_set_exit_idle_time(pa_core *core, int time) {
-+    pa_assert(core);
-+
-+    if (time == core->exit_idle_time)
-+        return;
-+
-+    pa_log_info("exit_idle_time: %i -> %i", core->exit_idle_time, time);
-+    core->exit_idle_time = time;
-+}
-+
- static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
-     pa_core *c = userdata;
-     pa_assert(c->exit_event == e);
-diff -up pulseaudio-11.1/src/pulsecore/core.h.foo pulseaudio-11.1/src/pulsecore/core.h
---- pulseaudio-11.1/src/pulsecore/core.h.foo	2018-02-28 11:01:50.120465090 -0600
-+++ pulseaudio-11.1/src/pulsecore/core.h	2018-02-28 11:01:50.139465323 -0600
-@@ -255,6 +255,8 @@ void pa_core_set_configured_default_sour
- void pa_core_update_default_sink(pa_core *core);
- void pa_core_update_default_source(pa_core *core);
- 
-+void pa_core_set_exit_idle_time(pa_core *core, int time);
-+
- /* Check whether no one is connected to this core */
- void pa_core_check_idle(pa_core *c);
- 
diff --git a/SOURCES/pulseaudio-11.1-glibc_memfd.patch b/SOURCES/pulseaudio-11.1-glibc_memfd.patch
deleted file mode 100644
index 085b7c9..0000000
--- a/SOURCES/pulseaudio-11.1-glibc_memfd.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up pulseaudio-11.1/src/pulsecore/memfd-wrappers.h.glibc_memfd pulseaudio-11.1/src/pulsecore/memfd-wrappers.h
---- pulseaudio-11.1/src/pulsecore/memfd-wrappers.h.glibc_memfd	2016-08-23 07:50:11.000000000 -0500
-+++ pulseaudio-11.1/src/pulsecore/memfd-wrappers.h	2018-01-22 12:30:23.322574380 -0600
-@@ -33,9 +33,9 @@
-  * a whole conflicts with the original glibc header <fnctl.h>.
-  */
- 
--static inline int memfd_create(const char *name, unsigned int flags) {
-+/* static inline int memfd_create(const char *name, unsigned int flags) {
-     return syscall(SYS_memfd_create, name, flags);
--}
-+} */
- 
- /* memfd_create(2) flags */
- 
diff --git a/SOURCES/pulseaudio-11.1.tar.xz.md5 b/SOURCES/pulseaudio-11.1.tar.xz.md5
deleted file mode 100644
index b9ad33e..0000000
--- a/SOURCES/pulseaudio-11.1.tar.xz.md5
+++ /dev/null
@@ -1 +0,0 @@
-390de38231d5cdd6b43ada8939eb74f1  pulseaudio-11.1.tar.xz
diff --git a/SOURCES/pulseaudio-11.1.tar.xz.sha1 b/SOURCES/pulseaudio-11.1.tar.xz.sha1
deleted file mode 100644
index ce5f6d9..0000000
--- a/SOURCES/pulseaudio-11.1.tar.xz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-53bde72b6bfe715c19b1519db8845f7a58346b67  pulseaudio-11.1.tar.xz
diff --git a/SOURCES/pulseaudio-13.99.1.tar.xz.sha256 b/SOURCES/pulseaudio-13.99.1.tar.xz.sha256
new file mode 100644
index 0000000..146d114
--- /dev/null
+++ b/SOURCES/pulseaudio-13.99.1.tar.xz.sha256
@@ -0,0 +1 @@
+e6a111cc078e6039bf657a3fd1f73dc804c8ee362ca03a0732dc5c38c13e0a0c  pulseaudio-13.99.1.tar.xz
diff --git a/SOURCES/pulseaudio-8.99.2-getaffinity.patch b/SOURCES/pulseaudio-8.99.2-getaffinity.patch
deleted file mode 100644
index adc0f14..0000000
--- a/SOURCES/pulseaudio-8.99.2-getaffinity.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up pulseaudio-8.99.2/src/tests/once-test.c.than pulseaudio-8.99.2/src/tests/once-test.c
---- pulseaudio-8.99.2/src/tests/once-test.c.than	2016-06-22 10:20:57.127583628 -0400
-+++ pulseaudio-8.99.2/src/tests/once-test.c	2016-06-22 10:59:38.905573634 -0400
-@@ -70,7 +70,7 @@ static void thread_func(void *data) {
- #endif
- 
-     CPU_ZERO(&mask);
--    CPU_SET((size_t) (pa_atomic_inc(&i_cpu) % n_cpu), &mask);
-+    CPU_SET(pthread_getaffinity_np(pthread_self(), sizeof(mask), &mask), &mask);
-     fail_unless(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) == 0);
- #endif
- 
diff --git a/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch b/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch
deleted file mode 100644
index 3e489d6..0000000
--- a/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -up pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in
---- pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes	2016-05-26 23:21:17.000000000 -0500
-+++ pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in	2016-05-31 10:01:55.679976730 -0500
-@@ -220,7 +220,7 @@ License along with PulseAudio; if not, s
-       <p><opt>flat-volumes=</opt> Enable 'flat' volumes, i.e. where
-       possible let the sink volume equal the maximum of the volumes of
-       the inputs connected to it. Takes a boolean argument, defaults
--      to <opt>yes</opt>.</p>
-+      to <opt>no</opt>.</p>
-     </option>
- 
-   </section>
-diff -up pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon-conf.c
---- pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes	2016-05-26 23:21:17.000000000 -0500
-+++ pulseaudio-8.99.2/src/daemon/daemon-conf.c	2016-05-31 10:01:55.680976735 -0500
-@@ -68,7 +68,7 @@ static const pa_daemon_conf default_conf
-     .realtime_priority = 5,  /* Half of JACK's default rtprio */
-     .disallow_module_loading = false,
-     .disallow_exit = false,
--    .flat_volumes = true,
-+    .flat_volumes = false,
-     .exit_idle_time = 20,
-     .scache_idle_time = 20,
-     .script_commands = NULL,
-diff -up pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon.conf.in
---- pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes	2016-05-31 10:01:55.680976735 -0500
-+++ pulseaudio-8.99.2/src/daemon/daemon.conf.in	2016-05-31 10:02:28.048133267 -0500
-@@ -57,7 +57,7 @@ ifelse(@HAVE_DBUS@, 1, [dnl
- ; enable-lfe-remixing = no
- ; lfe-crossover-freq = 0
- 
--; flat-volumes = yes
-+; flat-volumes = no 
- 
- ifelse(@HAVE_SYS_RESOURCE_H@, 1, [dnl
- ; rlimit-fsize = -1
-diff -up pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes pulseaudio-8.99.2/src/pulsecore/core.c
---- pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes	2016-05-26 23:21:17.000000000 -0500
-+++ pulseaudio-8.99.2/src/pulsecore/core.c	2016-05-31 10:01:55.681976740 -0500
-@@ -135,7 +135,7 @@ pa_core* pa_core_new(pa_mainloop_api *m,
-     c->exit_idle_time = -1;
-     c->scache_idle_time = 20;
- 
--    c->flat_volumes = true;
-+    c->flat_volumes = false;
-     c->disallow_module_loading = false;
-     c->disallow_exit = false;
-     c->running_as_daemon = false;
diff --git a/SOURCES/pulseaudio-autostart.patch b/SOURCES/pulseaudio-autostart.patch
index eb44bdb..6b18fce 100644
--- a/SOURCES/pulseaudio-autostart.patch
+++ b/SOURCES/pulseaudio-autostart.patch
@@ -1,6 +1,5 @@
-diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in
---- pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart	2015-02-12 08:10:35.000000000 -0600
-+++ pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in	2015-06-22 11:24:13.561614127 -0500
+--- pulseaudio-13.99.1/src/daemon/start-pulseaudio-x11.in	2020-05-11 17:35:39.857484912 +0200
++++ pulseaudio-13.99.1.new/src/daemon/start-pulseaudio-x11.in	2020-05-11 17:35:53.041199783 +0200
 @@ -17,6 +17,9 @@
  
  set -e
@@ -10,4 +9,4 @@ diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio-
 +
  if [ x"$DISPLAY" != x ] ; then
  
-     @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null
+     @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null
diff --git a/SOURCES/pulseaudio-python3.patch b/SOURCES/pulseaudio-python3.patch
deleted file mode 100644
index adec1d4..0000000
--- a/SOURCES/pulseaudio-python3.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -up pulseaudio-11.1/src/depmod.py.me pulseaudio-11.1/src/depmod.py
---- pulseaudio-11.1/src/depmod.py.me	2018-06-22 11:18:07.718411268 +0200
-+++ pulseaudio-11.1/src/depmod.py	2018-06-22 11:36:42.575023103 +0200
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/python3
- 
- # This file is part of PulseAudio.
- #
-@@ -60,11 +60,10 @@ for fn in imported_symbols:
-             else:
-                 unresolved_symbols[sym] = [fn]
- 
--for sym, files in unresolved_symbols.iteritems():
--    print "WARNING: Unresolved symbol '%s' in %s" % (sym, `files`)
-+for sym, files in unresolved_symbols.items():
-+    print ("WARNING: Unresolved symbol '%s' in %s" % (sym, files))
- 
--k = dependencies.keys()
--k.sort()
-+k = sorted(dependencies)
- for fn in k:
-     dependencies[fn].sort()
--    print "%s: %s" % (fn, string.join(dependencies[fn], " "))
-+    print ("%s: %s" % (fn, string.join(dependencies[fn], " ")))
-diff -up pulseaudio-11.1/src/utils/qpaeq.me pulseaudio-11.1/src/utils/qpaeq
---- pulseaudio-11.1/src/utils/qpaeq.me	2018-06-22 11:16:31.966787327 +0200
-+++ pulseaudio-11.1/src/utils/qpaeq	2018-06-22 11:17:57.482451346 +0200
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/python3
- #    qpaeq is a equalizer interface for pulseaudio's equalizer sinks
- #    Copyright (C) 2009  Jason Newton <nevion@gmail.com
- #
diff --git a/SOURCES/v5-1-4-bluetooth-use-consistent-profile-names.patch b/SOURCES/v5-1-4-bluetooth-use-consistent-profile-names.patch
deleted file mode 100644
index 2d4c730..0000000
--- a/SOURCES/v5-1-4-bluetooth-use-consistent-profile-names.patch
+++ /dev/null
@@ -1,379 +0,0 @@
-diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
-index 0f0104d8..f2009bfd 100644
---- a/src/modules/bluetooth/backend-native.c
-+++ b/src/modules/bluetooth/backend-native.c
-@@ -449,7 +449,7 @@ static void set_speaker_gain(pa_bluetooth_transport *t, uint16_t gain) {
-     /* If we are in the AG role, we send a command to the head set to change
-      * the speaker gain. In the HS role, source and sink are swapped, so
-      * in this case we notify the AG that the microphone gain has changed */
--    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
-+    if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) {
-         len = sprintf(buf, "\r\n+VGS=%d\r\n", gain);
-         pa_log_debug("RFCOMM >> +VGS=%d", gain);
-     } else {
-@@ -476,7 +476,7 @@ static void set_microphone_gain(pa_bluetooth_transport *t, uint16_t gain) {
-     /* If we are in the AG role, we send a command to the head set to change
-      * the microphone gain. In the HS role, source and sink are swapped, so
-      * in this case we notify the AG that the speaker gain has changed */
--    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
-+    if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) {
-         len = sprintf(buf, "\r\n+VGM=%d\r\n", gain);
-         pa_log_debug("RFCOMM >> +VGM=%d", gain);
-     } else {
-@@ -509,9 +509,9 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
- 
-     handler = dbus_message_get_path(m);
-     if (pa_streq(handler, HSP_AG_PROFILE)) {
--        p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
-+        p = PA_BLUETOOTH_PROFILE_HSP_HS;
-     } else if (pa_streq(handler, HSP_HS_PROFILE)) {
--        p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY;
-+        p = PA_BLUETOOTH_PROFILE_HFP_AG;
-     } else {
-         pa_log_error("Invalid handler");
-         goto fail;
-@@ -626,11 +626,11 @@ static void profile_init(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
-     pa_assert(b);
- 
-     switch (profile) {
--        case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+        case PA_BLUETOOTH_PROFILE_HSP_HS:
-             object_name = HSP_AG_PROFILE;
-             uuid = PA_BLUETOOTH_UUID_HSP_AG;
-             break;
--        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+        case PA_BLUETOOTH_PROFILE_HFP_AG:
-             object_name = HSP_HS_PROFILE;
-             uuid = PA_BLUETOOTH_UUID_HSP_HS;
-             break;
-@@ -647,10 +647,10 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
-     pa_assert(b);
- 
-     switch (profile) {
--        case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+        case PA_BLUETOOTH_PROFILE_HSP_HS:
-             dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_AG_PROFILE);
-             break;
--        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+        case PA_BLUETOOTH_PROFILE_HFP_AG:
-             dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_HS_PROFILE);
-             break;
-         default:
-@@ -665,9 +665,9 @@ void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *native_bac
-        return;
- 
-    if (enable_hs_role)
--       profile_init(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
-+       profile_init(native_backend, PA_BLUETOOTH_PROFILE_HFP_AG);
-    else
--       profile_done(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
-+       profile_done(native_backend, PA_BLUETOOTH_PROFILE_HFP_AG);
- 
-    native_backend->enable_hs_role = enable_hs_role;
- }
-@@ -693,8 +693,8 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
-     backend->enable_hs_role = enable_hs_role;
- 
-     if (enable_hs_role)
--       profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
--    profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
-+       profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_AG);
-+    profile_init(backend, PA_BLUETOOTH_PROFILE_HSP_HS);
- 
-     return backend;
- }
-@@ -705,8 +705,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
-     pa_dbus_free_pending_list(&backend->pending);
- 
-     if (backend->enable_hs_role)
--       profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
--    profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
-+       profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_AG);
-+    profile_done(backend, PA_BLUETOOTH_PROFILE_HSP_HS);
- 
-     pa_dbus_connection_unref(backend->connection);
- 
-diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c
-index 2c51497f..85b9c477 100644
---- a/src/modules/bluetooth/backend-ofono.c
-+++ b/src/modules/bluetooth/backend-ofono.c
-@@ -223,7 +223,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char
-     const char *key, *value;
-     struct hf_audio_card *card;
-     pa_bluetooth_device *d;
--    pa_bluetooth_profile_t p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY;
-+    pa_bluetooth_profile_t p = PA_BLUETOOTH_PROFILE_HFP_AG;
- 
-     pa_assert(backend);
-     pa_assert(path);
-@@ -257,7 +257,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char
-             card->local_address = pa_xstrdup(value);
-         } else if (pa_streq(key, "Type")) {
-             if (pa_streq(value, "gateway"))
--                p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
-+                p = PA_BLUETOOTH_PROFILE_HSP_HS;
-         }
- 
-         pa_log_debug("%s: %s", key, value);
-diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
-index c9283232..4470f2ef 100644
---- a/src/modules/bluetooth/bluez5-util.c
-+++ b/src/modules/bluetooth/bluez5-util.c
-@@ -174,10 +174,10 @@ static bool device_supports_profile(pa_bluetooth_device *device, pa_bluetooth_pr
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SINK);
-         case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SOURCE);
--        case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+        case PA_BLUETOOTH_PROFILE_HSP_HS:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS)
-                 || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF);
--        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+        case PA_BLUETOOTH_PROFILE_HFP_AG:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_AG)
-                 || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_AG);
-         case PA_BLUETOOTH_PROFILE_OFF:
-@@ -1018,7 +1018,7 @@ void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is
-         pa_bluetooth_device *d;
- 
-         PA_HASHMAP_FOREACH(d, y->devices, state) {
--            if (device_supports_profile(d, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)) {
-+            if (device_supports_profile(d, PA_BLUETOOTH_PROFILE_HFP_AG)) {
-                 DBusMessage *m;
- 
-                 pa_assert_se(m = dbus_message_new_method_call(BLUEZ_SERVICE, d->path, "org.bluez.Device1", "Disconnect"));
-@@ -1304,9 +1304,9 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile) {
-             return "a2dp_sink";
-         case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
-             return "a2dp_source";
--        case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+        case PA_BLUETOOTH_PROFILE_HSP_HS:
-             return "headset_head_unit";
--        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+        case PA_BLUETOOTH_PROFILE_HFP_AG:
-             return "headset_audio_gateway";
-         case PA_BLUETOOTH_PROFILE_OFF:
-             return "off";
-diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h
-index a3e7bf3d..84c0c3f1 100644
---- a/src/modules/bluetooth/bluez5-util.h
-+++ b/src/modules/bluetooth/bluez5-util.h
-@@ -46,8 +46,8 @@ typedef enum pa_bluetooth_hook {
- typedef enum profile {
-     PA_BLUETOOTH_PROFILE_A2DP_SINK,
-     PA_BLUETOOTH_PROFILE_A2DP_SOURCE,
--    PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT,
--    PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY,
-+    PA_BLUETOOTH_PROFILE_HSP_HS,
-+    PA_BLUETOOTH_PROFILE_HFP_AG,
-     PA_BLUETOOTH_PROFILE_OFF
- } pa_bluetooth_profile_t;
- #define PA_BLUETOOTH_PROFILE_COUNT PA_BLUETOOTH_PROFILE_OFF
-diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
-index 530207a2..d076fbad 100644
---- a/src/modules/bluetooth/module-bluez5-device.c
-+++ b/src/modules/bluetooth/module-bluez5-device.c
-@@ -257,8 +257,8 @@ static int sco_process_render(struct userdata *u) {
-     pa_memchunk memchunk;
- 
-     pa_assert(u);
--    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT ||
--                u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
-+    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS ||
-+                u->profile == PA_BLUETOOTH_PROFILE_HFP_AG);
-     pa_assert(u->sink);
- 
-     pa_sink_render_full(u->sink, u->write_block_size, &memchunk);
-@@ -317,8 +317,8 @@ static int sco_process_push(struct userdata *u) {
-     pa_usec_t tstamp = 0;
- 
-     pa_assert(u);
--    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT ||
--                u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
-+    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS ||
-+                u->profile == PA_BLUETOOTH_PROFILE_HFP_AG);
-     pa_assert(u->source);
-     pa_assert(u->read_smoother);
- 
-@@ -784,7 +784,7 @@ static void transport_release(struct userdata *u) {
- 
- /* Run from I/O thread */
- static void transport_config_mtu(struct userdata *u) {
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         u->read_block_size = u->read_link_mtu;
-         u->write_block_size = u->write_link_mtu;
- 
-@@ -981,7 +981,7 @@ static void source_set_volume_cb(pa_source *s) {
-     pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume);
- 
-     /* Set soft volume when in headset role */
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG)
-         pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume);
- 
-     /* If we are in the AG role, we send a command to the head set to change
-@@ -1004,7 +1004,7 @@ static int add_source(struct userdata *u) {
-     data.namereg_fail = false;
-     pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile));
-     pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
- 
-     connect_ports(u, &data, PA_DIRECTION_INPUT);
-@@ -1012,10 +1012,10 @@ static int add_source(struct userdata *u) {
-     if (!u->transport_acquired)
-         switch (u->profile) {
-             case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
--            case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+            case PA_BLUETOOTH_PROFILE_HFP_AG:
-                 data.suspend_cause = PA_SUSPEND_USER;
-                 break;
--            case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+            case PA_BLUETOOTH_PROFILE_HSP_HS:
-                 /* u->stream_fd contains the error returned by the last transport_acquire()
-                  * EAGAIN means we are waiting for a NewConnection signal */
-                 if (u->stream_fd == -EAGAIN)
-@@ -1039,7 +1039,7 @@ static int add_source(struct userdata *u) {
-     u->source->userdata = u;
-     u->source->parent.process_msg = source_process_msg;
- 
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         pa_source_set_set_volume_callback(u->source, source_set_volume_cb);
-         u->source->n_volume_steps = 16;
-     }
-@@ -1151,7 +1151,7 @@ static void sink_set_volume_cb(pa_sink *s) {
-     pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume);
- 
-     /* Set soft volume when in headset role */
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG)
-         pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume);
- 
-     /* If we are in the AG role, we send a command to the head set to change
-@@ -1174,17 +1174,17 @@ static int add_sink(struct userdata *u) {
-     data.namereg_fail = false;
-     pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile));
-     pa_sink_new_data_set_sample_spec(&data, &u->sample_spec);
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
- 
-     connect_ports(u, &data, PA_DIRECTION_OUTPUT);
- 
-     if (!u->transport_acquired)
-         switch (u->profile) {
--            case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+            case PA_BLUETOOTH_PROFILE_HFP_AG:
-                 data.suspend_cause = PA_SUSPEND_USER;
-                 break;
--            case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+            case PA_BLUETOOTH_PROFILE_HSP_HS:
-                 /* u->stream_fd contains the error returned by the last transport_acquire()
-                  * EAGAIN means we are waiting for a NewConnection signal */
-                 if (u->stream_fd == -EAGAIN)
-@@ -1210,7 +1210,7 @@ static int add_sink(struct userdata *u) {
-     u->sink->userdata = u;
-     u->sink->parent.process_msg = sink_process_msg;
- 
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
-         u->sink->n_volume_steps = 16;
-     }
-@@ -1219,7 +1219,7 @@ static int add_sink(struct userdata *u) {
- 
- /* Run from main thread */
- static void transport_config(struct userdata *u) {
--    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         u->sample_spec.format = PA_SAMPLE_S16LE;
-         u->sample_spec.channels = 1;
-         u->sample_spec.rate = 8000;
-@@ -1349,7 +1349,7 @@ static int setup_transport(struct userdata *u) {
- 
-     u->transport = t;
- 
--    if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG)
-         transport_acquire(u, true); /* In case of error, the sink/sources will be created suspended */
-     else {
-         int transport_error;
-@@ -1369,8 +1369,8 @@ static pa_direction_t get_profile_direction(pa_bluetooth_profile_t p) {
-     static const pa_direction_t profile_direction[] = {
-         [PA_BLUETOOTH_PROFILE_A2DP_SINK] = PA_DIRECTION_OUTPUT,
-         [PA_BLUETOOTH_PROFILE_A2DP_SOURCE] = PA_DIRECTION_INPUT,
--        [PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
--        [PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-+        [PA_BLUETOOTH_PROFILE_HSP_HS] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-+        [PA_BLUETOOTH_PROFILE_HFP_AG] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-         [PA_BLUETOOTH_PROFILE_OFF] = 0
-     };
- 
-@@ -1620,7 +1620,7 @@ static int start_thread(struct userdata *u) {
- 
-         /* If we are in the headset role, the sink should not become default
-          * unless there is no other sound device available. */
--        if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
-+        if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG)
-             u->sink->priority = 1500;
- 
-         pa_sink_put(u->sink);
-@@ -1636,7 +1636,7 @@ static int start_thread(struct userdata *u) {
-         /* If we are in the headset role or the device is an a2dp source,
-          * the source should not become default unless there is no other
-          * sound device available. */
--        if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY || u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE)
-+        if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG || u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE)
-             u->source->priority = 1500;
- 
-         pa_source_put(u->source);
-@@ -1873,7 +1873,7 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro
-         p = PA_CARD_PROFILE_DATA(cp);
-         break;
- 
--    case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
-+    case PA_BLUETOOTH_PROFILE_HSP_HS:
-         cp = pa_card_profile_new(name, _("Headset Head Unit (HSP/HFP)"), sizeof(pa_bluetooth_profile_t));
-         cp->priority = 20;
-         cp->n_sinks = 1;
-@@ -1886,7 +1886,7 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro
-         p = PA_CARD_PROFILE_DATA(cp);
-         break;
- 
--    case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
-+    case PA_BLUETOOTH_PROFILE_HFP_AG:
-         cp = pa_card_profile_new(name, _("Headset Audio Gateway (HSP/HFP)"), sizeof(pa_bluetooth_profile_t));
-         cp->priority = 20;
-         cp->n_sinks = 1;
-@@ -1961,9 +1961,9 @@ static int uuid_to_profile(const char *uuid, pa_bluetooth_profile_t *_r) {
-     else if (pa_streq(uuid, PA_BLUETOOTH_UUID_A2DP_SOURCE))
-         *_r = PA_BLUETOOTH_PROFILE_A2DP_SOURCE;
-     else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF))
--        *_r = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
-+        *_r = PA_BLUETOOTH_PROFILE_HSP_HS;
-     else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_AG) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_AG))
--        *_r = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY;
-+        *_r = PA_BLUETOOTH_PROFILE_HFP_AG;
-     else
-         return -PA_ERR_INVALID;
- 
-@@ -2174,7 +2174,7 @@ static pa_hook_result_t transport_speaker_gain_changed_cb(pa_bluetooth_discovery
-         volume++;
- 
-     pa_cvolume_set(&v, u->sample_spec.channels, volume);
--    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
-+    if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-         pa_sink_volume_changed(u->sink, &v);
-     else
-         pa_sink_set_volume(u->sink, &v, true, true);
-@@ -2202,7 +2202,7 @@ static pa_hook_result_t transport_microphone_gain_changed_cb(pa_bluetooth_discov
- 
-     pa_cvolume_set(&v, u->sample_spec.channels, volume);
- 
--    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
-+    if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-         pa_source_volume_changed(u->source, &v);
-     else
-         pa_source_set_volume(u->source, &v, true, true);
diff --git a/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch b/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch
deleted file mode 100644
index aac2954..0000000
--- a/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch
+++ /dev/null
@@ -1,394 +0,0 @@
-diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
-index f2009bfd..9ec9244b 100644
---- a/src/modules/bluetooth/backend-native.c
-+++ b/src/modules/bluetooth/backend-native.c
-@@ -62,6 +62,7 @@ struct transport_data {
- #define BLUEZ_PROFILE_INTERFACE BLUEZ_SERVICE ".Profile1"
- 
- #define HSP_AG_PROFILE "/Profile/HSPAGProfile"
-+#define HFP_AG_PROFILE "/Profile/HFPAGProfile"
- #define HSP_HS_PROFILE "/Profile/HSPHSProfile"
- 
- /* RFCOMM channel for HSP headset role
-@@ -512,6 +513,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
-         p = PA_BLUETOOTH_PROFILE_HSP_HS;
-     } else if (pa_streq(handler, HSP_HS_PROFILE)) {
-         p = PA_BLUETOOTH_PROFILE_HFP_AG;
-+    } else if (pa_streq(handler, HFP_AG_PROFILE)) {
-+        p = PA_BLUETOOTH_PROFILE_HFP_HF;
-     } else {
-         pa_log_error("Invalid handler");
-         goto fail;
-@@ -589,7 +592,8 @@ static DBusHandlerResult profile_handler(DBusConnection *c, DBusMessage *m, void
- 
-     pa_log_debug("dbus: path=%s, interface=%s, member=%s", path, interface, member);
- 
--    if (!pa_streq(path, HSP_AG_PROFILE) && !pa_streq(path, HSP_HS_PROFILE))
-+    if (!pa_streq(path, HSP_AG_PROFILE) && !pa_streq(path, HSP_HS_PROFILE)
-+        && !pa_streq(path, HFP_AG_PROFILE))
-         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- 
-     if (dbus_message_is_method_call(m, "org.freedesktop.DBus.Introspectable", "Introspect")) {
-@@ -634,6 +638,10 @@ static void profile_init(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
-             object_name = HSP_HS_PROFILE;
-             uuid = PA_BLUETOOTH_UUID_HSP_HS;
-             break;
-+        case PA_BLUETOOTH_PROFILE_HFP_HF:
-+            object_name = HFP_AG_PROFILE;
-+            uuid = PA_BLUETOOTH_UUID_HFP_AG;
-+            break;
-         default:
-             pa_assert_not_reached();
-             break;
-@@ -653,6 +661,9 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
-         case PA_BLUETOOTH_PROFILE_HFP_AG:
-             dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_HS_PROFILE);
-             break;
-+        case PA_BLUETOOTH_PROFILE_HFP_HF:
-+            dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HFP_AG_PROFILE);
-+            break;
-         default:
-             pa_assert_not_reached();
-             break;
-@@ -695,6 +706,8 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
-     if (enable_hs_role)
-        profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_AG);
-     profile_init(backend, PA_BLUETOOTH_PROFILE_HSP_HS);
-+    if (pa_bluetooth_discovery_get_enable_native_hfp_hf(y))
-+        profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_HF);
- 
-     return backend;
- }
-@@ -707,6 +720,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
-     if (backend->enable_hs_role)
-        profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_AG);
-     profile_done(backend, PA_BLUETOOTH_PROFILE_HSP_HS);
-+    if (pa_bluetooth_discovery_get_enable_native_hfp_hf(backend->discovery))
-+      profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_HF);
- 
-     pa_dbus_connection_unref(backend->connection);
- 
-diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
-index 4470f2ef..80a025d5 100644
---- a/src/modules/bluetooth/bluez5-util.c
-+++ b/src/modules/bluetooth/bluez5-util.c
-@@ -92,6 +92,7 @@ struct pa_bluetooth_discovery {
-     int headset_backend;
-     pa_bluetooth_backend *ofono_backend, *native_backend;
-     PA_LLIST_HEAD(pa_dbus_pending, pending);
-+    bool enable_native_hfp_hf;
- };
- 
- static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_discovery *y, DBusMessage *m,
-@@ -169,14 +170,27 @@ static const char *transport_state_to_string(pa_bluetooth_transport_state_t stat
- }
- 
- static bool device_supports_profile(pa_bluetooth_device *device, pa_bluetooth_profile_t profile) {
-+    bool show_hfp, show_hsp, enable_native_hfp_hf;
-+
-+    enable_native_hfp_hf = pa_bluetooth_discovery_get_enable_native_hfp_hf(device->discovery);
-+
-+    if (enable_native_hfp_hf) {
-+        show_hfp = pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF);
-+        show_hsp = !show_hfp;
-+    } else {
-+        show_hfp = false;
-+        show_hsp = true;
-+    }
-+
-     switch (profile) {
-         case PA_BLUETOOTH_PROFILE_A2DP_SINK:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SINK);
-         case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SOURCE);
-         case PA_BLUETOOTH_PROFILE_HSP_HS:
--            return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS)
--                || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF);
-+            return show_hsp && !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS);
-+        case PA_BLUETOOTH_PROFILE_HFP_HF:
-+            return show_hfp && !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF);
-         case PA_BLUETOOTH_PROFILE_HFP_AG:
-             return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_AG)
-                 || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_AG);
-@@ -536,6 +550,14 @@ pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_path(pa_bluetooth_disc
-     return NULL;
- }
- 
-+bool pa_bluetooth_discovery_get_enable_native_hfp_hf(pa_bluetooth_discovery *y)
-+{
-+    pa_assert(y);
-+    pa_assert(PA_REFCNT_VALUE(y) > 0);
-+
-+    return y->enable_native_hfp_hf;
-+}
-+
- pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_address(pa_bluetooth_discovery *y, const char *remote, const char *local) {
-     pa_bluetooth_device *d;
-     void *state = NULL;
-@@ -1306,6 +1328,8 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile) {
-             return "a2dp_source";
-         case PA_BLUETOOTH_PROFILE_HSP_HS:
-             return "headset_head_unit";
-+        case PA_BLUETOOTH_PROFILE_HFP_HF:
-+            return "headset_handsfree";
-         case PA_BLUETOOTH_PROFILE_HFP_AG:
-             return "headset_audio_gateway";
-         case PA_BLUETOOTH_PROFILE_OFF:
-@@ -1727,7 +1751,7 @@ static void endpoint_done(pa_bluetooth_discovery *y, pa_bluetooth_profile_t prof
-     }
- }
- 
--pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backend) {
-+pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backend, bool enable_native_hfp_hf) {
-     pa_bluetooth_discovery *y;
-     DBusError err;
-     DBusConnection *conn;
-@@ -1737,6 +1761,7 @@ pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backe
-     PA_REFCNT_INIT(y);
-     y->core = c;
-     y->headset_backend = headset_backend;
-+    y->enable_native_hfp_hf = enable_native_hfp_hf;
-     y->adapters = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL,
-                                       (pa_free_cb_t) adapter_free);
-     y->devices = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL,
-diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h
-index 84c0c3f1..b077ca2c 100644
---- a/src/modules/bluetooth/bluez5-util.h
-+++ b/src/modules/bluetooth/bluez5-util.h
-@@ -47,6 +47,7 @@ typedef enum profile {
-     PA_BLUETOOTH_PROFILE_A2DP_SINK,
-     PA_BLUETOOTH_PROFILE_A2DP_SOURCE,
-     PA_BLUETOOTH_PROFILE_HSP_HS,
-+    PA_BLUETOOTH_PROFILE_HFP_HF,
-     PA_BLUETOOTH_PROFILE_HFP_AG,
-     PA_BLUETOOTH_PROFILE_OFF
- } pa_bluetooth_profile_t;
-@@ -161,8 +162,9 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile);
- #define HEADSET_BACKEND_NATIVE 1
- #define HEADSET_BACKEND_AUTO 2
- 
--pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *core, int headset_backend);
-+pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *core, int headset_backend, bool default_profile_hfp);
- pa_bluetooth_discovery* pa_bluetooth_discovery_ref(pa_bluetooth_discovery *y);
- void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y);
- void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is_running);
-+bool pa_bluetooth_discovery_get_enable_native_hfp_hf(pa_bluetooth_discovery *y);
- #endif
-diff --git a/src/modules/bluetooth/module-bluetooth-policy.c b/src/modules/bluetooth/module-bluetooth-policy.c
-index 316b9a82..b17c5d39 100644
---- a/src/modules/bluetooth/module-bluetooth-policy.c
-+++ b/src/modules/bluetooth/module-bluetooth-policy.c
-@@ -365,7 +365,8 @@ static pa_hook_result_t profile_available_hook_callback(pa_core *c, pa_card_prof
-     /* Do not automatically switch profiles for headsets, just in case */
-     /* TODO: remove a2dp and hsp when we remove BlueZ 4 support */
-     if (pa_streq(profile->name, "hsp") || pa_streq(profile->name, "a2dp") || pa_streq(profile->name, "a2dp_sink") ||
--        pa_streq(profile->name, "headset_head_unit"))
-+        pa_streq(profile->name, "headset_head_unit") ||
-+        pa_streq(profile->name, "headset_handsfree"))
-         return PA_HOOK_OK;
- 
-     is_active_profile = card->active_profile == profile;
-diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
-index d076fbad..d37ce9ce 100644
---- a/src/modules/bluetooth/module-bluez5-device.c
-+++ b/src/modules/bluetooth/module-bluez5-device.c
-@@ -258,6 +258,7 @@ static int sco_process_render(struct userdata *u) {
- 
-     pa_assert(u);
-     pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS ||
-+                u->profile == PA_BLUETOOTH_PROFILE_HFP_HF ||
-                 u->profile == PA_BLUETOOTH_PROFILE_HFP_AG);
-     pa_assert(u->sink);
- 
-@@ -318,6 +319,7 @@ static int sco_process_push(struct userdata *u) {
- 
-     pa_assert(u);
-     pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS ||
-+                u->profile == PA_BLUETOOTH_PROFILE_HFP_HF||
-                 u->profile == PA_BLUETOOTH_PROFILE_HFP_AG);
-     pa_assert(u->source);
-     pa_assert(u->read_smoother);
-@@ -784,7 +786,9 @@ static void transport_release(struct userdata *u) {
- 
- /* Run from I/O thread */
- static void transport_config_mtu(struct userdata *u) {
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         u->read_block_size = u->read_link_mtu;
-         u->write_block_size = u->write_link_mtu;
- 
-@@ -1004,7 +1008,8 @@ static int add_source(struct userdata *u) {
-     data.namereg_fail = false;
-     pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile));
-     pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF)
-         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
- 
-     connect_ports(u, &data, PA_DIRECTION_INPUT);
-@@ -1016,6 +1021,7 @@ static int add_source(struct userdata *u) {
-                 data.suspend_cause = PA_SUSPEND_USER;
-                 break;
-             case PA_BLUETOOTH_PROFILE_HSP_HS:
-+            case PA_BLUETOOTH_PROFILE_HFP_HF:
-                 /* u->stream_fd contains the error returned by the last transport_acquire()
-                  * EAGAIN means we are waiting for a NewConnection signal */
-                 if (u->stream_fd == -EAGAIN)
-@@ -1039,7 +1045,9 @@ static int add_source(struct userdata *u) {
-     u->source->userdata = u;
-     u->source->parent.process_msg = source_process_msg;
- 
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) {
-         pa_source_set_set_volume_callback(u->source, source_set_volume_cb);
-         u->source->n_volume_steps = 16;
-     }
-@@ -1174,7 +1182,8 @@ static int add_sink(struct userdata *u) {
-     data.namereg_fail = false;
-     pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile));
-     pa_sink_new_data_set_sample_spec(&data, &u->sample_spec);
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS)
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF)
-         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
- 
-     connect_ports(u, &data, PA_DIRECTION_OUTPUT);
-@@ -1185,6 +1194,7 @@ static int add_sink(struct userdata *u) {
-                 data.suspend_cause = PA_SUSPEND_USER;
-                 break;
-             case PA_BLUETOOTH_PROFILE_HSP_HS:
-+            case PA_BLUETOOTH_PROFILE_HFP_HF:
-                 /* u->stream_fd contains the error returned by the last transport_acquire()
-                  * EAGAIN means we are waiting for a NewConnection signal */
-                 if (u->stream_fd == -EAGAIN)
-@@ -1210,7 +1220,9 @@ static int add_sink(struct userdata *u) {
-     u->sink->userdata = u;
-     u->sink->parent.process_msg = sink_process_msg;
- 
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) {
-         pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
-         u->sink->n_volume_steps = 16;
-     }
-@@ -1219,7 +1231,9 @@ static int add_sink(struct userdata *u) {
- 
- /* Run from main thread */
- static void transport_config(struct userdata *u) {
--    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-+    if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF
-+        || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) {
-         u->sample_spec.format = PA_SAMPLE_S16LE;
-         u->sample_spec.channels = 1;
-         u->sample_spec.rate = 8000;
-@@ -1370,6 +1384,7 @@ static pa_direction_t get_profile_direction(pa_bluetooth_profile_t p) {
-         [PA_BLUETOOTH_PROFILE_A2DP_SINK] = PA_DIRECTION_OUTPUT,
-         [PA_BLUETOOTH_PROFILE_A2DP_SOURCE] = PA_DIRECTION_INPUT,
-         [PA_BLUETOOTH_PROFILE_HSP_HS] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-+        [PA_BLUETOOTH_PROFILE_HFP_HF] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-         [PA_BLUETOOTH_PROFILE_HFP_AG] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT,
-         [PA_BLUETOOTH_PROFILE_OFF] = 0
-     };
-@@ -1874,7 +1889,20 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro
-         break;
- 
-     case PA_BLUETOOTH_PROFILE_HSP_HS:
--        cp = pa_card_profile_new(name, _("Headset Head Unit (HSP/HFP)"), sizeof(pa_bluetooth_profile_t));
-+        cp = pa_card_profile_new(name, _("Headset Head Unit (HSP)"), sizeof(pa_bluetooth_profile_t));
-+        cp->priority = 20;
-+        cp->n_sinks = 1;
-+        cp->n_sources = 1;
-+        cp->max_sink_channels = 1;
-+        cp->max_source_channels = 1;
-+        pa_hashmap_put(input_port->profiles, cp->name, cp);
-+        pa_hashmap_put(output_port->profiles, cp->name, cp);
-+
-+        p = PA_CARD_PROFILE_DATA(cp);
-+        break;
-+
-+    case PA_BLUETOOTH_PROFILE_HFP_HF:
-+         cp = pa_card_profile_new(name, _("Headset Handsfree (HFP)"), sizeof(pa_bluetooth_profile_t));
-         cp->priority = 20;
-         cp->n_sinks = 1;
-         cp->n_sources = 1;
-@@ -1960,8 +1988,10 @@ static int uuid_to_profile(const char *uuid, pa_bluetooth_profile_t *_r) {
-         *_r = PA_BLUETOOTH_PROFILE_A2DP_SINK;
-     else if (pa_streq(uuid, PA_BLUETOOTH_UUID_A2DP_SOURCE))
-         *_r = PA_BLUETOOTH_PROFILE_A2DP_SOURCE;
--    else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF))
-+    else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS))
-         *_r = PA_BLUETOOTH_PROFILE_HSP_HS;
-+    else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF))
-+        *_r = PA_BLUETOOTH_PROFILE_HFP_HF;
-     else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_AG) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_AG))
-         *_r = PA_BLUETOOTH_PROFILE_HFP_AG;
-     else
-@@ -1980,6 +2010,7 @@ static int add_card(struct userdata *u) {
-     pa_bluetooth_profile_t *p;
-     const char *uuid;
-     void *state;
-+    bool enable_native_hfp_hf, has_both;
- 
-     pa_assert(u);
-     pa_assert(u->device);
-@@ -2010,9 +2041,22 @@ static int add_card(struct userdata *u) {
- 
-     create_card_ports(u, data.ports);
- 
-+    enable_native_hfp_hf = pa_bluetooth_discovery_get_enable_native_hfp_hf(u->discovery);
-+
-+    has_both = enable_native_hfp_hf && pa_hashmap_get(d->uuids, PA_BLUETOOTH_UUID_HFP_HF) && pa_hashmap_get(d->uuids, PA_BLUETOOTH_UUID_HSP_HS);
-     PA_HASHMAP_FOREACH(uuid, d->uuids, state) {
-         pa_bluetooth_profile_t profile;
- 
-+        if (!enable_native_hfp_hf && pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) {
-+            pa_log_info("device supports HFP but disabling profile as requested");
-+            continue;
-+        }
-+
-+        if (has_both && pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS)) {
-+            pa_log_info("device support HSP and HFP, selecting HFP only");
-+            continue;
-+        }
-+
-         if (uuid_to_profile(uuid, &profile) < 0)
-             continue;
- 
-diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c
-index c535ead4..bfb361ae 100644
---- a/src/modules/bluetooth/module-bluez5-discover.c
-+++ b/src/modules/bluetooth/module-bluez5-discover.c
-@@ -104,6 +104,7 @@ int pa__init(pa_module *m) {
-     const char *headset_str;
-     int headset_backend;
-     bool autodetect_mtu;
-+    bool enable_native_hfp_hf = true;
- 
-     pa_assert(m);
- 
-@@ -127,6 +128,9 @@ int pa__init(pa_module *m) {
-     autodetect_mtu = false;
-     if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) {
-         pa_log("Invalid boolean value for autodetect_mtu parameter");
-+    }
-+    if (pa_modargs_get_value_boolean(ma, "enable_native_hfp_hf", &enable_native_hfp_hf) < 0) {
-+        pa_log("enable_native_hfp_hf must be true or false");
-         goto fail;
-     }
- 
-@@ -136,7 +140,7 @@ int pa__init(pa_module *m) {
-     u->autodetect_mtu = autodetect_mtu;
-     u->loaded_device_paths = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- 
--    if (!(u->discovery = pa_bluetooth_discovery_get(u->core, headset_backend)))
-+    if (!(u->discovery = pa_bluetooth_discovery_get(u->core, headset_backend, enable_native_hfp_hf)))
-         goto fail;
- 
-     u->device_connection_changed_slot =
diff --git a/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch b/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch
deleted file mode 100644
index c93c0f1..0000000
--- a/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
-index 9ec9244b..99efa066 100644
---- a/src/modules/bluetooth/backend-native.c
-+++ b/src/modules/bluetooth/backend-native.c
-@@ -53,6 +53,43 @@ struct transport_data {
-     pa_mainloop_api *mainloop;
- };
- 
-+struct hfp_config {
-+    uint32_t capabilities;
-+    int state;
-+};
-+
-+/*
-+ * the separate hansfree headset (HF) and Audio Gateway (AG) features
-+ */
-+enum hfp_hf_features {
-+    HFP_HF_EC_NR = 0,
-+    HFP_HF_CALL_WAITING = 1,
-+    HFP_HF_CLI = 2,
-+    HFP_HF_VR = 3,
-+    HFP_HF_RVOL = 4,
-+    HFP_HF_ESTATUS = 5,
-+    HFP_HF_ECALL = 6,
-+    HFP_HF_CODECS = 7,
-+};
-+
-+enum hfp_ag_features {
-+    HFP_AG_THREE_WAY = 0,
-+    HFP_AG_EC_NR = 1,
-+    HFP_AG_VR = 2,
-+    HFP_AG_RING = 3,
-+    HFP_AG_NUM_TAG = 4,
-+    HFP_AG_REJECT = 5,
-+    HFP_AG_ESTATUS = 6,
-+    HFP_AG_ECALL = 7,
-+    HFP_AG_EERR = 8,
-+    HFP_AG_CODECS = 9,
-+};
-+
-+/* gateway features we support, which is as little as we can get away with */
-+static uint32_t hfp_features =
-+    /* HFP 1.6 requires this */
-+    (1 << HFP_AG_ESTATUS );
-+
- #define BLUEZ_SERVICE "org.bluez"
- #define BLUEZ_MEDIA_TRANSPORT_INTERFACE BLUEZ_SERVICE ".MediaTransport1"
- 
-@@ -109,6 +146,27 @@ static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_backend *backend, D
-     return p;
- }
- 
-+static void rfcomm_write(int fd, const char *str)
-+{
-+    size_t len;
-+    char buf[512];
-+
-+    pa_log_debug("RFCOMM >> %s", str);
-+    sprintf(buf, "\r\n%s\r\n", str);
-+    len = write(fd, buf, strlen(buf));
-+
-+    if (len != strlen(buf))
-+        pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno));
-+}
-+
-+static void hfp_send_features(int fd)
-+{
-+    char buf[512];
-+
-+    sprintf(buf, "+BRSF: %d", hfp_features);
-+    rfcomm_write(fd, buf);
-+}
-+
- static int sco_do_connect(pa_bluetooth_transport *t) {
-     pa_bluetooth_device *d = t->device;
-     struct sockaddr_sco addr;
-@@ -352,6 +410,61 @@ static void register_profile(pa_bluetooth_backend *b, const char *profile, const
-     send_and_add_to_pending(b, m, register_profile_reply, pa_xstrdup(profile));
- }
- 
-+static void transport_put(pa_bluetooth_transport *t)
-+{
-+    pa_bluetooth_transport_put(t);
-+
-+    pa_log_debug("Transport %s available for profile %s", t->path, pa_bluetooth_profile_to_string(t->profile));
-+}
-+
-+static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf)
-+{
-+    struct hfp_config *c = t->config;
-+    int val;
-+
-+    /* stateful negotiation */
-+    if (c->state == 0 && sscanf(buf, "AT+BRSF=%d", &val) == 1) {
-+          c->capabilities = val;
-+          pa_log_info("HFP capabilities returns 0x%x", val);
-+          hfp_send_features(fd);
-+          c->state = 1;
-+          return true;
-+    } else if (c->state == 1 && pa_startswith(buf, "AT+CIND=?")) {
-+          /* we declare minimal no indicators */
-+        rfcomm_write(fd, "+CIND: "
-+                     /* many indicators can be supported, only call and
-+                      * callheld are mandatory, so that's all we repy */
-+                     "(\"call\",(0-1)),"
-+                     "(\"callheld\",(0-2))");
-+        c->state = 2;
-+        return true;
-+    } else if (c->state == 2 && pa_startswith(buf, "AT+CIND?")) {
-+        rfcomm_write(fd, "+CIND: 0,0");
-+        c->state = 3;
-+        return true;
-+    } else if ((c->state == 2 || c->state == 3) && pa_startswith(buf, "AT+CMER=")) {
-+        rfcomm_write(fd, "\r\nOK\r\n");
-+        c->state = 4;
-+        transport_put(t);
-+        return false;
-+    }
-+
-+    /* if we get here, negotiation should be complete */
-+    if (c->state != 4) {
-+        pa_log_error("HFP negotiation failed in state %d with inbound %s\n",
-+                     c->state, buf);
-+        rfcomm_write(fd, "ERROR");
-+        return false;
-+    }
-+
-+    /*
-+     * once we're fully connected, just reply OK to everything
-+     * it will just be the headset sending the occasional status
-+     * update, but we process only the ones we care about
-+     */
-+    return true;
-+}
-+
- static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
-     pa_bluetooth_transport *t = userdata;
- 
-@@ -398,6 +511,8 @@ static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_i
-             do_reply = true;
-         } else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) {
-             do_reply = true;
-+        } else if (t->config) { /* t->config is only non-null for hfp profile */
-+            do_reply = hfp_rfcomm_handle(fd, t, buf);
-         } else {
-             do_reply = false;
-         }
-@@ -540,7 +655,9 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
-     sender = dbus_message_get_sender(m);
- 
-     pathfd = pa_sprintf_malloc ("%s/fd%d", path, fd);
--    t = pa_bluetooth_transport_new(d, sender, pathfd, p, NULL, 0);
-+    t = pa_bluetooth_transport_new(d, sender, pathfd, p, NULL,
-+                                   p == PA_BLUETOOTH_PROFILE_HFP_HF ?
-+                                   sizeof(struct hfp_config) : 0);
-     pa_xfree(pathfd);
- 
-     t->acquire = sco_acquire_cb;
-@@ -558,9 +675,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
- 
-     sco_listen(t);
- 
--    pa_bluetooth_transport_put(t);
--
--    pa_log_debug("Transport %s available for profile %s", t->path, pa_bluetooth_profile_to_string(t->profile));
-+    if (p != PA_BLUETOOTH_PROFILE_HFP_HF)
-+        transport_put(t);
- 
-     pa_assert_se(r = dbus_message_new_method_return(m));
- 
-diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
-index 80a025d5..8be8a11d 100644
---- a/src/modules/bluetooth/bluez5-util.c
-+++ b/src/modules/bluetooth/bluez5-util.c
-@@ -150,7 +150,10 @@ pa_bluetooth_transport *pa_bluetooth_transport_new(pa_bluetooth_device *d, const
- 
-     if (size > 0) {
-         t->config = pa_xnew(uint8_t, size);
--        memcpy(t->config, config, size);
-+        if (config)
-+            memcpy(t->config, config, size);
-+        else
-+            memset(t->config, 0, size);
-     }
- 
-     return t;
-diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h
-index b077ca2c..23f9a798 100644
---- a/src/modules/bluetooth/bluez5-util.h
-+++ b/src/modules/bluetooth/bluez5-util.h
-@@ -73,7 +73,7 @@ struct pa_bluetooth_transport {
-     pa_bluetooth_profile_t profile;
- 
-     uint8_t codec;
--    uint8_t *config;
-+    void *config;
-     size_t config_size;
- 
-     uint16_t microphone_gain;
diff --git a/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch b/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch
deleted file mode 100644
index b11d4c6..0000000
--- a/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c
-index bfb361ae..d2a0420d 100644
---- a/src/modules/bluetooth/module-bluez5-discover.c
-+++ b/src/modules/bluetooth/module-bluez5-discover.c
-@@ -93,7 +93,7 @@ static pa_hook_result_t device_connection_changed_cb(pa_bluetooth_discovery *y,
- }
- 
- #ifdef HAVE_BLUEZ_5_NATIVE_HEADSET
--const char *default_headset_backend = "auto";
-+const char *default_headset_backend = "native";
- #else
- const char *default_headset_backend = "ofono";
- #endif
-@@ -104,7 +104,7 @@ int pa__init(pa_module *m) {
-     const char *headset_str;
-     int headset_backend;
-     bool autodetect_mtu;
--    bool enable_native_hfp_hf = true;
-+    bool enable_native_hfp_hf;
- 
-     pa_assert(m);
- 
-@@ -125,6 +125,9 @@ int pa__init(pa_module *m) {
-         goto fail;
-     }
- 
-+    /* default value if no module parameter */
-+    enable_native_hfp_hf = (headset_backend == HEADSET_BACKEND_NATIVE);
-+
-     autodetect_mtu = false;
-     if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) {
-         pa_log("Invalid boolean value for autodetect_mtu parameter");
diff --git a/SPECS/pulseaudio.spec b/SPECS/pulseaudio.spec
index 94d360f..cde8520 100644
--- a/SPECS/pulseaudio.spec
+++ b/SPECS/pulseaudio.spec
@@ -1,5 +1,5 @@
-%global pa_major   11.1
-#global pa_minor   0
+%global pa_major   13.99
+%global pa_minor   1
 
 #global snap       20141103
 #global gitrel     327
@@ -16,19 +16,6 @@
 
 ## support systemd activation
 %global systemd 1
-## enable systemd activation by default (instead of autospawn)
-%if 0%{?fedora} || 0%{?rhel} > 7
-%global systemd_activation 1
-## TODO: ship preset to explicitly disable .service, enable .socket
-%else
-# gdm-hooks moved to gdm packaging f28+
-%global gdm_hooks 1
-%endif
-
-## tcp_wrapper support
-%if 0%{?fedora} < 28 && 0%{?rhel} <= 7
-%global tcpwrap 1
-%endif
 
 ## comment to disable tests
 %global tests 1
@@ -39,7 +26,7 @@
 Name:           pulseaudio
 Summary:        Improved Linux Sound Server
 Version:        %{pa_major}%{?pa_minor:.%{pa_minor}}
-Release:        23%{?snap:.%{snap}git%{shortcommit}}%{?dist}
+Release:        1%{?snap:.%{snap}git%{shortcommit}}%{?dist}
 License:        LGPLv2+
 URL:            http://www.freedesktop.org/wiki/Software/PulseAudio
 %if 0%{?gitrel}
@@ -48,8 +35,7 @@ URL:            http://www.freedesktop.org/wiki/Software/PulseAudio
 Source0:        pulseaudio-%{version}-%{gitrel}-g%{shortcommit}.tar.xz
 %else
 Source0:        http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz
-Source1:        http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.md5
-Source2:        http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha1
+Source1:        http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha256
 %endif
 
 Source5:        default.pa-for-gdm
@@ -60,57 +46,10 @@ Source5:        default.pa-for-gdm
 # valid even when using systemd socket activation too
 Patch201: pulseaudio-autostart.patch
 
-# disable flat-volumes by default
-# https://bugzilla.redhat.com/show_bug.cgi?id=1265267
-Patch202: pulseaudio-9.0-disable_flat_volumes.patch
-
-# bz#1067470,  only start threads on activ CPUs
-# see also https://bugs.freedesktop.org/show_bug.cgi?id=96638
-Patch203: pulseaudio-8.99.2-getaffinity.patch
-
-# upstreamed exit_idle_time solution, set to 0 in managed environments
-Patch204: pulseaudio-11.1-exit_idle_time-2.patch
-
-# workaround rawhide build failures, avoid dup'd memfd_create declaration
-# https://bugs.freedesktop.org/show_bug.cgi?id=104733
-Patch205: pulseaudio-11.1-glibc_memfd.patch
-
 # disable autospawn
 Patch206: pulseaudio-11.1-autospawn_disable.patch
 
-Patch207: 0001-X11-Add-xauthority-parameter.patch
-Patch208: 0002-alsa-Use-correct-header-path.patch
-Patch209: 0003-alsa-Fix-inclusion-of-use-case.h.patch
-
 ## upstream patches
-Patch4: 0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch
-Patch9: 0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch
-Patch10: 0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch
-Patch15: 0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch
-Patch16: 0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch
-Patch18: 0018-build-sys-add-the-Arctis-configuration.patch
-Patch33: 0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch
-Patch35: 0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch
-Patch74: 0074-build-sys-add-the-Dell-dock-TB16-configuration.patch
-Patch84: 0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch
-Patch85: 0085-client-conf-Add-a-default-value-for-disable-memfd.patch
-Patch90: 0090-qpaeq-port-to-PyQt5.patch
-Patch93: 0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch
-Patch96: 0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch
-Patch97: pulseaudio-python3.patch
-
-## upstreamable patches
-# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=100488
-Patch100: Fix-Intel-HDMI-LPE-problems.patch
-# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=93898
-Patch101: v5-1-4-bluetooth-use-consistent-profile-names.patch
-Patch102: v5-2-4-bluetooth-separate-HSP-and-HFP.patch
-Patch103: v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch
-Patch104: v5-4-4-bluetooth-make-native-the-default-backend.patch
-# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=100488 fixing pa
-# crashing on Bay/Cherry Trail unless realtime-scheduling=no is set
-Patch106: Fix-realtime-scheduling-on-byt-cht.patch
-Patch107: 0001-qpaeq-fix-Qt5-mainloop-use.patch
 
 BuildRequires:  automake libtool
 BuildRequires:  gcc-c++
@@ -122,10 +61,6 @@ BuildRequires:  intltool
 BuildRequires:  pkgconfig
 BuildRequires:  doxygen
 BuildRequires:  xmltoman
-# https://bugzilla.redhat.com/show_bug.cgi?id=1518777
-%if 0%{?tcpwrap}
-BuildRequires:  tcp_wrappers-devel
-%endif
 BuildRequires:  libsndfile-devel
 BuildRequires:  alsa-lib-devel
 BuildRequires:  glib2-devel
@@ -158,8 +93,6 @@ BuildRequires:  libasyncns-devel
 %if 0%{?systemd}
 BuildRequires:  systemd-devel >= 184
 BuildRequires:  systemd
-%endif
-%if 0%{?systemd_activation}
 %{?systemd_requires}
 %endif
 BuildRequires:  dbus-devel
@@ -186,13 +119,8 @@ Enlightened Sound Daemon (ESOUND).
 %package qpaeq
 Summary:	Pulseaudio equalizer interface
 Requires: 	%{name}%{?_isa} = %{version}-%{release}
-%if 0%{?fedora}  || 0%{?rhel} > 7
 Requires:	python3-qt5
 Requires:	python3-dbus
-%else
-Requires:	python-qt5
-Requires:	dbus-python
-%endif
 %description qpaeq
 qpaeq is a equalizer interface for pulseaudio's equalizer sinks.
 
@@ -252,6 +180,12 @@ Requires:       %{name}%{?_isa} = %{version}-%{release}
 %description module-gconf
 GConf configuration backend for the PulseAudio sound server.
 
+%package module-gsettings
+Summary:        Gsettings support for the PulseAudio sound server
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+%description module-gsettings
+GSettings configuration backend for the PulseAudio sound server.
+
 %package libs
 Summary:        Libraries for PulseAudio clients
 License:        LGPLv2+
@@ -289,69 +223,18 @@ Obsoletes:      pulseaudio-utils < 3.0-3
 %description utils
 This package contains command line utilities for the PulseAudio sound server.
 
-%if 0%{?gdm_hooks}
-%package gdm-hooks
-Summary:        PulseAudio GDM integration
-License:        LGPLv2+
-Requires:       gdm >= 1:2.22.0
-# for the gdm user
-Requires(pre):  gdm
-
-%description gdm-hooks
-This package contains GDM integration hooks for the PulseAudio sound server.
-%endif
-
-
 %prep
 %setup -q -T -b0 -n %{name}-%{version}%{?gitrel:-%{gitrel}-g%{shortcommit}}
 
 ## upstream patches
-%patch4 -p1
-%patch9 -p1
-%patch10 -p1
-%patch15 -p1
-%patch16 -p1
-%patch18 -p1
-%patch33 -p1
-%patch35 -p1
-%patch74 -p1
-%patch84 -p1
-%patch85 -p1
-%patch90 -p1
-# skip patch, possibly regressionish, https://bugzilla.redhat.com/show_bug.cgi?id=1551270
-#patch93 -p1
-%patch96 -p1
-# python3
-%patch97 -p1
+
 ## upstreamable patches
-## per comments in the upstream bug, it would *appear* this one is no longer needed after applying patch93
-#patch100 -p1
-# rawhide-only, for now, on hadess' advice --rex
-%if 0%{?fedora}  || 0%{?rhel} > 7
-%patch101 -p1
-%patch102 -p1
-%patch103 -p1
-%patch104 -p1
-%endif
-%patch106 -p1
-%patch107 -p1
 
 %patch201 -p1 -b .autostart
-%patch202 -p1 -b .disable_flat_volumes
-#patch203 -p1 -b .affinity
-%patch204 -p1 -b .exit_idle_time
-#if 0%{?fedora} > 27
-#patch205 -p1 -b .glibc_memfd
-#endif
-%if 0%{?systemd_activation}
+%if 0%{?systemd}
 %patch206 -p1 -b .autospawn_disable
 %endif
 
-%patch207 -p1
-%patch208 -p1
-%patch209 -p1
-
-
 sed -i.no_consolekit -e \
   's/^load-module module-console-kit/#load-module module-console-kit/' \
   src/daemon/default.pa.in
@@ -381,9 +264,11 @@ NOCONFIGURE=1 ./bootstrap.sh
   --disable-oss-output \
   %{?enable_jack:--enable-jack}%{!?enable_jack:--disable-jack} \
   %{?enable_lirc:--enable-lirc}%{!?enable_lirc:--disable-lirc} \
-  %{?tcpwrap:--enable-tcpwrap}%{!?tcpwrap:--disable-tcpwrap} \
+  --disable-tcpwrap \
   --disable-bluez4 \
   --enable-bluez5 \
+  --enable-gconf \
+  --enable-gsettings \
 %ifarch %{arm}
   --disable-neon-opt \
 %endif
@@ -421,18 +306,6 @@ popd
 mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d
 mv -fv $RPM_BUILD_ROOT/lib/udev/rules.d/90-pulseaudio.rules $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d
 
-%if 0%{?gdm_hooks}
-install -p -m644 -D %{SOURCE5} $RPM_BUILD_ROOT%{_localstatedir}/lib/gdm/.pulse/default.pa
-%endif
-
-# take cue from dbus and manually place wants symlink instead of
-# relying on scriptlets exclusively.  Helps handle upgrade cases
-# that standard scriptlets miss.
-%if 0%{?systemd_activation}
-mkdir %{buildroot}%{_userunitdir}/sockets.target.wants
-ln -s ../pulseaudio.socket %{buildroot}%{_userunitdir}/sockets.target.wants/pulseaudio.socket
-%endif
-
 ## unpackaged files
 # extraneous libtool crud
 rm -fv $RPM_BUILD_ROOT%{_libdir}/lib*.la
@@ -485,14 +358,14 @@ exit 0
 
 %post
 %{?ldconfig}
-%if 0%{?systemd_activation}
+%if 0%{?systemd}
 # unsure if we want both .socket and .service here (or only socket)
 # play it safe and do both for now -- rex
 %systemd_user_post pulseaudio.service
 %systemd_user_post pulseaudio.socket
 %endif
 
-%if 0%{?systemd_activation}
+%if 0%{?systemd}
 %preun
 %systemd_user_preun pulseaudio.service
 %systemd_user_preun pulseaudio.socket
@@ -500,6 +373,14 @@ exit 0
 
 %ldconfig_postun
 
+%if 0%{?systemd}
+%triggerun -- pulseaudio < 12.2-4
+# This is for upgrades from previous versions which had a static symlink.
+# The %%post scriptlet above only does anything on initial package installation.
+# Remove before F33.
+systemctl --no-reload preset --global pulseaudio.socket >/dev/null 2>&1 || :
+%endif
+
 %files
 %doc README
 %license LICENSE GPL LGPL
@@ -511,8 +392,8 @@ exit 0
 %if 0%{?systemd}
 %{_userunitdir}/pulseaudio.service
 %{_userunitdir}/pulseaudio.socket
-%{_userunitdir}/sockets.target.wants/pulseaudio.socket
 %endif
+%{_bindir}/pa-info
 %{_bindir}/pulseaudio
 %{_libdir}/pulseaudio/libpulsecore-%{pa_major}.so
 %dir %{_libdir}/pulse-%{pa_major}/
@@ -528,7 +409,6 @@ exit 0
 %if 0%{?with_webrtc}
 %{_libdir}/pulse-%{pa_major}/modules/libwebrtc-util.so
 %endif
-#{_libdir}/pulse-%{pa_major}/modules/module-access.so
 %{_libdir}/pulse-%{pa_major}/modules/module-allow-passthrough.so
 %{_libdir}/pulse-%{pa_major}/modules/module-alsa-sink.so
 %{_libdir}/pulse-%{pa_major}/modules/module-alsa-source.so
@@ -541,7 +421,6 @@ exit 0
 %{_libdir}/pulse-%{pa_major}/modules/module-dbus-protocol.so
 %{_libdir}/pulse-%{pa_major}/modules/module-filter-apply.so
 %{_libdir}/pulse-%{pa_major}/modules/module-filter-heuristics.so
-#{_libdir}/pulse-%{pa_major}/modules/module-flatpak.so
 %{_libdir}/pulse-%{pa_major}/modules/module-device-manager.so
 %{_libdir}/pulse-%{pa_major}/modules/module-loopback.so
 %{_libdir}/pulse-%{pa_major}/modules/module-esound-compat-spawnfd.so
@@ -585,6 +464,7 @@ exit 0
 %{_libdir}/pulse-%{pa_major}/modules/module-ladspa-sink.so
 %{_libdir}/pulse-%{pa_major}/modules/module-remap-sink.so
 %{_libdir}/pulse-%{pa_major}/modules/module-always-sink.so
+%{_libdir}/pulse-%{pa_major}/modules/module-always-source.so
 %{_libdir}/pulse-%{pa_major}/modules/module-console-kit.so
 %{_libdir}/pulse-%{pa_major}/modules/module-position-event-sounds.so
 %{_libdir}/pulse-%{pa_major}/modules/module-augment-properties.so
@@ -661,8 +541,13 @@ exit 0
 %{_libdir}/pulse-%{pa_major}/modules/module-gconf.so
 %{_libexecdir}/pulse/gconf-helper
 
-%post libs -p /sbin/ldconfig
-%postun libs -p /sbin/ldconfig
+%files module-gsettings
+%{_libdir}/pulse-%{pa_major}/modules/module-gsettings.so
+%{_libexecdir}/pulse/gsettings-helper
+%{_datadir}/GConf/gsettings/pulseaudio.convert
+%{_datadir}/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml
+
+%ldconfig_scriptlets libs
 
 %files libs -f %{name}.lang
 %doc README LICENSE GPL LGPL
@@ -674,8 +559,7 @@ exit 0
 %{_libdir}/pulseaudio/libpulsecommon-%{pa_major}.so
 %{_libdir}/pulseaudio/libpulsedsp.so
 
-%post libs-glib2 -p /sbin/ldconfig
-%postun libs-glib2 -p /sbin/ldconfig
+%ldconfig_scriptlets libs-glib2
 
 %files libs-glib2
 %{_libdir}/libpulse-mainloop-glib.so.0*
@@ -724,14 +608,11 @@ exit 0
 %{_mandir}/man1/pasuspender.1*
 %{_mandir}/man1/pax11publish.1*
 
-%if 0%{?gdm_hooks}
-%files gdm-hooks
-%attr(0700, gdm, gdm) %dir %{_localstatedir}/lib/gdm/.pulse
-%attr(0600, gdm, gdm) %{_localstatedir}/lib/gdm/.pulse/default.pa
-%endif
-
-
 %changelog
+* Mon May 11 2020 Wim Taymans <wtaymans@redhat.com> - 13.99.1-1
+- Update to 13.99.1
+- Resolves: rhbz#1817378
+
 * Thu Sep 12 2019 Wim Taymans <wtaymans@redhat.com> - 11.1-23
 - Add xauthority parameter to X11 modules
 - Fix compilation against newer alsa-lib