From: Greg Kroah-Hartman Date: Thu, 23 May 2024 12:08:31 +0000 (+0200) Subject: 6.9-stable patches X-Git-Tag: v4.19.315~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cf225f29d93cc9d5411199bf53493f0d56b0651b;p=thirdparty%2Fkernel%2Fstable-queue.git 6.9-stable patches added patches: asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch --- diff --git a/queue-6.9/asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch b/queue-6.9/asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch new file mode 100644 index 00000000000..1e2da1147aa --- /dev/null +++ b/queue-6.9/asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch @@ -0,0 +1,170 @@ +From bee2fe44679f1e6a5332d7f78587ccca4109919f Mon Sep 17 00:00:00 2001 +From: Bard Liao +Date: Tue, 26 Mar 2024 11:04:19 -0500 +Subject: ASoC: Intel: sof_sdw: use generic rtd_init function for Realtek SDW DMICs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bard Liao + +commit bee2fe44679f1e6a5332d7f78587ccca4109919f upstream. + +The only thing that the rt_xxx_rtd_init() functions do is to set +card->components. And we can set card->components with name_prefix +as rt712_sdca_dmic_rtd_init() does. +And sof_sdw_rtd_init() will always select the first dai with the +given dai->name from codec_info_list[]. Unfortunately, we have +different codecs with the same dai name. For example, dai name of +rt715 and rt715-sdca are both "rt715-aif2". Using a generic rtd_init +allow sof_sdw_rtd_init() run the rtd_init() callback from a similar +codec dai. + +Fixes: 8266c73126b7 ("ASoC: Intel: sof_sdw: add common sdw dai link init") +Reviewed-by: Chao Song +Reviewed-by: Péter Ujfalusi +Signed-off-by: Bard Liao +Signed-off-by: Pierre-Louis Bossart +Link: https://msgid.link/r/20240326160429.13560-25-pierre-louis.bossart@linux.intel.com +Signed-off-by: Mark Brown +Signed-off-by: Peter Ujfalusi +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/intel/boards/Makefile | 1 + sound/soc/intel/boards/sof_sdw.c | 12 +++---- + sound/soc/intel/boards/sof_sdw_common.h | 1 + sound/soc/intel/boards/sof_sdw_rt_dmic.c | 52 +++++++++++++++++++++++++++++++ + 4 files changed, 60 insertions(+), 6 deletions(-) + create mode 100644 sound/soc/intel/boards/sof_sdw_rt_dmic.c + +--- a/sound/soc/intel/boards/Makefile ++++ b/sound/soc/intel/boards/Makefile +@@ -42,6 +42,7 @@ snd-soc-sof-sdw-objs += sof_sdw.o \ + sof_sdw_rt711.o sof_sdw_rt_sdca_jack_common.o \ + sof_sdw_rt712_sdca.o sof_sdw_rt715.o \ + sof_sdw_rt715_sdca.o sof_sdw_rt722_sdca.o \ ++ sof_sdw_rt_dmic.o \ + sof_sdw_cs42l42.o sof_sdw_cs42l43.o \ + sof_sdw_cs_amp.o \ + sof_sdw_dmic.o \ +--- a/sound/soc/intel/boards/sof_sdw.c ++++ b/sound/soc/intel/boards/sof_sdw.c +@@ -730,7 +730,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt712-sdca-dmic-aif1", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt712_sdca_dmic_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +@@ -760,7 +760,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt712-sdca-dmic-aif1", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt712_sdca_dmic_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +@@ -822,7 +822,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt715-aif2", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt715_sdca_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +@@ -837,7 +837,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt715-aif2", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt715_sdca_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +@@ -852,7 +852,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt715-aif2", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt715_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +@@ -867,7 +867,7 @@ static struct sof_sdw_codec_info codec_i + .dai_name = "rt715-aif2", + .dai_type = SOF_SDW_DAI_TYPE_MIC, + .dailink = {SDW_UNUSED_DAI_ID, SDW_DMIC_DAI_ID}, +- .rtd_init = rt715_rtd_init, ++ .rtd_init = rt_dmic_rtd_init, + }, + }, + .dai_num = 1, +--- a/sound/soc/intel/boards/sof_sdw_common.h ++++ b/sound/soc/intel/boards/sof_sdw_common.h +@@ -190,6 +190,7 @@ int rt712_sdca_dmic_rtd_init(struct snd_ + int rt712_spk_rtd_init(struct snd_soc_pcm_runtime *rtd); + int rt715_rtd_init(struct snd_soc_pcm_runtime *rtd); + int rt715_sdca_rtd_init(struct snd_soc_pcm_runtime *rtd); ++int rt_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd); + int rt_amp_spk_rtd_init(struct snd_soc_pcm_runtime *rtd); + int rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd); + +--- /dev/null ++++ b/sound/soc/intel/boards/sof_sdw_rt_dmic.c +@@ -0,0 +1,52 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++// Copyright (c) 2024 Intel Corporation ++ ++/* ++ * sof_sdw_rt_dmic - Helpers to handle Realtek SDW DMIC from generic machine driver ++ */ ++ ++#include ++#include ++#include ++#include ++#include "sof_board_helpers.h" ++#include "sof_sdw_common.h" ++ ++static const char * const dmics[] = { ++ "rt715", ++ "rt712-sdca-dmic", ++}; ++ ++int rt_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd) ++{ ++ struct snd_soc_card *card = rtd->card; ++ struct snd_soc_component *component; ++ struct snd_soc_dai *codec_dai; ++ char *mic_name; ++ ++ codec_dai = get_codec_dai_by_name(rtd, dmics, ARRAY_SIZE(dmics)); ++ if (!codec_dai) ++ return -EINVAL; ++ ++ component = codec_dai->component; ++ ++ /* ++ * rt715-sdca (aka rt714) is a special case that uses different name in card->components ++ * and component->name_prefix. ++ */ ++ if (!strcmp(component->name_prefix, "rt714")) ++ mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "rt715-sdca"); ++ else ++ mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s", component->name_prefix); ++ ++ card->components = devm_kasprintf(card->dev, GFP_KERNEL, ++ "%s mic:%s", card->components, ++ mic_name); ++ if (!card->components) ++ return -ENOMEM; ++ ++ dev_dbg(card->dev, "card->components: %s\n", card->components); ++ ++ return 0; ++} ++MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_BOARD_HELPERS); diff --git a/queue-6.9/series b/queue-6.9/series index 7f581208019..aaf1a4b11f1 100644 --- a/queue-6.9/series +++ b/queue-6.9/series @@ -6,3 +6,4 @@ net-ks8851-fix-another-tx-stall-caused-by-wrong-isr-flag-handling.patch x86-percpu-use-__force-to-cast-from-__percpu-address-space.patch bluetooth-l2cap-fix-div-by-zero-in-l2cap_le_flowctl_init.patch keys-trusted-fix-memory-leak-in-tpm2_key_encode.patch +asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch