[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/cp/ps/driver/inc/misc/drvs_tdm.h b/cp/ps/driver/inc/misc/drvs_tdm.h
new file mode 100644
index 0000000..8e3d9e2
--- /dev/null
+++ b/cp/ps/driver/inc/misc/drvs_tdm.h
@@ -0,0 +1,342 @@
+/***********************************************************************
+* 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 */