From 143d98dee563255b98be7cb66aa0ca6d1ace3c43 Mon Sep 17 00:00:00 2001 From: Andrea Bondavalli Date: Sun, 31 Jan 2021 18:12:09 +0100 Subject: [PATCH 1/2] Added patch to Ravenna driver to enable mono channel configuration for playback and capture devices. Without this patch a Source or Sink configured with a single channel fail to work as expected. --- ...avenna-alsa-lkm-enable-mono-channels.patch | 23 +++++++++++++++++++ build.sh | 1 + 2 files changed, 24 insertions(+) create mode 100644 3rdparty/patches/ravenna-alsa-lkm-enable-mono-channels.patch diff --git a/3rdparty/patches/ravenna-alsa-lkm-enable-mono-channels.patch b/3rdparty/patches/ravenna-alsa-lkm-enable-mono-channels.patch new file mode 100644 index 0000000..fd6f67d --- /dev/null +++ b/3rdparty/patches/ravenna-alsa-lkm-enable-mono-channels.patch @@ -0,0 +1,23 @@ +diff --git a/driver/audio_driver.c b/driver/audio_driver.c +index 3d9debd..339327b 100644 +--- a/driver/audio_driver.c ++++ b/driver/audio_driver.c +@@ -1106,7 +1130,7 @@ static struct snd_pcm_hardware mr_alsa_audio_pcm_hardware_playback = + .rates = (SNDRV_PCM_RATE_KNOT|SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000|SNDRV_PCM_RATE_88200|SNDRV_PCM_RATE_96000|SNDRV_PCM_RATE_176400|SNDRV_PCM_RATE_192000), + .rate_min = 44100, + .rate_max = 384000, +- .channels_min = 2, ++ .channels_min = 1, + .channels_max = MR_ALSA_NB_CHANNELS_MAX, + .buffer_bytes_max = MR_ALSA_RINGBUFFER_NB_FRAMES * MR_ALSA_NB_CHANNELS_MAX * 4, // 4 bytes per sample, 128 ch + .period_bytes_min = MR_ALSA_NB_FRAMES_PER_PERIOD_AT_1FS * 2 * 3, // amount of data in bytes for 8 channels, 24bit samples, at 1Fs +@@ -1135,7 +1159,7 @@ static struct snd_pcm_hardware mr_alsa_audio_pcm_hardware_capture = + .rates = (SNDRV_PCM_RATE_KNOT|SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000|SNDRV_PCM_RATE_88200|SNDRV_PCM_RATE_96000|SNDRV_PCM_RATE_176400|SNDRV_PCM_RATE_192000), + .rate_min = 44100, + .rate_max = 384000, +- .channels_min = 2, ++ .channels_min = 1, + .channels_max = MR_ALSA_NB_CHANNELS_MAX, + .buffer_bytes_max = MR_ALSA_RINGBUFFER_NB_FRAMES * MR_ALSA_NB_CHANNELS_MAX * 4, // 4 bytes per sample, 128 ch + .period_bytes_min = MR_ALSA_NB_FRAMES_PER_PERIOD_AT_1FS * 2 * 4, // amount of data in bytes for 8 channels, 24bit samples, at 1Fs + diff --git a/build.sh b/build.sh index 538b9a3..a4b3c85 100755 --- a/build.sh +++ b/build.sh @@ -23,6 +23,7 @@ if [ ! -d ravenna-alsa-lkm.git ]; then git apply ../patches/ravenna-alsa-lkm-disable-ptp-checksum.patch git apply ../patches/ravenna-alsa-lkm-independent-playback-capture.patch git apply ../patches/ravenna-alsa-lkm-direct-pcm-transfer.patch + git apply ../patches/ravenna-alsa-lkm-enable-mono-channels.patch echo "Building ravenna-alsa-lkm kernel module ..." cd driver make From bf847edd7382bc237374cec230ecf825b938ed63 Mon Sep 17 00:00:00 2001 From: Andrea Bondavalli Date: Sun, 31 Jan 2021 18:19:33 +0100 Subject: [PATCH 2/2] Added patch to Ravenna driver to solve a possible corruption issue at the beginning of a playback or recording caused by not initialized buffers. --- ...a-alsa-lkm-init-play-capture-buffers.patch | 22 +++++++++++++++++++ build.sh | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 3rdparty/patches/ravenna-alsa-lkm-init-play-capture-buffers.patch diff --git a/3rdparty/patches/ravenna-alsa-lkm-init-play-capture-buffers.patch b/3rdparty/patches/ravenna-alsa-lkm-init-play-capture-buffers.patch new file mode 100644 index 0000000..c06e5f0 --- /dev/null +++ b/3rdparty/patches/ravenna-alsa-lkm-init-play-capture-buffers.patch @@ -0,0 +1,22 @@ +diff --git a/driver/audio_driver.c b/driver/audio_driver.c +index 3d9debd..339327b 100644 +--- a/driver/audio_driver.c ++++ b/driver/audio_driver.c +@@ -2441,7 +2142,7 @@ static int mr_alsa_audio_preallocate_memory(struct mr_alsa_audio_chip *chip) + printk(KERN_ERR "mr_alsa_audio_preallocate_memory: could not allocate playback buffer (%zd bytes vmalloc requested...\n", wanted); + goto _failed; + } +- ++ memset(chip->playback_buffer, 0, wanted); + + wanted = mr_alsa_audio_pcm_hardware_capture.buffer_bytes_max; // MR_ALSA_RINGBUFFER_NB_FRAMES * MR_ALSA_NB_CHANNELS_MAX * 4; + +@@ -2452,6 +2153,7 @@ static int mr_alsa_audio_preallocate_memory(struct mr_alsa_audio_chip *chip) + printk(KERN_ERR "mr_alsa_audio_preallocate_memory: could not allocate capture buffer (%zd bytes vmalloc requested...\n", wanted); + goto _failed; + } ++ memset(chip->capture_buffer, 0, wanted); + for (i = 0; i < MR_ALSA_NB_CHANNELS_MAX; i++) + { + chip->capture_buffer_channels_map[i] = (void*)chip->capture_buffer + MR_ALSA_RINGBUFFER_NB_FRAMES * i * 4; + diff --git a/build.sh b/build.sh index a4b3c85..8f4bf78 100755 --- a/build.sh +++ b/build.sh @@ -24,12 +24,15 @@ if [ ! -d ravenna-alsa-lkm.git ]; then git apply ../patches/ravenna-alsa-lkm-independent-playback-capture.patch git apply ../patches/ravenna-alsa-lkm-direct-pcm-transfer.patch git apply ../patches/ravenna-alsa-lkm-enable-mono-channels.patch + git apply ../patches/ravenna-alsa-lkm-init-play-capture-buffers.patch echo "Building ravenna-alsa-lkm kernel module ..." cd driver make cd ../.. fi +exit 1 + if [ ! -d cpp-httplib.git ]; then git clone https://github.com/yhirose/cpp-httplib.git cd cpp-httplib