blob: 969408186fd8f1a2c0bf049a1fc5c113ed8c3df5 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +00002/*
3 * Copyright (C) 2012 Samsung Electronics
4 * R. Chandrasekar <rcsekar@samsung.com>
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +00005 */
6
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +00007#include <common.h>
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +00008#include <sound.h>
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +00009
Simon Glass59c021e2014-02-27 13:26:20 -070010void sound_create_square_wave(unsigned short *data, int size, uint32_t freq)
Rajeshwari Shinde836a66c2012-10-25 19:49:22 +000011{
12 const int sample = 48000;
13 const unsigned short amplitude = 16000; /* between 1 and 32767 */
14 const int period = freq ? sample / freq : 0;
15 const int half = period / 2;
16
17 assert(freq);
18
19 /* Make sure we don't overflow our buffer */
20 if (size % 2)
21 size--;
22
23 while (size) {
24 int i;
25 for (i = 0; size && i < half; i++) {
26 size -= 2;
27 *data++ = amplitude;
28 *data++ = amplitude;
29 }
30 for (i = 0; size && i < period - half; i++) {
31 size -= 2;
32 *data++ = -amplitude;
33 *data++ = -amplitude;
34 }
35 }
36}