projects
/
platform
/
kernel
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
arch: m68k: Use existing CONFIG_MCFTMR instead of CFG_MCFTMR
[platform/kernel/u-boot.git]
/
drivers
/
sound
/
sound-uclass.c
diff --git
a/drivers/sound/sound-uclass.c
b/drivers/sound/sound-uclass.c
index
d49f29b
..
2ffc4fc
100644
(file)
--- a/
drivers/sound/sound-uclass.c
+++ b/
drivers/sound/sound-uclass.c
@@
-4,10
+4,15
@@
* Written by Simon Glass <sjg@chromium.org>
*/
* Written by Simon Glass <sjg@chromium.org>
*/
+#define LOG_CATEGORY UCLASS_SOUND
+
#include <common.h>
#include <dm.h>
#include <i2s.h>
#include <common.h>
#include <dm.h>
#include <i2s.h>
+#include <log.h>
+#include <malloc.h>
#include <sound.h>
#include <sound.h>
+#include <linux/delay.h>
#define SOUND_BITS_IN_BYTE 8
#define SOUND_BITS_IN_BYTE 8
@@
-31,6
+36,16
@@
int sound_play(struct udevice *dev, void *data, uint data_size)
return ops->play(dev, data, data_size);
}
return ops->play(dev, data, data_size);
}
+int sound_stop_play(struct udevice *dev)
+{
+ struct sound_ops *ops = sound_get_ops(dev);
+
+ if (!ops->play)
+ return -ENOSYS;
+
+ return ops->stop_play(dev);
+}
+
int sound_start_beep(struct udevice *dev, int frequency_hz)
{
struct sound_ops *ops = sound_get_ops(dev);
int sound_start_beep(struct udevice *dev, int frequency_hz)
{
struct sound_ops *ops = sound_get_ops(dev);
@@
-87,16
+102,20
@@
int sound_beep(struct udevice *dev, int msecs, int frequency_hz)
sound_create_square_wave(i2s_uc_priv->samplingrate, data, data_size,
frequency_hz, i2s_uc_priv->channels);
sound_create_square_wave(i2s_uc_priv->samplingrate, data, data_size,
frequency_hz, i2s_uc_priv->channels);
+ ret = 0;
while (msecs >= 1000) {
ret = sound_play(dev, data, data_size);
while (msecs >= 1000) {
ret = sound_play(dev, data, data_size);
+ if (ret)
+ break;
msecs -= 1000;
}
msecs -= 1000;
}
- if (msecs) {
+ if (
!ret &&
msecs) {
unsigned long size =
(data_size * msecs) / (sizeof(int) * 1000);
ret = sound_play(dev, data, size);
}
unsigned long size =
(data_size * msecs) / (sizeof(int) * 1000);
ret = sound_play(dev, data, size);
}
+ sound_stop_play(dev);
free(data);
free(data);
@@
-155,5
+174,5
@@
int sound_find_codec_i2s(struct udevice *dev)
UCLASS_DRIVER(sound) = {
.id = UCLASS_SOUND,
.name = "sound",
UCLASS_DRIVER(sound) = {
.id = UCLASS_SOUND,
.name = "sound",
- .per_device_auto
_alloc_size
= sizeof(struct sound_uc_priv),
+ .per_device_auto
= sizeof(struct sound_uc_priv),
};
};