183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 2511ed5fdSRajeshwari Shinde /* 3511ed5fdSRajeshwari Shinde * Copyright (C) 2012 Samsung Electronics 4511ed5fdSRajeshwari Shinde * R. Chandrasekar < rcsekar@samsung.com> 5511ed5fdSRajeshwari Shinde */ 6511ed5fdSRajeshwari Shinde 7511ed5fdSRajeshwari Shinde #ifndef __SOUND_H__ 8511ed5fdSRajeshwari Shinde #define __SOUND_H__ 9511ed5fdSRajeshwari Shinde 10511ed5fdSRajeshwari Shinde /* sound codec enum */ 11511ed5fdSRajeshwari Shinde enum sound_compat { 12511ed5fdSRajeshwari Shinde AUDIO_COMPAT_SPI, 13511ed5fdSRajeshwari Shinde AUDIO_COMPAT_I2C, 14511ed5fdSRajeshwari Shinde }; 15511ed5fdSRajeshwari Shinde 16511ed5fdSRajeshwari Shinde /* Codec information structure to store the info from device tree */ 17511ed5fdSRajeshwari Shinde struct sound_codec_info { 18511ed5fdSRajeshwari Shinde int i2c_bus; 19511ed5fdSRajeshwari Shinde int i2c_dev_addr; 20511ed5fdSRajeshwari Shinde }; 21511ed5fdSRajeshwari Shinde 22d4901898SSimon Glass /** 23d4901898SSimon Glass * struct sound_uc_priv - private uclass information about each sound device 24d4901898SSimon Glass * 25d4901898SSimon Glass * This is used to line the codec and i2s together 26d4901898SSimon Glass * 27d4901898SSimon Glass * @codec: Codec that is used for this sound device 28d4901898SSimon Glass * @i2s: I2S bus that is used for this sound device 29d4901898SSimon Glass * @setup_done: true if setup() has been called 30d4901898SSimon Glass */ 31d4901898SSimon Glass struct sound_uc_priv { 32d4901898SSimon Glass struct udevice *codec; 33d4901898SSimon Glass struct udevice *i2s; 34d4901898SSimon Glass int setup_done; 35d4901898SSimon Glass }; 36d4901898SSimon Glass 37d4901898SSimon Glass /** 38a77bf709SSimon Glass * Generates square wave sound data for 1 second 39a77bf709SSimon Glass * 40f987177dSSimon Glass * @sample_rate: Sample rate in Hz 41f987177dSSimon Glass * @data: data buffer pointer 42f987177dSSimon Glass * @size: size of the buffer in bytes 43f987177dSSimon Glass * @freq: frequency of the wave 44f987177dSSimon Glass * @channels: Number of channels to use 45a77bf709SSimon Glass */ 467d92b060SSimon Glass void sound_create_square_wave(uint sample_rate, unsigned short *data, int size, 47f987177dSSimon Glass uint freq, uint channels); 48a77bf709SSimon Glass 49a77bf709SSimon Glass /* 50d4901898SSimon Glass * The sound uclass brings together a data transport (currently only I2C) and a 51d4901898SSimon Glass * codec (currently connected over I2C). 52d4901898SSimon Glass */ 53d4901898SSimon Glass 54d4901898SSimon Glass /* Operations for sound */ 55d4901898SSimon Glass struct sound_ops { 56d4901898SSimon Glass /** 57e65f9ef9SSimon Glass * setup() - Set up to play a sound (optional) 58d4901898SSimon Glass */ 59d4901898SSimon Glass int (*setup)(struct udevice *dev); 60d4901898SSimon Glass 61d4901898SSimon Glass /** 62d4901898SSimon Glass * play() - Play a beep 63d4901898SSimon Glass * 64d4901898SSimon Glass * @dev: Sound device 65d4901898SSimon Glass * @data: Data buffer to play 66d4901898SSimon Glass * @data_size: Size of data buffer in bytes 67d4901898SSimon Glass * @return 0 if OK, -ve on error 68d4901898SSimon Glass */ 69d4901898SSimon Glass int (*play)(struct udevice *dev, void *data, uint data_size); 70*28502669SSimon Glass 71*28502669SSimon Glass /** 72*28502669SSimon Glass * start_beep() - Start beeping (optional) 73*28502669SSimon Glass * 74*28502669SSimon Glass * This tells the sound hardware to start a beep. It will continue until 75*28502669SSimon Glass * stopped by sound_stop_beep(). 76*28502669SSimon Glass * 77*28502669SSimon Glass * @dev: Sound device 78*28502669SSimon Glass * @frequency_hz: Beep frequency in hertz 79*28502669SSimon Glass * @return if OK, -ENOSYS if not supported, -ve on error 80*28502669SSimon Glass */ 81*28502669SSimon Glass int (*start_beep)(struct udevice *dev, int frequency_hz); 82*28502669SSimon Glass 83*28502669SSimon Glass /** 84*28502669SSimon Glass * stop_beep() - Stop beeping (optional) 85*28502669SSimon Glass * 86*28502669SSimon Glass * This tells the sound hardware to stop a previously started beep. 87*28502669SSimon Glass * 88*28502669SSimon Glass * @dev: Sound device 89*28502669SSimon Glass * @return if OK, -ve on error 90*28502669SSimon Glass */ 91*28502669SSimon Glass int (*stop_beep)(struct udevice *dev); 92d4901898SSimon Glass }; 93d4901898SSimon Glass 94d4901898SSimon Glass #define sound_get_ops(dev) ((struct sound_ops *)(dev)->driver->ops) 95d4901898SSimon Glass 96d4901898SSimon Glass /** 97d4901898SSimon Glass * setup() - Set up to play a sound 98d4901898SSimon Glass */ 99d4901898SSimon Glass int sound_setup(struct udevice *dev); 100d4901898SSimon Glass 101d4901898SSimon Glass /** 102d4901898SSimon Glass * play() - Play a beep 103d4901898SSimon Glass * 104d4901898SSimon Glass * @dev: Sound device 105d4901898SSimon Glass * @msecs: Duration of beep in milliseconds 106d4901898SSimon Glass * @frequency_hz: Frequency of the beep in Hertz 107d4901898SSimon Glass * @return 0 if OK, -ve on error 108d4901898SSimon Glass */ 109d4901898SSimon Glass int sound_beep(struct udevice *dev, int msecs, int frequency_hz); 110d4901898SSimon Glass 111d4901898SSimon Glass /** 112*28502669SSimon Glass * sound_start_beep() - Start beeping 113*28502669SSimon Glass * 114*28502669SSimon Glass * This tells the sound hardware to start a beep. It will continue until stopped 115*28502669SSimon Glass * by sound_stop_beep(). 116*28502669SSimon Glass * 117*28502669SSimon Glass * @dev: Sound device 118*28502669SSimon Glass * @frequency_hz: Beep frequency in hertz 119*28502669SSimon Glass * @return if OK, -ve on error 120*28502669SSimon Glass */ 121*28502669SSimon Glass int sound_start_beep(struct udevice *dev, int frequency_hz); 122*28502669SSimon Glass 123*28502669SSimon Glass /** 124*28502669SSimon Glass * sound_stop_beep() - Stop beeping 125*28502669SSimon Glass * 126*28502669SSimon Glass * This tells the sound hardware to stop a previously started beep. 127*28502669SSimon Glass * 128*28502669SSimon Glass * @dev: Sound device 129*28502669SSimon Glass * @return if OK, -ve on error 130*28502669SSimon Glass */ 131*28502669SSimon Glass int sound_stop_beep(struct udevice *dev); 132*28502669SSimon Glass 133*28502669SSimon Glass /** 134d4901898SSimon Glass * sound_find_codec_i2s() - Called by sound drivers to locate codec and i2s 135d4901898SSimon Glass * 136d4901898SSimon Glass * This finds the audio codec and i2s devices and puts them in the uclass's 137d4901898SSimon Glass * private data for this device. 138d4901898SSimon Glass */ 139d4901898SSimon Glass int sound_find_codec_i2s(struct udevice *dev); 140d4901898SSimon Glass 141511ed5fdSRajeshwari Shinde #endif /* __SOUND__H__ */ 142