878 lines
30 KiB
C
Executable File
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
|