* [PATCH] ASoC: es9356: add missing DAI rates and formats
@ 2026-10-08 9:03 Zachary Huang
0 siblings, 0 replies; only message in thread
From: Zachary Huang @ 2026-10-08 9:03 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood, Jaroslav Kysela, Takashi Iwai
Cc: linux-sound, Mario Limonciello, Vijendar Mukunda, zhangyi
The ES9356 DAI definitions only describe the channel count. Since
snd_soc_runtime_calc_hw() derives hw->rates and hw->formats by intersecting
the capabilities of the CPU and codec DAIs, an empty mask on the codec side
leaves the whole PCM with no usable configuration, and soc_hw_sanity_check()
fails every open with -EINVAL:
ASoC error (-22): es9356-sdp-aif1 <-> SDW0 Pin0 No matching rates
es9356_sdw_pcm_hw_params() already programs 16 kHz, 44.1 kHz, 48 kHz and
96 kHz, so advertise that set, plus the formats used by the other SDCA codecs.
Verified on a MECHREVO WUJIE 14SAH (AMD ACP6.3, ES9356 on SoundWire link 0):
with this change the PCMs open and speaker playback, headset playback,
internal DMIC capture and headset mic capture all work.
Link: https://lore.kernel.org/linux-sound/20261007193038.2473068-1-mario.limonciello@amd.com/
Link: https://bugzilla.kernel.org/show_bug.cgi?id=222092
Assisted-by: LLM
Signed-off-by: Zachary Huang <zuzhenhuang365@gmail.com>
---
Zachary writes:
This is the separate ES9356 codec change that Mario mentioned in the machine
entry patch linked above. Both changes are needed for audio on this board;
with both applied the internal speakers, the internal DMIC, the 3.5 mm jack
and desktop playback (PipeWire) all work.
Tested on: MECHREVO WUJIE 14SAH, AMD Ryzen 7 H 255, ACP6.3 (rev 63),
ES9356 as sdw:0:0:04b3:9356:01 on link 0, kernel 7.2.9 + the machine entry
patch above (localversion -es9356test). The corresponding alsa-ucm-conf
change (no ES9356 UCM profile exists yet, so PipeWire only exposes the jack
PCM) will be sent separately.
sound/soc/codecs/es9356.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/sound/soc/codecs/es9356.c b/sound/soc/codecs/es9356.c
index 80db0f2..b8b3ffc 100644
--- a/sound/soc/codecs/es9356.c
+++ b/sound/soc/codecs/es9356.c
@@ -26,6 +26,20 @@
#include <sound/sdca_asoc.h>
#include "es9356.h"
+/*
+ * The DAI stream capabilities were never filled in. snd_soc_runtime_calc_hw()
+ * intersects the capabilities of the CPU and codec DAIs to derive hw->rates
+ * and hw->formats, so an empty mask on the codec side leaves the PCM with no
+ * usable configuration and soc_hw_sanity_check() fails every open with -EINVAL
+ * ("No matching rates"). es9356_sdw_pcm_hw_params() already programs 16 kHz,
+ * 44.1 kHz, 48 kHz and 96 kHz, so advertise exactly that set, with the formats
+ * used by the other SDCA codecs in the tree.
+ */
+#define ES9356_RATES (SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_44100 | \
+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
+#define ES9356_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \
+ SNDRV_PCM_FMTBIT_S32_LE)
+
struct es9356_sdw_priv {
struct sdw_slave *slave;
struct device *dev;
@@ -617,6 +631,8 @@ static struct snd_soc_dai_driver es9356_sdw_dai[] = {
.id = ES9356_DMIC,
.capture = {
.stream_name = "DP1 Capture",
+ .rates = ES9356_RATES,
+ .formats = ES9356_FORMATS,
.channels_min = 1,
.channels_max = 2,
},
@@ -627,6 +643,8 @@ static struct snd_soc_dai_driver es9356_sdw_dai[] = {
.id = ES9356_JACK_IN,
.capture = {
.stream_name = "DP2 Capture",
+ .rates = ES9356_RATES,
+ .formats = ES9356_FORMATS,
.channels_min = 1,
.channels_max = 2,
},
@@ -637,6 +655,8 @@ static struct snd_soc_dai_driver es9356_sdw_dai[] = {
.id = ES9356_AMP,
.playback = {
.stream_name = "DP3 Playback",
+ .rates = ES9356_RATES,
+ .formats = ES9356_FORMATS,
.channels_min = 1,
.channels_max = 2,
},
@@ -647,6 +667,8 @@ static struct snd_soc_dai_driver es9356_sdw_dai[] = {
.id = ES9356_JACK_OUT,
.playback = {
.stream_name = "DP4 Playback",
+ .rates = ES9356_RATES,
+ .formats = ES9356_FORMATS,
.channels_min = 1,
.channels_max = 2,
},
--
2.53.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-08 9:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-08 9:03 [PATCH] ASoC: es9356: add missing DAI rates and formats Zachary Huang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox