[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 */