All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms
@ 2022-03-08 19:25 Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 01/20] ASoC: soc-acpi: fix kernel-doc descriptor Pierre-Louis Bossart
                   ` (20 more replies)
  0 siblings, 21 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Huajun Li, Pierre-Louis Bossart,
	Nikolai Kostrigin, broonie, Mauro Carvalho Chehab

This patchset adds a number of improvements for ES8336-based Intel
platforms, which are not well supported at all in Linux. Since
Christmas 2021, we've seen dozens of reports of broken audio [1].

The fundamental problem is that those platforms were built for Windows
but using an I2S codec - instead of the HDaudio traditional
solution. As a result, we are missing all the usual information needed
to configure the audio card (which I2S, what configuration, DMICs or
not, etc). The situation is similar to Baytrail with all possible
permutations enabled.

Some of the information can be discovered by checking the contents of
the 'NHLT' ACPI table. This helps discover at run-time which SSP to
use, and the number of microphones present. This NHLT-based solution
helps remove quirks that were added earlier.

Unfortunately, there are still a number of platform properties that
are not described by ACPI, just as GPIOs used for speakers, jack
detection inversion, etc. For some case, quirks are still provided in
the machine drivers.

Additional work will likely be needed, e.g. to detect which MCLK needs
to be used, refine the UCM settings, add the ES8326 codec driver, but
this is a first-step towards an 'out of the box' experience on Intel
platforms.

This patchset touches the sound/hda/intel-nhlt parts but should IMHO
be merged in the ASoC tree.

I would like to acknowledge the help of Nikolai Kostrigin, Mauro
Carvalho Chehab, Huajun Li, David Yang (@yangxiaohua2009) and other
GitHub testers.

[1] https://github.com/thesofproject/linux/issues?q=is%3Aissue+is%3Aopen+label%3A%22codec+ES8336%22

Nikolai Kostrigin (1):
  ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines

Pierre-Louis Bossart (19):
  ASoC: soc-acpi: fix kernel-doc descriptor
  ASoC: soc-acpi: add information on I2S/TDM link mask
  ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards
  ALSA: intel-nhlt: add helper to detect SSP link mask
  ASoC: SOF: Intel: hda: report SSP link mask to machine driver
  ASoC: Intel: soc-acpi: quirk topology filename dynamically
  ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices
  ASoC: Intel: soc-acpi: add more ACPI HIDs for ES83x6 devices
  ALSA: intel-dspconfig: add ES8336 support for CNL
  ASoC: Intel: sof_es8336: make gpio optional
  ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus
    search
  ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15
    2021"
  ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP
  ASoC: Intel: sof_es8336: log all quirks
  ASoC: Intel: sof_es8336: move comment to the right place
  ASoC: Intel: sof_es8336: add support for JD inverted quirk
  ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec
  ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support
  ASoC: Intel: bytcht_es8316: move comment to the right place

 include/sound/intel-nhlt.h                    |  22 ++-
 include/sound/soc-acpi.h                      |  27 +++-
 sound/hda/intel-dsp-config.c                  |  36 +++--
 sound/hda/intel-nhlt.c                        |  22 +++
 sound/soc/intel/boards/Kconfig                |   3 +-
 sound/soc/intel/boards/bytcht_es8316.c        |   2 +-
 sound/soc/intel/boards/sof_es8336.c           | 142 +++++++++++++-----
 .../intel/common/soc-acpi-intel-bxt-match.c   |  12 +-
 .../intel/common/soc-acpi-intel-cml-match.c   |  12 +-
 .../intel/common/soc-acpi-intel-cnl-match.c   |  14 ++
 .../intel/common/soc-acpi-intel-glk-match.c   |  12 +-
 .../intel/common/soc-acpi-intel-jsl-match.c   |  12 +-
 .../intel/common/soc-acpi-intel-tgl-match.c   |  12 +-
 sound/soc/sof/intel/hda.c                     | 120 ++++++++++++---
 14 files changed, 360 insertions(+), 88 deletions(-)


base-commit: 0b7daa6bd0a4cab3b0c6f266a8cb1344ce14ef19
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 01/20] ASoC: soc-acpi: fix kernel-doc descriptor
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 02/20] ASoC: soc-acpi: add information on I2S/TDM link mask Pierre-Louis Bossart
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Add missing dmic_num mention and clarify that 'links' mean 'SoundWire
links', not to be used for other links.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 include/sound/soc-acpi.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h
index fdb536d699ff..a8fd62c00f91 100644
--- a/include/sound/soc-acpi.h
+++ b/include/sound/soc-acpi.h
@@ -60,9 +60,10 @@ static inline struct snd_soc_acpi_mach *snd_soc_acpi_codec_list(void *arg)
  * @acpi_ipc_irq_index: used for BYT-CR detection
  * @platform: string used for HDAudio codec support
  * @codec_mask: used for HDAudio support
+ * @dmic_num: number of SoC- or chipset-attached PDM digital microphones
  * @common_hdmi_codec_drv: use commom HDAudio HDMI codec driver
- * @link_mask: links enabled on the board
- * @links: array of link _ADR descriptors, null terminated
+ * @link_mask: SoundWire links enabled on the board
+ * @links: array of SoundWire link _ADR descriptors, null terminated
  * @num_dai_drivers: number of elements in @dai_drivers
  * @dai_drivers: pointer to dai_drivers, used e.g. in nocodec mode
  */
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 02/20] ASoC: soc-acpi: add information on I2S/TDM link mask
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 01/20] ASoC: soc-acpi: fix kernel-doc descriptor Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards Pierre-Louis Bossart
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

The platform driver may have information on which I2S/TDM link(s) to
enable in the machine driver. In the case of Intel devices, this may
be extracted from NHLT tables in platform firmware. This link
information is necessary to make sure machine driver and topology are
aligned.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 include/sound/soc-acpi.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h
index a8fd62c00f91..093bbe7f0e1f 100644
--- a/include/sound/soc-acpi.h
+++ b/include/sound/soc-acpi.h
@@ -64,6 +64,7 @@ static inline struct snd_soc_acpi_mach *snd_soc_acpi_codec_list(void *arg)
  * @common_hdmi_codec_drv: use commom HDAudio HDMI codec driver
  * @link_mask: SoundWire links enabled on the board
  * @links: array of SoundWire link _ADR descriptors, null terminated
+ * @i2s_link_mask: I2S/TDM links enabled on the board
  * @num_dai_drivers: number of elements in @dai_drivers
  * @dai_drivers: pointer to dai_drivers, used e.g. in nocodec mode
  */
@@ -75,6 +76,7 @@ struct snd_soc_acpi_mach_params {
 	bool common_hdmi_codec_drv;
 	u32 link_mask;
 	const struct snd_soc_acpi_link_adr *links;
+	u32 i2s_link_mask;
 	u32 num_dai_drivers;
 	struct snd_soc_dai_driver *dai_drivers;
 };
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 01/20] ASoC: soc-acpi: fix kernel-doc descriptor Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 02/20] ASoC: soc-acpi: add information on I2S/TDM link mask Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-09 16:49   ` Cezary Rojewski
  2022-03-08 19:25 ` [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask Pierre-Louis Bossart
                   ` (17 subsequent siblings)
  20 siblings, 1 reply; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We currently extract the DMIC number only for HDaudio or SoundWire
platforms. For I2S/TDM platforms, this wasn't necessary until now, but
with devices with ES8336 we need to find a solution to detect dmics
more reliably than with a DMI quirk.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/sof/intel/hda.c | 46 +++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index a99e6608f0b6..711d14a821bb 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -432,11 +432,9 @@ static char *hda_model;
 module_param(hda_model, charp, 0444);
 MODULE_PARM_DESC(hda_model, "Use the given HDA board model.");
 
-#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
-static int hda_dmic_num = -1;
-module_param_named(dmic_num, hda_dmic_num, int, 0444);
+static int dmic_num_override = -1;
+module_param_named(dmic_num, dmic_num_override, int, 0444);
 MODULE_PARM_DESC(dmic_num, "SOF HDA DMIC number");
-#endif
 
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
 static bool hda_codec_use_common_hdmi = IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI);
@@ -644,24 +642,35 @@ static int hda_init(struct snd_sof_dev *sdev)
 	return ret;
 }
 
-#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
-
-static int check_nhlt_dmic(struct snd_sof_dev *sdev)
+static int check_dmic_num(struct snd_sof_dev *sdev)
 {
 	struct nhlt_acpi_table *nhlt;
-	int dmic_num;
+	int dmic_num = 0;
 
 	nhlt = intel_nhlt_init(sdev->dev);
 	if (nhlt) {
 		dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt);
 		intel_nhlt_free(nhlt);
-		if (dmic_num >= 1 && dmic_num <= 4)
-			return dmic_num;
 	}
 
-	return 0;
+	/* allow for module parameter override */
+	if (dmic_num_override != -1) {
+		dev_dbg(sdev->dev,
+			"overriding DMICs detected in NHLT tables %d by kernel param %d\n",
+			dmic_num, dmic_num_override);
+		dmic_num = dmic_num_override;
+	}
+
+	if (dmic_num < 0 || dmic_num > 4) {
+		dev_dbg(sdev->dev, "invalid dmic_number %d\n", dmic_num);
+		dmic_num = 0;
+	}
+
+	return dmic_num;
 }
 
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
+
 static const char *fixup_tplg_name(struct snd_sof_dev *sdev,
 				   const char *sof_tplg_filename,
 				   const char *idisp_str,
@@ -697,16 +706,8 @@ static int dmic_topology_fixup(struct snd_sof_dev *sdev,
 	const char *dmic_str;
 	int dmic_num;
 
-	/* first check NHLT for DMICs */
-	dmic_num = check_nhlt_dmic(sdev);
-
-	/* allow for module parameter override */
-	if (hda_dmic_num != -1) {
-		dev_dbg(sdev->dev,
-			"overriding DMICs detected in NHLT tables %d by kernel param %d\n",
-			dmic_num, hda_dmic_num);
-		dmic_num = hda_dmic_num;
-	}
+	/* first check for DMICs (using NHLT or module parameter) */
+	dmic_num = check_dmic_num(sdev);
 
 	switch (dmic_num) {
 	case 1:
@@ -1383,6 +1384,9 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
 		if (!sof_pdata->tplg_filename)
 			sof_pdata->tplg_filename = mach->sof_tplg_filename;
 
+		/* report to machine driver if any DMICs are found */
+		mach->mach_params.dmic_num = check_dmic_num(sdev);
+
 		if (mach->link_mask) {
 			mach->mach_params.links = mach->links;
 			mach->mach_params.link_mask = mach->link_mask;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (2 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-09 10:03   ` Takashi Iwai
  2022-03-09 17:01   ` Cezary Rojewski
  2022-03-08 19:25 ` [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver Pierre-Louis Bossart
                   ` (16 subsequent siblings)
  20 siblings, 2 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

The NHLT information can be used to figure out which SSPs are enabled
in a platform.

The 'SSP' link type is too broad for machine drivers, since it can
cover the Bluetooth sideband and the analog audio codec connections,
so this helper exposes a parameter to filter with the device
type (DEVICE_I2S refers to analog audio codec in NHLT parlance).

The helper returns a mask, since more than one SSP may be used for
analog audio, e.g. the NHLT spec describes the use of SSP0 for
amplifiers and SSP1 for headset codec. Note that if more than one bit
is set, it's impossible to determine which SSP is connected to what
external component. Additional platform-specific information based on
e.g. DMI quirks would still be required in the machine driver to
configure the relevant dailinks.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 include/sound/intel-nhlt.h | 22 +++++++++++++++-------
 sound/hda/intel-nhlt.c     | 22 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/include/sound/intel-nhlt.h b/include/sound/intel-nhlt.h
index 089a760d36eb..6fb2d5e378fd 100644
--- a/include/sound/intel-nhlt.h
+++ b/include/sound/intel-nhlt.h
@@ -18,6 +18,13 @@ enum nhlt_link_type {
 	NHLT_LINK_INVALID
 };
 
+enum nhlt_device_type {
+	NHLT_DEVICE_BT = 0,
+	NHLT_DEVICE_DMIC = 1,
+	NHLT_DEVICE_I2S = 4,
+	NHLT_DEVICE_INVALID
+};
+
 #if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_INTEL_NHLT)
 
 struct wav_fmt {
@@ -41,13 +48,6 @@ struct wav_fmt_ext {
 	u8 sub_fmt[16];
 } __packed;
 
-enum nhlt_device_type {
-	NHLT_DEVICE_BT = 0,
-	NHLT_DEVICE_DMIC = 1,
-	NHLT_DEVICE_I2S = 4,
-	NHLT_DEVICE_INVALID
-};
-
 struct nhlt_specific_cfg {
 	u32 size;
 	u8 caps[];
@@ -133,6 +133,9 @@ void intel_nhlt_free(struct nhlt_acpi_table *addr);
 int intel_nhlt_get_dmic_geo(struct device *dev, struct nhlt_acpi_table *nhlt);
 
 bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 link_type);
+
+int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type);
+
 struct nhlt_specific_cfg *
 intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,
 			     u32 bus_id, u8 link_type, u8 vbps, u8 bps,
@@ -163,6 +166,11 @@ static inline bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt,
 	return false;
 }
 
+static inline int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type)
+{
+	return 0;
+}
+
 static inline struct nhlt_specific_cfg *
 intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,
 			     u32 bus_id, u8 link_type, u8 vbps, u8 bps,
diff --git a/sound/hda/intel-nhlt.c b/sound/hda/intel-nhlt.c
index 128476aa7c61..4063da378283 100644
--- a/sound/hda/intel-nhlt.c
+++ b/sound/hda/intel-nhlt.c
@@ -130,6 +130,28 @@ bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 link_type)
 }
 EXPORT_SYMBOL(intel_nhlt_has_endpoint_type);
 
+int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type)
+{
+	struct nhlt_endpoint *epnt;
+	int ssp_mask = 0;
+	int i;
+
+	if (!nhlt || (device_type != NHLT_DEVICE_BT && device_type != NHLT_DEVICE_I2S))
+		return 0;
+
+	epnt = (struct nhlt_endpoint *)nhlt->desc;
+	for (i = 0; i < nhlt->endpoint_count; i++) {
+		if (epnt->linktype == NHLT_LINK_SSP && epnt->device_type == device_type) {
+			/* for SSP the virtual bus id is the SSP port */
+			ssp_mask |= BIT(epnt->virtual_bus_id);
+		}
+		epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length);
+	}
+
+	return ssp_mask;
+}
+EXPORT_SYMBOL(intel_nhlt_ssp_endpoint_mask);
+
 static struct nhlt_specific_cfg *
 nhlt_get_specific_cfg(struct device *dev, struct nhlt_fmt *fmt, u8 num_ch,
 		      u32 rate, u8 vbps, u8 bps)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (3 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-09 16:59   ` Cezary Rojewski
  2022-03-08 19:25 ` [PATCH 06/20] ASoC: Intel: soc-acpi: quirk topology filename dynamically Pierre-Louis Bossart
                   ` (15 subsequent siblings)
  20 siblings, 1 reply; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

For devices designed for Windows, the SSP information should be listed
in the NHLT, and when present can be used to set quirks automatically
in the machine driver.

The NHLT information exposes BT and analog audio connections
separately, for now we are only interested in the analog audio parts.

The use of dev_info() for the SSP mask is intentional so that we can
immediately flag devices with an ES8336 codec. Since NHLT is not used
for recent Chromebooks these messages should be rare.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/sof/intel/hda.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index 711d14a821bb..eebb3b318d79 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -669,6 +669,25 @@ static int check_dmic_num(struct snd_sof_dev *sdev)
 	return dmic_num;
 }
 
+static int check_nhlt_ssp_mask(struct snd_sof_dev *sdev)
+{
+	struct nhlt_acpi_table *nhlt;
+	int ssp_mask = 0;
+
+	nhlt = intel_nhlt_init(sdev->dev);
+	if (!nhlt)
+		return ssp_mask;
+
+	if (intel_nhlt_has_endpoint_type(nhlt, NHLT_LINK_SSP)) {
+		ssp_mask = intel_nhlt_ssp_endpoint_mask(nhlt, NHLT_DEVICE_I2S);
+		if (ssp_mask)
+			dev_info(sdev->dev, "NHLT_DEVICE_I2S detected, ssp_mask %#x\n", ssp_mask);
+	}
+	intel_nhlt_free(nhlt);
+
+	return ssp_mask;
+}
+
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
 
 static const char *fixup_tplg_name(struct snd_sof_dev *sdev,
@@ -1391,6 +1410,9 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
 			mach->mach_params.links = mach->links;
 			mach->mach_params.link_mask = mach->link_mask;
 		}
+
+		/* report SSP link mask to machine driver */
+		mach->mach_params.i2s_link_mask = check_nhlt_ssp_mask(sdev);
 	}
 
 	/*
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 06/20] ASoC: Intel: soc-acpi: quirk topology filename dynamically
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (4 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices Pierre-Louis Bossart
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Different topology filenames may be required depending on which SSP is
used, and whether or not digital mics are present.

This patch adds a tplg_quirk_mask and in the case of the SOF driver
adds the relevant configurations.

This is a short-term solution to the ES8336 support issues.

In a long-term solution, we would need an interface where the machine
driver or platform driver have the ability to alter the topology
hard-coded low-level hardware support, e.g. by substituting an
interface for another, or disabling an interface that is not supported
on a given skew.

BugLink: https://github.com/thesofproject/linux/issues/3248
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 include/sound/soc-acpi.h                      | 20 +++++++
 .../intel/common/soc-acpi-intel-bxt-match.c   |  5 +-
 .../intel/common/soc-acpi-intel-cml-match.c   |  5 +-
 .../intel/common/soc-acpi-intel-glk-match.c   |  5 +-
 .../intel/common/soc-acpi-intel-jsl-match.c   |  5 +-
 .../intel/common/soc-acpi-intel-tgl-match.c   |  5 +-
 sound/soc/sof/intel/hda.c                     | 52 +++++++++++++++++++
 7 files changed, 92 insertions(+), 5 deletions(-)

diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h
index 093bbe7f0e1f..d33cf8df14b1 100644
--- a/include/sound/soc-acpi.h
+++ b/include/sound/soc-acpi.h
@@ -125,6 +125,24 @@ struct snd_soc_acpi_link_adr {
 	const struct snd_soc_acpi_adr_device *adr_d;
 };
 
+/*
+ * when set the topology uses the -ssp<N> suffix, where N is determined based on
+ * BIOS or DMI information
+ */
+#define SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER BIT(0)
+
+/*
+ * when more than one SSP is reported in the link mask, use the most significant.
+ * This choice was found to be valid on platforms with ES8336 codecs.
+ */
+#define SND_SOC_ACPI_TPLG_INTEL_SSP_MSB BIT(1)
+
+/*
+ * when set the topology uses the -dmic<N>ch suffix, where N is determined based on
+ * BIOS or DMI information
+ */
+#define SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER BIT(2)
+
 /**
  * snd_soc_acpi_mach: ACPI-based machine descriptor. Most of the fields are
  * related to the hardware, except for the firmware and topology file names.
@@ -146,6 +164,7 @@ struct snd_soc_acpi_link_adr {
  * @pdata: intended for platform data or machine specific-ops. This structure
  *  is not constant since this field may be updated at run-time
  * @sof_tplg_filename: Sound Open Firmware topology file name, if enabled
+ * @tplg_quirk_mask: quirks to select different topology files dynamically
  */
 /* Descriptor for SST ASoC machine driver */
 struct snd_soc_acpi_mach {
@@ -161,6 +180,7 @@ struct snd_soc_acpi_mach {
 	void *pdata;
 	struct snd_soc_acpi_mach_params mach_params;
 	const char *sof_tplg_filename;
+	const u32 tplg_quirk_mask;
 };
 
 #define SND_SOC_ACPI_MAX_CODECS 3
diff --git a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
index 718947068956..0a2d0874dc4f 100644
--- a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
@@ -80,7 +80,10 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_bxt_machines[] = {
 	{
 		.id = "ESSX8336",
 		.drv_name = "sof-essx8336",
-		.sof_tplg_filename = "sof-apl-es8336.tplg",
+		.sof_tplg_filename = "sof-apl-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
 	},
 	{},
 };
diff --git a/sound/soc/intel/common/soc-acpi-intel-cml-match.c b/sound/soc/intel/common/soc-acpi-intel-cml-match.c
index d033474f8768..f75fa1b551d7 100644
--- a/sound/soc/intel/common/soc-acpi-intel-cml-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-cml-match.c
@@ -78,7 +78,10 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {
 	{
 		.id = "ESSX8336",
 		.drv_name = "sof-essx8336",
-		.sof_tplg_filename = "sof-cml-es8336.tplg",
+		.sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
 	},
 	{},
 };
diff --git a/sound/soc/intel/common/soc-acpi-intel-glk-match.c b/sound/soc/intel/common/soc-acpi-intel-glk-match.c
index c5ca077c7ac9..d494860b8190 100644
--- a/sound/soc/intel/common/soc-acpi-intel-glk-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-glk-match.c
@@ -55,7 +55,10 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_glk_machines[] = {
 	{
 		.id = "ESSX8336",
 		.drv_name = "sof-essx8336",
-		.sof_tplg_filename = "sof-glk-es8336.tplg",
+		.sof_tplg_filename = "sof-glk-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
 	},
 	{},
 };
diff --git a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
index a2da5cad520c..53c42a4e1694 100644
--- a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
@@ -83,7 +83,10 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_jsl_machines[] = {
 	{
 		.id = "ESSX8336",
 		.drv_name = "sof-essx8336",
-		.sof_tplg_filename = "sof-jsl-es8336.tplg",
+		.sof_tplg_filename = "sof-jsl-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
 	},
 	{},
 };
diff --git a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
index 224b54d35c7a..8bf14295deb0 100644
--- a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
@@ -393,7 +393,10 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
 	{
 		.id = "ESSX8336",
 		.drv_name = "sof-essx8336",
-		.sof_tplg_filename = "sof-tgl-es8336.tplg",
+		.sof_tplg_filename = "sof-tgl-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
 	},
 	{
 		.id = "10EC1308",
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index eebb3b318d79..07d8686632a5 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -1393,9 +1393,12 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
 	struct snd_sof_pdata *sof_pdata = sdev->pdata;
 	const struct sof_dev_desc *desc = sof_pdata->desc;
 	struct snd_soc_acpi_mach *mach;
+	const char *tplg_filename;
 
 	mach = snd_soc_acpi_find_machine(desc->machines);
 	if (mach) {
+		bool add_extension = false;
+
 		/*
 		 * If tplg file name is overridden, use it instead of
 		 * the one set in mach table
@@ -1406,6 +1409,21 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
 		/* report to machine driver if any DMICs are found */
 		mach->mach_params.dmic_num = check_dmic_num(sdev);
 
+		if (mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER &&
+		    mach->mach_params.dmic_num) {
+			tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
+						       "%s%s%d%s",
+						       sof_pdata->tplg_filename,
+						       "-dmic",
+						       mach->mach_params.dmic_num,
+						       "ch");
+			if (!tplg_filename)
+				return NULL;
+
+			sof_pdata->tplg_filename = tplg_filename;
+			add_extension = true;
+		}
+
 		if (mach->link_mask) {
 			mach->mach_params.links = mach->links;
 			mach->mach_params.link_mask = mach->link_mask;
@@ -1413,6 +1431,40 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
 
 		/* report SSP link mask to machine driver */
 		mach->mach_params.i2s_link_mask = check_nhlt_ssp_mask(sdev);
+
+		if (mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER &&
+		    mach->mach_params.i2s_link_mask) {
+			int ssp_num;
+
+			if (hweight_long(mach->mach_params.i2s_link_mask) > 1 &&
+			    !(mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_SSP_MSB))
+				dev_warn(sdev->dev, "More than one SSP exposed by NHLT, choosing MSB\n");
+
+			/* fls returns 1-based results, SSPs indices are 0-based */
+			ssp_num = fls(mach->mach_params.i2s_link_mask) - 1;
+
+			tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
+						       "%s%s%d",
+						       sof_pdata->tplg_filename,
+						       "-ssp",
+						       ssp_num);
+			if (!tplg_filename)
+				return NULL;
+
+			sof_pdata->tplg_filename = tplg_filename;
+			add_extension = true;
+		}
+
+		if (add_extension) {
+			tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
+						       "%s%s",
+						       sof_pdata->tplg_filename,
+						       ".tplg");
+			if (!tplg_filename)
+				return NULL;
+
+			sof_pdata->tplg_filename = tplg_filename;
+		}
 	}
 
 	/*
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (5 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 06/20] ASoC: Intel: soc-acpi: quirk topology filename dynamically Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-09 10:04   ` Takashi Iwai
  2022-03-08 19:25 ` [PATCH 08/20] ASoC: Intel: soc-acpi: " Pierre-Louis Bossart
                   ` (13 subsequent siblings)
  20 siblings, 1 reply; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, anthony tonitch, tiwai, Péter Ujfalusi,
	Huajun Li, Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We only saw ESSX8336 so far, but now with reports of 'ESSX8326' we
need to expand to a full list. Let's reuse the 'snd_soc_acpi_codecs'
structure to store the information.

Reported-by: anthony tonitch <d.tonitch@gmail.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/hda/intel-dsp-config.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c
index 4fb90ceb4053..b9b7bf5a5553 100644
--- a/sound/hda/intel-dsp-config.c
+++ b/sound/hda/intel-dsp-config.c
@@ -11,6 +11,7 @@
 #include <sound/core.h>
 #include <sound/intel-dsp-config.h>
 #include <sound/intel-nhlt.h>
+#include <sound/soc-acpi.h>
 
 static int dsp_driver;
 
@@ -31,7 +32,12 @@ struct config_entry {
 	u16 device;
 	u8 acpi_hid[ACPI_ID_LEN];
 	const struct dmi_system_id *dmi_table;
-	u8 codec_hid[ACPI_ID_LEN];
+	const struct snd_soc_acpi_codecs *codec_hid;
+};
+
+static const struct snd_soc_acpi_codecs __maybe_unused essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
 };
 
 /*
@@ -77,7 +83,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0x5a98,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 #endif
 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_APL)
@@ -163,7 +169,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0x3198,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 #endif
 
@@ -251,7 +257,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0x02c8,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 	{
 		.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
@@ -280,7 +286,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0x06c8,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 	{
 		.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
@@ -327,7 +333,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0x4dc8,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 	{
 		.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC,
@@ -353,7 +359,7 @@ static const struct config_entry config_table[] = {
 	{
 		.flags = FLAG_SOF,
 		.device = 0xa0c8,
-		.codec_hid = "ESSX8336",
+		.codec_hid =  &essx_83x6,
 	},
 	{
 		.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
@@ -414,8 +420,15 @@ static const struct config_entry *snd_intel_dsp_find_config
 			continue;
 		if (table->dmi_table && !dmi_check_system(table->dmi_table))
 			continue;
-		if (table->codec_hid[0] && !acpi_dev_present(table->codec_hid, NULL, -1))
-			continue;
+		if (table->codec_hid) {
+			int i;
+
+			for (i = 0; i < table->codec_hid->num_codecs; i++)
+				if (acpi_dev_present(table->codec_hid->codecs[i], NULL, -1))
+					break;
+			if (i == table->codec_hid->num_codecs)
+				continue;
+		}
 		return table;
 	}
 	return NULL;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 08/20] ASoC: Intel: soc-acpi: add more ACPI HIDs for ES83x6 devices
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (6 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-08 19:25 ` [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL Pierre-Louis Bossart
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, anthony tonitch, tiwai, Péter Ujfalusi,
	Huajun Li, Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We only saw ESSX8336 so far, but now with reports of 'ESSX8326' we
need to expand to a full list. Let's reuse the 'snd_soc_acpi_codecs'
structure to store the information.

Note that ES8326 will need a dedicated codec driver, but the plan is
to use the same machine driver for all Everest Audio devices.

Reported-by: anthony tonitch <d.tonitch@gmail.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/common/soc-acpi-intel-bxt-match.c | 7 ++++++-
 sound/soc/intel/common/soc-acpi-intel-cml-match.c | 7 ++++++-
 sound/soc/intel/common/soc-acpi-intel-glk-match.c | 7 ++++++-
 sound/soc/intel/common/soc-acpi-intel-jsl-match.c | 7 ++++++-
 sound/soc/intel/common/soc-acpi-intel-tgl-match.c | 7 ++++++-
 5 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
index 0a2d0874dc4f..f99cf6c794dc 100644
--- a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c
@@ -41,6 +41,11 @@ static struct snd_soc_acpi_mach *apl_quirk(void *arg)
 	return mach;
 }
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static const struct snd_soc_acpi_codecs bxt_codecs = {
 	.num_codecs = 1,
 	.codecs = {"MX98357A"}
@@ -78,7 +83,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_bxt_machines[] = {
 		.sof_tplg_filename = "sof-apl-tdf8532.tplg",
 	},
 	{
-		.id = "ESSX8336",
+		.comp_ids = &essx_83x6,
 		.drv_name = "sof-essx8336",
 		.sof_tplg_filename = "sof-apl-es8336", /* the tplg suffix is added at run time */
 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
diff --git a/sound/soc/intel/common/soc-acpi-intel-cml-match.c b/sound/soc/intel/common/soc-acpi-intel-cml-match.c
index f75fa1b551d7..5eab17820532 100644
--- a/sound/soc/intel/common/soc-acpi-intel-cml-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-cml-match.c
@@ -9,6 +9,11 @@
 #include <sound/soc-acpi.h>
 #include <sound/soc-acpi-intel-match.h>
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static const struct snd_soc_acpi_codecs rt1011_spk_codecs = {
 	.num_codecs = 1,
 	.codecs = {"10EC1011"}
@@ -76,7 +81,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {
 		.sof_tplg_filename = "sof-cml-da7219-max98390.tplg",
 	},
 	{
-		.id = "ESSX8336",
+		.comp_ids = &essx_83x6,
 		.drv_name = "sof-essx8336",
 		.sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */
 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
diff --git a/sound/soc/intel/common/soc-acpi-intel-glk-match.c b/sound/soc/intel/common/soc-acpi-intel-glk-match.c
index d494860b8190..387e73100884 100644
--- a/sound/soc/intel/common/soc-acpi-intel-glk-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-glk-match.c
@@ -9,6 +9,11 @@
 #include <sound/soc-acpi.h>
 #include <sound/soc-acpi-intel-match.h>
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static const struct snd_soc_acpi_codecs glk_codecs = {
 	.num_codecs = 1,
 	.codecs = {"MX98357A"}
@@ -53,7 +58,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_glk_machines[] = {
 		.sof_tplg_filename = "sof-glk-cs42l42.tplg",
 	},
 	{
-		.id = "ESSX8336",
+		.comp_ids = &essx_83x6,
 		.drv_name = "sof-essx8336",
 		.sof_tplg_filename = "sof-glk-es8336", /* the tplg suffix is added at run time */
 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
diff --git a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
index 53c42a4e1694..b95c4b2cda94 100644
--- a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c
@@ -9,6 +9,11 @@
 #include <sound/soc-acpi.h>
 #include <sound/soc-acpi-intel-match.h>
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static const struct snd_soc_acpi_codecs jsl_7219_98373_codecs = {
 	.num_codecs = 1,
 	.codecs = {"MX98373"}
@@ -81,7 +86,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_jsl_machines[] = {
 		.sof_tplg_filename = "sof-jsl-cs42l42-mx98360a.tplg",
 	},
 	{
-		.id = "ESSX8336",
+		.comp_ids = &essx_83x6,
 		.drv_name = "sof-essx8336",
 		.sof_tplg_filename = "sof-jsl-es8336", /* the tplg suffix is added at run time */
 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
diff --git a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
index 8bf14295deb0..6edc9b7108cd 100644
--- a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
@@ -10,6 +10,11 @@
 #include <sound/soc-acpi-intel-match.h>
 #include "soc-acpi-intel-sdw-mockup-match.h"
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static const struct snd_soc_acpi_codecs tgl_codecs = {
 	.num_codecs = 1,
 	.codecs = {"MX98357A"}
@@ -391,7 +396,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
 		.sof_tplg_filename = "sof-tgl-rt1011-rt5682.tplg",
 	},
 	{
-		.id = "ESSX8336",
+		.comp_ids = &essx_83x6,
 		.drv_name = "sof-essx8336",
 		.sof_tplg_filename = "sof-tgl-es8336", /* the tplg suffix is added at run time */
 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (7 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 08/20] ASoC: Intel: soc-acpi: " Pierre-Louis Bossart
@ 2022-03-08 19:25 ` Pierre-Louis Bossart
  2022-03-09 10:04   ` Takashi Iwai
  2022-03-08 19:26 ` [PATCH 10/20] ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines Pierre-Louis Bossart
                   ` (11 subsequent siblings)
  20 siblings, 1 reply; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:25 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We're missing this check for the CNL PCI id

Reported-by: Nikolai Kostrigin <nickel@altlinux.org>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/hda/intel-dsp-config.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c
index b9b7bf5a5553..70fd8b13938e 100644
--- a/sound/hda/intel-dsp-config.c
+++ b/sound/hda/intel-dsp-config.c
@@ -199,6 +199,11 @@ static const struct config_entry config_table[] = {
 			{}
 		}
 	},
+	{
+		.flags = FLAG_SOF,
+		.device = 0x09dc8,
+		.codec_hid =  &essx_83x6,
+	},
 	{
 		.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
 		.device = 0x9dc8,
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 10/20] ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (8 preceding siblings ...)
  2022-03-08 19:25 ` [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 11/20] ASoC: Intel: sof_es8336: make gpio optional Pierre-Louis Bossart
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

From: Nikolai Kostrigin <nickel@altlinux.org>

Add the support for all ES83x6 devices

Signed-off-by: Nikolai Kostrigin <nickel@altlinux.org>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/common/soc-acpi-intel-cnl-match.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/sound/soc/intel/common/soc-acpi-intel-cnl-match.c b/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
index 8d3e8c3b589b..3df89e4511da 100644
--- a/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-cnl-match.c
@@ -11,6 +11,11 @@
 #include "../skylake/skl.h"
 #include "soc-acpi-intel-sdw-mockup-match.h"
 
+static const struct snd_soc_acpi_codecs essx_83x6 = {
+	.num_codecs = 3,
+	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
+};
+
 static struct skl_machine_pdata cnl_pdata = {
 	.use_tplg_pcm = true,
 };
@@ -23,6 +28,15 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_cnl_machines[] = {
 		.pdata = &cnl_pdata,
 		.sof_tplg_filename = "sof-cnl-rt274.tplg",
 	},
+	{
+		.comp_ids = &essx_83x6,
+		.drv_name = "sof-essx8336",
+		/* cnl and cml are identical */
+		.sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */
+		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
+					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
+					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
+	},
 	{},
 };
 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cnl_machines);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 11/20] ASoC: Intel: sof_es8336: make gpio optional
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (9 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 10/20] ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 12/20] ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus search Pierre-Louis Bossart
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Do not fail if the GPIO used for speakers is not present, at least the
headphone, headset and internal mics should work.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index e6d599f0cd26..eb792bd911fa 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -523,11 +523,10 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	if (ret)
 		dev_warn(codec_dev, "unable to add GPIO mapping table\n");
 
-	priv->gpio_pa = gpiod_get(codec_dev, "pa-enable", GPIOD_OUT_LOW);
+	priv->gpio_pa = gpiod_get_optional(codec_dev, "pa-enable", GPIOD_OUT_LOW);
 	if (IS_ERR(priv->gpio_pa)) {
-		ret = PTR_ERR(priv->gpio_pa);
-		dev_err(codec_dev, "%s, could not get pa-enable: %d\n",
-			__func__, ret);
+		ret = dev_err_probe(dev, PTR_ERR(priv->gpio_pa),
+				    "could not get pa-enable GPIO\n");
 		goto err;
 	}
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 12/20] ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus search
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (10 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 11/20] ASoC: Intel: sof_es8336: make gpio optional Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 13/20] ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15 2021" Pierre-Louis Bossart
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We have an existing 'adev' handle from which we can find the codec
device, no need for an I2C bus search.

This change aligns this driver will all other I2S-based machine
drivers.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index eb792bd911fa..bb4a3491d71c 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -515,9 +515,10 @@ static int sof_es8336_probe(struct platform_device *pdev)
 		return ret;
 
 	/* get speaker enable GPIO */
-	codec_dev = bus_find_device_by_name(&i2c_bus_type, NULL, codec_name);
+	codec_dev = acpi_get_first_physical_node(adev);
 	if (!codec_dev)
 		return -EPROBE_DEFER;
+	priv->codec_dev = get_device(codec_dev);
 
 	ret = devm_acpi_dev_add_driver_gpios(codec_dev, gpio_mapping);
 	if (ret)
@@ -530,7 +531,6 @@ static int sof_es8336_probe(struct platform_device *pdev)
 		goto err;
 	}
 
-	priv->codec_dev = codec_dev;
 	INIT_LIST_HEAD(&priv->hdmi_pcm_list);
 
 	snd_soc_card_set_drvdata(card, priv);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 13/20] ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15 2021"
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (11 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 12/20] ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus search Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 14/20] ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP Pierre-Louis Bossart
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

This reverts commit ce6a70bfce21bb4edb7c0f29ecfb0522fa34ab71.

The next patch will add run-time detection of the required SSP and
this hard-coded quirk is not needed.

Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index bb4a3491d71c..3376bd360a03 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -247,14 +247,6 @@ static const struct dmi_system_id sof_es8336_quirk_table[] = {
 					SOF_ES8336_TGL_GPIO_QUIRK |
 					SOF_ES8336_ENABLE_DMIC)
 	},
-	{
-		.callback = sof_es8336_quirk_cb,
-		.matches = {
-			DMI_MATCH(DMI_SYS_VENDOR, "HUAWEI"),
-			DMI_MATCH(DMI_BOARD_NAME, "BOHB-WAX9-PCB-B2"),
-		},
-		.driver_data = (void *)SOF_ES8336_SSP_CODEC(0)
-	},
 	{}
 };
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 14/20] ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (12 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 13/20] ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15 2021" Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 15/20] ASoC: Intel: sof_es8336: log all quirks Pierre-Louis Bossart
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Since we see a proliferation of devices with various configurations,
we want to automatically set the DMIC and SSP information. This patch
relies on the information extracted from NHLT and partially reverts
existing DMI quirks added by commit a164137ce91a ("ASoC: Intel: add
machine driver for SOF+ES8336")

Note that NHLT can report multiple SSPs, choosing from the
ssp_link_mask in an MSB-first manner was found experimentally to work
fine.

The only thing that cannot be detected is the GPIO type, and users may
want to use the quirk override parameter if the 'wrong' solution is
provided.

Tested-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 56 +++++++++++++++++++++--------
 1 file changed, 41 insertions(+), 15 deletions(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index 3376bd360a03..1a8680470577 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -228,24 +228,25 @@ static int sof_es8336_quirk_cb(const struct dmi_system_id *id)
 	return 1;
 }
 
+/*
+ * this table should only be used to add GPIO or jack-detection quirks
+ * that cannot be detected from ACPI tables. The SSP and DMIC
+ * information are providing by the platform driver and are aligned
+ * with the topology used.
+ *
+ * If the GPIO support is missing, the quirk parameter can be used to
+ * enable speakers. In that case it's recommended to keep the SSP and DMIC
+ * information consistent, overriding the SSP and DMIC can only be done
+ * if the topology file is modified as well.
+ */
 static const struct dmi_system_id sof_es8336_quirk_table[] = {
-	{
-		.callback = sof_es8336_quirk_cb,
-		.matches = {
-			DMI_MATCH(DMI_SYS_VENDOR, "CHUWI Innovation And Technology"),
-			DMI_MATCH(DMI_BOARD_NAME, "Hi10 X"),
-		},
-		.driver_data = (void *)SOF_ES8336_SSP_CODEC(2)
-	},
 	{
 		.callback = sof_es8336_quirk_cb,
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "IP3 tech"),
 			DMI_MATCH(DMI_BOARD_NAME, "WN1"),
 		},
-		.driver_data = (void *)(SOF_ES8336_SSP_CODEC(0) |
-					SOF_ES8336_TGL_GPIO_QUIRK |
-					SOF_ES8336_ENABLE_DMIC)
+		.driver_data = (void *)(SOF_ES8336_TGL_GPIO_QUIRK)
 	},
 	{}
 };
@@ -470,11 +471,33 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	card = &sof_es8336_card;
 	card->dev = dev;
 
-	if (!dmi_check_system(sof_es8336_quirk_table))
-		quirk = SOF_ES8336_SSP_CODEC(2);
+	/* check GPIO DMI quirks */
+	dmi_check_system(sof_es8336_quirk_table);
 
-	if (quirk & SOF_ES8336_ENABLE_DMIC)
-		dmic_be_num = 2;
+	if (!mach->mach_params.i2s_link_mask) {
+		dev_warn(dev, "No I2S link information provided, using SSP0. This may need to be modified with the quirk module parameter\n");
+	} else {
+		/*
+		 * Set configuration based on platform NHLT.
+		 * In this machine driver, we can only support one SSP for the
+		 * ES8336 link, the else-if below are intentional.
+		 * In some cases multiple SSPs can be reported by NHLT, starting MSB-first
+		 * seems to pick the right connection.
+		 */
+		unsigned long ssp = 0;
+
+		if (mach->mach_params.i2s_link_mask & BIT(2))
+			ssp = SOF_ES8336_SSP_CODEC(2);
+		else if (mach->mach_params.i2s_link_mask & BIT(1))
+			ssp = SOF_ES8336_SSP_CODEC(1);
+		else  if (mach->mach_params.i2s_link_mask & BIT(0))
+			ssp = SOF_ES8336_SSP_CODEC(0);
+
+		quirk |= ssp;
+	}
+
+	if (mach->mach_params.dmic_num)
+		quirk |= SOF_ES8336_ENABLE_DMIC;
 
 	if (quirk_override != -1) {
 		dev_info(dev, "Overriding quirk 0x%lx => 0x%x\n",
@@ -483,6 +506,9 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	}
 	log_quirks(dev);
 
+	if (quirk & SOF_ES8336_ENABLE_DMIC)
+		dmic_be_num = 2;
+
 	sof_es8336_card.num_links += dmic_be_num + hdmi_num;
 	dai_links = sof_card_dai_links_create(dev,
 					      SOF_ES8336_SSP_CODEC(quirk),
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 15/20] ASoC: Intel: sof_es8336: log all quirks
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (13 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 14/20] ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 16/20] ASoC: Intel: sof_es8336: move comment to the right place Pierre-Louis Bossart
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

We only logged the SSP quirk, make sure the GPIO and DMIC quirks are
exposed.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index 1a8680470577..e2daa57902af 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -63,7 +63,12 @@ static const struct acpi_gpio_mapping *gpio_mapping = acpi_es8336_gpios;
 
 static void log_quirks(struct device *dev)
 {
-	dev_info(dev, "quirk SSP%ld",  SOF_ES8336_SSP_CODEC(quirk));
+	dev_info(dev, "quirk mask %#lx\n", quirk);
+	dev_info(dev, "quirk SSP%ld\n",  SOF_ES8336_SSP_CODEC(quirk));
+	if (quirk & SOF_ES8336_ENABLE_DMIC)
+		dev_info(dev, "quirk DMIC enabled\n");
+	if (quirk & SOF_ES8336_TGL_GPIO_QUIRK)
+		dev_info(dev, "quirk TGL GPIO enabled\n");
 }
 
 static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w,
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 16/20] ASoC: Intel: sof_es8336: move comment to the right place
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (14 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 15/20] ASoC: Intel: sof_es8336: log all quirks Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 17/20] ASoC: Intel: sof_es8336: add support for JD inverted quirk Pierre-Louis Bossart
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Additional code was added and the comment on the speaker GPIO needs to
be moved before we actually try to get the GPIO.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index e2daa57902af..d7dff61c9ba8 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -537,12 +537,12 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	/* get speaker enable GPIO */
 	codec_dev = acpi_get_first_physical_node(adev);
 	if (!codec_dev)
 		return -EPROBE_DEFER;
 	priv->codec_dev = get_device(codec_dev);
 
+	/* get speaker enable GPIO */
 	ret = devm_acpi_dev_add_driver_gpios(codec_dev, gpio_mapping);
 	if (ret)
 		dev_warn(codec_dev, "unable to add GPIO mapping table\n");
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 17/20] ASoC: Intel: sof_es8336: add support for JD inverted quirk
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (15 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 16/20] ASoC: Intel: sof_es8336: move comment to the right place Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 18/20] ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec Pierre-Louis Bossart
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

The codec driver exposes a set of properties that can be set from the
machine driver - as done in bytcht_es8316.c

Start by adding the JD_INVERTED quirk.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 40 ++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index d7dff61c9ba8..932a80e62bc8 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -21,11 +21,15 @@
 #include <sound/soc-acpi.h>
 #include "hda_dsp_common.h"
 
+/* jd-inv + terminating entry */
+#define MAX_NO_PROPS 2
+
 #define SOF_ES8336_SSP_CODEC(quirk)		((quirk) & GENMASK(3, 0))
 #define SOF_ES8336_SSP_CODEC_MASK		(GENMASK(3, 0))
 
 #define SOF_ES8336_TGL_GPIO_QUIRK		BIT(4)
 #define SOF_ES8336_ENABLE_DMIC			BIT(5)
+#define SOF_ES8336_JD_INVERTED			BIT(6)
 
 static unsigned long quirk;
 
@@ -69,6 +73,8 @@ static void log_quirks(struct device *dev)
 		dev_info(dev, "quirk DMIC enabled\n");
 	if (quirk & SOF_ES8336_TGL_GPIO_QUIRK)
 		dev_info(dev, "quirk TGL GPIO enabled\n");
+	if (quirk & SOF_ES8336_JD_INVERTED)
+		dev_info(dev, "quirk JD inverted enabled\n");
 }
 
 static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w,
@@ -461,10 +467,13 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct snd_soc_card *card;
 	struct snd_soc_acpi_mach *mach = pdev->dev.platform_data;
+	struct property_entry props[MAX_NO_PROPS] = {};
 	struct sof_es8336_private *priv;
+	struct fwnode_handle *fwnode;
 	struct acpi_device *adev;
 	struct snd_soc_dai_link *dai_links;
 	struct device *codec_dev;
+	unsigned int cnt = 0;
 	int dmic_be_num = 0;
 	int hdmi_num = 3;
 	int ret;
@@ -530,6 +539,9 @@ static int sof_es8336_probe(struct platform_device *pdev)
 			 "i2c-%s", acpi_dev_name(adev));
 		put_device(&adev->dev);
 		dai_links[0].codecs->name = codec_name;
+	} else {
+		dev_err(dev, "Error cannot find '%s' dev\n", mach->id);
+		return -ENXIO;
 	}
 
 	ret = snd_soc_fixup_dai_links_platform_name(&sof_es8336_card,
@@ -542,6 +554,26 @@ static int sof_es8336_probe(struct platform_device *pdev)
 		return -EPROBE_DEFER;
 	priv->codec_dev = get_device(codec_dev);
 
+	if (quirk & SOF_ES8336_JD_INVERTED)
+		props[cnt++] = PROPERTY_ENTRY_BOOL("everest,jack-detect-inverted");
+
+	if (cnt) {
+		fwnode = fwnode_create_software_node(props, NULL);
+		if (IS_ERR(fwnode)) {
+			put_device(codec_dev);
+			return PTR_ERR(fwnode);
+		}
+
+		ret = device_add_software_node(codec_dev, to_software_node(fwnode));
+
+		fwnode_handle_put(fwnode);
+
+		if (ret) {
+			put_device(codec_dev);
+			return ret;
+		}
+	}
+
 	/* get speaker enable GPIO */
 	ret = devm_acpi_dev_add_driver_gpios(codec_dev, gpio_mapping);
 	if (ret)
@@ -551,7 +583,7 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->gpio_pa)) {
 		ret = dev_err_probe(dev, PTR_ERR(priv->gpio_pa),
 				    "could not get pa-enable GPIO\n");
-		goto err;
+		goto err_put_codec;
 	}
 
 	INIT_LIST_HEAD(&priv->hdmi_pcm_list);
@@ -562,12 +594,13 @@ static int sof_es8336_probe(struct platform_device *pdev)
 	if (ret) {
 		gpiod_put(priv->gpio_pa);
 		dev_err(dev, "snd_soc_register_card failed: %d\n", ret);
-		goto err;
+		goto err_put_codec;
 	}
 	platform_set_drvdata(pdev, &sof_es8336_card);
 	return 0;
 
-err:
+err_put_codec:
+	device_remove_software_node(priv->codec_dev);
 	put_device(codec_dev);
 	return ret;
 }
@@ -578,6 +611,7 @@ static int sof_es8336_remove(struct platform_device *pdev)
 	struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
 
 	gpiod_put(priv->gpio_pa);
+	device_remove_software_node(priv->codec_dev);
 	put_device(priv->codec_dev);
 
 	return 0;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 18/20] ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (16 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 17/20] ASoC: Intel: sof_es8336: add support for JD inverted quirk Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 19/20] ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support Pierre-Louis Bossart
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

The ES8326 requires a different codec driver than ES8316/8336, fixup
the codec name and dai name depending on the ACPI _HID exposed in the
DSDT.

Also add the select in Kconfig

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/Kconfig      |  3 ++-
 sound/soc/intel/boards/sof_es8336.c | 10 +++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig
index 6884ddf9edad..a62785893bec 100644
--- a/sound/soc/intel/boards/Kconfig
+++ b/sound/soc/intel/boards/Kconfig
@@ -530,12 +530,13 @@ config SND_SOC_INTEL_SOF_PCM512x_MACH
 	  If unsure select "N".
 
 config SND_SOC_INTEL_SOF_ES8336_MACH
-	tristate "SOF with ES8336 codec in I2S mode"
+	tristate "SOF with ES8336 or ES8326 codec in I2S mode"
 	depends on I2C && ACPI
 	depends on MFD_INTEL_LPSS || COMPILE_TEST
 	depends on GPIOLIB || COMPILE_TEST
 	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
 	select SND_SOC_ES8316
+	select SND_SOC_ES8326
 	select SND_SOC_DMIC
 	select SND_SOC_INTEL_HDA_DSP_COMMON
 	help
diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index 932a80e62bc8..32f5303041b8 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -292,7 +292,7 @@ static struct snd_soc_dai_link_component platform_component[] = {
 	}
 };
 
-SND_SOC_DAILINK_DEF(ssp1_codec,
+SND_SOC_DAILINK_DEF(es8336_codec,
 	DAILINK_COMP_ARRAY(COMP_CODEC("i2c-ESSX8336:00", "ES8316 HiFi")));
 
 static struct snd_soc_dai_link_component dmic_component[] = {
@@ -356,8 +356,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
 		goto devm_err;
 
 	links[id].id = id;
-	links[id].codecs = ssp1_codec;
-	links[id].num_codecs = ARRAY_SIZE(ssp1_codec);
+	links[id].codecs = es8336_codec;
+	links[id].num_codecs = ARRAY_SIZE(es8336_codec);
 	links[id].platforms = platform_component;
 	links[id].num_platforms = ARRAY_SIZE(platform_component);
 	links[id].init = sof_es8316_init;
@@ -539,6 +539,10 @@ static int sof_es8336_probe(struct platform_device *pdev)
 			 "i2c-%s", acpi_dev_name(adev));
 		put_device(&adev->dev);
 		dai_links[0].codecs->name = codec_name;
+
+		/* also fixup codec dai name if relevant */
+		if (!strncmp(mach->id, "ESSX8326", SND_ACPI_I2C_ID_LEN))
+			dai_links[0].codecs->dai_name = "ES8326 HiFi";
 	} else {
 		dev_err(dev, "Error cannot find '%s' dev\n", mach->id);
 		return -ENXIO;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 19/20] ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (17 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 18/20] ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-08 19:26 ` [PATCH 20/20] ASoC: Intel: bytcht_es8316: move comment to the right place Pierre-Louis Bossart
  2022-03-10 11:35 ` [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Mark Brown
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

The presence of DMICs needs to be signaled to UCM, follow the HDaudio
example and use the 'cfg-dmics' component string to report the number
of dmics present on the platform.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/sof_es8336.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
index 32f5303041b8..5e0529aa4f1d 100644
--- a/sound/soc/intel/boards/sof_es8336.c
+++ b/sound/soc/intel/boards/sof_es8336.c
@@ -459,6 +459,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
 	return NULL;
 }
 
+static char soc_components[30];
+
  /* i2c-<HID>:00 with HID being 8 chars */
 static char codec_name[SND_ACPI_I2C_ID_LEN];
 
@@ -594,6 +596,12 @@ static int sof_es8336_probe(struct platform_device *pdev)
 
 	snd_soc_card_set_drvdata(card, priv);
 
+	if (mach->mach_params.dmic_num > 0) {
+		snprintf(soc_components, sizeof(soc_components),
+			 "cfg-dmics:%d", mach->mach_params.dmic_num);
+		card->components = soc_components;
+	}
+
 	ret = devm_snd_soc_register_card(dev, card);
 	if (ret) {
 		gpiod_put(priv->gpio_pa);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 20/20] ASoC: Intel: bytcht_es8316: move comment to the right place
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (18 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 19/20] ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support Pierre-Louis Bossart
@ 2022-03-08 19:26 ` Pierre-Louis Bossart
  2022-03-10 11:35 ` [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Mark Brown
  20 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-08 19:26 UTC (permalink / raw)
  To: alsa-devel
  Cc: Cezary Rojewski, tiwai, Péter Ujfalusi, Huajun Li,
	Pierre-Louis Bossart, Nikolai Kostrigin, broonie,
	Mauro Carvalho Chehab, Bard Liao

Additional code was added and the comment on the speaker GPIO needs to
be moved before we actually try to get the GPIO.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 sound/soc/intel/boards/bytcht_es8316.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/intel/boards/bytcht_es8316.c b/sound/soc/intel/boards/bytcht_es8316.c
index f4bf26e802a2..e18371b5a771 100644
--- a/sound/soc/intel/boards/bytcht_es8316.c
+++ b/sound/soc/intel/boards/bytcht_es8316.c
@@ -535,7 +535,6 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->mclk))
 		return dev_err_probe(dev, PTR_ERR(priv->mclk), "clk_get pmc_plt_clk_3 failed\n");
 
-	/* get speaker enable GPIO */
 	codec_dev = acpi_get_first_physical_node(adev);
 	if (!codec_dev)
 		return -EPROBE_DEFER;
@@ -561,6 +560,7 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
 		}
 	}
 
+	/* get speaker enable GPIO */
 	devm_acpi_dev_add_driver_gpios(codec_dev, byt_cht_es8316_gpios);
 	priv->speaker_en_gpio =
 		gpiod_get_optional(codec_dev, "speaker-enable",
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* Re: [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
  2022-03-08 19:25 ` [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask Pierre-Louis Bossart
@ 2022-03-09 10:03   ` Takashi Iwai
  2022-03-09 17:01   ` Cezary Rojewski
  1 sibling, 0 replies; 31+ messages in thread
From: Takashi Iwai @ 2022-03-09 10:03 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: Cezary Rojewski, Péter Ujfalusi, alsa-devel,
	Nikolai Kostrigin, broonie, Mauro Carvalho Chehab, Bard Liao,
	Huajun Li

On Tue, 08 Mar 2022 20:25:54 +0100,
Pierre-Louis Bossart wrote:
> 
> The NHLT information can be used to figure out which SSPs are enabled
> in a platform.
> 
> The 'SSP' link type is too broad for machine drivers, since it can
> cover the Bluetooth sideband and the analog audio codec connections,
> so this helper exposes a parameter to filter with the device
> type (DEVICE_I2S refers to analog audio codec in NHLT parlance).
> 
> The helper returns a mask, since more than one SSP may be used for
> analog audio, e.g. the NHLT spec describes the use of SSP0 for
> amplifiers and SSP1 for headset codec. Note that if more than one bit
> is set, it's impossible to determine which SSP is connected to what
> external component. Additional platform-specific information based on
> e.g. DMI quirks would still be required in the machine driver to
> configure the relevant dailinks.
> 
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>

Acked-by: Takashi Iwai <tiwai@suse.de>


thanks,

Takashi

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices
  2022-03-08 19:25 ` [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices Pierre-Louis Bossart
@ 2022-03-09 10:04   ` Takashi Iwai
  0 siblings, 0 replies; 31+ messages in thread
From: Takashi Iwai @ 2022-03-09 10:04 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: Cezary Rojewski, anthony tonitch, Péter Ujfalusi,
	alsa-devel, Nikolai Kostrigin, broonie, Mauro Carvalho Chehab,
	Bard Liao, Huajun Li

On Tue, 08 Mar 2022 20:25:57 +0100,
Pierre-Louis Bossart wrote:
> 
> We only saw ESSX8336 so far, but now with reports of 'ESSX8326' we
> need to expand to a full list. Let's reuse the 'snd_soc_acpi_codecs'
> structure to store the information.
> 
> Reported-by: anthony tonitch <d.tonitch@gmail.com>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>

Acked-by: Takashi Iwai <tiwai@suse.de>


thanks,

Takashi

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL
  2022-03-08 19:25 ` [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL Pierre-Louis Bossart
@ 2022-03-09 10:04   ` Takashi Iwai
  0 siblings, 0 replies; 31+ messages in thread
From: Takashi Iwai @ 2022-03-09 10:04 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: Cezary Rojewski, Péter Ujfalusi, alsa-devel,
	Nikolai Kostrigin, broonie, Mauro Carvalho Chehab, Bard Liao,
	Huajun Li

On Tue, 08 Mar 2022 20:25:59 +0100,
Pierre-Louis Bossart wrote:
> 
> We're missing this check for the CNL PCI id
> 
> Reported-by: Nikolai Kostrigin <nickel@altlinux.org>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>

Acked-by: Takashi Iwai <tiwai@suse.de>


thanks,

Takashi

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards
  2022-03-08 19:25 ` [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards Pierre-Louis Bossart
@ 2022-03-09 16:49   ` Cezary Rojewski
  2022-03-09 17:10     ` Pierre-Louis Bossart
  0 siblings, 1 reply; 31+ messages in thread
From: Cezary Rojewski @ 2022-03-09 16:49 UTC (permalink / raw)
  To: Pierre-Louis Bossart, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao

On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
> We currently extract the DMIC number only for HDaudio or SoundWire
> platforms. For I2S/TDM platforms, this wasn't necessary until now, but
> with devices with ES8336 we need to find a solution to detect dmics
> more reliably than with a DMI quirk.

...

> @@ -644,24 +642,35 @@ static int hda_init(struct snd_sof_dev *sdev)
>   	return ret;
>   }
>   
> -#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
> -
> -static int check_nhlt_dmic(struct snd_sof_dev *sdev)
> +static int check_dmic_num(struct snd_sof_dev *sdev)
>   {
>   	struct nhlt_acpi_table *nhlt;
> -	int dmic_num;
> +	int dmic_num = 0;


s/int/u32? (paired with question below)

>   
>   	nhlt = intel_nhlt_init(sdev->dev);
>   	if (nhlt) {
>   		dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt);
>   		intel_nhlt_free(nhlt);
> -		if (dmic_num >= 1 && dmic_num <= 4)
> -			return dmic_num;
>   	}
>   
> -	return 0;
> +	/* allow for module parameter override */
> +	if (dmic_num_override != -1) {
> +		dev_dbg(sdev->dev,
> +			"overriding DMICs detected in NHLT tables %d by kernel param %d\n",
> +			dmic_num, dmic_num_override);
> +		dmic_num = dmic_num_override;
> +	}
> +
> +	if (dmic_num < 0 || dmic_num > 4) {

How come dmic_num be negative?

> +		dev_dbg(sdev->dev, "invalid dmic_number %d\n", dmic_num);
> +		dmic_num = 0;
> +	}
> +
> +	return dmic_num;
>   }

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver
  2022-03-08 19:25 ` [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver Pierre-Louis Bossart
@ 2022-03-09 16:59   ` Cezary Rojewski
  2022-03-09 17:16     ` Pierre-Louis Bossart
  0 siblings, 1 reply; 31+ messages in thread
From: Cezary Rojewski @ 2022-03-09 16:59 UTC (permalink / raw)
  To: Pierre-Louis Bossart, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao

On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
> For devices designed for Windows, the SSP information should be listed
> in the NHLT, and when present can be used to set quirks automatically
> in the machine driver.
> 
> The NHLT information exposes BT and analog audio connections
> separately, for now we are only interested in the analog audio parts.
> 
> The use of dev_info() for the SSP mask is intentional so that we can
> immediately flag devices with an ES8336 codec. Since NHLT is not used
> for recent Chromebooks these messages should be rare.


...

> +static int check_nhlt_ssp_mask(struct snd_sof_dev *sdev)
> +{
> +	struct nhlt_acpi_table *nhlt;
> +	int ssp_mask = 0;
> +
> +	nhlt = intel_nhlt_init(sdev->dev);
> +	if (!nhlt)
> +		return ssp_mask;
> +
> +	if (intel_nhlt_has_endpoint_type(nhlt, NHLT_LINK_SSP)) {
> +		ssp_mask = intel_nhlt_ssp_endpoint_mask(nhlt, NHLT_DEVICE_I2S);
> +		if (ssp_mask)
> +			dev_info(sdev->dev, "NHLT_DEVICE_I2S detected, ssp_mask %#x\n", ssp_mask);
> +	}
> +	intel_nhlt_free(nhlt);


NHLT "toggling" found in this function looks weird. Why not cache NHLT 
pointer i.e.: get it once and put when driver is no longer required? 
Initializing and freeing NHLT (AKA get/put ACPI table) every time a 
request is made does not look like an optimal solution.

> +	return ssp_mask;
> +}
> +

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
  2022-03-08 19:25 ` [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask Pierre-Louis Bossart
  2022-03-09 10:03   ` Takashi Iwai
@ 2022-03-09 17:01   ` Cezary Rojewski
  2022-03-09 17:24     ` Pierre-Louis Bossart
  1 sibling, 1 reply; 31+ messages in thread
From: Cezary Rojewski @ 2022-03-09 17:01 UTC (permalink / raw)
  To: Pierre-Louis Bossart, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao

On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
> The NHLT information can be used to figure out which SSPs are enabled
> in a platform.
> 
> The 'SSP' link type is too broad for machine drivers, since it can
> cover the Bluetooth sideband and the analog audio codec connections,
> so this helper exposes a parameter to filter with the device
> type (DEVICE_I2S refers to analog audio codec in NHLT parlance).
> 
> The helper returns a mask, since more than one SSP may be used for
> analog audio, e.g. the NHLT spec describes the use of SSP0 for
> amplifiers and SSP1 for headset codec. Note that if more than one bit
> is set, it's impossible to determine which SSP is connected to what
> external component. Additional platform-specific information based on
> e.g. DMI quirks would still be required in the machine driver to
> configure the relevant dailinks.

...

> diff --git a/sound/hda/intel-nhlt.c b/sound/hda/intel-nhlt.c
> index 128476aa7c61..4063da378283 100644
> --- a/sound/hda/intel-nhlt.c
> +++ b/sound/hda/intel-nhlt.c
> @@ -130,6 +130,28 @@ bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 link_type)
>   }
>   EXPORT_SYMBOL(intel_nhlt_has_endpoint_type);
>   
> +int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type)
> +{
> +	struct nhlt_endpoint *epnt;
> +	int ssp_mask = 0;
> +	int i;
> +
> +	if (!nhlt || (device_type != NHLT_DEVICE_BT && device_type != NHLT_DEVICE_I2S))

The '!nhlt' safety is superfluous in my opinion. Kernel core API e.g.: 
device one assumes caller is sane in basically all cases.

> +		return 0;
> +
> +	epnt = (struct nhlt_endpoint *)nhlt->desc;
> +	for (i = 0; i < nhlt->endpoint_count; i++) {
> +		if (epnt->linktype == NHLT_LINK_SSP && epnt->device_type == device_type) {
> +			/* for SSP the virtual bus id is the SSP port */
> +			ssp_mask |= BIT(epnt->virtual_bus_id);
> +		}
> +		epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length);
> +	}
> +
> +	return ssp_mask;
> +}
> +EXPORT_SYMBOL(intel_nhlt_ssp_endpoint_mask);

Since this is a *public* API - not direct part of any driver, really - 
providing kernel-doc is recommended.


Regards,
Czarek

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards
  2022-03-09 16:49   ` Cezary Rojewski
@ 2022-03-09 17:10     ` Pierre-Louis Bossart
  0 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-09 17:10 UTC (permalink / raw)
  To: Cezary Rojewski, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao



On 3/9/22 10:49, Cezary Rojewski wrote:
> On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
>> We currently extract the DMIC number only for HDaudio or SoundWire
>> platforms. For I2S/TDM platforms, this wasn't necessary until now, but
>> with devices with ES8336 we need to find a solution to detect dmics
>> more reliably than with a DMI quirk.
> 
> ...
> 
>> @@ -644,24 +642,35 @@ static int hda_init(struct snd_sof_dev *sdev)
>>       return ret;
>>   }
>> -#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || 
>> IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
>> -
>> -static int check_nhlt_dmic(struct snd_sof_dev *sdev)
>> +static int check_dmic_num(struct snd_sof_dev *sdev)
>>   {
>>       struct nhlt_acpi_table *nhlt;
>> -    int dmic_num;
>> +    int dmic_num = 0;
> 
> 
> s/int/u32? (paired with question below)
> 
>>       nhlt = intel_nhlt_init(sdev->dev);
>>       if (nhlt) {
>>           dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt);
>>           intel_nhlt_free(nhlt);
>> -        if (dmic_num >= 1 && dmic_num <= 4)
>> -            return dmic_num;
>>       }
>> -    return 0;
>> +    /* allow for module parameter override */
>> +    if (dmic_num_override != -1) {
>> +        dev_dbg(sdev->dev,
>> +            "overriding DMICs detected in NHLT tables %d by kernel 
>> param %d\n",
>> +            dmic_num, dmic_num_override);
>> +        dmic_num = dmic_num_override;
>> +    }
>> +
>> +    if (dmic_num < 0 || dmic_num > 4) {
> 
> How come dmic_num be negative?

static int dmic_num_override = -1;
module_param_named(dmic_num, dmic_num_override, int, 0444);
MODULE_PARM_DESC(dmic_num, "SOF HDA DMIC number");

The value is already negative by default, and we want to apply sanity 
checks on what the user or distributions sets.

This code has been in the kernel for several years now, we're just 
moving it around.

> 
>> +        dev_dbg(sdev->dev, "invalid dmic_number %d\n", dmic_num);
>> +        dmic_num = 0;
>> +    }
>> +
>> +    return dmic_num;
>>   }

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver
  2022-03-09 16:59   ` Cezary Rojewski
@ 2022-03-09 17:16     ` Pierre-Louis Bossart
  0 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-09 17:16 UTC (permalink / raw)
  To: Cezary Rojewski, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao



On 3/9/22 10:59, Cezary Rojewski wrote:
> On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
>> For devices designed for Windows, the SSP information should be listed
>> in the NHLT, and when present can be used to set quirks automatically
>> in the machine driver.
>>
>> The NHLT information exposes BT and analog audio connections
>> separately, for now we are only interested in the analog audio parts.
>>
>> The use of dev_info() for the SSP mask is intentional so that we can
>> immediately flag devices with an ES8336 codec. Since NHLT is not used
>> for recent Chromebooks these messages should be rare.
> 
> 
> ...
> 
>> +static int check_nhlt_ssp_mask(struct snd_sof_dev *sdev)
>> +{
>> +    struct nhlt_acpi_table *nhlt;
>> +    int ssp_mask = 0;
>> +
>> +    nhlt = intel_nhlt_init(sdev->dev);
>> +    if (!nhlt)
>> +        return ssp_mask;
>> +
>> +    if (intel_nhlt_has_endpoint_type(nhlt, NHLT_LINK_SSP)) {
>> +        ssp_mask = intel_nhlt_ssp_endpoint_mask(nhlt, NHLT_DEVICE_I2S);
>> +        if (ssp_mask)
>> +            dev_info(sdev->dev, "NHLT_DEVICE_I2S detected, ssp_mask 
>> %#x\n", ssp_mask);
>> +    }
>> +    intel_nhlt_free(nhlt);
> 
> 
> NHLT "toggling" found in this function looks weird. Why not cache NHLT 
> pointer i.e.: get it once and put when driver is no longer required? 
> Initializing and freeing NHLT (AKA get/put ACPI table) every time a 
> request is made does not look like an optimal solution.

I agree with your remark, but this is an optimization that we plan on 
doing later. There are other changes coming wrt to NHTL to extract DMIC 
blobs, and it's better to change all the functions using the same 
programming flow when we are in 'stable' state.

The concern isn't really optimization at this point but just to get 
audio to work. Keep in mind all this patchset was generated with tests 
crowdsourced to the community, and the empirical detection of the 
SSP-codec link could be broken on some platforms - the NHLT does not 
give *any* information on where the codec is actually connected.



^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
  2022-03-09 17:01   ` Cezary Rojewski
@ 2022-03-09 17:24     ` Pierre-Louis Bossart
  0 siblings, 0 replies; 31+ messages in thread
From: Pierre-Louis Bossart @ 2022-03-09 17:24 UTC (permalink / raw)
  To: Cezary Rojewski, alsa-devel
  Cc: Huajun Li, tiwai, Péter Ujfalusi, Nikolai Kostrigin,
	broonie, Mauro Carvalho Chehab, Bard Liao


>> diff --git a/sound/hda/intel-nhlt.c b/sound/hda/intel-nhlt.c
>> index 128476aa7c61..4063da378283 100644
>> --- a/sound/hda/intel-nhlt.c
>> +++ b/sound/hda/intel-nhlt.c
>> @@ -130,6 +130,28 @@ bool intel_nhlt_has_endpoint_type(struct 
>> nhlt_acpi_table *nhlt, u8 link_type)
>>   }
>>   EXPORT_SYMBOL(intel_nhlt_has_endpoint_type);
>> +int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 
>> device_type)
>> +{
>> +    struct nhlt_endpoint *epnt;
>> +    int ssp_mask = 0;
>> +    int i;
>> +
>> +    if (!nhlt || (device_type != NHLT_DEVICE_BT && device_type != 
>> NHLT_DEVICE_I2S))
> 
> The '!nhlt' safety is superfluous in my opinion. Kernel core API e.g.: 
> device one assumes caller is sane in basically all cases.

Agree. I will remove this test in a follow-up optimization patch. the 
same pattern is used for existing dmic stuff so it's better to remove it 
in one shot.

>> +        return 0;
>> +
>> +    epnt = (struct nhlt_endpoint *)nhlt->desc;
>> +    for (i = 0; i < nhlt->endpoint_count; i++) {
>> +        if (epnt->linktype == NHLT_LINK_SSP && epnt->device_type == 
>> device_type) {
>> +            /* for SSP the virtual bus id is the SSP port */
>> +            ssp_mask |= BIT(epnt->virtual_bus_id);
>> +        }
>> +        epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length);
>> +    }
>> +
>> +    return ssp_mask;
>> +}
>> +EXPORT_SYMBOL(intel_nhlt_ssp_endpoint_mask);
> 
> Since this is a *public* API - not direct part of any driver, really - 
> providing kernel-doc is recommended.

there isn't a single line of kernel-doc for the entire NHLT stuff.  and 
ahem, that includes recent additions from your team ;-)

bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 
link_type);

So agree, but let's do this in a follow-up patchset. the goal of this 
patchset is to help community users that don't see an audio card 
created, not to make NHLT support super shiny.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms
  2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
                   ` (19 preceding siblings ...)
  2022-03-08 19:26 ` [PATCH 20/20] ASoC: Intel: bytcht_es8316: move comment to the right place Pierre-Louis Bossart
@ 2022-03-10 11:35 ` Mark Brown
  20 siblings, 0 replies; 31+ messages in thread
From: Mark Brown @ 2022-03-10 11:35 UTC (permalink / raw)
  To: Pierre-Louis Bossart, alsa-devel
  Cc: tiwai, Nikolai Kostrigin, Cezary Rojewski, Mauro Carvalho Chehab,
	Huajun Li

On Tue, 8 Mar 2022 13:25:50 -0600, Pierre-Louis Bossart wrote:
> This patchset adds a number of improvements for ES8336-based Intel
> platforms, which are not well supported at all in Linux. Since
> Christmas 2021, we've seen dozens of reports of broken audio [1].
> 
> The fundamental problem is that those platforms were built for Windows
> but using an I2S codec - instead of the HDaudio traditional
> solution. As a result, we are missing all the usual information needed
> to configure the audio card (which I2S, what configuration, DMICs or
> not, etc). The situation is similar to Baytrail with all possible
> permutations enabled.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[01/20] ASoC: soc-acpi: fix kernel-doc descriptor
        commit: 1174442b82b6cf13328a5f9574fac3655c58ae06
[02/20] ASoC: soc-acpi: add information on I2S/TDM link mask
        commit: 679aa83a0fb70dcbf9e97cbdfd573e6fc8bf9b1a
[03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards
        commit: 92c1b7c0f780f0084f7b114be316ae4e182676e5
[04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
        commit: 0c470db0399e17310ed2ba54dd1c25cfa16ce0d3
[05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver
        commit: bd015f633b05a3d4f88a3d7099746b2819a523f5
[06/20] ASoC: Intel: soc-acpi: quirk topology filename dynamically
        commit: 4694b8382d6b79bcf95995757419d279a3ab375b
[07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices
        commit: de24d97fb845ffd2229811ee256438e42b5a8d12
[08/20] ASoC: Intel: soc-acpi: add more ACPI HIDs for ES83x6 devices
        commit: 1cedb6eabf0f2dd8285d3bb0ce1abd2369529084
[09/20] ALSA: intel-dspconfig: add ES8336 support for CNL
        commit: cded07a2dccd5493696a3adce175f01e413423c6
[10/20] ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines
        commit: b3d6a07236ebf6e0111adb957d69bebccf4f0a19
[11/20] ASoC: Intel: sof_es8336: make gpio optional
        commit: 5a6cfba5553b4f315b3d12b423e56a7fb9e8e0be
[12/20] ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus search
        commit: 42302b205f03c74c0226bbc79dca48448dd11d48
[13/20] ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15 2021"
        commit: 1b5283483a782f6560999d8d5965b1874d104812
[14/20] ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP
        commit: 651c304df7f6e3fbb4779527efa3eb128ef91329
[15/20] ASoC: Intel: sof_es8336: log all quirks
        commit: 9c818d849192491a8799b1cb14ca0f7aead4fb09
[16/20] ASoC: Intel: sof_es8336: move comment to the right place
        commit: d94c11a9b0e8620d7cf0e6d8e60d685cdb24c475
[17/20] ASoC: Intel: sof_es8336: add support for JD inverted quirk
        commit: 8e5db49182415b8bfce3b5843fc87e49c83c02aa
[18/20] ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec
        commit: 70b519e5cade92bddf837bd3941f905b44232b05
[19/20] ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support
        commit: 6e13567d2fdf54ce00212cac7ecd5418648da749
[20/20] ASoC: Intel: bytcht_es8316: move comment to the right place
        commit: fe0596a006081bc963874d4f3d38cd0b1b5e46d4

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2022-03-10 11:38 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-08 19:25 [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 01/20] ASoC: soc-acpi: fix kernel-doc descriptor Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 02/20] ASoC: soc-acpi: add information on I2S/TDM link mask Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards Pierre-Louis Bossart
2022-03-09 16:49   ` Cezary Rojewski
2022-03-09 17:10     ` Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask Pierre-Louis Bossart
2022-03-09 10:03   ` Takashi Iwai
2022-03-09 17:01   ` Cezary Rojewski
2022-03-09 17:24     ` Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 05/20] ASoC: SOF: Intel: hda: report SSP link mask to machine driver Pierre-Louis Bossart
2022-03-09 16:59   ` Cezary Rojewski
2022-03-09 17:16     ` Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 06/20] ASoC: Intel: soc-acpi: quirk topology filename dynamically Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 07/20] ALSA: intel-dsp-config: add more ACPI HIDs for ES83x6 devices Pierre-Louis Bossart
2022-03-09 10:04   ` Takashi Iwai
2022-03-08 19:25 ` [PATCH 08/20] ASoC: Intel: soc-acpi: " Pierre-Louis Bossart
2022-03-08 19:25 ` [PATCH 09/20] ALSA: intel-dspconfig: add ES8336 support for CNL Pierre-Louis Bossart
2022-03-09 10:04   ` Takashi Iwai
2022-03-08 19:26 ` [PATCH 10/20] ASoC: Intel: soc-acpi: add ESSX8336 support on Cannon Lake machines Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 11/20] ASoC: Intel: sof_es8336: make gpio optional Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 12/20] ASoC: Intel: sof_es8336: get codec device with ACPI instead of bus search Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 13/20] ASoC: Intel: Revert "ASoC: Intel: sof_es8336: add quirk for Huawei D15 2021" Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 14/20] ASoC: Intel: sof_es8336: use NHLT information to set dmic and SSP Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 15/20] ASoC: Intel: sof_es8336: log all quirks Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 16/20] ASoC: Intel: sof_es8336: move comment to the right place Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 17/20] ASoC: Intel: sof_es8336: add support for JD inverted quirk Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 18/20] ASoC: Intel: sof_es8336: extend machine driver to support ES8326 codec Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 19/20] ASoC: Intel: sof_es8336: add cfg-dmics component for UCM support Pierre-Louis Bossart
2022-03-08 19:26 ` [PATCH 20/20] ASoC: Intel: bytcht_es8316: move comment to the right place Pierre-Louis Bossart
2022-03-10 11:35 ` [PATCH 00/20] ALSA/ASoC/SOF/Intel: improve support for ES8336-based platforms Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.