[PATCH v2 6/7] sound: add CONFIG_SOUND_SINE symbol
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sun Dec 4 22:16:06 CET 2022
Provide a configuration symbol to allow the sound command play a sine wave
instead of a square wave.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
v2:
update documentation
---
doc/usage/cmd/sound.rst | 3 +++
drivers/sound/Kconfig | 6 ++++++
drivers/sound/sound-uclass.c | 10 ++++++++--
test/dm/sound.c | 20 ++++++++++++--------
4 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/doc/usage/cmd/sound.rst b/doc/usage/cmd/sound.rst
index d3fac243b1..aa988fa261 100644
--- a/doc/usage/cmd/sound.rst
+++ b/doc/usage/cmd/sound.rst
@@ -35,6 +35,9 @@ Configuration
The sound command is enabled by CONFIG_CMD_SOUND=y.
+By default a square wave is generated. With CONFIG_SOUND_SINE=y a sine wave is
+used instead.
+
Return value
------------
diff --git a/drivers/sound/Kconfig b/drivers/sound/Kconfig
index 0948d8caab..1005192fd4 100644
--- a/drivers/sound/Kconfig
+++ b/drivers/sound/Kconfig
@@ -12,6 +12,12 @@ config SOUND
audio codecs are called from the sound-i2s code. This could be
converted to driver model.
+config SOUND_SINE
+ bool "Generate sine wave"
+ help
+ When this setting is enabled playing a sound produces a sine
+ wave. If the settings is not enabled, a square wave is produced.
+
config I2S
bool "Enable I2S support"
depends on SOUND
diff --git a/drivers/sound/sound-uclass.c b/drivers/sound/sound-uclass.c
index 2ffc4fc7c1..637f6b11ab 100644
--- a/drivers/sound/sound-uclass.c
+++ b/drivers/sound/sound-uclass.c
@@ -99,8 +99,14 @@ int sound_beep(struct udevice *dev, int msecs, int frequency_hz)
return -ENOMEM;
}
- sound_create_square_wave(i2s_uc_priv->samplingrate, data, data_size,
- frequency_hz, i2s_uc_priv->channels);
+ if (CONFIG_IS_ENABLED(SOUND_SINE))
+ sound_create_sine_wave(i2s_uc_priv->samplingrate, data,
+ data_size, frequency_hz,
+ i2s_uc_priv->channels);
+ else
+ sound_create_square_wave(i2s_uc_priv->samplingrate, data,
+ data_size, frequency_hz,
+ i2s_uc_priv->channels);
ret = 0;
while (msecs >= 1000) {
diff --git a/test/dm/sound.c b/test/dm/sound.c
index 15d545ab5a..f16ea80157 100644
--- a/test/dm/sound.c
+++ b/test/dm/sound.c
@@ -17,6 +17,12 @@ static int dm_test_sound(struct unit_test_state *uts)
{
struct sound_uc_priv *uc_priv;
struct udevice *dev;
+ int expected;
+
+ if (CONFIG_IS_ENABLED(SOUND_SINE))
+ expected = 3494;
+ else
+ expected = 4560;
/* check probe success */
ut_assertok(uclass_first_device_err(UCLASS_SOUND, &dev));
@@ -24,24 +30,22 @@ static int dm_test_sound(struct unit_test_state *uts)
ut_asserteq_str("audio-codec", uc_priv->codec->name);
ut_asserteq_str("i2s", uc_priv->i2s->name);
ut_asserteq(0, sandbox_get_setup_called(dev));
-
ut_assertok(sound_beep(dev, 1, 100));
ut_asserteq(48, sandbox_get_sound_count(dev));
- ut_asserteq(4560, sandbox_get_sound_sum(dev));
+ ut_asserteq(expected, sandbox_get_sound_sum(dev));
ut_assertok(sound_beep(dev, 1, 100));
ut_asserteq(96, sandbox_get_sound_count(dev));
- ut_asserteq(9120, sandbox_get_sound_sum(dev));
+ expected *= 2;
+ ut_asserteq(expected, sandbox_get_sound_sum(dev));
ut_assertok(sound_beep(dev, 1, -100));
ut_asserteq(144, sandbox_get_sound_count(dev));
- ut_asserteq(9120, sandbox_get_sound_sum(dev));
+ ut_asserteq(expected, sandbox_get_sound_sum(dev));
ut_assertok(sound_beep(dev, 1, 0));
ut_asserteq(192, sandbox_get_sound_count(dev));
- ut_asserteq(9120, sandbox_get_sound_sum(dev));
+ ut_asserteq(expected, sandbox_get_sound_sum(dev));
ut_assertok(sound_beep(dev, 1, INT_MAX));
ut_asserteq(240, sandbox_get_sound_count(dev));
- ut_asserteq(9120, sandbox_get_sound_sum(dev));
- ut_asserteq(false, sandbox_get_sound_active(dev));
-
+ ut_asserteq(expected, sandbox_get_sound_sum(dev));
return 0;
}
DM_TEST(dm_test_sound, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
--
2.37.2
More information about the U-Boot
mailing list