1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2012 Samsung Electronics 3*4882a593Smuzhiyun * R. Chandrasekar < rcsekar@samsung.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __SOUND_H__ 9*4882a593Smuzhiyun #define __SOUND_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* sound codec enum */ 12*4882a593Smuzhiyun enum en_sound_codec { 13*4882a593Smuzhiyun CODEC_WM_8994, 14*4882a593Smuzhiyun CODEC_WM_8995, 15*4882a593Smuzhiyun CODEC_MAX_98095, 16*4882a593Smuzhiyun CODEC_MAX 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* sound codec enum */ 20*4882a593Smuzhiyun enum sound_compat { 21*4882a593Smuzhiyun AUDIO_COMPAT_SPI, 22*4882a593Smuzhiyun AUDIO_COMPAT_I2C, 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Codec information structure to store the info from device tree */ 26*4882a593Smuzhiyun struct sound_codec_info { 27*4882a593Smuzhiyun int i2c_bus; 28*4882a593Smuzhiyun int i2c_dev_addr; 29*4882a593Smuzhiyun enum en_sound_codec codec_type; 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* 33*4882a593Smuzhiyun * Generates square wave sound data for 1 second 34*4882a593Smuzhiyun * 35*4882a593Smuzhiyun * @param data data buffer pointer 36*4882a593Smuzhiyun * @param size size of the buffer 37*4882a593Smuzhiyun * @param freq frequency of the wave 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun void sound_create_square_wave(unsigned short *data, int size, uint32_t freq); 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* 42*4882a593Smuzhiyun * Initialises audio sub system 43*4882a593Smuzhiyun * @param blob Pointer of device tree node or NULL if none. 44*4882a593Smuzhiyun * @return int value 0 for success, -1 for error 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun int sound_init(const void *blob); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* 49*4882a593Smuzhiyun * plays the pcm data buffer in pcm_data.h through i2s1 to make the 50*4882a593Smuzhiyun * sine wave sound 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun * @return int 0 for success, -1 for error 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun int sound_play(uint32_t msec, uint32_t frequency); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct snd_soc_dai_ops { 57*4882a593Smuzhiyun int (*hw_params)(struct udevice *dev, unsigned int samplerate, 58*4882a593Smuzhiyun unsigned int fmt, unsigned int channels); 59*4882a593Smuzhiyun int (*startup)(struct udevice *dev); 60*4882a593Smuzhiyun int (*shutdown)(struct udevice *dev); 61*4882a593Smuzhiyun int (*transfer)(struct udevice *dev, unsigned int *data, 62*4882a593Smuzhiyun unsigned long data_size); 63*4882a593Smuzhiyun int (*set_sysclk)(struct udevice *dev, unsigned int freq); 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #endif /* __SOUND__H__ */ 67