diff --git a/meson.build b/meson.build
index 80ff0031..6cd4cc13 100644
--- a/meson.build
+++ b/meson.build
@@ -263,7 +263,7 @@ linux_platform_src = ['platform/targets/linux/emulator/emulator.c',
'platform/mcu/x86_64/drivers/delays.c',
'platform/mcu/x86_64/drivers/rtc.c',
'platform/drivers/baseband/radio_linux.cpp',
- 'platform/drivers/audio/audio_linux.cpp',
+ 'platform/drivers/audio/audio_linux.c',
'platform/drivers/audio/inputStream_linux.cpp',
'platform/drivers/audio/outputStream_linux.c',
'platform/targets/linux/platform.c',
diff --git a/platform/drivers/audio/audio_linux.c b/platform/drivers/audio/audio_linux.c
new file mode 100644
index 00000000..4a0100ce
--- /dev/null
+++ b/platform/drivers/audio/audio_linux.c
@@ -0,0 +1,133 @@
+/***************************************************************************
+ * Copyright (C) 2021 - 2022 by Federico Amedeo Izzo IU2NUO, *
+ * Niccolò Izzo IU2KIN *
+ * Frederik Saraci IU2NRO *
+ * Silvano Seva IU2KWO *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, see *
+ ***************************************************************************/
+
+#include
+#include
+#include
+
+
+static const uint8_t pathCompatibilityMatrix[9][9] =
+{
+ // MIC-SPK MIC-RTX MIC-MCU RTX-SPK RTX-RTX RTX-MCU MCU-SPK MCU-RTX MCU-MCU
+ { 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 }, // MIC-RTX
+ { 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 }, // MIC-SPK
+ { 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 }, // MIC-MCU
+ { 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 }, // RTX-SPK
+ { 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 }, // RTX-RTX
+ { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 }, // RTX-MCU
+ { 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 }, // MCU-SPK
+ { 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 }, // MCU-RTX
+ { 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 } // MCU-MCU
+};
+
+
+void audio_init()
+{
+
+}
+
+void audio_terminate()
+{
+
+}
+
+void audio_connect(const enum AudioSource source, const enum AudioSink sink)
+{
+ #ifdef VERBOSE
+ printf("Connect ");
+ switch(source)
+ {
+ case SOURCE_MIC: printf("MIC"); break;
+ case SOURCE_RTX: printf("RTX"); break;
+ case SOURCE_MCU: printf("MCU"); break;
+ default: break;
+ }
+
+ printf(" with ");
+ switch(sink)
+ {
+ case SINK_SPK: printf("SPK\n"); break;
+ case SINK_RTX: printf("RTX\n"); break;
+ case SINK_MCU: printf("MCU\n"); break;
+ default: break;
+ }
+ #else
+ (void) source;
+ (void) sink;
+ #endif
+}
+
+void audio_disconnect(const enum AudioSource source, const enum AudioSink sink)
+{
+ #ifdef VERBOSE
+ printf("Disconnect ");
+ switch(source)
+ {
+ case SOURCE_MIC: printf("MIC"); break;
+ case SOURCE_RTX: printf("RTX"); break;
+ case SOURCE_MCU: printf("MCU"); break;
+ default: break;
+ }
+
+ printf(" from ");
+ switch(sink)
+ {
+ case SINK_SPK: printf("SPK\n"); break;
+ case SINK_RTX: printf("RTX\n"); break;
+ case SINK_MCU: printf("MCU\n"); break;
+ default: break;
+ }
+ #else
+ (void) source;
+ (void) sink;
+ #endif
+}
+
+bool audio_checkPathCompatibility(const enum AudioSource p1Source,
+ const enum AudioSink p1Sink,
+ const enum AudioSource p2Source,
+ const enum AudioSink p2Sink)
+
+{
+ uint8_t p1Index = (p1Source * 3) + p1Sink;
+ uint8_t p2Index = (p2Source * 3) + p2Sink;
+
+ return pathCompatibilityMatrix[p1Index][p2Index] == 1;
+}
+
+void audio_enableMic()
+{
+ /* No mic control on this family */
+}
+
+void audio_disableMic()
+{
+ /* No mic control on this family */
+}
+
+void audio_enableAmp()
+{
+ /* No PA control on this family */
+}
+
+void audio_disableAmp()
+{
+ /* No PA control on this family */
+}
diff --git a/platform/drivers/audio/audio_linux.cpp b/platform/drivers/audio/audio_linux.cpp
deleted file mode 100644
index f5a81394..00000000
--- a/platform/drivers/audio/audio_linux.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2021 - 2022 by Federico Amedeo Izzo IU2NUO, *
- * Niccolò Izzo IU2KIN *
- * Frederik Saraci IU2NRO *
- * Silvano Seva IU2KWO *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU 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 General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, see *
- ***************************************************************************/
-
-#include
-#include
-#include
-
-void audio_init()
-{
-}
-
-void audio_terminate()
-{
-}
-
-void audio_enableMic()
-{
- /* No mic control on this family */
-}
-
-void audio_disableMic()
-{
- /* No mic control on this family */
-}
-
-void audio_enableAmp()
-{
- /* No PA control on this family */
-}
-
-void audio_disableAmp()
-{
- /* No PA control on this family */
-}