gk7205v200-uboot/product/audio/ao/gk7205v200/aiao_hal.h
2025-08-07 17:13:54 +08:00

199 lines
6.5 KiB
C
Executable File

#ifndef __AIAO_HAL_H__
#define __AIAO_HAL_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
#include "audio_ao.h"
#define AIO_DATA_WIDTH_8BIT 0x0
#define AIO_DATA_WIDTH_16BIT 0x1
#define AIO_DATA_WIDTH_18BIT 0x2
#define AIO_DATA_WIDTH_20BIT 0x3
#define AIO_DATA_WIDTH_24BIT 0x4
#define AIO_DATA_WIDTH_32BIT 0x5
#define AIO_PCM_DATA_WIDTH_8BIT 0x0
#define AIO_PCM_DATA_WIDTH_16BIT 0x1
#define AIO_PCM_DATA_WIDTH_32BIT 0x2
#define AIO_PCM_DATA_WIDTH_64BIT 0x3
#define AIO_PCM_DATA_WIDTH_128BIT 0x4
#define AIO_CHN_NUM_2CHN 0x0
#define AIO_CHN_NUM_4CHN 0x1
#define AIO_CHN_NUM_8CHN 0x2
#define AIO_CHN_NUM_16CHN 0x3
#define AIO_ONE_FIFO_BITWIDTH 128
#define AIO_GET_BITCNT(enBitwidth) (8<<(enBitwidth))
#define AIO_TIME_DIFF_US(a, b) (((a.tv_sec) - (b.tv_sec))*1000000 + ((a.tv_usec) - (b.tv_usec)))
#define AIO_IS_PCM_MODE(mode) \
(AIO_MODE_PCM_SLAVE_STD == (mode) || AIO_MODE_PCM_SLAVE_NSTD == (mode) \
|| AIO_MODE_PCM_MASTER_STD == (mode) || AIO_MODE_PCM_MASTER_NSTD == (mode))
#define AIO_IS_I2S_MODE(mode) \
(AIO_MODE_I2S_MASTER == (mode) || AIO_MODE_I2S_SLAVE == (mode))
#define AIO_IS_MASTER_MODE(mode) \
(AIO_MODE_I2S_MASTER == (mode) || AIO_MODE_PCM_MASTER_STD == (mode) || AIO_MODE_PCM_MASTER_NSTD == (mode))
#define AIO_IS_SLAVE_MODE(mode) \
(AIO_MODE_I2S_SLAVE == (mode) || AIO_MODE_PCM_SLAVE_STD == (mode) || AIO_MODE_PCM_SLAVE_NSTD == (mode))
#define AIP0_INTMASK 1
#define AOP0_INTMASK 1
#define AOP1_INTMASK 1
#define AI_DEV_MAX_NUM 1
#define AO_DEV_MIN_NUM 0
#define AO_DEV_MAX_NUM 1
#define AIO_MAX_NUM 1
#define AIO_MAX_CHN_NUM 2
#define MAX_AUDIO_FRAME_NUM 50 /*max count of audio frame in Buffer */
#define MAX_AUDIO_POINT_BYTES 4 /*max bytes of one sample point(now 32bit max)*/
#define MAX_VOICE_POINT_NUM 480 /*max sample per frame for voice encode */
#define MAX_AUDIO_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/
#define MAX_AO_POINT_NUM 4096 /* from h3:support 4096 framelen*/
#define MIN_AUDIO_POINT_NUM 80 /*min sample per frame*/
#define MAX_AI_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/
/*max length of audio frame by bytes, one frame contain many sample point */
#define MAX_AUDIO_FRAME_LEN (MAX_AUDIO_POINT_BYTES*MAX_AO_POINT_NUM)
/* 1800M */
/*(MCLK0/AIO Clock Source Frequency) x 2^27*/
#define AIO_MCLK_48K_1800 0x000DFB24 /* 48k * 256 */
#define AIO_MCLK_441K_1800 0x000CD856 /* 44.1k * 256 */
#define AIO_MCLK_32K_1800 0x00095218 /* 32k * 256 */
typedef GK_S32 AUDIO_DEV;
typedef enum AIO_TYPE_E
{
AIO_TYPE_AI = 0,
AIO_TYPE_AO,
AIO_TYPE_BUTT
} AIO_TYPE_E;
typedef enum AIO_SOUND_MODE_E
{
AUDIO_SOUND_MODE_MONO =0,/*mono*/
AUDIO_SOUND_MODE_STEREO =1,/*stereo*/
AUDIO_SOUND_MODE_BUTT
} AUDIO_SOUND_MODE_E;
typedef enum AIO_MODE_E
{
AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */
AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */
AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */
AIO_MODE_PCM_SLAVE_NSTD, /* AIO PCM slave non-standard mode */
AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */
AIO_MODE_PCM_MASTER_NSTD, /* AIO PCM master non-standard mode */
AIO_MODE_BUTT
} AIO_MODE_E;
typedef enum AUDIO_BIT_WIDTH_E
{
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
AUDIO_BIT_WIDTH_24 = 2, /* 24bit width*/
AUDIO_BIT_WIDTH_BUTT,
} AUDIO_BIT_WIDTH_E;
typedef enum AUDIO_FADE_RATE_E
{
AUDIO_FADE_RATE_1 = 0,
AUDIO_FADE_RATE_2 = 1,
AUDIO_FADE_RATE_4 = 2,
AUDIO_FADE_RATE_8 = 3,
AUDIO_FADE_RATE_16 = 4,
AUDIO_FADE_RATE_32 = 5,
AUDIO_FADE_RATE_64 = 6,
AUDIO_FADE_RATE_128 = 7,
AUDIO_FADE_RATE_BUTT
} AUDIO_FADE_RATE_E;
typedef enum AUDIO_TRACK_MODE_E
{
AUDIO_TRACK_NORMAL = 0,
AUDIO_TRACK_BOTH_LEFT = 1,
AUDIO_TRACK_BOTH_RIGHT = 2,
AUDIO_TRACK_EXCHANGE = 3,
AUDIO_TRACK_MIX = 4,
AUDIO_TRACK_LEFT_MUTE = 5,
AUDIO_TRACK_RIGHT_MUTE = 6,
AUDIO_TRACK_BOTH_MUTE = 7,
AUDIO_TRACK_BUTT
} AUDIO_TRACK_MODE_E;
typedef struct AUDIO_FADE_S
{
GK_BOOL bFade;
AUDIO_FADE_RATE_E enFadeInRate;
AUDIO_FADE_RATE_E enFadeOutRate;
} AUDIO_FADE_S;
typedef struct AIO_ATTR_S
{
AUDIO_SAMPLE_RATE_E enSamplerate; /* sample rate */
AUDIO_BIT_WIDTH_E enBitwidth; /* bitwidth */
AIO_MODE_E enWorkmode; /* master or slave mode */
AUDIO_SOUND_MODE_E enSoundmode; /* momo or steror */
GK_U32 u32EXFlag; /* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit) */
GK_U32 u32FrmNum; /* frame num in buf[2,MAX_AUDIO_FRAME_NUM] */
GK_U32 u32PtNumPerFrm; /* point num per frame (80/160/240/320/480/1024/2048)
(ADPCM IMA should add 1 point, AMR only support 160) */
GK_U32 u32ChnCnt; /* channle number on FS, valid value:1/2/4/8 */
GK_U32 u32ClkSel; /* 0: AI and AO clock is separate
1: AI and AO clock is inseparate, AI use AO's clock
*/
} AIO_ATTR_S;
typedef struct AIO_STATE_S
{
GK_BOOL bInitialized; /*initialed flag*/
GK_BOOL bAiConfig;
GK_BOOL bAoConfig;
AIO_ATTR_S stAiAttr;
AIO_ATTR_S stAoAttr;
} AIO_STATE_S;
/*****************************************************************************
Description : AIO IP Driver API
*****************************************************************************/
GK_U32 AIO_HAL_ReadReg(GK_U32 u32Offset);
GK_VOID AIO_HAL_WriteReg(GK_U32 u32Offset, GK_U32 u32Value);
GK_VOID AOP_HAL_SetBufferAddr(GK_U32 u32ChnId, GK_U32 u32Value);
GK_VOID AOP_HAL_SetBufferSize(GK_U32 u32ChnId, GK_U32 u32Value);
GK_VOID AOP_HAL_SetBuffWptr(GK_U32 u32ChnId, GK_U32 u32Value);
GK_VOID AOP_HAL_SetBuffRptr(GK_U32 u32ChnId, GK_U32 u32Value);
GK_VOID AOP_HAL_SetTransSize(GK_U32 u32ChnId, GK_U32 u32Value);
GK_S32 AOP_HAL_SetDevAttr(GK_U32 u32ChnId, AIO_ATTR_S *pstAttr);
GK_S32 AOP_HAL_DevEnable(GK_U32 u32ChnId);
GK_VOID AOP_HAL_DevDisable(GK_U32 u32ChnId);
GK_S32 AOP_HAL_SetVolume(GK_U32 u32ChnId, GK_S32 s32VolumeDb);
int AIAO_ModInit(void);
void AIAO_ModExit(void);
GK_S32 AIAO_HAL_SysInit(GK_VOID);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif