blob: dd3f9db4f7547da4b45491eb44e8dd906062e504 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +00002/*
3 * Copyright (C) 2012 Samsung Electronics
4 * R. Chandrasekar <rcsekar@samsung.com>
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +00005 */
6
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +00007#include <common.h>
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +00008#include <sound.h>
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +00009
Simon Glass7d92b062018-11-15 19:56:13 -070010void sound_create_square_wave(uint sample_rate, unsigned short *data, int size,
Simon Glassf9871772018-12-10 10:37:51 -070011 uint freq, uint channels)
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000012{
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000013 const unsigned short amplitude = 16000; /* between 1 and 32767 */
Simon Glass7d92b062018-11-15 19:56:13 -070014 const int period = freq ? sample_rate / freq : 0;
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000015 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) {
Simon Glassf9871772018-12-10 10:37:51 -070024 int i, j;
25
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000026 for (i = 0; size && i < half; i++) {
27 size -= 2;
Simon Glassf9871772018-12-10 10:37:51 -070028 for (j = 0; j < channels; j++)
29 *data++ = amplitude;
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000030 }
31 for (i = 0; size && i < period - half; i++) {
32 size -= 2;
Simon Glassf9871772018-12-10 10:37:51 -070033 for (j = 0; j < channels; j++)
34 *data++ = -amplitude;
Rajeshwari Shinde511ed5f2012-10-25 19:49:22 +000035 }
36 }
37}