blob: 8e3d9e2d2142a8d4b7496f57b9024bb238e95bf6 [file] [log] [blame]
/***********************************************************************
* Copyright (C) 2016, ZTE Corporation.
*
* File Name: drvs_tdm.h
* File Mark:
* Description: TDM hal interface declaration.
* Others:
* Version: v1.0
* Author: daixunkang
* Date: 2018-02-26
*
* History 1:
* Date:
* Version:
* Author:
* Modification:
**********************************************************************/
#ifndef _HAL_TDM_H
#define _HAL_TDM_H
/*************************************************************************
* Include files *
*************************************************************************/
#include "drvs_general.h"
#include "drvs_io_voice.h"
#include "drvs_i2s.h"
/*************************************************************************
* Macro *
*************************************************************************/
/**************************************************************************
* Types *
**************************************************************************/
#define TDM_MOD_CLK_SEL *((volatile UINT32 *)(SOC_CRM_REG_BASE+0x50))
#define DMA_SEL_CFG *((volatile UINT32 *)(SOC_SYS_REG_BASE+0x120))
typedef enum
{
TDM_NORMAL_MODE,
TDM_LOOPBACK_MODE,
MAX_TDM_TEST_MODE
} T_ZDrvTdm_TestMode;
typedef enum
{
TDM_MSB_FIRST,
TDM_LSB_FIRST,
MAX_FIRSTBIT
} T_ZDrvTdm_FstBitSel;
typedef enum {
TDM_CLK_8000 = 0x00,
TDM_CLK_16000 = 0x01,
TDM_MAX_CLK
} T_ZDrvTdm_Clk;
typedef enum
{
TDM_1_SLOT = 0x00,
TDM_2_SLOT = 0x01,
TDM_3_SLOT = 0x02,
TDM_4_SLOT = 0x03,
TDM_5_SLOT = 0x04,
TDM_6_SLOT = 0x05,
TDM_7_SLOT = 0x06,
TDM_8_SLOT = 0x07,
TDM_9_SLOT = 0x08,
TDM_10_SLOT = 0x09,
TDM_16_SLOT = 0xa,
TDM_32_SLOT = 0xb,
TDM_64_SLOT = 0xc,
//TDM_128_SLOT = 0x7f,
MAX_TDM_SLOTNUM
} T_ZDrvTdm_SlotNum;
typedef enum
{
TDM_TS_8CYCLE = 0x0,
TDM_TS_16CYCLE = 0x1,
TDM_TS_32CYCLE = 0x2,
MAX_TDM_TS_WIDTH
} T_ZDrvTdm_TsWidth;
/*TDM track select*/
typedef enum
{
TDM_1TS_ENABLE = 0x00,
TDM_2TS_ENABLE = 0x01,
MAX_TDM_TS_ENABLE
} T_ZDrvTdm_TsEnable;
typedef enum
{
TDM_TX_1BIT_OFFSET = 0x01,
TDM_TX_2BIT_OFFSET = 0x02,
TDM_TX_3BIT_OFFSET = 0x03,
TDM_TX_4BIT_OFFSET = 0x04,
MAX_TDM_TX_OFFSET
} T_ZDrvTdm_TxOffset;
typedef enum
{
TDM_RX_1BIT_OFFSET = 0x01,
TDM_RX_2BIT_OFFSET = 0x02,
TDM_RX_3BIT_OFFSET = 0x03,
TDM_RX_4BIT_OFFSET = 0x04,
MAX_TDM_RX_OFFSET
} T_ZDrvTdm_RxOffset;
typedef VOID(*T_ZDrvTdm_AUD_PLAY_CB)(VOID);
/* TDM configuration */
typedef enum
{
TDM_FS_CLK_NEG = 0,
TDM_FS_CLK_POS,
MAX_FS_CLK_SELECT
} T_ZDrvTdm_FsClkSel;
typedef enum
{
TDM_TX_CLK_NEG = 0,
TDM_TX_CLK_POS,
MAX_TX_CLK_SELECT
} T_ZDrvTdm_TxClkSel;
typedef enum
{
TDM_RX_CLK_NEG = 0,
TDM_RX_CLK_POS,
MAX_RX_CLK_SELECT
} T_ZDrvTdm_RxClkSel;
typedef enum
{
TIMING_TDM_FS_1CLK = 0,
TIMING_TDM_FS_2CLK,
TIMING_TDM_FS_3CLK,
TIMING_TDM_FS_4CLK,
TIMING_TDM_FS_32CLK = 31,
MAX_FS_WIDTH
} T_ZDrvTdm_FsWidth;
typedef enum
{
TIMING_TDM_FS_HIGH = 0,
TIMING_TDM_FS_LOW = 1,
MAX_FS_ACTIVE
} T_ZDrvTdm_FsActive;
typedef struct
{
BOOL bMaster; /* TRUE: master mode; FALSE: slave mode */
UINT32 sample_rate;
T_ZDrvTdm_FsClkSel fsClkSel;
T_ZDrvTdm_TxClkSel txClkSel;
T_ZDrvTdm_RxClkSel rxClkSel;
T_ZDrvTdm_TsWidth tTsWidth; /*T_ZDrvTDM_TsWidth*/
T_ZDrvTdm_SlotNum tSlotNum;
T_ZDrvTdm_FsWidth tFsWidth;
T_ZDrvTdm_FsActive tFsActive;
T_ZDrvTdm_FstBitSel tTdmFstBit;
T_ZDrvTdm_TestMode tTestMode;
T_ZDrvTdm_TsEnable tTsEnable;
T_ZDrvTdm_TxOffset tTxOffset;
T_ZDrvTdm_RxOffset tRxOffset;
//T_Tdm_RefClkForTdm refclk;
} T_ZDrvTdm_Cfg;
typedef struct
{
T_ZDrvAudio_Channel channel;
UINT32 buffersize;
T_ZDrvTdm_AUD_PLAY_CB p_cb;
} T_ZDrvTdm_Params;
/**************************************************************************
* Global Variable *
**************************************************************************/
/**************************************************************************
* Function Prototypes *
**************************************************************************/
/**************************************************************************
* Function: zDrvTDM_Open
* Description: This function is used to open a specified TDM device.
* Parameters:
* (IN)
* tId: TDM index
* (OUT)
* None.
* Returns:
* DRV_SUCCESS: successed.
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERR_OPEN_TIMES: has already been opened
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
**************************************************************************/
SINT32 zDrvTdm_Open(T_ZDrvI2s_TransMode tdmTransMode);
SINT32 zDrvTdm_Reset();
/**************************************************************************
* Function: zDrvTDM_Close
* Description: This function is used to close a specified TDM device.
* Parameters:
* (IN)
* tId: TDM index
* (OUT)
* None.
* Returns:
* DRV_SUCCESS: successed.
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_NOT_OPENED: has not been opend yet.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
* must match the use of zDrvTDM_Open.
**************************************************************************/
SINT32 zDrvTdm_Close();
/**************************************************************************
* Function: zDrvTDM_Start
* Description: This function is used to start TDM.
* Parameters:
* (IN)
* tId: TDM index
* (OUT)
* None.
* Returns:
* DRV_SUCCESS: successed.
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_NOT_OPENED: has not been opend yet.
* DRV_ERR_START_TIMES: has been started already.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
**************************************************************************/
SINT32 zDrvTdm_Start(UINT32 buf_size);
/**************************************************************************
* Function: zDrvTDM_Stop
* Description: This function is used to stop TDM.
* Parameters:
* (IN)
* tId: TDM index
* (OUT)
* None.
* Returns:
* DRV_SUCCESS: successed.
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_NOT_STARTED: has not been started yet.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
* must match the use of zDrvTDM_Start.
**************************************************************************/
SINT32 zDrvTdm_Write_Stop();
SINT32 zDrvTdm_Read_Stop();
/**************************************************************************
* Function: zDrvTDM_Read
* Description: This function is used to read data by TDM.
* Parameters:
* (IN)
* tId: TDM index
* uiLen: buffer length
* (OUT)
* pBuf: pointer to the read data buffer
* Returns:
* the real byte number of read data if successed
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_NOT_STARTED: has not been started yet.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
**************************************************************************/
SINT32 zDrvTdm_Read(UINT8 **pBuf, UINT32 *uiLen);
/**************************************************************************
* Function: zDrvTDM_Write
* Description: This function is used to write data by TDM.
* Parameters:
* (IN)
* tId: TDM index
* pBuf: pointer to the read data buffer
* uiLen: buffer length
* (OUT)
* None.
* Returns:
* the real byte number of write data if successed
* DRV_ERR_NOT_SUPPORTED: this device don't support ioctrl operation.
* DRV_ERR_NOT_STARTED: has not been started yet.
* DRV_ERR_INVALID_PARAM: the input parameters are invalid
* DRV_ERR_BUSY: now is transfering data
* DRV_ERROR: error
* others: others programmer defined error code. for detailed information, please contact with the programmer
* Others:
* others error code should be a negative number, and not equal to the value that already be defined in T_ZDrv_ErrCode in drv_pub.h.
**************************************************************************/
SINT32 zDrvTdm_Write(const UINT8 *pBuf, UINT32 uiLen);
SINT32 zDrvTdm_Write_Start(T_ZDrvTdm_Params *params, T_ZDrvTdm_Cfg *ptCfg);
SINT32 zDrvTdm_Read_Start(T_ZDrvTdm_Params *params, T_ZDrvTdm_Cfg *ptCfg);
SINT32 zDrvTdm_Vousb_Start(T_ZDrvTdm_Params *params, T_ZDrvTdm_Cfg *ptCfg);
SINT32 zDrvTdm_GetBuf(UINT8 **pBuf, UINT32 *uiLen);
SINT32 zDrvTdm_GetRemained(UINT32 *len);
SINT32 zDrvTdm_FreeBuf(UINT8 *pBuf);
VOID zDrvTdm_Pause();
VOID zDrvTdm_Resume();
VOID zDrvTdm_RxRlsSemaBeforeStop();
VOID zDrvTdm_TxRlsSemaBeforeStop();
#endif /* _HAL_TDM_H */