X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=drivers%2Fsound%2Fsound-uclass.c;h=2ffc4fc7c1db7e76ec308c513c03f792563b4044;hb=35d48ea8c0543775bc9218e412553fd306b37de3;hp=d49f29bcd5b81cea57cf1c3673599050adea83b9;hpb=888f9aa5cac4227e540a5c91a744ac7bed386e70;p=platform%2Fkernel%2Fu-boot.git diff --git a/drivers/sound/sound-uclass.c b/drivers/sound/sound-uclass.c index d49f29b..2ffc4fc 100644 --- a/drivers/sound/sound-uclass.c +++ b/drivers/sound/sound-uclass.c @@ -4,10 +4,15 @@ * Written by Simon Glass */ +#define LOG_CATEGORY UCLASS_SOUND + #include #include #include +#include +#include #include +#include #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); } +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); @@ -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); + ret = 0; while (msecs >= 1000) { ret = sound_play(dev, data, data_size); + if (ret) + break; msecs -= 1000; } - if (msecs) { + if (!ret && msecs) { unsigned long size = (data_size * msecs) / (sizeof(int) * 1000); ret = sound_play(dev, data, size); } + sound_stop_play(dev); free(data); @@ -155,5 +174,5 @@ int sound_find_codec_i2s(struct udevice *dev) 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), };