xref: /utopia/UTPA2-700.0.x/modules/ch34/drv/ch34/drvCH34_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 #include "MsTypes.h"
2 #include <stdio.h>
3 #include "utopia_dapi.h"
4 #include "drvCH34.h"
5 #include "drvCH34_private.h"
6 #include "drvCH34_v2.h"
7 #include "MsOS.h"
8 #include "utopia.h"
9 
10 //-------------------------------------------------------------------------------------------------
11 //  Include Files
12 //-------------------------------------------------------------------------------------------------
13 #ifndef MSOS_TYPE_LINUX_KERNEL
14 
15 #include <stdio.h>
16 #include <string.h>
17 #endif
18 
19 #include "MsCommon.h"
20 #include "MsVersion.h"
21 
22 //-------------------------------------------------------------------------------------------------
23 //  Local Compiler Options
24 //-------------------------------------------------------------------------------------------------
25 
26 
27 //Below is dbg msg for some important dbg function, like:setmux, set gop dst, atexit,etc...
28 
29 
30 //-------------------------------------------------------------------------------------------------
31 //  Local Defines
32 //-------------------------------------------------------------------------------------------------
33 
34 // this func will be call to init by utopia20 framework
CH34RegisterToUtopia(FUtopiaOpen ModuleType)35 void CH34RegisterToUtopia(FUtopiaOpen ModuleType)
36 {
37     // 1. deal with module
38     void* pUtopiaModule = NULL;
39 	UtopiaModuleCreate(MODULE_CH34, 8, &pUtopiaModule);
40     UtopiaModuleRegister(pUtopiaModule);
41     // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
42     UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)CH34Open, (FUtopiaClose)CH34Close, (FUtopiaIOctl)CH34Ioctl);
43 
44 //No globle veriable, no need resource?
45 #if 0
46     // 2. deal with resource
47     void* psResource = NULL;
48     // 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.
49 	UtopiaModuleAddResourceStart(pUtopiaModule, GOPSCD_POOL);
50     // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
51     UtopiaResourceCreate("ch34", sizeof(GOPSCD_RESOURCE_PRIVATE), &psResource);
52     // func to reg res
53     UtopiaResourceRegister(pUtopiaModule, psResource, GOPSCD_POOL);
54 
55 	UtopiaModuleAddResourceEnd(pUtopiaModule, GOPSCD_POOL);
56 #endif
57 
58 }
59 
CH34Open(void ** ppInstance,const void * const pAttribute)60 MS_U32 CH34Open(void** ppInstance, const void* const pAttribute)
61 {
62     CH34_INSTANT_PRIVATE *pCH34Pri = NULL;
63 
64     //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,printf("enter %s %d\n",__FUNCTION__,__LINE__));
65     // instance is allocated here, also can allocate private for internal use, ex, BDMA_INSTANT_PRIVATE
66     UtopiaInstanceCreate(sizeof(CH34_INSTANT_PRIVATE), ppInstance);
67     // setup func in private and assign the calling func in func ptr in instance private
68     UtopiaInstanceGetPrivate(*ppInstance, (void**)&pCH34Pri);
69 
70     pCH34Pri->fpCH34Init            = (IOCTL_CH34_INIT)MDrv_Ch34_Init_U2;
71     pCH34Pri->fpCH34SetMode         = (IOCTL_CH34_SET_MODE)MDrv_Ch34_SetMode_U2;
72     pCH34Pri->fpCH34WriteTable      = (IOCTL_CH34_WRITE_TABLE)MDrv_Ch34_WriteCH34Table_U2;
73     pCH34Pri->fpCH34TurnOnOff       = (IOCTL_CH34_TURN_ONOFF)MDrv_Ch34_TurnOnOff_U2;
74 
75 	return UTOPIA_STATUS_SUCCESS;
76 }
77 
CH34Ioctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)78 MS_U32 CH34Ioctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
79 {
80     MS_U32 u32Ret = En_Drv_CH34_OK;
81     CH34_INSTANT_PRIVATE* psCH34InstPri = NULL;
82 	UtopiaInstanceGetPrivate(pInstance, (void**)&psCH34InstPri);
83 
84     //printf("[%s] cmd:%lx\n",__FUNCTION__,u32Cmd);
85     switch(u32Cmd)
86     {
87         case MAPI_CMD_CH34_INIT:
88         {
89             PCH34_INIT_INFO ptr = (PCH34_INIT_INFO)pArgs;
90             ptr->bReturnValue = psCH34InstPri->fpCH34Init();
91             break;
92         }
93         case MAPI_CMD_CH34_SETMODE:
94         {
95             PCH34_SET_MODE_INFO ptr = (PCH34_SET_MODE_INFO)pArgs;
96             ptr->bReturnValue = psCH34InstPri->fpCH34SetMode(ptr->channel,ptr->videosys,ptr->audiosys);
97 
98             break;
99 
100         }
101         case MAPI_CMD_CH34_WRITETABLE:
102         {
103             PCH34_WRITE_TABLE_INFO ptr = (PCH34_WRITE_TABLE_INFO)pArgs;
104             ptr->bReturnValue = psCH34InstPri->fpCH34WriteTable(ptr->pTable);
105 
106             break;
107 
108         }
109         case MAPI_CMD_CH34_TURNONOFF:
110         {
111             PCH34_TURN_ONOFF_INFO ptr = (PCH34_TURN_ONOFF_INFO)pArgs;
112             ptr->bReturnValue = psCH34InstPri->fpCH34TurnOnOff(ptr->bOn);
113 
114             break;
115 
116         }
117         default:
118             break;
119     };
120 
121     if(u32Ret != En_Drv_CH34_OK)
122     {
123         printf("[%s] ERROR on cmd:%d\n",__FUNCTION__,u32Cmd);
124     }
125 
126     //printf("(%s) Done\n\n",__FUNCTION__);
127 
128 	return UTOPIA_STATUS_SUCCESS;
129 }
130 
CH34Close(void * pInstance)131 MS_U32 CH34Close(void* pInstance)
132 {
133 	UtopiaInstanceDelete(pInstance);
134 
135 	return TRUE;
136 }
137 
138 
139