1511ed5fdSRajeshwari Shinde /* 2511ed5fdSRajeshwari Shinde * Copyright (C) 2012 Samsung Electronics 3511ed5fdSRajeshwari Shinde * R. Chandrasekar <rcsekar@samsung.com> 4511ed5fdSRajeshwari Shinde * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6511ed5fdSRajeshwari Shinde */ 7511ed5fdSRajeshwari Shinde 8511ed5fdSRajeshwari Shinde #include <common.h> 9511ed5fdSRajeshwari Shinde #include <sound.h> 10511ed5fdSRajeshwari Shinde sound_create_square_wave(unsigned short * data,int size,uint32_t freq)11*a77bf709SSimon Glassvoid sound_create_square_wave(unsigned short *data, int size, uint32_t freq) 12511ed5fdSRajeshwari Shinde { 13511ed5fdSRajeshwari Shinde const int sample = 48000; 14511ed5fdSRajeshwari Shinde const unsigned short amplitude = 16000; /* between 1 and 32767 */ 15511ed5fdSRajeshwari Shinde const int period = freq ? sample / freq : 0; 16511ed5fdSRajeshwari Shinde const int half = period / 2; 17511ed5fdSRajeshwari Shinde 18511ed5fdSRajeshwari Shinde assert(freq); 19511ed5fdSRajeshwari Shinde 20511ed5fdSRajeshwari Shinde /* Make sure we don't overflow our buffer */ 21511ed5fdSRajeshwari Shinde if (size % 2) 22511ed5fdSRajeshwari Shinde size--; 23511ed5fdSRajeshwari Shinde 24511ed5fdSRajeshwari Shinde while (size) { 25511ed5fdSRajeshwari Shinde int i; 26511ed5fdSRajeshwari Shinde for (i = 0; size && i < half; i++) { 27511ed5fdSRajeshwari Shinde size -= 2; 28511ed5fdSRajeshwari Shinde *data++ = amplitude; 29511ed5fdSRajeshwari Shinde *data++ = amplitude; 30511ed5fdSRajeshwari Shinde } 31511ed5fdSRajeshwari Shinde for (i = 0; size && i < period - half; i++) { 32511ed5fdSRajeshwari Shinde size -= 2; 33511ed5fdSRajeshwari Shinde *data++ = -amplitude; 34511ed5fdSRajeshwari Shinde *data++ = -amplitude; 35511ed5fdSRajeshwari Shinde } 36511ed5fdSRajeshwari Shinde } 37511ed5fdSRajeshwari Shinde } 38