API_Audio.h 4.97 KB
/******************************************************************************
 *
 * Copyright (C) 2016-2017 Cadence Design Systems, Inc.
 * All rights reserved worldwide.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation and/or
 * other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its contributors
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * Copyright 2017 NXP
 *
 ******************************************************************************
 *
 * API_Audio.h
 *
 ******************************************************************************
 */

#ifndef API_AUDIO_H_
#define API_AUDIO_H_

#include "API_General.h"
/**
 * \addtogroup AUDIO_API
 * \{
 */
typedef enum {
	AUDIO_TYPE_I2S,
	AUDIO_TYPE_SPIDIF_INTERNAL,
	AUDIO_TYPE_SPIDIF_EXTERNAL,
} AUDIO_TYPE;

typedef enum {
	AUDIO_FREQ_32,
	AUDIO_FREQ_48,
	AUDIO_FREQ_96,
	AUDIO_FREQ_192,
	AUDIO_FREQ_44_1,
	AUDIO_FREQ_88_2,
	AUDIO_FREQ_176_4,
} AUDIO_FREQ;

typedef enum {
	AUDIO_WIDTH_16,
	AUDIO_WIDTH_24,
	AUDIO_WIDTH_32,
} AUDIO_WIDTH;

typedef enum {
	AUDIO_MODE_OFF,
	AUDIO_MODE_ON
} AUDIO_MODE;

typedef enum {
	AUDIO_MUTE_MODE_MUTE,
	AUDIO_MUTE_MODE_UNMUTE
} AUDIO_MUTE_MODE;

/**
 * \brief mute or unmute audio
 */
CDN_API_STATUS CDN_API_AudioMute(state_struct *state, AUDIO_MUTE_MODE mode);

/**
 * \brief blocking version of #CDN_API_AudioMute
 */
CDN_API_STATUS CDN_API_AudioMute_blocking(state_struct *state,
					  AUDIO_MUTE_MODE mode);

/**
 * \brief start playing audio with the input parameters
    ncts and mode are relevant only in HDMI TX mode , not relevant for DPTX mode
 */
CDN_API_STATUS CDN_API_AudioAutoConfig(state_struct *state,
				       AUDIO_TYPE audioType, int numOfChannels,
				       AUDIO_FREQ freq, int lanes,
				       AUDIO_WIDTH width,
				       CDN_PROTOCOL_TYPE protocol, int ncts,
				       AUDIO_MUTE_MODE mode);

/**
 * \brief blocking version of #CDN_API_AudioAutoConfig
 */
CDN_API_STATUS CDN_API_AudioAutoConfig_blocking(state_struct *state,
						AUDIO_TYPE audioType,
						int numOfChannels,
						AUDIO_FREQ freq, int lanes,
						AUDIO_WIDTH width,
						CDN_PROTOCOL_TYPE protocol,
						int ncts, AUDIO_MUTE_MODE mode);

/**
 * \brief audio off (use it to stop current audio and start new one using CDN_API_AudioAutoConfig)
 */
CDN_API_STATUS CDN_API_AudioOff(state_struct *state, AUDIO_TYPE audioType);

/**
 * \brief blocking version of #CDN_API_AudioOff
 */
CDN_API_STATUS CDN_API_AudioOff_blocking(state_struct *state,
					 AUDIO_TYPE audioType);

/**
 * \brief internal function to set audio on or off inside internal registers
 */
CDN_API_STATUS CDN_API_AudioMode(state_struct *state, AUDIO_MODE mode);

/**
 * \brief blocking version of #CDN_API_AudioMode
 */
CDN_API_STATUS CDN_API_AudioMode_blocking(state_struct *state,
					  AUDIO_MODE mode);

/**
 * \brief internal function to set audio core registers
 */
CDN_API_STATUS CDN_API_AudioConfigCore(state_struct *state,
				       AUDIO_TYPE audioType, int numOfChannels,
				       AUDIO_FREQ freq, int lanes,
				       AUDIO_WIDTH width);

/**
 * \brief blocking version of #CDN_API_AudioConfigCore
 */
CDN_API_STATUS CDN_API_AudioConfigCore_blocking(state_struct *state,
						AUDIO_TYPE audioType,
						int numOfChannels,
						AUDIO_FREQ freq, int lanes,
						AUDIO_WIDTH width);

#endif