nt9856x/BSP/linux-kernel/sound/soc/novatek/dai.h
2023-03-28 15:07:53 +08:00

878 lines
30 KiB
C
Executable File

/**
Digital Audio Interface(DAI) Controller global header
This file is the header file that define the API and data type
for DAI module
@file dai.h
@ingroup mIDrvAud_DAI
@note Nothing.
Copyright Novatek Microelectronics Corp. 2017. All rights reserved.
*/
#ifndef _DAI_H
#define _DAI_H
#ifdef __KERNEL__
#include <mach/nvt_type.h>
#elif defined(__FREERTOS)
#include "kwrap/type.h"
#endif
typedef void (*DRV_CB)(UINT32 event);
/**
@addtogroup mIDrvAud_DAI
*/
//@{
/**
Digital Audio interface(DAI) general configuration Selection.
This is used in dai_set_config() to specify which of the function is selected to assign new configuration.
*/
typedef enum {
DAI_CONFIG_ID_EXTCODEC_EN, ///< Enable/Disable External Codec. If external codec is disabled, the internal codec is enabled.
DAI_CONFIG_ID_ISRCB, ///< Assign ISR Callback event handler. Please use "DRV_CB" as callback prototype.
///< This is valid only if dai driver is opened.
DAI_CONFIG_ID_HDMI_TXEN, ///< Set DAI Transmit to HDMI Enable/Disable. If disabled, the HDMI audio would be forced MUTE.
DAI_CONFIG_ID_AVSYNC_EN, ///< Set Record AV Sync Function Enable.
DAI_CONFIG_ID_AVSYNC_SRC, ///< Set Record AV Sync Source from SIE or SIE2.
DAI_CONFIG_ID_CLKSRC, ///< Select Codec system clock source. Please use "DAI_CODESCK" as input parameter.
///< Only DAI_CODESCK_INT is valid for NT96680.
DAI_CONFIG_ID_SET_INTEN, ///< Set DAI controller interrupt enable. Please use "DAI_INTERRUPT" as bitwise input parameter.
DAI_CONFIG_ID_CLR_INTEN, ///< Clear DAI controller interrupt enable. Please use "DAI_INTERRUPT" as bitwise input parameter.
DAI_CONFIG_ID_CLR_INTSTS, ///< Clear DAI controller interrupt status. Please use "DAI_INTERRUPT" as bitwise input parameter.
DAI_CONFIG_ID_RX_SRC_SEL, ///< Select rx source from i2s or embedded codec. Please use "DAI_RX_SRC" as input parameter.
ENUM_DUMMY4WORD(DAI_CONFIG_ID)
} DAI_CONFIG_ID;
/**
DAI Interrupt
@note Used for dai_set_config(DAI_CONFIG_ID_SET_INTEN / DAI_CONFIG_ID_CLR_INTEN).
*/
typedef enum {
DAI_TX1DMADONE_INT = 0X00000001,///< DMA buffer done for Playback Channel 1 (TX1)
DAI_TX2DMADONE_INT = 0X00000002,///< DMA buffer done for Playback Channel 2 (TX2)
DAI_RX1DMADONE_INT = 0X00000004,///< DMA buffer done for Record Channel 1 (RX1)
DAI_RX2DMADONE_INT = 0X00000008,///< DMA buffer done for Record Channel 2 (RX2)
DAI_TX1DMALOAD_INT = 0x00000010,///< DMA start address loaded for Playback Channel 1 (TX1)
DAI_TX2DMALOAD_INT = 0x00000020,///< DMA start address loaded for Playback Channel 1 (TX1)
DAI_RXDMALOAD_INT = 0x00000040,///< DMA start address loaded for Record Channel (RX-1&2)
DAI_TX1STOP_INT = 0x00000100,///< DAI Playback Channel 1 stopped. (TX1)
DAI_TX2STOP_INT = 0x00000200,///< DAI Playback Channel 2 stopped. (TX2)
DAI_RXSTOP_INT = 0x00000400,///< DAI Record Channel stopped. (RX-1&2)
DAI_TX1BWERR_INT = 0x00001000,///< DAI Playback Channel 1 BandWidth Not enough.(TX1)
DAI_TX2BWERR_INT = 0x00002000,///< DAI Playback Channel 2 BandWidth Not enough.(TX2)
DAI_RX1BWERR_INT = 0x00004000,///< DAI Record Channel 1 BandWidth Not enough.(RX1)
DAI_RX2BWERR_INT = 0x00008000,///< DAI Record Channel 2 BandWidth Not enough.(RX2)
DAI_TX1TCHIT_INT = 0x00010000,///< Time Code Hit for Playback Channel 1.(TX1)
DAI_RXTCHIT_INT = 0x00040000,///< Time Code Hit for Record Channe.(RX-1&2)
DAI_RXTCLATCH_INT = 0x00100000,///< Time Code Latch for Record Channe.(RX-1&2)
#if defined(__FREERTOS) //wait rtos flag issue fixed can be removed.
DAI_TXLBDMADONE_INT = 0x00000080,///< DMA buffer done for Playback Loopback Channel(TXLB)
DAI_TXLBDMALOAD_INT = 0x00000800,///< DMA start address loaded for Playback Loopback Channel(TXLB)
DAI_TXLBSTOP_INT = 0x00020000,///< DAI Playback Loopback Channel stopped. (TXLB)
DAI_TXLBBWERR_INT = 0x00080000,///< DAI Playback Loopback Channel BandWidth Not enough.(TXLB)
DAI_INTERRUPT_ALL = 0x001FFFFF,///< DAI All interrupt
DAI_INTERRUPT_TXLB_ALL = 0x000A0880,///< DAI TXLB All interrupt//0x000A0880
#else
DAI_TXLBDMADONE_INT = 0X01000000,///< DMA buffer done for Playback Loopback Channel(TXLB)
DAI_TXLBDMALOAD_INT = 0x02000000,///< DMA start address loaded for Playback Loopback Channel(TXLB)
DAI_TXLBSTOP_INT = 0x04000000,///< DAI Playback Loopback Channel stopped. (TXLB)
DAI_TXLBBWERR_INT = 0x08000000,///< DAI Playback Loopback Channel BandWidth Not enough.(TXLB)
DAI_INTERRUPT_ALL = 0x0F15F77F,///< DAI All interrupt
DAI_INTERRUPT_TXLB_ALL = 0x0F000000,///< DAI TXLB All interrupt
#endif
ENUM_DUMMY4WORD(DAI_INTEN)
} DAI_INTERRUPT;
/**
DAI system clock source
@note Used for dai_set_config(DAI_CONFIG_ID_CLKSRC).
*/
typedef enum {
DAI_CODESCK_INT, ///< internal clock
DAI_CODESCK_EXT, ///< external clock
ENUM_DUMMY4WORD(DAI_CODESCK)
} DAI_CODESCK;
/**
DAI Rx source select
@note Used for dai_setConfig(DAI_CONFIG_ID_RX_SRC_SEL).
*/
typedef enum {
DAI_RX_SRC_EMBEDDED, ///< record source from embedded codec
DAI_RX_SRC_I2S, ///< record source from i2s
ENUM_DUMMY4WORD(DAI_RX_SRC)
} DAI_RX_SRC;
/**
DAI Playback Channel Selection ID
@note Used for dai_set_tx_config() to select specified playback channel configuration.
*/
typedef enum {
DAI_TXCH_TX1, ///< DAI Playback Channel 1 (TX1) Select ID
DAI_TXCH_TX2, ///< DAI Playback Channel 2 (TX2) Select ID
ENUM_DUMMY4WORD(DAI_TXCH)
} DAI_TXCH;
/**
DAI playback configuration select
@note Used for dai_set_tx_config(DAI_TXCH) and dai_get_tx_config(DAI_TXCH).
*/
typedef enum {
DAI_TXCFG_ID_CHANNEL, ///< Configure playback channel as mono-left/right or stereo on the audio interface.
///< Please use "DAI_CH" as input parameter. DAI_CH_DUAL_MONO is not valid setting for playback.
DAI_TXCFG_ID_TOTAL_CH, ///< Configure Total Channel Number on interface. If embedded audio codec is selected, this field must be set to DAI_TOTCH_2CH.
///< Please use "DAI_TOTCH" as input parameter.
DAI_TXCFG_ID_PCMLEN, ///< Configure playback source PCM bit length. Please use "DAI_DRAMPCMLEN" as input parameter.
DAI_TXCFG_ID_DRAMCH, ///< Configure the playback source bitstream on the DRAM is stereo or mono audio data.
///< Please use "DAI_DRAMSOUNDFMT" as input parameter.
DAI_TXCFG_ID_TIMECODE_TRIG, ///< Configure Playback Time Code Trigger Value. This is valid only for DAI_TXCH_TX1.
///< This field is valid for the 32bits value.
DAI_TXCFG_ID_TIMECODE_OFS, ///< Configure Playback Time Code Offset Value. This is valid only for DAI_TXCH_TX1.
///< This field is valid for the 32bits value.
DAI_TXCFG_ID_TIMECODE_VAL, ///< Get Playback TimeCode value. This is valid only for dai_get_tx_config(DAI_TXCH_TX1,DAI_TXCFG_ID_TIMECODE_VAL).
ENUM_DUMMY4WORD(DAI_TXCFG_ID)
} DAI_TXCFG_ID;
/**
DAI playback loopback configuration select
@note Used for dai_set_txlb_config() and dai_get_txlb_config().
*/
typedef enum {
DAI_TXLBCFG_ID_CHANNEL = 0x1000, ///< Configure playback loopback channel as mono-left/right or stereo on the audio interface.
///< Please use "DAI_CH" as input parameter. DAI_CH_DUAL_MONO is not valid setting for playback loopback.
DAI_TXLBCFG_ID_TOTAL_CH, ///< Configure Total Channel Number on interface. If embedded audio codec is selected, this field must be set to DAI_TOTCH_2CH.
///< Please use "DAI_TOTCH" as input parameter.
DAI_TXLBCFG_ID_PCMLEN, ///< Configure playback loopback source PCM bit length. Please use "DAI_DRAMPCMLEN" as input parameter.
DAI_TXLBCFG_ID_DRAMCH, ///< Configure the playback loopback source bitstream on the DRAM is stereo or mono audio data.
///< Please use "DAI_DRAMSOUNDFMT" as input parameter.
DAI_TXLBCFG_ID_RXSYNC, ///< ENABLE/DISABLE the TXLB start operation sync to RX start.
ENUM_DUMMY4WORD(DAI_TXLBCFG_ID)
} DAI_TXLBCFG_ID;
/**
DAI record configuration select
@note Used for dai_set_rx_config() and dai_get_rx_config().
*/
typedef enum {
DAI_RXCFG_ID_CHANNEL = 0x2000, ///< Configure record channel as mono-left/right, dual-mono or stereo on the audio interface.
///< Please use "DAI_CH" as input parameter.
DAI_RXCFG_ID_TOTAL_CH, ///< Configure Total Channel Number on interface. If embedded audio codec is selected, this field must be set to DAI_TOTCH_2CH.
///< Please use "DAI_TOTCH" as input parameter.
DAI_RXCFG_ID_PCMLEN, ///< Configure recorded destination PCM bit length on DRAM. Please use "DAI_DRAMPCMLEN" as input parameter.
DAI_RXCFG_ID_DRAMCH, ///< Configure the recording destination bitstream on the DRAM is stereo or mono audio data.
///< Please use "DAI_DRAMSOUNDFMT" as input parameter.
DAI_RXCFG_ID_TIMECODE_TRIG, ///< Configure Record Channel Time Code Trigger Value. This field is valid for the 32bits value.
DAI_RXCFG_ID_TIMECODE_OFS, ///< Configure Record Time Code Offset Value. This field is valid for the 32bits value.
DAI_RXCFG_ID_TIMECODE_VAL, ///< Get Record TimeCode value. This is valid only for dai_get_tx_config(DAI_RXCFG_ID_TIMECODE_VAL).
ENUM_DUMMY4WORD(DAI_RXCFG_ID)
} DAI_RXCFG_ID;
/**
DAI Playback(TX)/Record(RX) channel
@note Used for dai_set_tx_config(DAI_TXCH, DAI_TXCFG_ID_CHANNEL) & dai_set_rx_config(DAI_RXCFG_ID_CHANNEL).
*/
typedef enum {
DAI_CH_DUAL_MONO, ///< Dual Mono Channels. This is valid only for Record.
DAI_CH_STEREO, ///< Stereo Chennels.
DAI_CH_MONO_LEFT, ///< Mono Left Channel
DAI_CH_MONO_RIGHT, ///< Mono Right Channel
ENUM_DUMMY4WORD(DAI_CH)
} DAI_CH;
/**
Total Audio Channels transceive on interface.
If embedded audio codec is selected, only DAI_TOTCH_2CH is valid. 4/6/8-CH are valid for I2S only.
@note Used for dai_set_tx_config(DAI_TXCH, DAI_TXCFG_ID_TOTAL_CH) & dai_set_rx_config(DAI_RXCFG_ID_TOTAL_CH).
*/
typedef enum {
DAI_TOTCH_2CH, ///< Total 2 Audio Channels on interface.
DAI_TOTCH_4CH, ///< Total 4 Audio Channels on interface. Valid only for I2S.
DAI_TOTCH_6CH, ///< Total 6 Audio Channels on interface. Valid only for I2S.
DAI_TOTCH_8CH, ///< Total 8 Audio Channels on interface. Valid only for I2S.
ENUM_DUMMY4WORD(DAI_TOTCH)
} DAI_TOTCH;
/**
DAI DRAM format
@note Used for dai_set_tx_config(DAI_TXCH, DAI_TXCFG_ID_DRAMCH) & dai_set_rx_config(DAI_TXCFG_ID_DRAMCH).
*/
typedef enum {
DAI_DRAMPCM_STEREO, ///< Stereo
DAI_DRAMPCM_MONO, ///< Mono
ENUM_DUMMY4WORD(DAI_DRAMSOUNDFMT)
} DAI_DRAMSOUNDFMT;
/**
DAI PCM length
@note Used for @note Used for dai_set_tx_config(DAI_TXCH, DAI_TXCFG_ID_PCMLEN) & dai_set_rx_config(DAI_RXCFG_ID_PCMLEN).
*/
typedef enum {
DAI_DRAMPCM_8, ///< 8bits
DAI_DRAMPCM_16, ///< 16bits
DAI_DRAMPCM_32, ///< 32bits. Valid only for I2S Only.
ENUM_DUMMY4WORD(DAI_DRAMPCMLEN)
} DAI_DRAMPCMLEN;
/**
DAI I2S interface general configuration Selection
This is used in dai_set_i2s_config() to specify which of the function is selected to assign new configuration.
*/
typedef enum {
DAI_I2SCONFIG_ID_CLKRATIO, ///< Select I2S clock ratio setting.
///< Please use "DAI_I2SCLKR" as input parameter. Available values are below:
///< \n DAI_I2SCLKR_256FS_32BIT: SystemClk = 256 FrameSync, FrameSync = 32 BitClk
///< \n DAI_I2SCLKR_256FS_64BIT: SystemClk = 256 FrameSync, FrameSync = 64 BitClk
///< \n DAI_I2SCLKR_256FS_128BIT: SystemClk = 256 FrameSync, FrameSync = 128 BitClk
///< \n DAI_I2SCLKR_256FS_256BIT: SystemClk = 256 FrameSync, FrameSync = 256 BitClk
DAI_I2SCONFIG_ID_FORMAT, ///< Configure I2S Format. Please use "DAI_I2SFMT" as input parameter.
///< Only DAI_I2SFMT_STANDARD is valid for NT96680.
DAI_I2SCONFIG_ID_OPMODE, ///< Configure I2S Operating mode as Master or Slave. Please use "DAI_OPMODE" as input parameter.
DAI_I2SCONFIG_ID_CHANNEL_LEN, ///< Configure I2S interface how many bit-clock cycles per audio channel.
///< Please use "DAI_I2SCHLEN" as input parameter.
DAI_I2SCONFIG_ID_HDMICH_SEL, ///< During I2S TDM 4/6/8 CH playback, this field select which two channels to HDMI audio.
///< Please use "DAI_I2SHDMI_SEL" as input parameters.
DAI_I2SCONFIG_ID_SLAVEMATCH, ///< Get I2S Slave Clock Ratio Setting is matched with the settings or not.
DAI_I2SCONFIG_ID_CURRENT_CLKRATIO, ///< Get I2S Slave Current Clock Ratio
DAI_I2SCONFIG_ID_CLK_INV, ///< Set 1/0 to ENABLE/DISABLE inverse I2S clk phase. default is disable.
DAI_I2SCONFIG_ID_DATA_ORDER, ///< Select the data order for TDM channel. Please use "DAI_I2S_DATAORDER" as input.
DAI_I2SCONFIG_ID_CLK_OFS, ///< Set the ASFCK (frame clk) offset, vlaid value 0x00~0xFE. default is 0x7f.
ENUM_DUMMY4WORD(DAI_I2SCONFIG_ID)
} DAI_I2SCONFIG_ID;
/**
DAI I2S data order select used.
This is used in dai_setI2sConfig(DAI_I2SCONFIG_ID_DATA_ORDER)
*/
typedef enum {
DAI_I2S_DATAORDER_TYPE1, ///< TDM data order type 1, Ex: TDM 8ch data, [ch 0][ch 2][ch 4][ch 6][ch 1][ch 3][ch 5][ch 7]
DAI_I2S_DATAORDER_TYPE2, ///< TDM data order type 2, Ex: TDM 8ch data, [ch 0][ch 1][ch 2][ch 3][ch 4][ch 5][ch 6][ch 7]
///< automatically set according to the (32 << DAI_I2SCONFIG_ID_CLKRATIO) / (16 << DAI_I2SCONFIG_ID_CHANNEL_LEN)
ENUM_DUMMY4WORD(DAI_I2S_DATAORDER)
} DAI_I2S_DATAORDER;
/**
HDMI Audio Channel Select when I2S TDM 4/6/8 CH.
This is used in dai_set_i2s_config(DAI_I2SCONFIG_ID_HDMICH_SEL)
*/
typedef enum {
DAI_I2SHDMI_SEL_CH01, ///< During I2S TDM 4/6/8CH playback, channel 0/1 are transmited to HDMI audio.
DAI_I2SHDMI_SEL_CH23, ///< During I2S TDM 4/6/8CH playback, channel 2/3 are transmited to HDMI audio.
DAI_I2SHDMI_SEL_CH45, ///< During I2S TDM 6/8CH playback, channel 4/5 are transmited to HDMI audio.
DAI_I2SHDMI_SEL_CH67, ///< During I2S TDM 8CH playback, channel 6/7 are transmited to HDMI audio.
ENUM_DUMMY4WORD(DAI_I2SHDMI_SEL)
} DAI_I2SHDMI_SEL;
/**
DAI I2S clock ratio
@note Used for dai_set_i2s_config(DAI_I2SCONFIG_ID_CLKRATIO).
*/
typedef enum {
DAI_I2SCLKR_256FS_32BIT, ///< SystemClk = 256 * FrameSync, FrameSync = 32 BitClk
DAI_I2SCLKR_256FS_64BIT, ///< SystemClk = 256 * FrameSync, FrameSync = 64 BitClk
DAI_I2SCLKR_256FS_128BIT, ///< SystemClk = 256 * FrameSync, FrameSync = 128 BitClk
DAI_I2SCLKR_256FS_256BIT, ///< SystemClk = 256 * FrameSync, FrameSync = 256 BitClk
DAI_I2SCLKR_384FS_32BIT, ///< SystemClk = 384 * FrameSync, FrameSync = 32 BitClk
DAI_I2SCLKR_384FS_48BIT, ///< SystemClk = 384 * FrameSync, FrameSync = 48 BitClk
DAI_I2SCLKR_384FS_96BIT, ///< SystemClk = 384 * FrameSync, FrameSync = 96 BitClk
DAI_I2SCLKR_512FS_32BIT, ///< SystemClk = 512 * FrameSync, FrameSync = 32 BitClk
DAI_I2SCLKR_512FS_64BIT, ///< SystemClk = 512 * FrameSync, FrameSync = 64 BitClk
DAI_I2SCLKR_512FS_128BIT, ///< SystemClk = 512 * FrameSync, FrameSync = 128 BitClk
DAI_I2SCLKR_768FS_32BIT, ///< SystemClk = 768 * FrameSync, FrameSync = 32 BitClk
DAI_I2SCLKR_768FS_48BIT, ///< SystemClk = 768 * FrameSync, FrameSync = 48 BitClk
DAI_I2SCLKR_768FS_64BIT, ///< SystemClk = 768 * FrameSync, FrameSync = 64 BitClk
DAI_I2SCLKR_768FS_192BIT, ///< SystemClk = 768 * FrameSync, FrameSync = 192 BitClk
DAI_I2SCLKR_1024FS_32BIT, ///< SystemClk = 1024 * FrameSync, FrameSync = 32 BitClk
DAI_I2SCLKR_1024FS_64BIT, ///< SystemClk = 1024 * FrameSync, FrameSync = 64 BitClk
DAI_I2SCLKR_1024FS_128BIT, ///< SystemClk = 1024 * FrameSync, FrameSync = 128 BitClk
DAI_I2SCLKR_1024FS_256BIT, ///< SystemClk = 1024 * FrameSync, FrameSync = 256 BitClk
ENUM_DUMMY4WORD(DAI_I2SCLKR)
} DAI_I2SCLKR;
/**
DAI I2S format
@note Use for dai_set_i2s_config(DAI_I2SCONFIG_ID_FORMAT)
*/
typedef enum {
DAI_I2SFMT_STANDARD, ///< I2S Standard
DAI_I2SFMT_DSP, ///< I2S DSP mode
DAI_I2SFMT_LIKE_MSB, ///< I2S Like, MSB justified
DAI_I2SFMT_LIKE_LSB, ///< I2S Like, LSB justified
ENUM_DUMMY4WORD(DAI_I2SFMT)
} DAI_I2SFMT;
/**
DAI I2S OP mode
@note Used for dai_set_i2s_config(DAI_I2SCONFIG_ID_OPMODE)
*/
typedef enum {
DAI_OP_SLAVE, ///< Slave mode
DAI_OP_MASTER, ///< Master mode
ENUM_DUMMY4WORD(DAI_OPMODE)
} DAI_OPMODE;
/**
DAI I2S Channel Length
@note Use for dai_set_i2s_config(DAI_I2SCONFIG_ID_CHANNEL_LEN)
*/
typedef enum {
DAI_I2SCHLEN_16BITS, ///< I2S interface is 16 bit-clocks per audio channel
DAI_I2SCHLEN_32BITS, ///< I2S interface is 32 bit-clocks per audio channel
ENUM_DUMMY4WORD(DAI_I2SCHLEN)
} DAI_I2SCHLEN;
/**
DAI AVSYNC Source Select
@note Use for dai_set_config(DAI_CONFIG_ID_AVSYNC_SRC)
*/
typedef enum {
DAI_AVSYNCSRC_SIE, ///< AVSYNC Source from SIE.
DAI_AVSYNCSRC_SIE2, ///< AVSYNC Source from SIE2.
DAI_AVSYNCSRC_SIE3, ///< AVSYNC Source from SIE3.
DAI_AVSYNCSRC_SIE4, ///< AVSYNC Source from SIE4.
DAI_AVSYNCSRC_SIE5, ///< AVSYNC Source from SIE5.
DAI_AVSYNCSRC_SIE6, ///< AVSYNC Source from SIE6.
DAI_AVSYNCSRC_SIE7, ///< AVSYNC Source from SIE7.
DAI_AVSYNCSRC_SIE8, ///< AVSYNC Source from SIE8.
ENUM_DUMMY4WORD(DAI_AVSYNCSRC)
} DAI_AVSYNCSRC;
//
// Export APIs in digital Audio interface
//
/**
Open digital audio controller driver.
Open digital auiod controller.
@param[in] pIsrHdl Callback function registered for interrupt notification.
@return void
*/
extern void dai_open(DRV_CB isr_hdl);
/**
Close digital audio controller driver.
Close digital auiod controller.
@return void
*/
extern void dai_close(void);
/**
Set Digital Audio interface(DAI) General Configurations.
Set Digital Audio interface(DAI) general configuration.
Use DAI_CONFIG_ID as configuration selection and config_value is the configuration parameter.
@param[in] config_id Configuration selection. Please refer to DAI_CONFIG_ID for details.
@param[in] config_value configuration parameter. Please refer to DAI_CONFIG_ID for details.
@return void
*/
extern void dai_set_config(DAI_CONFIG_ID config_id, UINT32 config_value);
/**
Get Digital Audio interface(DAI) General Configurations.
Get Digital Audio interface(DAI) general configuration.
Use DAI_CONFIG_ID as configuration selection and config_value is the configuration parameter.
@param[in] config_id Configuration selection. Please refer to DAI_CONFIG_ID for details.
@return void
*/
extern UINT32 dai_get_config(DAI_CONFIG_ID config_id);
/**
Set Digital Audio I2S interface configurations
Use DAI_I2SCONFIG_ID as configuration selection and config_value is the configuration parameter.
@param[in] config_id Configuration selection. Please refer to DAI_I2SCONFIG_ID for details.
@param[in] config_value configuration parameter. Please refer to DAI_I2SCONFIG_ID for details.
@return void
*/
extern void dai_set_i2s_config(DAI_I2SCONFIG_ID config_id, UINT32 config_value);
/**
Get Digital Audio I2S interface configurations
Use DAI_I2SCONFIG_ID as configuration selection and config_value is the configuration parameter.
@param[in] config_id Configuration selection. Please refer to DAI_I2SCONFIG_ID for details.
@return void
*/
extern UINT32 dai_get_i2s_config(DAI_I2SCONFIG_ID config_id);
/**
Set DAI Playback Chaneels Configurations.
Set DAI Playback Chaneels(TX1 and TX2) Configurations.
@param[in] channel playback Channel selection
@param[in] config_id playback config ID selection
@param[in] config_value configuration value
@return void
*/
extern void dai_set_tx_config(DAI_TXCH channel, DAI_TXCFG_ID config_id, UINT32 config_value);
/**
Get DAI Playback Chaneels Configurations.
Get DAI Playback Chaneels(TX1 and TX2) Configurations.
@param[in] channel playback Channel selection
@param[in] config_id playback config ID selection
@return configuration value
*/
extern UINT32 dai_get_tx_config(DAI_TXCH channel, DAI_TXCFG_ID config_id);
/**
Set DAI Playback Loopback Chaneel Configurations.
Set DAI Playback Loopback Chaneels(TXLB) Configurations.
@param[in] channel playback Loopback Channel selection
@param[in] config_id playback Loopback config ID selection
@param[in] config_value configuration value
@return void
*/
extern void dai_set_txlb_config(DAI_TXLBCFG_ID config_id, UINT32 config_value);
/**
Set DAI Playback Loopback Chaneel Configurations.
Set DAI Playback Loopback Chaneels(TXLB) Configurations.
@param[in] channel playback Loopback Channel selection
@param[in] config_id playback Loopback config ID selection
@param[in] config_value configuration value
@return void
*/
extern UINT32 dai_get_txlb_config(DAI_TXLBCFG_ID config_id);
/**
Set DAI Record Channels Configurations.
Set DAI Record Channels (RX1 & RX2) Configurations.
@param[in] config_id record config ID selection
@param[in] config_value configuration value
@return void
*/
extern void dai_set_rx_config(DAI_RXCFG_ID config_id, UINT32 config_value);
/**
Get DAI Record Channels Configurations.
Get DAI Record Channels (RX1 & RX2) Configurations.
@param[in] config_id record config ID selection
@return configuration value
*/
extern UINT32 dai_get_rx_config(DAI_RXCFG_ID config_id);
/**
Enable/Disable DAI playback DMA Channel
Enable/Disable DAI playback DMA Channel
@param[in] channel playback Channel selection
@param[in] en TRUE is Enable. FALSE is Disable.
@return void
*/
extern void dai_enable_tx_dma(DAI_TXCH channel, BOOL en);
/**
Enable/Disable DAI record DMA Channel
Enable/Disable DAI record DMA Channel
@param[in] en TRUE is Enable. FALSE is Disable.
@return void
*/
extern void dai_enable_rx_dma(BOOL en);
/**
Enable/Disable DAI playback loopback DMA Channel
Enable/Disable DAI playback loopback DMA Channel
@param[in] en TRUE is Enable. FALSE is Disable.
@return void
*/
extern void dai_enable_txlb_dma(BOOL en);
/**
Start/Stop DAI Playback
Start/Stop DAI Specified Channel Playback
@param[in] channel playback Channel selection
@param[in] en TRUE is Start. FALSE is Stop.
@return void
*/
extern void dai_enable_tx(DAI_TXCH channel, BOOL en);
/**
Start/Stop DAI Record
Start/Stop DAI Specified Channel Record
@param[in] en TRUE is Start. FALSE is Stop.
@return void
*/
extern void dai_enable_rx(BOOL en);
/**
Start/Stop DAI playback loopback
Start/Stop DAI Specified Channel Record
@param[in] en TRUE is Start. FALSE is Stop.
@return void
*/
extern void dai_enable_txlb(BOOL en);
/**
Set DAI module enable/disable
Set DAI module enable/disable
@param[in] en DAI module enable/disable
- @b TRUE: module enable
- @b FALSE: module disable
@return void
*/
extern void dai_enable_dai(BOOL en);
/**
Check whether DAI is enabled or not
If DAI is enabled this function will return TRUE.
@return
- @b TRUE: DAI is enabled
- @b FALSE: DAI is disabled
*/
extern BOOL dai_is_dai_enable(void);
/**
Check if DAI Playback Channel is enabled
Check if DAI Playback Channel is enabled
@param[in] channel playback Channel selection
@return
- @b TRUE: Specified Playback channel is enabled
- @b FALSE: Specified Playback channel is disabled
*/
extern BOOL dai_is_tx_enable(DAI_TXCH channel);
/**
Check if DAI record Channel is enabled
Check if DAI record Channel is enabled
@return
- @b TRUE: Record is enabled
- @b FALSE: Record is disabled
*/
extern BOOL dai_is_rx_enable(void);
/**
Check if DAI playback loopback Channel is enabled
Check if DAI playback loopback Channel is enabled
@return
- @b TRUE: playback loopback is enabled
- @b FALSE: playback loopback is disabled
*/
extern BOOL dai_is_txlb_enable(void);
/**
Check whether DAI is under tx/rx
If DAI is under tx/rx, this function will return TRUE.
@return
- @b TRUE: DAI is under tx/rx.
- @b FALSE: DAI is not under tx/rx.
*/
extern BOOL dai_is_txrx_enable(void);
/**
Check if playback DMA Channel is Enabled
Check if playback DMA Channel is Enabled
@param[in] channel playback Channel selection
@return
- @b TRUE: Specified Playback DMA channel is enabled
- @b FALSE: Specified Playback DMA channel is disabled
*/
extern BOOL dai_is_tx_dma_enable(DAI_TXCH channel);
/**
Check if Record DMA Channel is Enabled
Check if Record DMA Channel is Enabled
@return
- @b TRUE: Specified Record DMA channel is enabled
- @b FALSE: Specified Record DMA channel is disabled
*/
extern BOOL dai_is_rx_dma_enable(void);
/**
Check if Playback Loopback DMA Channel is Enabled
Check if Playback Loopback DMA Channel is Enabled
@return
- @b TRUE: Specified Playback Loopback DMA channel is enabled
- @b FALSE: Specified Playback Loopback DMA channel is disabled
*/
extern BOOL dai_is_txlb_dma_enable(void);
/**
Check whether Tx or Rx DMA is enabled or not
If Tx or Rx DMA is enabled this function will return TRUE.
@return
- @b TRUE: DMA is enabled
- @b FALSE: DMA is disabled
*/
extern BOOL dai_is_dma_enable(void);
/**
Set Playback DMA parameter
Set Playback DMA starting address, buffer size.
@param[in] channel Playback DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@param[in] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[in] buf_size DMA buffer size (unit: 16 words aligned)
@return void
*/
extern void dai_set_tx_dma_para(UINT32 channel, UINT32 buf_addr, UINT32 buf_size);
/**
Set Record DMA parameter
Set Record DMA starting address, buffer size.
@param[in] channel Record DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@param[in] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[in] buf_size DMA buffer size (unit: 16 words aligned)
@return void
*/
extern void dai_set_rx_dma_para(UINT32 channel, UINT32 buf_addr, UINT32 buf_size);
/**
Set Playback Loopback DMA parameter
Set Playback Loopback DMA starting address, buffer size.
@param[in] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[in] buf_size DMA buffer size (unit: 16 words aligned)
@return void
*/
extern void dai_set_txlb_dma_para(UINT32 buf_addr, UINT32 buf_size);
/**
Get Playback DMA parameter
Get Playback DMA starting address, buffer size.
@param[in] channel Playback DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@param[out] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[out] buf_size DMA buffer size (unit: word)
@return void
*/
extern void dai_get_tx_dma_para(UINT32 channel, UINT32 *p_buf_addr, UINT32 *p_buf_size);
/**
Get Record DMA parameter
Get Record DMA starting address, buffer size.
@param[in] channel Record DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@param[out] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[out] buf_size DMA buffer size (unit: word)
@return void
*/
extern void dai_get_rx_dma_para(UINT32 channel, UINT32 *p_buf_addr, UINT32 *p_buf_size);
/**
Get Playback Loopback DMA parameter
Get Playback Loopback DMA starting address, buffer size.
@param[in] buf_addr DMA start address. (unit: byte, should be word-alignment)
@param[in] buf_size DMA buffer size (unit: word)
@return void
*/
extern void dai_get_txlb_dma_para(UINT32 *p_buf_addr, UINT32 *p_buf_size);
/**
Get Playback DMA currrent address
Get Playback DMA currrent address
@param[in] channel Playback DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@return Playback DMA current address
*/
extern UINT32 dai_get_tx_dma_curaddr(UINT32 channel);
/**
Get Record DMA currrent address
Get Record DMA currrent address
@param[in] channel Record DMA Channel Selection. Valid value is 0 or 1 for NT96680.
@return Record DMA current address
*/
extern UINT32 dai_get_rx_dma_curaddr(UINT32 channel);
/**
Get Playback Loopback DMA currrent address
Get Playback Loopback DMA currrent address
@return Playback Loopback DMA current address
*/
extern UINT32 dai_get_txlb_dma_curaddr(void);
/**
Clear DAI flag
Clear DAI flag
@param[in] int_flag interrupt flags to clear.
@return void
*/
extern void dai_clr_flg(DAI_INTERRUPT int_flag);
/*
dai clk releated API
*/
extern void dai_enableclk(void);
extern void dai_disableclk(void);
extern void dai_setclkrate(unsigned long clkrate);
#if defined(__FREERTOS)
#else
extern void dai_isr(void);
#endif
//@}
#endif