From 05c9918e58ab9ae57bca1ae11cf9bfc0eeb6dd14 Mon Sep 17 00:00:00 2001 From: Kogara Naveen Kumar Date: Thu, 6 Oct 2022 10:59:12 +0530 Subject: [PATCH 1/5] Asoc: 24bit support for output devices Enabled 24bit support for output devices Change-Id: If48ebbd849d619019cc5ecff972ca638ecb771d4 --- asoc/codecs/msm_stub.c | 2 +- asoc/msm-dai-stub-v2.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/asoc/codecs/msm_stub.c b/asoc/codecs/msm_stub.c index 69fa6bf62b5e..1947a9a60e0e 100644 --- a/asoc/codecs/msm_stub.c +++ b/asoc/codecs/msm_stub.c @@ -21,7 +21,7 @@ static struct snd_soc_dai_driver msm_stub_dais[] = { .channels_min = 1, .channels_max = 32, .rates = SNDRV_PCM_RATE_8000_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, }, }, { diff --git a/asoc/msm-dai-stub-v2.c b/asoc/msm-dai-stub-v2.c index 55701566be15..102a7070e83b 100644 --- a/asoc/msm-dai-stub-v2.c +++ b/asoc/msm-dai-stub-v2.c @@ -86,7 +86,7 @@ static struct snd_soc_dai_driver msm_dai_stub_dai_rx = { .aif_name = "STUB_RX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, @@ -104,7 +104,8 @@ static struct snd_soc_dai_driver msm_dai_stub_dai_tx[] = { .aif_name = "STUB_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_3LE | + SNDRV_PCM_FMTBIT_S32_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, @@ -120,7 +121,8 @@ static struct snd_soc_dai_driver msm_dai_stub_dai_tx[] = { .aif_name = "STUB_1_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, - .formats = SNDRV_PCM_FMTBIT_S16_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE |SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_3LE | + SNDRV_PCM_FMTBIT_S32_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, From 37bcf911fa351f0b1c526f8eb3708140e0b0a8f3 Mon Sep 17 00:00:00 2001 From: ftong Date: Mon, 19 Sep 2022 12:13:32 +0800 Subject: [PATCH 2/5] asoc: add return value check for channel mapping function Add return value check for channel mapping function, and reject invalid input Change-Id: If8ddc16b33bf2b6af10f9d6055d6de27d86ad240 Signed-off-by: ftong --- asoc/msm-pcm-loopback-v2.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/asoc/msm-pcm-loopback-v2.c b/asoc/msm-pcm-loopback-v2.c index 6094a8fca863..0746ffd0c349 100644 --- a/asoc/msm-pcm-loopback-v2.c +++ b/asoc/msm-pcm-loopback-v2.c @@ -964,8 +964,13 @@ static int msm_pcm_channel_mixer_cfg_ctl_put(struct snd_kcontrol *kcontrol, __func__, chmixer_pspd->input_channel); return -EINVAL; } - q6asm_map_channels(asm_ch_map, + ret = q6asm_map_channels(asm_ch_map, chmixer_pspd->input_channel, false); + if (ret < 0) { + pr_err("%s q6asm_map_channels failed\n", __func__); + return ret; + } + for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL_V8; i++) chmixer_pspd->in_ch_map[i] = asm_ch_map[i]; chmixer_pspd->override_in_ch_map = true; @@ -977,8 +982,12 @@ static int msm_pcm_channel_mixer_cfg_ctl_put(struct snd_kcontrol *kcontrol, __func__, chmixer_pspd->output_channel); return -EINVAL; } - q6asm_map_channels(asm_ch_map, + ret = q6asm_map_channels(asm_ch_map, chmixer_pspd->output_channel, false); + if (ret < 0) { + pr_err("%s q6asm_map_channels failed\n", __func__); + return ret; + } for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL_V8; i++) chmixer_pspd->out_ch_map[i] = asm_ch_map[i]; chmixer_pspd->override_out_ch_map = true; From 1a2ec5b37237bbd74a5d93ab82db89a5f92dd66e Mon Sep 17 00:00:00 2001 From: ftong Date: Mon, 19 Sep 2022 11:53:03 +0800 Subject: [PATCH 3/5] asoc: destroy mutex during module_exit Mutexes are initialized, but not destroyed, add destruction in exit routines. Change-Id: Ia45c604141f4f03403a765e0d10ff0b86b25885e Signed-off-by: ftong --- asoc/msm-pcm-host-voice-v2.c | 1 + asoc/msm-pcm-voice-v2.c | 5 +++++ asoc/msm-pcm-voip-v2.c | 1 + 3 files changed, 7 insertions(+) diff --git a/asoc/msm-pcm-host-voice-v2.c b/asoc/msm-pcm-host-voice-v2.c index cb6a478434f6..4496e05a966a 100644 --- a/asoc/msm-pcm-host-voice-v2.c +++ b/asoc/msm-pcm-host-voice-v2.c @@ -1524,6 +1524,7 @@ int __init msm_voice_host_init(void) void msm_voice_host_exit(void) { platform_driver_unregister(&msm_pcm_driver); + mutex_destroy(&hpcm_drv.lock); } MODULE_DESCRIPTION("PCM module platform driver"); diff --git a/asoc/msm-pcm-voice-v2.c b/asoc/msm-pcm-voice-v2.c index 7b8c5dbe55f4..cbabe85b91c8 100644 --- a/asoc/msm-pcm-voice-v2.c +++ b/asoc/msm-pcm-voice-v2.c @@ -850,7 +850,12 @@ int __init msm_pcm_voice_init(void) void msm_pcm_voice_exit(void) { + int i = 0; + platform_driver_unregister(&msm_pcm_driver); + + for (i = 0; i < VOICE_SESSION_INDEX_MAX; i++) + mutex_destroy(&voice_info[i].lock); } MODULE_DESCRIPTION("Voice PCM module platform driver"); diff --git a/asoc/msm-pcm-voip-v2.c b/asoc/msm-pcm-voip-v2.c index f635a2b63fbe..14803f1d235a 100644 --- a/asoc/msm-pcm-voip-v2.c +++ b/asoc/msm-pcm-voip-v2.c @@ -1699,6 +1699,7 @@ int __init msm_pcm_voip_init(void) void msm_pcm_voip_exit(void) { platform_driver_unregister(&msm_pcm_driver); + mutex_destroy(&voip_info.lock); } MODULE_DESCRIPTION("PCM module platform driver"); From 2068734c2785aa018ebc708566405c19d33e6d2f Mon Sep 17 00:00:00 2001 From: fei tong Date: Fri, 23 Sep 2022 11:12:56 +0800 Subject: [PATCH 4/5] asoc: Fix App Type Gain can`t work proper App Type Gain command does not work due to max value Change-Id: I27a7e4cf22e6b53650e1b51af65c7aadafa064dc Signed-off-by: ftong --- asoc/msm-pcm-routing-auto.c | 2 +- asoc/msm-pcm-routing-v2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/asoc/msm-pcm-routing-auto.c b/asoc/msm-pcm-routing-auto.c index 5b4a572cef52..4eccb8c4f398 100755 --- a/asoc/msm-pcm-routing-auto.c +++ b/asoc/msm-pcm-routing-auto.c @@ -25219,7 +25219,7 @@ static const struct snd_kcontrol_new app_type_cfg_controls[] = { 0x7FFFFFFF, 0, 128, msm_routing_get_app_type_cfg_control, msm_routing_put_app_type_cfg_control), SOC_SINGLE_MULTI_EXT("App Type Gain", SND_SOC_NOPM, 0, - 0x2000, 0, 4, NULL, msm_routing_put_app_type_gain_control) + 0x7FFFFFFF, 0, 4, NULL, msm_routing_put_app_type_gain_control) }; static int msm_routing_put_module_cfg_control(struct snd_kcontrol *kcontrol, diff --git a/asoc/msm-pcm-routing-v2.c b/asoc/msm-pcm-routing-v2.c index bb064eac9dbb..3849f6470242 100755 --- a/asoc/msm-pcm-routing-v2.c +++ b/asoc/msm-pcm-routing-v2.c @@ -32053,7 +32053,7 @@ static const struct snd_kcontrol_new app_type_cfg_controls[] = { 0x7FFFFFFF, 0, 128, msm_routing_get_app_type_cfg_control, msm_routing_put_app_type_cfg_control), SOC_SINGLE_MULTI_EXT("App Type Gain", SND_SOC_NOPM, 0, - 0x2000, 0, 4, NULL, msm_routing_put_app_type_gain_control) + 0x7FFFFFFF, 0, 4, NULL, msm_routing_put_app_type_gain_control) }; static int msm_routing_put_module_cfg_control(struct snd_kcontrol *kcontrol, From 66448f4e5e71723b58d6513a99e6bbe0177554f0 Mon Sep 17 00:00:00 2001 From: Vijay Kumar Maddula Date: Fri, 30 Sep 2022 20:39:35 +0530 Subject: [PATCH 5/5] asoc: tavil: modify RX routes and dapm widgets Observed audio playback mute after upgrade to 5.4 kernel due to change in dapm power up sequence in 5.4 kernel. Modified tavil RX routes and dapm widgets to meet the recent kenrel dapm power up sequence. Change-Id: I24576f342c43e586ed9b55eeab2510c59c70e33d Signed-off-by: Vijay Kumar Maddula --- asoc/codecs/wcd934x/wcd934x-routing.h | 70 +++++++++++++++------------ asoc/codecs/wcd934x/wcd934x.c | 30 +++++++----- 2 files changed, 56 insertions(+), 44 deletions(-) diff --git a/asoc/codecs/wcd934x/wcd934x-routing.h b/asoc/codecs/wcd934x/wcd934x-routing.h index 771f91f1cbab..85ff7db3d9b6 100644 --- a/asoc/codecs/wcd934x/wcd934x-routing.h +++ b/asoc/codecs/wcd934x/wcd934x-routing.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef WCD934X_ROUTING_H #define WCD934X_ROUTING_H @@ -71,41 +72,46 @@ const struct snd_soc_dapm_route tavil_slim_audio_map[] = { {"SLIM TX11", NULL, "CDC_IF TX11 MUX"}, {"SLIM TX13", NULL, "CDC_IF TX13 MUX"}, - {"SLIM RX0 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX1 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX2 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX3 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX4 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX5 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX6 MUX", "AIF1_PB", "AIF1 PB"}, - {"SLIM RX7 MUX", "AIF1_PB", "AIF1 PB"}, + {"AIF4 PB MIX", NULL, "AIF4 PB"}, + {"AIF3 PB MIX", NULL, "AIF3 PB"}, + {"AIF2 PB MIX", NULL, "AIF2 PB"}, + {"AIF1 PB MIX", NULL, "AIF1 PB"}, - {"SLIM RX0 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX1 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX2 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX3 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX4 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX5 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX6 MUX", "AIF2_PB", "AIF2 PB"}, - {"SLIM RX7 MUX", "AIF2_PB", "AIF2 PB"}, + {"SLIM RX0 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX1 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX2 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX3 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX4 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX5 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX6 MUX", "AIF1_PB", "AIF1 PB MIX"}, + {"SLIM RX7 MUX", "AIF1_PB", "AIF1 PB MIX"}, - {"SLIM RX0 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX1 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX2 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX3 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX4 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX5 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX6 MUX", "AIF3_PB", "AIF3 PB"}, - {"SLIM RX7 MUX", "AIF3_PB", "AIF3 PB"}, + {"SLIM RX0 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX1 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX2 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX3 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX4 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX5 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX6 MUX", "AIF2_PB", "AIF2 PB MIX"}, + {"SLIM RX7 MUX", "AIF2_PB", "AIF2 PB MIX"}, - {"SLIM RX0 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX1 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX2 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX3 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX4 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX5 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX6 MUX", "AIF4_PB", "AIF4 PB"}, - {"SLIM RX7 MUX", "AIF4_PB", "AIF4 PB"}, + {"SLIM RX0 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX1 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX2 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX3 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX4 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX5 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX6 MUX", "AIF3_PB", "AIF3 PB MIX"}, + {"SLIM RX7 MUX", "AIF3_PB", "AIF3 PB MIX"}, + + {"SLIM RX0 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX1 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX2 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX3 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX4 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX5 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX6 MUX", "AIF4_PB", "AIF4 PB MIX"}, + {"SLIM RX7 MUX", "AIF4_PB", "AIF4 PB MIX"}, {"SLIM RX0", NULL, "SLIM RX0 MUX"}, {"SLIM RX1", NULL, "SLIM RX1 MUX"}, diff --git a/asoc/codecs/wcd934x/wcd934x.c b/asoc/codecs/wcd934x/wcd934x.c index 88cd5aa30334..98c5b011e060 100644 --- a/asoc/codecs/wcd934x/wcd934x.c +++ b/asoc/codecs/wcd934x/wcd934x.c @@ -7835,9 +7835,11 @@ static const struct snd_kcontrol_new lo2_mixer[] = { }; static const struct snd_soc_dapm_widget tavil_dapm_slim_widgets[] = { - SND_SOC_DAPM_AIF_IN_E("AIF4 PB", "AIF4 Playback", 0, SND_SOC_NOPM, - AIF4_PB, 0, tavil_codec_enable_rx, - SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_AIF_IN("AIF4 PB", "AIF4 Playback", 0, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_MIXER_E("AIF4 PB MIX", SND_SOC_NOPM, AIF4_PB, 0, + NULL, 0, tavil_codec_enable_rx, + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_AIF_OUT_E("AIF4 VI", "VIfeed", 0, SND_SOC_NOPM, AIF4_VIFEED, 0, @@ -7884,15 +7886,19 @@ static const struct snd_soc_dapm_widget tavil_dapm_slim_widgets[] = { }; static const struct snd_soc_dapm_widget tavil_dapm_widgets[] = { - SND_SOC_DAPM_AIF_IN_E("AIF1 PB", "AIF1 Playback", 0, SND_SOC_NOPM, - AIF1_PB, 0, tavil_codec_enable_rx, - SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_AIF_IN_E("AIF2 PB", "AIF2 Playback", 0, SND_SOC_NOPM, - AIF2_PB, 0, tavil_codec_enable_rx, - SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), - SND_SOC_DAPM_AIF_IN_E("AIF3 PB", "AIF3 Playback", 0, SND_SOC_NOPM, - AIF3_PB, 0, tavil_codec_enable_rx, - SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_AIF_IN("AIF1 PB", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("AIF2 PB", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("AIF3 PB", "AIF3 Playback", 0, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_MIXER_E("AIF1 PB MIX", SND_SOC_NOPM, AIF1_PB, 0, + NULL, 0, tavil_codec_enable_rx, + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AIF2 PB MIX", SND_SOC_NOPM, AIF2_PB, 0, + NULL, 0, tavil_codec_enable_rx, + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AIF3 PB MIX", SND_SOC_NOPM, AIF3_PB, 0, + NULL, 0, tavil_codec_enable_rx, + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), WCD_DAPM_MUX("CDC_IF RX0 MUX", WCD934X_RX0, cdc_if_rx0), WCD_DAPM_MUX("CDC_IF RX1 MUX", WCD934X_RX1, cdc_if_rx1),