]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: rockchip: rockchip_sai: Set slot width for non-TDM mode
authorAlexey Charkov <alchark@flipper.net>
Wed, 18 Mar 2026 14:50:25 +0000 (18:50 +0400)
committerMark Brown <broonie@kernel.org>
Wed, 25 Mar 2026 16:58:24 +0000 (16:58 +0000)
Currently the slot width in non-TDM mode is always kept at the POR value
of 32 bits, regardless of the sample width, which doesn't work well for
some codecs such as NAU8822.

Set the slot width according to the sample width in non-TDM mode, which
is what other CPU DAI drivers do.

Tested on the following RK3576 configurations:
- SAI2 + NAU8822 (codec as the clock master), custom board
- SAI1 + ES8388 (codec as the clock master), RK3576 EVB1
- SAI2 + RT5616 (SAI as the clock master), FriendlyElec NanoPi M5

NAU8822 didn't work prior to this patch but works after the patch. Other
two configurations work both before and after the patch.

Fixes: cc78d1eaabad ("ASoC: rockchip: add Serial Audio Interface (SAI) driver")
Signed-off-by: Alexey Charkov <alchark@flipper.net>
Tested-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Link: https://patch.msgid.link/20260318-sai-slot-width-v1-1-1f68186f71e3@flipper.net
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/rockchip/rockchip_sai.c

index 1bf614dbdf4d0fa7b1a9f491161c1633ee62c57c..ed393e5034a49d397d0b19c9a57d379ccd8f6b6e 100644 (file)
@@ -628,6 +628,10 @@ static int rockchip_sai_hw_params(struct snd_pcm_substream *substream,
 
        regmap_update_bits(sai->regmap, reg, SAI_XCR_VDW_MASK | SAI_XCR_CSR_MASK, val);
 
+       if (!sai->is_tdm)
+               regmap_update_bits(sai->regmap, reg, SAI_XCR_SBW_MASK,
+                                  SAI_XCR_SBW(params_physical_width(params)));
+
        regmap_read(sai->regmap, reg, &val);
 
        slot_width = SAI_XCR_SBW_V(val);