mirror of
https://github.com/OpenVoiceOS/OpenVoiceOS
synced 2025-03-25 07:50:10 +01:00
Initial start on implementing the XMOS VocalFusion soundcard.
This commit is contained in:
parent
7078fa4e7b
commit
cf9935029c
@ -1,4 +1,5 @@
|
|||||||
menu "Additional drivers, libraries and/or applications"
|
menu "Additional drivers, libraries and/or applications"
|
||||||
|
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/alsa-ucm-conf/Config.in"
|
||||||
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/armnn/Config.in"
|
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/armnn/Config.in"
|
||||||
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/baresip/Config.in"
|
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/baresip/Config.in"
|
||||||
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/btspeaker/Config.in"
|
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/btspeaker/Config.in"
|
||||||
|
@ -28,3 +28,6 @@ CONFIG_NVME_HWMON=y
|
|||||||
CONFIG_NUMA_EMULATION=y
|
CONFIG_NUMA_EMULATION=y
|
||||||
|
|
||||||
CONFIG_ARM64_VA_BITS_48=y
|
CONFIG_ARM64_VA_BITS_48=y
|
||||||
|
|
||||||
|
CONFIG_SND_BCM2708_SOC_XMOS_XVF3510=m
|
||||||
|
CONFIG_SND_SOC_TAS5805M=m
|
||||||
|
@ -0,0 +1,325 @@
|
|||||||
|
From 4646199906b21fcf76409d9aaab512153b600cd8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: j1nx <p.steenbergen@j1nx.nl>
|
||||||
|
Date: Mon, 7 Oct 2024 11:33:57 +0000
|
||||||
|
Subject: [PATCH 1/1] Add support for the XMOS VocalFusion 3510-INT soundcard
|
||||||
|
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/overlays/Makefile | 4 +-
|
||||||
|
arch/arm/boot/dts/overlays/README | 7 ++
|
||||||
|
arch/arm/boot/dts/overlays/overlay_map.dts | 10 +++
|
||||||
|
.../dts/overlays/xmos-xvf3510-overlay.dts | 58 +++++++++++++
|
||||||
|
.../overlays/xmos-xvf3510-rpi5-overlay.dts | 58 +++++++++++++
|
||||||
|
sound/soc/bcm/Kconfig | 6 ++
|
||||||
|
sound/soc/bcm/rpi-simple-soundcard.c | 83 +++++++++++++++++++
|
||||||
|
7 files changed, 225 insertions(+), 1 deletion(-)
|
||||||
|
create mode 100644 arch/arm/boot/dts/overlays/xmos-xvf3510-overlay.dts
|
||||||
|
create mode 100644 arch/arm/boot/dts/overlays/xmos-xvf3510-rpi5-overlay.dts
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||||
|
index bd16c4a18d9f..7056737fd344 100644
|
||||||
|
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||||
|
@@ -336,7 +336,9 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||||
|
waveshare-can-fd-hat-mode-a.dtbo \
|
||||||
|
waveshare-can-fd-hat-mode-b.dtbo \
|
||||||
|
wittypi.dtbo \
|
||||||
|
- wm8960-soundcard.dtbo
|
||||||
|
+ wm8960-soundcard.dtbo \
|
||||||
|
+ xmos-xvf3510.dtbo \
|
||||||
|
+ xmos-xvf3510-rpi5.dtbo
|
||||||
|
|
||||||
|
targets += dtbs dtbs_install
|
||||||
|
targets += $(dtbo-y)
|
||||||
|
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||||
|
index dfd7a44c757d..c7f26a2dbab3 100644
|
||||||
|
--- a/arch/arm/boot/dts/overlays/README
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/README
|
||||||
|
@@ -5470,6 +5470,13 @@ Params: alsaname Changes the card name in ALSA
|
||||||
|
compatible Changes the codec compatibility
|
||||||
|
|
||||||
|
|
||||||
|
+Name: xmos-xvf3510
|
||||||
|
+Info: Overlay for the XMOS VocalFusion 3510-INT soundcard
|
||||||
|
+ https://www.xmos.com/download/XVF3510-INT-Datasheet(4_1).pdf
|
||||||
|
+Load: dtoverlay=xmos-xvf3510
|
||||||
|
+Params: <None>
|
||||||
|
+
|
||||||
|
+
|
||||||
|
Troubleshooting
|
||||||
|
===============
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/overlays/overlay_map.dts b/arch/arm/boot/dts/overlays/overlay_map.dts
|
||||||
|
index 2ddf4c7f4323..df856d049c53 100644
|
||||||
|
--- a/arch/arm/boot/dts/overlays/overlay_map.dts
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/overlay_map.dts
|
||||||
|
@@ -511,4 +511,14 @@ w1-gpio-pullup-pi5 {
|
||||||
|
bcm2712;
|
||||||
|
};
|
||||||
|
|
||||||
|
+ xmos-xvf3510 {
|
||||||
|
+ bcm2835;
|
||||||
|
+ bcm2711;
|
||||||
|
+ bcm2712 = "xmos-xvf3510-pi5";
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ xmos-xvf3510-pi5 {
|
||||||
|
+ bcm2712;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
};
|
||||||
|
diff --git a/arch/arm/boot/dts/overlays/xmos-xvf3510-overlay.dts b/arch/arm/boot/dts/overlays/xmos-xvf3510-overlay.dts
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000000..d8be81a90338
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/xmos-xvf3510-overlay.dts
|
||||||
|
@@ -0,0 +1,58 @@
|
||||||
|
+// Definitions for XMOS VocalFusion 3510-INT
|
||||||
|
+/dts-v1/;
|
||||||
|
+/plugin/;
|
||||||
|
+
|
||||||
|
+/ {
|
||||||
|
+ compatible = "brcm,bcm2835";
|
||||||
|
+
|
||||||
|
+ fragment@0 {
|
||||||
|
+ target = <&gpio>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ xvf_clk_pin: xvf_clk_pin {
|
||||||
|
+ brcm,pins = <4>;
|
||||||
|
+ brcm,function = <4>;
|
||||||
|
+ };
|
||||||
|
+ xvf_ctrl_pins: xvf_ctrl_pins {
|
||||||
|
+ brcm,pins = <16 27>;
|
||||||
|
+ brcm,function = <1 1>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@1 {
|
||||||
|
+ target = <&i2s_clk_producer>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ status = "okay";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@2 {
|
||||||
|
+ target-path = "/";
|
||||||
|
+ __overlay__ {
|
||||||
|
+ dummy-codec {
|
||||||
|
+ #sound-dai-cells = <0>;
|
||||||
|
+ compatible = "snd-soc-dummy";
|
||||||
|
+ status = "okay";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@3 {
|
||||||
|
+ target = <&sound>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ compatible = "xmos,xmos-xvf3510";
|
||||||
|
+ i2s-controller = <&i2s_clk_producer>;
|
||||||
|
+ status = "okay";
|
||||||
|
+
|
||||||
|
+ clocks = <&clocks 38>;
|
||||||
|
+ clock-names = "mclk";
|
||||||
|
+ clock-frequency = <24576000>;
|
||||||
|
+
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&xvf_clk_pin &xvf_ctrl_pins>;
|
||||||
|
+
|
||||||
|
+ pwr-gpio = <&gpio 16 0>;
|
||||||
|
+ rst-gpio = <&gpio 27 0>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
diff --git a/arch/arm/boot/dts/overlays/xmos-xvf3510-rpi5-overlay.dts b/arch/arm/boot/dts/overlays/xmos-xvf3510-rpi5-overlay.dts
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000000..e88d07ccd24e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/arch/arm/boot/dts/overlays/xmos-xvf3510-rpi5-overlay.dts
|
||||||
|
@@ -0,0 +1,58 @@
|
||||||
|
+// Definitions for XMOS VocalFusion 3510-INT
|
||||||
|
+/dts-v1/;
|
||||||
|
+/plugin/;
|
||||||
|
+
|
||||||
|
+/ {
|
||||||
|
+ compatible = "brcm,bcm2712";
|
||||||
|
+
|
||||||
|
+ fragment@0 {
|
||||||
|
+ target = <&gpio>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ xvf_clk_pin: xvf_clk_pin {
|
||||||
|
+ brcm,pins = <4>;
|
||||||
|
+ brcm,function = <4>;
|
||||||
|
+ };
|
||||||
|
+ xvf_ctrl_pins: xvf_ctrl_pins {
|
||||||
|
+ brcm,pins = <16 27>;
|
||||||
|
+ brcm,function = <1 1>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@1 {
|
||||||
|
+ target = <&i2s_clk_producer>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ status = "okay";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@2 {
|
||||||
|
+ target-path = "/";
|
||||||
|
+ __overlay__ {
|
||||||
|
+ dummy-codec {
|
||||||
|
+ #sound-dai-cells = <0>;
|
||||||
|
+ compatible = "snd-soc-dummy";
|
||||||
|
+ status = "okay";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ fragment@3 {
|
||||||
|
+ target = <&sound>;
|
||||||
|
+ __overlay__ {
|
||||||
|
+ compatible = "xmos,xmos-xvf3510";
|
||||||
|
+ i2s-controller = <&i2s_clk_producer>;
|
||||||
|
+ status = "okay";
|
||||||
|
+
|
||||||
|
+ clocks = <&rp1_clocks 33>;
|
||||||
|
+ clock-names = "mclk";
|
||||||
|
+ clock-frequency = <24576000>;
|
||||||
|
+
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&xvf_clk_pin &xvf_ctrl_pins>;
|
||||||
|
+
|
||||||
|
+ pwr-gpio = <&rp1_gpio 16 0>;
|
||||||
|
+ rst-gpio = <&rp1_gpio 27 0>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
diff --git a/sound/soc/bcm/Kconfig b/sound/soc/bcm/Kconfig
|
||||||
|
index fa50cab51478..c0e393a0d1f8 100644
|
||||||
|
--- a/sound/soc/bcm/Kconfig
|
||||||
|
+++ b/sound/soc/bcm/Kconfig
|
||||||
|
@@ -141,6 +141,12 @@ config SND_BCM2708_SOC_RPI_PROTO
|
||||||
|
help
|
||||||
|
Say Y or M if you want to add support for Audio Codec Board PROTO (WM8731).
|
||||||
|
|
||||||
|
+config SND_BCM2708_SOC_XMOS_XVF3510
|
||||||
|
+ tristate "Support for XMOS VocalFusion 3510-INT"
|
||||||
|
+ select SND_RPI_SIMPLE_SOUNDCARD
|
||||||
|
+ help
|
||||||
|
+ Say Y or M if you want to add support for XMOS VocalFusion 3510-INT.
|
||||||
|
+
|
||||||
|
config SND_BCM2708_SOC_JUSTBOOM_BOTH
|
||||||
|
tristate "Support for simultaneous JustBoom Digi and JustBoom DAC"
|
||||||
|
select SND_SOC_WM8804
|
||||||
|
diff --git a/sound/soc/bcm/rpi-simple-soundcard.c b/sound/soc/bcm/rpi-simple-soundcard.c
|
||||||
|
index c8f681cb07ca..17bd6cfc0e01 100644
|
||||||
|
--- a/sound/soc/bcm/rpi-simple-soundcard.c
|
||||||
|
+++ b/sound/soc/bcm/rpi-simple-soundcard.c
|
||||||
|
@@ -33,6 +33,7 @@
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/gpio/consumer.h>
|
||||||
|
+#include <linux/clk.h>
|
||||||
|
|
||||||
|
#include <sound/core.h>
|
||||||
|
#include <sound/pcm.h>
|
||||||
|
@@ -473,6 +474,86 @@ static struct snd_rpi_simple_drvdata drvdata_pifi_mini_210 = {
|
||||||
|
.fixed_bclk_ratio = 64,
|
||||||
|
};
|
||||||
|
|
||||||
|
+SND_SOC_DAILINK_DEFS(xmos_xvf3510,
|
||||||
|
+ DAILINK_COMP_ARRAY(COMP_EMPTY()),
|
||||||
|
+ DAILINK_COMP_ARRAY(COMP_CODEC("snd-soc-dummy", "snd-soc-dummy-dai")),
|
||||||
|
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
|
||||||
|
+
|
||||||
|
+static int xmos_xvf3510_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
|
+{
|
||||||
|
+ struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
|
||||||
|
+ struct gpio_desc *pwr_gpio, *rst_gpio;
|
||||||
|
+ struct clk *mclk;
|
||||||
|
+ int rate, ret;
|
||||||
|
+
|
||||||
|
+ codec_dai->driver->capture.channels_max = 2;
|
||||||
|
+ codec_dai->driver->capture.rates = SNDRV_PCM_RATE_48000;
|
||||||
|
+
|
||||||
|
+ // Obtain and configure the master clock
|
||||||
|
+ mclk = devm_clk_get(snd_rpi_simple.dev, NULL);
|
||||||
|
+ if (IS_ERR(mclk)) {
|
||||||
|
+ dev_err(snd_rpi_simple.dev, "Failed to get clock: %ld\n", PTR_ERR(mclk));
|
||||||
|
+ return PTR_ERR(mclk);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Read clock frequency from the DT
|
||||||
|
+ ret = of_property_read_u32(snd_rpi_simple.dev->of_node, "clock-frequency", &rate);
|
||||||
|
+ if (ret) {
|
||||||
|
+ dev_err(snd_rpi_simple.dev, "Failed to read 'clock-frequency' from device tree: %d\n", ret);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ dev_info(snd_rpi_simple.dev, "rate set to: %u Hz\n", rate);
|
||||||
|
+
|
||||||
|
+ // Set the clock to the desired frequency
|
||||||
|
+ ret = clk_set_rate(mclk, rate);
|
||||||
|
+ if (ret) {
|
||||||
|
+ dev_err(snd_rpi_simple.dev, "Failed to set clock rate: %d\n", ret);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ clk_prepare_enable(mclk);
|
||||||
|
+ dev_info(snd_rpi_simple.dev, "mclk set to: %lu Hz\n", clk_get_rate(mclk));
|
||||||
|
+
|
||||||
|
+ // Configure power and reset GPIOs
|
||||||
|
+ pwr_gpio = devm_gpiod_get(snd_rpi_simple.dev, "pwr", GPIOD_OUT_HIGH);
|
||||||
|
+ if (IS_ERR(pwr_gpio)) {
|
||||||
|
+ dev_err(snd_rpi_simple.dev, "Failed to get PWR GPIO: %ld\n", PTR_ERR(pwr_gpio));
|
||||||
|
+ return PTR_ERR(pwr_gpio);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ rst_gpio = devm_gpiod_get(snd_rpi_simple.dev, "rst", GPIOD_OUT_HIGH);
|
||||||
|
+ if (IS_ERR(rst_gpio)) {
|
||||||
|
+ dev_err(snd_rpi_simple.dev, "Failed to get RST GPIO: %ld\n", PTR_ERR(rst_gpio));
|
||||||
|
+ return PTR_ERR(rst_gpio);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Initialise the XMOS chip
|
||||||
|
+ gpiod_set_value(pwr_gpio, 1);
|
||||||
|
+ gpiod_set_value(rst_gpio, 1);
|
||||||
|
+
|
||||||
|
+ pr_info("XMOS VocalFusion 3510-INT soundcard module loaded\n");
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static struct snd_soc_dai_link snd_xmos_xvf3510_dai[] = {
|
||||||
|
+ {
|
||||||
|
+ .name = "XMOS VocalFusion 3510-INT",
|
||||||
|
+ .stream_name = "XMOS VocalFusion 3510-INT HiFi",
|
||||||
|
+ .dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||||
|
+ SND_SOC_DAIFMT_NB_NF |
|
||||||
|
+ SND_SOC_DAIFMT_CBS_CFS,
|
||||||
|
+ .init = xmos_xvf3510_init,
|
||||||
|
+ SND_SOC_DAILINK_REG(xmos_xvf3510),
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static struct snd_rpi_simple_drvdata drvdata_xmos_xvf3510 = {
|
||||||
|
+ .card_name = "snd_xvf3510",
|
||||||
|
+ .dai = snd_xmos_xvf3510_dai,
|
||||||
|
+ .fixed_bclk_ratio = 64,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static const struct of_device_id snd_rpi_simple_of_match[] = {
|
||||||
|
{ .compatible = "adi,adau1977-adc",
|
||||||
|
.data = (void *) &drvdata_adau1977 },
|
||||||
|
@@ -497,6 +578,8 @@ static const struct of_device_id snd_rpi_simple_of_match[] = {
|
||||||
|
.data = (void *) &drvdata_merus_amp },
|
||||||
|
{ .compatible = "pifi,pifi-mini-210",
|
||||||
|
.data = (void *) &drvdata_pifi_mini_210 },
|
||||||
|
+ { .compatible = "xmos,xmos-xvf3510",
|
||||||
|
+ .data = (void *) &drvdata_xmos_xvf3510 },
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
|
options snd_soc_rpi_simple_soundcard index=0
|
||||||
options snd_soc_simple_card index=0
|
options snd_soc_simple_card index=0
|
||||||
options snd_soc_rpi_proto index=0
|
options snd_soc_rpi_proto index=0
|
||||||
options snd_soc_seeed_voicecard index=0
|
options snd_soc_seeed_voicecard index=0
|
||||||
options snd_bcm2835 index=1
|
options snd_bcm2835 index=1
|
||||||
options snd slots=snd_soc_simple_card,snd_soc_rpi_proto,snd_soc_seeed_voicecard,snd_bcm2835
|
options snd slots=snd_soc_rpi_simple_soundcard,snd_soc_simple_card,snd_soc_rpi_proto,snd_soc_seeed_voicecard,snd_bcm2835
|
||||||
|
Binary file not shown.
@ -189,14 +189,11 @@ main() {
|
|||||||
if [[ ${detection_results[TAS5806]} == true ]] ; then
|
if [[ ${detection_results[TAS5806]} == true ]] ; then
|
||||||
echo "Installing and configuring SJ-201 HAT"
|
echo "Installing and configuring SJ-201 HAT"
|
||||||
# Initializing XMOS xvf3510 based SJ-201 HAT
|
# Initializing XMOS xvf3510 based SJ-201 HAT
|
||||||
if [[ "$board_result" == "RPI5" ]]; then
|
dtoverlay xmos-xvf3510
|
||||||
dtoverlay sj201-pi5
|
echo "Configuring board"
|
||||||
else
|
sleep 3 # Allow some time to fully initialise the hardware / driver
|
||||||
dtoverlay sj201
|
|
||||||
echo "Configuring board"
|
|
||||||
sleep 3 # Allow some time to fully initialise the hardware / driver
|
|
||||||
fi
|
|
||||||
xvf3510-flash --direct "/usr/lib/firmware/xvf3510/app_xvf3510_int_spi_boot_v4_2_0.bin"
|
xvf3510-flash --direct "/usr/lib/firmware/xvf3510/app_xvf3510_int_spi_boot_v4_2_0.bin"
|
||||||
|
/usr/bin/tas5806-init
|
||||||
|
|
||||||
if [[ ${detection_results[SJ201LED]} == true ]] ; then
|
if [[ ${detection_results[SJ201LED]} == true ]] ; then
|
||||||
echo "Found revision-6 SJ-201 board"
|
echo "Found revision-6 SJ-201 board"
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
Include.pcm_split.File "/common/pcm/split.conf"
|
||||||
|
|
||||||
|
Macro [
|
||||||
|
{
|
||||||
|
SplitPCM {
|
||||||
|
Name "xvf3510_stereo_out"
|
||||||
|
Direction Playback
|
||||||
|
Channels 2
|
||||||
|
HWChannels 2
|
||||||
|
HWChannelPos0 FL
|
||||||
|
HWChannelPos1 FR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
SplitPCM {
|
||||||
|
Name "xvf3510_mono_in"
|
||||||
|
Direction Capture
|
||||||
|
Format S32_LE
|
||||||
|
Channels 1
|
||||||
|
HWChannels 2
|
||||||
|
HWChannelPos0 MONO
|
||||||
|
HWChannelPos1 MONO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
SectionDevice."Line 1" {
|
||||||
|
Comment "Stereo Output"
|
||||||
|
|
||||||
|
Value {
|
||||||
|
PlaybackPriority 200
|
||||||
|
}
|
||||||
|
Macro.pcm_split.SplitPCMDevice {
|
||||||
|
Name "xvf3510_stereo_out"
|
||||||
|
Direction Playback
|
||||||
|
HWChannels 2
|
||||||
|
Channels 2
|
||||||
|
Channel0 0
|
||||||
|
Channel1 1
|
||||||
|
ChannelPos0 FL
|
||||||
|
ChannelPos1 FR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SectionDevice."Mic1" {
|
||||||
|
Comment "ASR"
|
||||||
|
|
||||||
|
Value {
|
||||||
|
CapturePriority 200
|
||||||
|
}
|
||||||
|
Macro.pcm_split.SplitPCMDevice {
|
||||||
|
Name "xvf3510_mono_in"
|
||||||
|
Direction Capture
|
||||||
|
HWChannels 2
|
||||||
|
Channels 1
|
||||||
|
Channel0 0
|
||||||
|
ChannelPos0 MONO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SectionDevice."Mic2" {
|
||||||
|
Comment "Comms"
|
||||||
|
|
||||||
|
Value {
|
||||||
|
CapturePriority 100
|
||||||
|
}
|
||||||
|
Macro.pcm_split.SplitPCMDevice {
|
||||||
|
Name "xvf3510_mono_in"
|
||||||
|
Direction Capture
|
||||||
|
HWChannels 2
|
||||||
|
Channels 1
|
||||||
|
Channel0 1
|
||||||
|
ChannelPos0 MONO
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
Syntax 4
|
||||||
|
Comment "XMOS VocalFusion 3510-INT"
|
||||||
|
|
||||||
|
SectionUseCase."HiFi" {
|
||||||
|
Comment "Default"
|
||||||
|
File "/RaspberryPi/XMOS/sndxvf3510/HiFi.conf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Define.DirectPlaybackChannels 2
|
||||||
|
Define.DirectCaptureChannels 2
|
||||||
|
|
||||||
|
Include.card-init.File "/lib/card-init.conf"
|
||||||
|
Include.ctl-remap.File "/lib/ctl-remap.conf"
|
@ -0,0 +1 @@
|
|||||||
|
../../XMOS/sndxvf3510/sndxvf3510.conf
|
@ -310,6 +310,7 @@ BR2_PACKAGE_HOST_GENIMAGE=y
|
|||||||
BR2_PACKAGE_HOST_MKPASSWD=y
|
BR2_PACKAGE_HOST_MKPASSWD=y
|
||||||
BR2_PACKAGE_HOST_MTOOLS=y
|
BR2_PACKAGE_HOST_MTOOLS=y
|
||||||
BR2_PACKAGE_HOST_PKGCONF=y
|
BR2_PACKAGE_HOST_PKGCONF=y
|
||||||
|
BR2_PACKAGE_ALSA_UCM_CONF=y
|
||||||
BR2_PACKAGE_BTSPEAKER=y
|
BR2_PACKAGE_BTSPEAKER=y
|
||||||
BR2_PACKAGE_KSM_PRELOAD=y
|
BR2_PACKAGE_KSM_PRELOAD=y
|
||||||
BR2_PACKAGE_KSMTUNED=y
|
BR2_PACKAGE_KSMTUNED=y
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
From 969d54be09de0372f97cd9af2b201c6d5bdab42a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel Abrecht <public@danielabrecht.ch>
|
||||||
|
Date: Sat, 6 Jan 2024 23:48:20 +0000
|
||||||
|
Subject: [PATCH] Also search for
|
||||||
|
ucm2/conf.d/[${CardDriver}|${KernelDriver}]/${CardName}.conf
|
||||||
|
|
||||||
|
The CardLongName may be derived from various DMI properties of the system, that have little to do with the card itself.
|
||||||
|
Sometimes, that may be a good thing, but sometimes, it may contain the completely generic "Unknown-UnknownProduct-",
|
||||||
|
see https://gitlab.com/postmarketOS/pmaports/-/issues/1498#note_1716959721 for example. At least for devices using
|
||||||
|
device tree and simple-card, the name of the card (CardName), which then comes from the device tree, which can be provided
|
||||||
|
by the kernel too, may be a lot more relevant, and does actually identify the device.
|
||||||
|
|
||||||
|
Signed-off-by: Daniel Abrecht <public@danielabrecht.ch>
|
||||||
|
---
|
||||||
|
ucm2/ucm.conf | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ucm2/ucm.conf b/ucm2/ucm.conf
|
||||||
|
index fb1a0bef..366cc1a1 100644
|
||||||
|
--- a/ucm2/ucm.conf
|
||||||
|
+++ b/ucm2/ucm.conf
|
||||||
|
@@ -49,6 +49,7 @@ If.driver {
|
||||||
|
# The probed path when hw-card is found:
|
||||||
|
#
|
||||||
|
# ucm2/conf.d/[${CardDriver}|${KernelDriver}]/${CardLongName}.conf
|
||||||
|
+ # ucm2/conf.d/[${CardDriver}|${KernelDriver}]/${CardName}.conf
|
||||||
|
# ucm2/conf.d/[${CardDriver}|${KernelDriver}]/[${CardDriver}|${KernelDriver}].conf
|
||||||
|
# ucm2/${KernelModule}/${KernelModule}.conf (obsolete)
|
||||||
|
# ucm2/${CardDriver}/${CardLongName}.conf (obsolete)
|
||||||
|
@@ -77,6 +78,10 @@ If.driver {
|
||||||
|
File "${CardLongName}.conf"
|
||||||
|
}
|
||||||
|
UseCasePath.confd2 {
|
||||||
|
+ Directory "conf.d/${var:Driver}"
|
||||||
|
+ File "${CardName}.conf"
|
||||||
|
+ }
|
||||||
|
+ UseCasePath.confd3 {
|
||||||
|
Directory "conf.d/${var:Driver}"
|
||||||
|
File "${var:Driver}.conf"
|
||||||
|
}
|
5
buildroot-external/package/alsa-ucm-conf/Config.in
Normal file
5
buildroot-external/package/alsa-ucm-conf/Config.in
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
config BR2_PACKAGE_ALSA_UCM_CONF
|
||||||
|
bool "alsa-ucm-conf"
|
||||||
|
depends on BR2_PACKAGE_ALSA_LIB_UCM
|
||||||
|
help
|
||||||
|
ALSA Use Case Manager configuration.
|
@ -0,0 +1,2 @@
|
|||||||
|
# Locally calculated
|
||||||
|
sha256 ad8dd8d79bda54f9d28b095ce9dfa009de9970daf7b57dda86216a4e4977fe4e alsa-ucm-conf-1.2.12.tar.gz
|
17
buildroot-external/package/alsa-ucm-conf/alsa-ucm-conf.mk
Normal file
17
buildroot-external/package/alsa-ucm-conf/alsa-ucm-conf.mk
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# alsa-ucm-conf
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
ALSA_UCM_CONF_VERSION = 1.2.12
|
||||||
|
ALSA_UCM_CONF_SITE = $(call github,alsa-project,alsa-ucm-conf,v$(ALSA_UCM_CONF_VERSION))
|
||||||
|
ALSA_UCM_CONF_DEPENDENCIES = alsa-lib
|
||||||
|
|
||||||
|
define ALSA_UCM_CONF_INSTALL_TARGET_CMDS
|
||||||
|
mkdir -p $(TARGET_DIR)/usr/share/alsa
|
||||||
|
cp -dpfr $(@D)/ucm $(TARGET_DIR)/usr/share/alsa/
|
||||||
|
cp -dpfr $(@D)/ucm2 $(TARGET_DIR)/usr/share/alsa/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(generic-package))
|
@ -0,0 +1,3 @@
|
|||||||
|
wireplumber.settings = {
|
||||||
|
bluetooth.autoswitch-to-headset-profile = false,
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
monitor.alsa.rules = [
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
## Matches all sources.
|
||||||
|
node.name = "~alsa_input.*"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
## Matches all sinks.
|
||||||
|
node.name = "~alsa_output.*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
update-props = {
|
||||||
|
session.suspend-timeout-seconds = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
@ -17,3 +17,4 @@ disable wireplumber.service
|
|||||||
disable btspeaker.service
|
disable btspeaker.service
|
||||||
disable telnetd.service
|
disable telnetd.service
|
||||||
disable network.service
|
disable network.service
|
||||||
|
disable getty@tty1.service
|
||||||
|
Loading…
x
Reference in New Issue
Block a user