blob: 1b64c00b823e3dc12fe41e8b3eaba77417d152b7 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*******************************************************************************
2 * Copyright (C) 2007, ZTE Corporation.
3 *
4 * File Name:
5 * File Mark:
6 * Description:
7 * Others:
8 * Version: 1.0
9 * Author: weizhigang
10 * Date: 2010-8-6
11 * History 1:
12 * Date:
13 * Version:
14 * Author:
15 * Modification:
16 * History 2:
17 ********************************************************************************/
18
19#ifndef _DRVS_SSP_H
20#define _DRVS_SSP_H
21
22
23/****************************************************************************
24* Include files
25****************************************************************************/
26#include "drvs_dma.h"
27
28/****************************************************************************
29* Macros
30****************************************************************************/
31//#define SSP_INT_ENABLE 0
32//#define SSP_DMA_ENABLE 1
33
34#define SSP_ASSERT() zOss_ASSERT(0)
35
36#define SSP_ERROR(format,args...) do {SSP_ASSERT();zOss_Printf(1,1,format,##args);} while(0)
37
38#define SSP_DEBUG_RAMLOG
39
40#ifdef SSP_DEBUG_RAMLOG
41#define zDrvSsp_RamLog(s...) zDrvRamlog_PRINTF(RAMLOG_MOD_SPI,s)
42#else
43#define zDrvSsp_RamLog(s...)
44#endif
45
46#define SPI_PRINTF(cond, format, args...) do { if(cond) zOss_Printf(SUBMDL_TEST, PRINT_LEVEL_NORMAL, format, ##args);}while(0)
47/****************************************************************************
48* Types
49****************************************************************************/
50
51
52//define ssp num --zhangpei add
53typedef enum _T_SspDevNum
54{
55 SSP_DEV_0 = 0,
56 SSP_DEV_1 = 1,
57 SSP_DEV_NUM
58}
59T_SspDevNum;
60typedef enum _T_SspMSMode
61{
62 SSP_MS_MASTER = 0x0,
63 SSP_MS_SLAVE = 0x1,
64}
65T_SspMSMode;
66//define ssp mode
67typedef enum _T_SspMode
68{
69 SSP_AS_SPI = 0x0,
70 SSP_AS_TISS = 0x1,
71}
72T_SspMode;
73
74//define ssp mode
75typedef enum _T_SspXferWidth
76{
77 SSP_8_BIT = 7,
78 SSP_9_BIT = 8,
79 SSP_16_BIT = 15,
80 SSP_32_BIT = 31
81}
82T_SspXferWidth;
83
84//define ssp mode
85typedef enum _T_SspPolarity
86{
87 SPH_SPO_00 = 0x0,
88 SPH_SPO_01 = 0x1,
89 SPH_SPO_10 = 0x2,
90 SPH_SPO_11 = 0x3
91}
92T_SspPolarity;
93
94
95//defined for ssp frequency changing
96typedef enum _T_SspFrequency
97{
98 SSP_FREQ_52M,
99 SSP_FREQ_39M,
100 SSP_FREQ_26M,
101 SSP_FREQ_13M,
102 SSP_FREQ_6M5,
103 SSP_FREQ_3M2,
104 SSP_FREQ_1M6,
105 SSP_FREQ_812K5,
106 SSP_FREQ_NUM,
107}
108T_SspFrequency;
109
110typedef enum _T_SspCamMode
111{
112 SSP_NORMAL_MODE = 0x0,
113 SSP_CAMERA_MODE = 0x1,
114}
115T_SspCamMode;
116
117
118//define ssp cs level
119typedef enum _T_SspCsLevel
120{
121 SSP_CS_LOW = 0,
122 SSP_CS_HIGH = 1
123}
124T_SspCsLevel;
125
126
127//define the status
128#define RXFIFOFULL 1
129#define RXFIFONOTFULL 0
130#define RXFIFOEMPT 0
131#define RXFIFONOTEMPT 1
132#define TXFIFOFULL 0
133#define TXFIFONOTFULL 1
134#define TXFIFOEMPTY 1
135#define TXFIFONOTEMPTY 0
136
137//define register bit field segment
138typedef volatile struct
139{
140 /*0x00*/
141 UINT32 SSP_VER_REG;
142 /*0x04*/
143 UINT32 SSP_COM_CTRL;
144 /*0x08*/
145 UINT32 SSP_FMT_CTRL;
146 /*0x0c*/
147 UINT32 SSP_DR;
148 /*0x10*/
149 UINT32 SSP_FIFO_CTRL;
150 /*0x14*/
151 UINT32 SSP_FIFO_SR;
152 /*0x18*/
153 UINT32 SSP_INTR_EN;
154 //0x1c
155 UINT32 SSP_ISR_OR_ICR;
156 //0x20
157 UINT32 SSP_TIMING;
158
159}
160T_SspReg;
161
162
163typedef enum _T_SspStatus
164{
165 SSP_STA_INIT = 0,
166 SSP_STA_OPENED,
167 SSP_STA_XFER,
168 SSP_STA_DMA_ERR,
169 SSP_STA_DONE,
170}
171T_SspStatus;
172
173typedef struct _T_SspDmaInfo
174{
175 UINT32 rxDmaChl; // ssp rx Dma channel number
176 UINT32 txDmaChl;
177 T_ZDrvDma_ChannelDef rxDmaChlDef;
178 T_ZDrvDma_ChannelDef txDmaChlDef;
179 zDrvDma_CallbackFunc rxDmaCbFunc; // ssp rx callback function
180 zDrvDma_CallbackFunc txDmaCbFunc;
181 ZOSS_SEMAPHORE_ID TxDmaSema;
182 ZOSS_SEMAPHORE_ID RxDmaSema;
183} T_SspDmaInfo;
184
185
186typedef union _T_SspData
187{
188 UINT8 *Buf_8;
189 UINT16 *Buf_16;
190 UINT32 *Buf_32;
191 VOID *Buf;
192} T_SspData;
193
194
195typedef struct
196{
197 T_SspDevNum devNum; //indicate the ssp device num
198 T_SspReg* regPtr;
199 T_SspDmaInfo SspDmaInfo;
200 T_SspStatus status;
201 T_SspMSMode msMode;
202 T_SspMode mode;
203 T_SspPolarity polarity;
204 T_SspXferWidth xferWidth;
205
206 //NT32 SspWorkClock; //the wanted freq
207 //NT32 RealSspWorkClock; //the actral freq
208 UINT32 SspWorkClock; //the wanted freq
209
210 UINT32 tx_thres;
211 UINT32 rx_thres;
212
213 UINT32 Len_tx_remin;
214 VOID* txBuf;
215 UINT32 Len_rx_remin;
216 VOID* rxBuf;
217
218 UINT32 bPrint;
219
220 //ZOSS_SEMAPHORE_ID txSem;
221 // ZOSS_SEMAPHORE_ID rxSem;
222
223}
224T_SspDevHnd;
225
226
227/****************************************************************************
228* Constants
229****************************************************************************/
230
231/****************************************************************************
232* Global Variables
233****************************************************************************/
234
235/****************************************************************************
236* Function Prototypes
237****************************************************************************/
238SINT32 zDrvSsp_Transfer(VOID* hnd, VOID* txBuf ,VOID* rxBuf,UINT32 Len);
239//VOID* zDrvSsp_Open(T_SspDevNum devNum, T_SspMSMode msMode);
240VOID* zDrvSsp_Open(T_SspDevNum devNum);
241//VOID zDrvSsp_Reset(T_SspDevNum devNum);
242SINT32 zDrvSsp_Set_XferWidth(VOID* hnd,T_SspXferWidth length);
243
244SINT32 zDrvSsp_Xfer(VOID* hnd, VOID* txBuf ,VOID* rxBuf,UINT32 Len);
245
246SINT32 zDrvSsp_DmaXfer(VOID* hnd, VOID* txBuf ,VOID* rxBuf,UINT32 Len);
247//SINT32 zDrvSsp_DmaEnable(T_SspDevNum devNum);
248//SINT32 zDrvSsp_DmaDisable(T_SspDevNum devNum);
249//NT32 zDrvSsp_ChangeFreq(VOID *hnd, T_SspFrequency Freq);
250SINT32 zDrvSsp_SetMSMode(VOID *hnd, T_SspMSMode msMode);
251SINT32 zDrvSsp_Initiate(VOID);
252SINT32 zDrvSsp_Ioctl(VOID *hnd, T_DRVIO_CTRL_KEY function, VOID *arg);
253
254#endif/*_FILENAME_H*/
255