sound: Add a new stop_play() method

At present there is no positive indication that U-Boot has finished
sending sound data. This means that it is not possible to power down an
audio codec, for example. Add a new method that is called once all sound
data has been sent.

Add a new method for this, called when the sound_play() call is done.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/sound/sandbox.c b/drivers/sound/sandbox.c
index 363c687..9034a83 100644
--- a/drivers/sound/sandbox.c
+++ b/drivers/sound/sandbox.c
@@ -26,7 +26,8 @@
 };
 
 struct sandbox_sound_priv {
-	int setup_called;
+	int setup_called;	/* Incremented when setup() method is called */
+	bool active;		/* TX data is being sent */
 	int sum;		/* Use to sum the provided audio data */
 	bool allow_beep;	/* true to allow the start_beep() interface */
 	int frequency_hz;	/* Beep frequency if active, else 0 */
@@ -59,6 +60,13 @@
 	return priv->setup_called;
 }
 
+int sandbox_get_sound_active(struct udevice *dev)
+{
+	struct sandbox_sound_priv *priv = dev_get_priv(dev);
+
+	return priv->active;
+}
+
 int sandbox_get_sound_sum(struct udevice *dev)
 {
 	struct sandbox_sound_priv *priv = dev_get_priv(dev);
@@ -163,6 +171,16 @@
 	return i2s_tx_data(uc_priv->i2s, data, data_size);
 }
 
+static int sandbox_sound_stop_play(struct udevice *dev)
+{
+	struct sandbox_sound_priv *priv = dev_get_priv(dev);
+
+	sandbox_sdl_sound_stop();
+	priv->active = false;
+
+	return 0;
+}
+
 int sandbox_sound_start_beep(struct udevice *dev, int frequency_hz)
 {
 	struct sandbox_sound_priv *priv = dev_get_priv(dev);
@@ -228,6 +246,7 @@
 static const struct sound_ops sandbox_sound_ops = {
 	.setup		= sandbox_sound_setup,
 	.play		= sandbox_sound_play,
+	.stop_play	= sandbox_sound_stop_play,
 	.start_beep	= sandbox_sound_start_beep,
 	.stop_beep	= sandbox_sound_stop_beep,
 };