sound/soc/soc-utils-test.c | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+)
snd_soc_params_to_bclk() calculates the BCLK from only the information in
snd_pcm_hw_params. It is therefore a subset of the functionality of
snd_soc_tdm_params_to_bclk() so can use a subset of the test case table.
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
sound/soc/soc-utils-test.c | 46 ++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/sound/soc/soc-utils-test.c b/sound/soc/soc-utils-test.c
index 5ad8e23af49a..616d2c926dd1 100644
--- a/sound/soc/soc-utils-test.c
+++ b/sound/soc/soc-utils-test.c
@@ -170,8 +170,54 @@ static void test_tdm_params_to_bclk(struct kunit *test)
}
}
+static void test_snd_soc_params_to_bclk_one(struct kunit *test,
+ unsigned int rate, snd_pcm_format_t fmt,
+ unsigned int channels,
+ unsigned int expected_bclk)
+{
+ struct snd_pcm_hw_params params;
+ int got_bclk;
+
+ _snd_pcm_hw_params_any(¶ms);
+ snd_mask_none(hw_param_mask(¶ms, SNDRV_PCM_HW_PARAM_FORMAT));
+ hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_RATE)->min = rate;
+ hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_RATE)->max = rate;
+ hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_CHANNELS)->min = channels;
+ hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_CHANNELS)->max = channels;
+ params_set_format(¶ms, fmt);
+
+ got_bclk = snd_soc_params_to_bclk(¶ms);
+ pr_debug("%s: r=%u sb=%u ch=%u expected=%u got=%d\n",
+ __func__,
+ rate, params_width(¶ms), channels, expected_bclk, got_bclk);
+ KUNIT_ASSERT_EQ(test, expected_bclk, (unsigned int)got_bclk);
+}
+
+static void test_snd_soc_params_to_bclk(struct kunit *test)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(tdm_params_to_bclk_cases); ++i) {
+ /*
+ * snd_soc_params_to_bclk() is all the test cases where
+ * snd_pcm_hw_params values are not overridden.
+ */
+ if (tdm_params_to_bclk_cases[i].tdm_width |
+ tdm_params_to_bclk_cases[i].tdm_slots |
+ tdm_params_to_bclk_cases[i].slot_multiple)
+ continue;
+
+ test_snd_soc_params_to_bclk_one(test,
+ tdm_params_to_bclk_cases[i].rate,
+ tdm_params_to_bclk_cases[i].fmt,
+ tdm_params_to_bclk_cases[i].channels,
+ tdm_params_to_bclk_cases[i].bclk);
+ }
+}
+
static struct kunit_case soc_utils_test_cases[] = {
KUNIT_CASE(test_tdm_params_to_bclk),
+ KUNIT_CASE(test_snd_soc_params_to_bclk),
{}
};
--
2.30.2
On Wed, 17 Aug 2022 13:55:08 +0100, Richard Fitzgerald wrote:
> snd_soc_params_to_bclk() calculates the BCLK from only the information in
> snd_pcm_hw_params. It is therefore a subset of the functionality of
> snd_soc_tdm_params_to_bclk() so can use a subset of the test case table.
>
>
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/1] ASoC: soc-utils-test: Add test for snd_soc_params_to_bclk()
commit: e32e23a2b588424aec0c4c4435530f8022318b8f
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
© 2016 - 2026 Red Hat, Inc.