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/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), 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, 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-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; 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, 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");