]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 May 2024 12:08:31 +0000 (14:08 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 May 2024 12:08:31 +0000 (14:08 +0200)
added patches:
asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch

queue-6.9/asoc-intel-sof_sdw-use-generic-rtd_init-function-for-realtek-sdw-dmics.patch [new file with mode: 0644]
queue-6.9/series

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 (file)
index 0000000..1e2da11
--- /dev/null
@@ -0,0 +1,170 @@
+From bee2fe44679f1e6a5332d7f78587ccca4109919f Mon Sep 17 00:00:00 2001
+From: Bard Liao <yung-chuan.liao@linux.intel.com>
+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 <yung-chuan.liao@linux.intel.com>
+
+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 <chao.song@linux.intel.com>
+Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://msgid.link/r/20240326160429.13560-25-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 <linux/device.h>
++#include <linux/errno.h>
++#include <sound/soc.h>
++#include <sound/soc-acpi.h>
++#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);
index 7f58120801924e65c2a5fd37c1f265ba248d1cb5..aaf1a4b11f17a6557abf32518ed740317034e81d 100644 (file)
@@ -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