sandbox: sound: Silence sound for testing
authorSimon Glass <sjg@chromium.org>
Sun, 17 Feb 2019 03:24:56 +0000 (20:24 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 20 Feb 2019 07:27:09 +0000 (15:27 +0800)
When testing the sound system we don't need the hear the beeps. The
testing works by checking the data that would be emitted. Add a
device-tree property to silence the sound, and enable it for testing.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/sandbox/dts/test.dts
drivers/sound/sandbox.c

index f014c561bc312caa676d7fdb32516c413be5515c..d4c708c79e8bf4bef815911885da5e5e1bd8c4d2 100644 (file)
        i2s: i2s {
                compatible = "sandbox,i2s";
                #sound-dai-cells = <1>;
+               sandbox,silent; /* Don't emit sounds while testing */
        };
 
        misc-test {
index 600523160f0dcb2ad1ed43ddbc52bad4938b2ee5..363c687bafd11d2ebcf16ba3dda3c69157352c35 100644 (file)
@@ -3,6 +3,8 @@
  * Copyright (c) 2013 Google, Inc
  */
 
+#define LOG_CATEGORY UCLASS_SOUND
+
 #include <common.h>
 #include <audio_codec.h>
 #include <dm.h>
@@ -20,6 +22,7 @@ struct sandbox_codec_priv {
 
 struct sandbox_i2s_priv {
        int sum;        /* Use to sum the provided audio data */
+       bool silent;    /* Sound is silent, don't use SDL */
 };
 
 struct sandbox_sound_priv {
@@ -101,12 +104,21 @@ static int sandbox_i2s_tx_data(struct udevice *dev, void *data,
        for (i = 0; i < data_size; i++)
                priv->sum += ((uint8_t *)data)[i];
 
-       return sandbox_sdl_sound_play(data, data_size);
+       if (!priv->silent) {
+               int ret;
+
+               ret = sandbox_sdl_sound_play(data, data_size);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
 }
 
 static int sandbox_i2s_probe(struct udevice *dev)
 {
        struct i2s_uc_priv *uc_priv = dev_get_uclass_priv(dev);
+       struct sandbox_i2s_priv *priv = dev_get_priv(dev);
 
        /* Use hard-coded values here */
        uc_priv->rfs = 256;
@@ -117,8 +129,15 @@ static int sandbox_i2s_probe(struct udevice *dev)
        uc_priv->channels = 2;
        uc_priv->id = 1;
 
-       /* Ignore any error here - we'll just have no sound */
-       sandbox_sdl_sound_init(uc_priv->samplingrate, uc_priv->channels);
+       priv->silent = dev_read_bool(dev, "sandbox,silent");
+
+       if (priv->silent) {
+               log_warning("Sound is silenced\n");
+       } else if (sandbox_sdl_sound_init(uc_priv->samplingrate,
+                                         uc_priv->channels)) {
+               /* Ignore any error here - we'll just have no sound */
+               priv->silent = true;
+       }
 
        return 0;
 }