1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and yor any information; or
62 // (c) conferring any license or right under any intellectual property right.
63 //
64 // 7. These terms shall be governed by and construed in accordance with the laws
65 // of Taiwan, R.O.C., excluding its conflict of law rules.
66 // Any and all dispute arising out hereof or related hereto shall be finally
67 // settled by arbitration referred to the Chinese Arbitration Association,
68 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
69 // Rules of the Association by three (3) arbitrators appointed in accordance
70 // with the said Rules.
71 // The place of arbitra��cordance
72 // with the said Rules.
73 // The place of arbitration shall be in Taipei, Taiwan and the language shall
74 // be English.
75 // The arbitration award shall be final and binding to both parties.
76 //
77 //******************************************************************************
78 //<MStar Software>
79 ////////////////////////////////////////////////////////////////////////////////
80 //
81 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
82 // All rights reserved.
83 //
84 // Unless otherwise stipulated in writing, any and all information contained
85 // herein regardless in any format shall remain the sole proprietary of
86 // MStar Semiconductor Inc. and be kept in strict confidence
87 // ("MStar Confidential Information") by the recipient.
88 // Any unauthorized act including without limitation unauthorized disclosure,
89 // copying, use, reproduction, sale, distribution, modification, disassembling,
90 // reverse engineering and compiling of the contents of MStar Confidential
91 // Information is unlawful and strictly prohibited. MStar hereby reserves the
92 // rights to any and all damages, losses, costs and expenses resulting therefrom.
93 //
94 ////////////////////////////////////////////////////////////////////////////////
95
96 ///////////////////////////////////////////////////////////////////////////////////////////////////
97 ///
98 /// file drvDMD_ATSC_v2.c
99 /// @brief DMD ATSC Driver Interface
100 /// @author MStar Semiconductor Inc.
101 ///////////////////////////////////////////////////////////////////////////////////////////////////
102
103 //-------------------------------------------------------------------------------------------------
104 // Include Files
105 //-------------------------------------------------------------------------------------------------
106
107 #ifdef MSOS_TYPE_LINUX_KERNEL
108 #include <linux/string.h>
109 #else
110 #include <string.h>
111 #include <stdio.h>
112 #endif
113
114 #include "utopia.h"
115 #include "utopia_dapi.h"
116
117 #include "drvDMD_ATSC_v2.h"
118
119 //-------------------------------------------------------------------------------------------------
120 // Driver Compiler Options
121 //-------------------------------------------------------------------------------------------------
122
123
124 //-------------------------------------------------------------------------------------------------
125 // Local Defines
126 //-------------------------------------------------------------------------------------------------
127
128 #ifdef MS_DEBUG
129 #define DMD_DBG(x) (x)
130 #else
131 #define DMD_DBG(x) //(x)
132 #endif
133
134 //-------------------------------------------------------------------------------------------------
135 // Local Structurs
136 //-------------------------------------------------------------------------------------------------
137
138 typedef enum _ATSC_POOL_ID
139 {
140 ATSC_POOL_ID_DMD0 = 0
141 } ATSC_POOL_ID;
142
143 typedef struct DLL_PACKED _ATSC_RESOURCE_PRIVATE
144 {
145 DMD_ATSC_ResData sDMD_ATSC_ResData[DMD_ATSC_MAX_DEMOD_NUM];
146 } ATSC_RESOURCE_PRIVATE, *PATSC_RESOURCE_PRIVATE;
147
148 #ifdef UTPA2
149
150 typedef MS_BOOL (*IOCTL_ATSC_SetDbgLevel)(DMD_ATSC_DbgLv);
151 typedef DMD_ATSC_Info* (*IOCTL_ATSC_GetInfo)(void);
152 typedef MS_BOOL (*IOCTL_ATSC_GetLibVer)(const MSIF_Version**);
153 typedef MS_BOOL (*IOCTL_ATSC_Init)(MS_U8, DMD_ATSC_InitData*, MS_U32);
154 typedef MS_BOOL (*IOCTL_ATSC_Exit)(MS_U8);
155 typedef MS_U32 (*IOCTL_ATSC_GetConfig)(MS_U8, DMD_ATSC_InitData*);
156 typedef MS_BOOL (*IOCTL_ATSC_SetConfig)(MS_U8, DMD_ATSC_DEMOD_TYPE, MS_BOOL);
157 typedef MS_BOOL (*IOCTL_ATSC_SetReset)(MS_U8);
158 typedef MS_BOOL (*IOCTL_ATSC_Set_QAM_SR)(MS_U8, DMD_ATSC_DEMOD_TYPE, MS_U16);
159 typedef MS_BOOL (*IOCTL_ATSC_SetActive)(MS_U8, MS_BOOL);
160 typedef MS_U32 (*IOCTL_ATSC_SetPowerState)(MS_U8, EN_POWER_MODE);
161 typedef DMD_ATSC_LOCK_STATUS (*IOCTL_ATSC_GetLock)(MS_U8, DMD_ATSC_GETLOCK_TYPE);
162 typedef DMD_ATSC_DEMOD_TYPE (*IOCTL_ATSC_GetModulationMode)(MS_U8);
163 typedef MS_BOOL (*IOCTL_ATSC_GetSignalStrength)(MS_U8, MS_U16*);
164 typedef DMD_ATSC_SIGNAL_CONDITION (*IOCTL_ATSC_GetSignalQuality)(MS_U8);
165 typedef MS_U8 (*IOCTL_ATSC_GetSNRPercentage)(MS_U8);
166 typedef MS_BOOL (*IOCTL_ATSC_GET_QAM_SNR)(MS_U8, DMD_ATSC_SNR_DATA*);
167 typedef MS_BOOL (*IOCTL_ATSC_Read_uCPKT_ERR)(MS_U8, MS_U16*);
168 typedef MS_BOOL (*IOCTL_ATSC_GetPreViterbiBer)(MS_U8, DMD_ATSC_BER_DATA*);
169 typedef MS_BOOL (*IOCTL_ATSC_GetPostViterbiBer)(MS_U8, DMD_ATSC_BER_DATA*);
170 typedef MS_BOOL (*IOCTL_ATSC_ReadFrequencyOffset)(MS_U8, DMD_ATSC_CFO_DATA*);
171 typedef MS_BOOL (*IOCTL_ATSC_SetSerialControl)(MS_U8, MS_U8);
172 typedef MS_BOOL (*IOCTL_ATSC_IIC_BYPASS_MODE)(MS_U8, MS_BOOL);
173 typedef MS_BOOL (*IOCTL_ATSC_SWITCH_SSPI_GPIO)(MS_U8, MS_BOOL);
174 typedef MS_BOOL (*IOCTL_ATSC_GPIO_GET_LEVEL)(MS_U8, MS_U8, MS_BOOL*);
175 typedef MS_BOOL (*IOCTL_ATSC_GPIO_SET_LEVEL)(MS_U8, MS_U8, MS_BOOL);
176 typedef MS_BOOL (*IOCTL_ATSC_GPIO_OUT_ENABLE)(MS_U8, MS_U8, MS_BOOL);
177 typedef MS_BOOL (*IOCTL_ATSC_DO_IQ_SWAP)(MS_U8, MS_BOOL);
178 typedef MS_BOOL (*IOCTL_ATSC_GetReg)(MS_U8, MS_U16, MS_U8*);
179 typedef MS_BOOL (*IOCTL_ATSC_SetReg)(MS_U8, MS_U16, MS_U8);
180
181 typedef struct _ATSC_INSTANT_PRIVATE
182 {
183 IOCTL_ATSC_SetDbgLevel fpSetDbgLevel;
184 IOCTL_ATSC_GetInfo fpGetInfo;
185 IOCTL_ATSC_GetLibVer fpGetLibVer;
186 IOCTL_ATSC_Init fpInit;
187 IOCTL_ATSC_Exit fpExit;
188 IOCTL_ATSC_GetConfig fpGetConfig;
189 IOCTL_ATSC_SetConfig fpSetConfig;
190 IOCTL_ATSC_SetReset fpSetReset;
191 IOCTL_ATSC_Set_QAM_SR fpSet_QAM_SR;
192 IOCTL_ATSC_SetActive fpSetActive;
193 #if DMD_ATSC_STR_EN
194 IOCTL_ATSC_SetPowerState fpSetPowerState;
195 #endif
196 IOCTL_ATSC_GetLock fpGetLock;
197 IOCTL_ATSC_GetModulationMode fpGetModulationMode;
198 IOCTL_ATSC_GetSignalStrength fpGetSignalStrength;
199 IOCTL_ATSC_GetSignalQuality fpGetSignalQuality;
200 IOCTL_ATSC_GetSNRPercentage fpGetSNRPercentage;
201 IOCTL_ATSC_GET_QAM_SNR fpGET_QAM_SNR;
202 IOCTL_ATSC_Read_uCPKT_ERR fpRead_uCPKT_ERR;
203 IOCTL_ATSC_GetPreViterbiBer fpGetPreViterbiBer;
204 IOCTL_ATSC_GetPostViterbiBer fpGetPostViterbiBer;
205 IOCTL_ATSC_SetSerialControl fpSetSerialControl;
206 IOCTL_ATSC_ReadFrequencyOffset fpReadFrequencyOffset;
207 IOCTL_ATSC_IIC_BYPASS_MODE fpIIC_BYPASS_MODE;
208 IOCTL_ATSC_SWITCH_SSPI_GPIO fpSWITCH_SSPI_GPIO;
209 IOCTL_ATSC_GPIO_GET_LEVEL fpGPIO_GET_LEVEL;
210 IOCTL_ATSC_GPIO_SET_LEVEL fpGPIO_SET_LEVEL;
211 IOCTL_ATSC_GPIO_OUT_ENABLE fpGPIO_OUT_ENABLE;
212 IOCTL_ATSC_DO_IQ_SWAP fpDO_IQ_SWAP;
213 IOCTL_ATSC_GetReg fpGetReg;
214 IOCTL_ATSC_SetReg fpSetReg;
215 } ATSC_INSTANT_PRIVATE;
216
217 //-------------------------------------------------------------------------------------------------
218 // Global Variables
219 //-------------------------------------------------------------------------------------------------
220
221 extern DMD_ATSC_ResData *psDMD_ATSC_ResData;
222
223 //-------------------------------------------------------------------------------------------------
224 // Local Variables
225 //-------------------------------------------------------------------------------------------------
226
227
228 //-------------------------------------------------------------------------------------------------
229 // Debug Functions
230 //-------------------------------------------------------------------------------------------------
231
232
233 //-------------------------------------------------------------------------------------------------
234 // Local Functions
235 //-------------------------------------------------------------------------------------------------
236
237
238 //-------------------------------------------------------------------------------------------------
239 // Global Functions
240 //-------------------------------------------------------------------------------------------------
241
ATSCOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)242 MS_U32 ATSCOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
243 {
244 ATSC_INSTANT_PRIVATE *pAtscPri = NULL;
245 void *pAtscPriVoid = NULL;
246
247 printf("\n[ATSC INFO] atsc open");
248
249 // instance is allocated here, also can allocate private for internal use, ex, BDMA_INSTANT_PRIVATE
250 UtopiaInstanceCreate(sizeof(ATSC_INSTANT_PRIVATE), ppInstance);
251 // setup func in private and assign the calling func in func ptr in instance private
252 UtopiaInstanceGetPrivate(*ppInstance, &pAtscPriVoid);
253 pAtscPri = (ATSC_INSTANT_PRIVATE*)pAtscPriVoid;
254
255 pAtscPri->fpSetDbgLevel = _MDrv_DMD_ATSC_SetDbgLevel;
256 pAtscPri->fpGetInfo = _MDrv_DMD_ATSC_GetInfo;
257 pAtscPri->fpGetLibVer = _MDrv_DMD_ATSC_GetLibVer;
258 pAtscPri->fpInit = _MDrv_DMD_ATSC_MD_Init;
259 pAtscPri->fpExit = _MDrv_DMD_ATSC_MD_Exit;
260 pAtscPri->fpGetConfig = _MDrv_DMD_ATSC_MD_GetConfig;
261 pAtscPri->fpSetConfig = _MDrv_DMD_ATSC_MD_SetConfig;
262 pAtscPri->fpSetReset = _MDrv_DMD_ATSC_MD_SetReset;
263 pAtscPri->fpSet_QAM_SR = _MDrv_DMD_ATSC_MD_Set_QAM_SR;
264 pAtscPri->fpSetActive = _MDrv_DMD_ATSC_MD_SetActive;
265 #if DMD_ATSC_STR_EN
266 pAtscPri->fpSetPowerState = _MDrv_DMD_ATSC_MD_SetPowerState;
267 #endif
268 pAtscPri->fpGetLock = _MDrv_DMD_ATSC_MD_GetLock;
269 pAtscPri->fpGetModulationMode = _MDrv_DMD_ATSC_MD_GetModulationMode;
270 pAtscPri->fpGetSignalStrength = _MDrv_DMD_ATSC_MD_GetSignalStrength;
271 pAtscPri->fpGetSignalQuality = _MDrv_DMD_ATSC_MD_GetSignalQuality;
272 pAtscPri->fpGetSNRPercentage = _MDrv_DMD_ATSC_MD_GetSNRPercentage;
273 pAtscPri->fpGET_QAM_SNR = _MDrv_DMD_ATSC_MD_GET_QAM_SNR;
274 pAtscPri->fpRead_uCPKT_ERR = _MDrv_DMD_ATSC_MD_Read_uCPKT_ERR;
275 pAtscPri->fpGetPreViterbiBer = _MDrv_DMD_ATSC_MD_GetPreViterbiBer;
276 pAtscPri->fpGetPostViterbiBer = _MDrv_DMD_ATSC_MD_GetPostViterbiBer;
277 pAtscPri->fpReadFrequencyOffset = _MDrv_DMD_ATSC_MD_ReadFrequencyOffset;
278 pAtscPri->fpSetSerialControl = _MDrv_DMD_ATSC_MD_SetSerialControl;
279 pAtscPri->fpIIC_BYPASS_MODE = _MDrv_DMD_ATSC_MD_IIC_BYPASS_MODE;
280 pAtscPri->fpSWITCH_SSPI_GPIO = _MDrv_DMD_ATSC_MD_SWITCH_SSPI_GPIO;
281 pAtscPri->fpGPIO_GET_LEVEL = _MDrv_DMD_ATSC_MD_GPIO_GET_LEVEL;
282 pAtscPri->fpGPIO_SET_LEVEL = _MDrv_DMD_ATSC_MD_GPIO_SET_LEVEL;
283 pAtscPri->fpGPIO_OUT_ENABLE = _MDrv_DMD_ATSC_MD_GPIO_OUT_ENABLE;
284 pAtscPri->fpDO_IQ_SWAP = _MDrv_DMD_ATSC_MD_DoIQSwap;
285 pAtscPri->fpGetReg = _MDrv_DMD_ATSC_MD_GetReg;
286 pAtscPri->fpSetReg = _MDrv_DMD_ATSC_MD_SetReg;
287
288 return UTOPIA_STATUS_SUCCESS;
289 }
290
291 #if DMD_ATSC_STR_EN
ATSCStr(MS_U32 u32PowerState,void * pModule)292 MS_U32 ATSCStr(MS_U32 u32PowerState, void* pModule)
293 {
294 void* pResource = NULL;
295 ATSC_RESOURCE_PRIVATE* psATSCResPri = NULL;
296
297 MS_U32 i = 0;
298 MS_U32 u32Ret = FALSE;
299
300 if (UtopiaResourceObtain(pModule, ATSC_POOL_ID_DMD0, &pResource) != 0)
301 {
302 printf("UtopiaResourceObtainToInstant fail\n");
303 return UTOPIA_STATUS_ERR_RESOURCE;
304 }
305
306 if (UtopiaResourceGetPrivate(pResource, (void*)&psATSCResPri) != 0)
307 {
308 printf("UtopiaResourceGetPrivate fail\n");
309 return UTOPIA_STATUS_FAIL;
310 }
311
312 psDMD_ATSC_ResData = ((PATSC_RESOURCE_PRIVATE)psATSCResPri)->sDMD_ATSC_ResData;
313
314 do
315 {
316 u32Ret = _MDrv_DMD_ATSC_MD_SetPowerState(i++, u32PowerState);
317 } while (i < DMD_ATSC_MAX_DEMOD_NUM && u32Ret);
318
319 UtopiaResourceRelease(pResource);
320
321 return (u32Ret ? UTOPIA_STATUS_SUCCESS : UTOPIA_STATUS_FAIL);
322 }
323 #endif
324
ATSCIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)325 MS_U32 ATSCIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
326 {
327 void* pModule = NULL;
328 UtopiaInstanceGetModule(pInstance, &pModule);
329 void* pResource = NULL;
330 ATSC_RESOURCE_PRIVATE* psATSCResPri = NULL;
331 ATSC_INSTANT_PRIVATE* psATSCInstPri = NULL;
332 void* psATSCInstPriVoid = NULL;
333 UtopiaInstanceGetPrivate(pInstance, (void**)&psATSCInstPriVoid);
334 psATSCInstPri = (ATSC_INSTANT_PRIVATE*)psATSCInstPriVoid;
335
336 MS_U32 u32Ret = FALSE;
337
338 if (UtopiaResourceObtain(pModule, ATSC_POOL_ID_DMD0, &pResource) != 0)
339 {
340 printf("UtopiaResourceObtainToInstant fail\n");
341 return UTOPIA_STATUS_ERR_RESOURCE;
342 }
343
344 if(UtopiaResourceGetPrivate(pResource,(void*)&psATSCResPri) != 0)
345 {
346 printf("UtopiaResourceGetPrivate fail\n");
347 return UTOPIA_STATUS_FAIL;
348 }
349
350 psDMD_ATSC_ResData = ((PATSC_RESOURCE_PRIVATE)psATSCResPri)->sDMD_ATSC_ResData;
351
352 switch (u32Cmd)
353 {
354 case DMD_ATSC_DRV_CMD_SetDbgLevel:
355 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_SetDbgLevel\n"));
356 u32Ret = psATSCInstPri->fpSetDbgLevel(((PATSC_DBG_LEVEL_PARAM)pArgs)->u8DbgLevel);
357 break;
358 case DMD_ATSC_DRV_CMD_GetInfo:
359 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_GetInfo\n"));
360 ((PATSC_GET_INFO_PARAM)pArgs)->pInfo = psATSCInstPri->fpGetInfo();
361 u32Ret = TRUE;
362 break;
363 case DMD_ATSC_DRV_CMD_GetLibVer:
364 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_GetLibVer\n"));
365 u32Ret = psATSCInstPri->fpGetLibVer(((PATSC_GET_LIB_VER_PARAM)pArgs)->ppVersion);
366 break;
367 case DMD_ATSC_DRV_CMD_Init:
368 ((PATSC_INIT_PARAM)pArgs)->id = 0;
369 case DMD_ATSC_DRV_CMD_MD_Init:
370 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_Init\n"));
371 u32Ret = psATSCInstPri->fpInit(((PATSC_INIT_PARAM)pArgs)->id, ((PATSC_INIT_PARAM)pArgs)->pDMD_ATSC_InitData, ((PATSC_INIT_PARAM)pArgs)->u32InitDataLen);
372 break;
373 case DMD_ATSC_DRV_CMD_Exit:
374 ((PATSC_ID_PARAM)pArgs)->id = 0;
375 case DMD_ATSC_DRV_CMD_MD_Exit:
376 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_Exit\n"));
377 u32Ret = psATSCInstPri->fpExit(((PATSC_ID_PARAM)pArgs)->id);
378 break;
379 case DMD_ATSC_DRV_CMD_GetConfig:
380 ((PATSC_INIT_PARAM)pArgs)->id = 0;
381 case DMD_ATSC_DRV_CMD_MD_GetConfig:
382 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetConfig\n"));
383 u32Ret = psATSCInstPri->fpGetConfig(((PATSC_INIT_PARAM)pArgs)->id, ((PATSC_INIT_PARAM)pArgs)->pDMD_ATSC_InitData);
384 break;
385 case DMD_ATSC_DRV_CMD_SetConfig:
386 ((PATSC_SET_CONFIG_PARAM)pArgs)->id = 0;
387 case DMD_ATSC_DRV_CMD_MD_SetConfig:
388 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetConfig\n"));
389 u32Ret = psATSCInstPri->fpSetConfig(((PATSC_SET_CONFIG_PARAM)pArgs)->id, ((PATSC_SET_CONFIG_PARAM)pArgs)->eType, ((PATSC_SET_CONFIG_PARAM)pArgs)->bEnable);
390 break;
391 case DMD_ATSC_DRV_CMD_SetReset:
392 ((PATSC_ID_PARAM)pArgs)->id = 0;
393 case DMD_ATSC_DRV_CMD_MD_SetReset:
394 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetReset\n"));
395 u32Ret = psATSCInstPri->fpSetReset(((PATSC_ID_PARAM)pArgs)->id);
396 break;
397 case DMD_ATSC_DRV_CMD_Set_QAM_SR:
398 ((PATSC_SET_QAM_SR_PARAM)pArgs)->id = 0;
399 case DMD_ATSC_DRV_CMD_MD_Set_QAM_SR:
400 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_Set_QAM_SR\n"));
401 u32Ret = psATSCInstPri->fpSet_QAM_SR(((PATSC_SET_QAM_SR_PARAM)pArgs)->id, ((PATSC_SET_QAM_SR_PARAM)pArgs)->eType, ((PATSC_SET_QAM_SR_PARAM)pArgs)->symbol_rate);
402 break;
403 case DMD_ATSC_DRV_CMD_SetActive:
404 ((PATSC_SET_ACTIVE_PARAM)pArgs)->id = 0;
405 case DMD_ATSC_DRV_CMD_MD_SetActive:
406 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetActive\n"));
407 u32Ret = psATSCInstPri->fpSetActive(((PATSC_SET_ACTIVE_PARAM)pArgs)->id, ((PATSC_SET_ACTIVE_PARAM)pArgs)->bEnable);
408 break;
409 case DMD_ATSC_DRV_CMD_SetPowerState:
410 ((PATSC_SET_POWER_STATE_PARAM)pArgs)->id = 0;
411 case DMD_ATSC_DRV_CMD_MD_SetPowerState:
412 #if DMD_ATSC_STR_EN
413 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetPowerState\n"));
414 if(psATSCInstPri->fpSetPowerState(((PATSC_SET_POWER_STATE_PARAM)pArgs)->id, ((PATSC_SET_POWER_STATE_PARAM)pArgs)->u16PowerState) == UTOPIA_STATUS_SUCCESS)
415 u32Ret = TRUE;
416 else
417 u32Ret = FALSE;
418 #else
419 DMD_DBG(printf("ATSCIoctl - Don't support MDrv_DMD_ATSC_MD_SetPowerState\n"));
420 #endif
421 break;
422 case DMD_ATSC_DRV_CMD_GetLock:
423 ((PATSC_GET_LOCK_PARAM)pArgs)->id = 0;
424 case DMD_ATSC_DRV_CMD_MD_GetLock:
425 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetLock\n"));
426 ((PATSC_GET_LOCK_PARAM)pArgs)->status = psATSCInstPri->fpGetLock(((PATSC_GET_LOCK_PARAM)pArgs)->id, ((PATSC_GET_LOCK_PARAM)pArgs)->eType);
427 u32Ret = TRUE;
428 break;
429 case DMD_ATSC_DRV_CMD_GetModulationMode:
430 ((PATSC_GET_MODULATION_MODE_PARAM)pArgs)->id = 0;
431 case DMD_ATSC_DRV_CMD_MD_GetModulationMode:
432 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetModulationMode\n"));
433 ((PATSC_GET_MODULATION_MODE_PARAM)pArgs)->eType = psATSCInstPri->fpGetModulationMode(((PATSC_GET_MODULATION_MODE_PARAM)pArgs)->id);
434 u32Ret = TRUE;
435 break;
436 case DMD_ATSC_DRV_CMD_GetSignalStrength:
437 ((PATSC_GET_SIGNAL_STRENGTH_PARAM)pArgs)->id = 0;
438 case DMD_ATSC_DRV_CMD_MD_GetSignalStrength:
439 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetSignalStrength\n"));
440 u32Ret = psATSCInstPri->fpGetSignalStrength(((PATSC_GET_SIGNAL_STRENGTH_PARAM)pArgs)->id, &(((PATSC_GET_SIGNAL_STRENGTH_PARAM)pArgs)->u16Strength));
441 break;
442 case DMD_ATSC_DRV_CMD_GetSignalQuality:
443 ((PATSC_GET_SIGNAL_QUALITY_PARAM)pArgs)->id = 0;
444 case DMD_ATSC_DRV_CMD_MD_GetSignalQuality:
445 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetSignalQuality\n"));
446 ((PATSC_GET_SIGNAL_QUALITY_PARAM)pArgs)->eQuality = psATSCInstPri->fpGetSignalQuality(((PATSC_GET_SIGNAL_QUALITY_PARAM)pArgs)->id);
447 u32Ret = TRUE;
448 break;
449 case DMD_ATSC_DRV_CMD_GetSNRPercentage:
450 ((PATSC_GET_SNR_PERCENTAGE_PARAM)pArgs)->id = 0;
451 case DMD_ATSC_DRV_CMD_MD_GetSNRPercentage:
452 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetSNRPercentage\n"));
453 ((PATSC_GET_SNR_PERCENTAGE_PARAM)pArgs)->u8Percentage = psATSCInstPri->fpGetSNRPercentage(((PATSC_GET_SNR_PERCENTAGE_PARAM)pArgs)->id);
454 u32Ret = TRUE;
455 break;
456 case DMD_ATSC_DRV_CMD_GET_QAM_SNR:
457 ((PATSC_GET_SNR_PARAM)pArgs)->id = 0;
458 case DMD_ATSC_DRV_CMD_MD_GET_QAM_SNR:
459 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GET_QAM_SNR\n"));
460 u32Ret = psATSCInstPri->fpGET_QAM_SNR(((PATSC_GET_SNR_PARAM)pArgs)->id, &(((PATSC_GET_SNR_PARAM)pArgs)->snr));
461 break;
462 case DMD_ATSC_DRV_CMD_Read_uCPKT_ERR:
463 ((PATSC_GET_UCPKT_ERR_PARAM)pArgs)->id = 0;
464 case DMD_ATSC_DRV_CMD_MD_Read_uCPKT_ERR:
465 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_Read_uCPKT_ERR\n"));
466 u32Ret = psATSCInstPri->fpRead_uCPKT_ERR(((PATSC_GET_UCPKT_ERR_PARAM)pArgs)->id, &(((PATSC_GET_UCPKT_ERR_PARAM)pArgs)->u16PacketErr));
467 break;
468 case DMD_ATSC_DRV_CMD_GetPreViterbiBer:
469 ((PATSC_GET_BER_PARAM)pArgs)->id = 0;
470 case DMD_ATSC_DRV_CMD_MD_GetPreViterbiBer:
471 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetPreViterbiBer\n"));
472 u32Ret = psATSCInstPri->fpGetPreViterbiBer(((PATSC_GET_BER_PARAM)pArgs)->id, &(((PATSC_GET_BER_PARAM)pArgs)->ber));
473 break;
474 case DMD_ATSC_DRV_CMD_GetPostViterbiBer:
475 ((PATSC_GET_BER_PARAM)pArgs)->id = 0;
476 case DMD_ATSC_DRV_CMD_MD_GetPostViterbiBer:
477 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetPostViterbiBer\n"));
478 u32Ret = psATSCInstPri->fpGetPostViterbiBer(((PATSC_GET_BER_PARAM)pArgs)->id, &(((PATSC_GET_BER_PARAM)pArgs)->ber));
479 break;
480 case DMD_ATSC_DRV_CMD_ReadFrequencyOffset:
481 ((PATSC_READ_FREQ_OFFSET_PARAM)pArgs)->id = 0;
482 case DMD_ATSC_DRV_CMD_MD_ReadFrequencyOffset:
483 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_ReadFrequencyOffset\n"));
484 u32Ret = psATSCInstPri->fpReadFrequencyOffset(((PATSC_READ_FREQ_OFFSET_PARAM)pArgs)->id, &(((PATSC_READ_FREQ_OFFSET_PARAM)pArgs)->cfo));
485 break;
486 case DMD_ATSC_DRV_CMD_SetSerialControl:
487 ((PATSC_SET_SERIAL_CONTROL_PARAM)pArgs)->id = 0;
488 case DMD_ATSC_DRV_CMD_MD_SetSerialControl:
489 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetSerialControl\n"));
490 u32Ret = psATSCInstPri->fpSetSerialControl(((PATSC_SET_SERIAL_CONTROL_PARAM)pArgs)->id, ((PATSC_SET_SERIAL_CONTROL_PARAM)pArgs)->u8TsConfigData);
491 break;
492 case DMD_ATSC_DRV_CMD_IIC_BYPASS_MODE:
493 ((PATSC_IIC_BYPASS_MODE_PARAM)pArgs)->id = 0;
494 case DMD_ATSC_DRV_CMD_MD_IIC_BYPASS_MODE:
495 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_IIC_BYPASS_MODE\n"));
496 u32Ret = psATSCInstPri->fpIIC_BYPASS_MODE(((PATSC_IIC_BYPASS_MODE_PARAM)pArgs)->id, ((PATSC_IIC_BYPASS_MODE_PARAM)pArgs)->bEnable);
497 break;
498 case DMD_ATSC_DRV_CMD_SWITCH_SSPI_GPIO:
499 ((PATSC_SWITCH_SSPI_GPIO_PARAM)pArgs)->id = 0;
500 case DMD_ATSC_DRV_CMD_MD_SWITCH_SSPI_GPIO:
501 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SWITCH_SSPI_GPIO\n"));
502 u32Ret = psATSCInstPri->fpSWITCH_SSPI_GPIO(((PATSC_SWITCH_SSPI_GPIO_PARAM)pArgs)->id, ((PATSC_SWITCH_SSPI_GPIO_PARAM)pArgs)->bEnable);
503 break;
504 case DMD_ATSC_DRV_CMD_GPIO_GET_LEVEL:
505 ((PATSC_GPIO_LEVEL_PARAM)pArgs)->id = 0;
506 case DMD_ATSC_DRV_CMD_MD_GPIO_GET_LEVEL:
507 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GPIO_GET_LEVEL\n"));
508 u32Ret = psATSCInstPri->fpGPIO_GET_LEVEL(((PATSC_GPIO_LEVEL_PARAM)pArgs)->id, ((PATSC_GPIO_LEVEL_PARAM)pArgs)->u8Pin, &(((PATSC_GPIO_LEVEL_PARAM)pArgs)->bLevel));
509 break;
510 case DMD_ATSC_DRV_CMD_GPIO_SET_LEVEL:
511 ((PATSC_GPIO_LEVEL_PARAM)pArgs)->id = 0;
512 case DMD_ATSC_DRV_CMD_MD_GPIO_SET_LEVEL:
513 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GPIO_SET_LEVEL\n"));
514 u32Ret = psATSCInstPri->fpGPIO_SET_LEVEL(((PATSC_GPIO_LEVEL_PARAM)pArgs)->id, ((PATSC_GPIO_LEVEL_PARAM)pArgs)->u8Pin, ((PATSC_GPIO_LEVEL_PARAM)pArgs)->bLevel);
515 break;
516 case DMD_ATSC_DRV_CMD_GPIO_OUT_ENABLE:
517 ((PATSC_GPIO_OUT_ENABLE_PARAM)pArgs)->id = 0;
518 case DMD_ATSC_DRV_CMD_MD_GPIO_OUT_ENABLE:
519 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GPIO_OUT_ENABLE\n"));
520 u32Ret = psATSCInstPri->fpGPIO_OUT_ENABLE(((PATSC_GPIO_OUT_ENABLE_PARAM)pArgs)->id, ((PATSC_GPIO_OUT_ENABLE_PARAM)pArgs)->u8Pin, ((PATSC_GPIO_OUT_ENABLE_PARAM)pArgs)->bEnableOut);
521 break;
522 case DMD_ATSC_DRV_CMD_DoIQSwap:
523 ((PATSC_DO_IQ_SWAP_PARAM)pArgs)->id = 0;
524 case DMD_ATSC_DRV_CMD_MD_DoIQSwap:
525 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_DO_IQ_SWAP\n"));
526 u32Ret = psATSCInstPri->fpDO_IQ_SWAP(((PATSC_DO_IQ_SWAP_PARAM)pArgs)->id, ((PATSC_DO_IQ_SWAP_PARAM)pArgs)->bIsQPad);
527 break;
528 case DMD_ATSC_DRV_CMD_GetReg:
529 ((PATSC_REG_PARAM)pArgs)->id = 0;
530 case DMD_ATSC_DRV_CMD_MD_GetReg:
531 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_GetReg\n"));
532 u32Ret = psATSCInstPri->fpGetReg(((PATSC_REG_PARAM)pArgs)->id, ((PATSC_REG_PARAM)pArgs)->u16Addr, &(((PATSC_REG_PARAM)pArgs)->u8Data));
533 break;
534 case DMD_ATSC_DRV_CMD_SetReg:
535 ((PATSC_REG_PARAM)pArgs)->id = 0;
536 case DMD_ATSC_DRV_CMD_MD_SetReg:
537 DMD_DBG(printf("ATSCIoctl - MDrv_DMD_ATSC_MD_SetReg\n"));
538 u32Ret = psATSCInstPri->fpSetReg(((PATSC_REG_PARAM)pArgs)->id, ((PATSC_REG_PARAM)pArgs)->u16Addr, ((PATSC_REG_PARAM)pArgs)->u8Data);
539 break;
540 default:
541 break;
542 }
543
544 UtopiaResourceRelease(pResource);
545
546 return (u32Ret ? UTOPIA_STATUS_SUCCESS : UTOPIA_STATUS_FAIL);
547 }
548
ATSCClose(void * pInstance)549 MS_U32 ATSCClose(void* pInstance)
550 {
551 UtopiaInstanceDelete(pInstance);
552
553 return UTOPIA_STATUS_SUCCESS;
554 }
555
ATSCRegisterToUtopia(FUtopiaOpen ModuleType)556 void ATSCRegisterToUtopia(FUtopiaOpen ModuleType)
557 {
558 // 1. deal with module
559 void* pUtopiaModule = NULL;
560 UtopiaModuleCreate(MODULE_ATSC, 8, &pUtopiaModule);
561 UtopiaModuleRegister(pUtopiaModule);
562 // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
563 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)ATSCOpen, (FUtopiaClose)ATSCClose, (FUtopiaIOctl)ATSCIoctl);
564 // register func for module, after register here, then ap call UtopiaSTR can call to registered standard func
565 #if DMD_ATSC_STR_EN
566 UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule, (FUtopiaSTR)ATSCStr);
567 #endif
568
569 // 2. deal with resource
570 void* psResource = NULL;
571 // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
572 UtopiaModuleAddResourceStart(pUtopiaModule, ATSC_POOL_ID_DMD0);
573 // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
574 UtopiaResourceCreate("atsc0", sizeof(ATSC_RESOURCE_PRIVATE), &psResource);
575 // func to reg res
576 UtopiaResourceRegister(pUtopiaModule, psResource, ATSC_POOL_ID_DMD0);
577 // end function to add res
578 UtopiaModuleAddResourceEnd(pUtopiaModule, ATSC_POOL_ID_DMD0);
579 }
580
581 #endif // #ifdef UTPA2