diff options
Diffstat (limited to 'roms/u-boot/drivers/sound/sound.c')
-rw-r--r-- | roms/u-boot/drivers/sound/sound.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/roms/u-boot/drivers/sound/sound.c b/roms/u-boot/drivers/sound/sound.c new file mode 100644 index 000000000..b0eab2339 --- /dev/null +++ b/roms/u-boot/drivers/sound/sound.c @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2012 Samsung Electronics + * R. Chandrasekar <rcsekar@samsung.com> + */ + +#include <common.h> +#include <log.h> +#include <sound.h> + +void sound_create_square_wave(uint sample_rate, unsigned short *data, int size, + uint freq, uint channels) +{ + const unsigned short amplitude = 16000; /* between 1 and 32767 */ + const int period = freq ? sample_rate / freq : 0; + const int half = period / 2; + + assert(freq); + + /* Make sure we don't overflow our buffer */ + if (size % 2) + size--; + + while (size) { + int i, j; + + for (i = 0; size && i < half; i++) { + size -= 2; + for (j = 0; j < channels; j++) + *data++ = amplitude; + } + for (i = 0; size && i < period - half; i++) { + size -= 2; + for (j = 0; j < channels; j++) + *data++ = -amplitude; + } + } +} |