/******************************************************************************
 *
 * 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"
#include "vic_table.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
