xref: /utopia/UTPA2-700.0.x/modules/gpio/utopia_adaption/gpio/GPIO_adp.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #include <linux/kernel.h>
2*53ee8cc1Swenshuai.xi #include <linux/string.h>
3*53ee8cc1Swenshuai.xi #include <linux/slab.h>
4*53ee8cc1Swenshuai.xi #include <linux/uaccess.h>
5*53ee8cc1Swenshuai.xi 
6*53ee8cc1Swenshuai.xi #include "MsTypes.h"
7*53ee8cc1Swenshuai.xi #include "utopia.h"
8*53ee8cc1Swenshuai.xi #include "drvGPIO.h"
9*53ee8cc1Swenshuai.xi #include "drvGPIO_private.h"
10*53ee8cc1Swenshuai.xi #include "GPIO_adp.h"
11*53ee8cc1Swenshuai.xi #include "utopia_adp.h"
12*53ee8cc1Swenshuai.xi 
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_Status);
15*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_SET_HIGH_PARAM);
16*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_SET_LOW_PARAM);
17*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_SET_INPUT_PARAM);
18*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_GET_INOUT_PARAM);
19*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_GET_LEVEL_PARAM);
20*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_DETACH_INTERRUPT_PARAM);
21*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_ENABLE_INTERRUPT_PARAM);
22*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(GPIO_DISABLE_INTERRUPT_PARAM);
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(void);
25*53ee8cc1Swenshuai.xi //UADP_SPT_1NXT_DEF(GPIO_ATTACH_INTERRUPT_PARAM);
26*53ee8cc1Swenshuai.xi 
27*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(GPIO_STS_READ);
28*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(GPIO_PRIVATE_STS);
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(GPIO_CALL_BACK);
31*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(GPIO_ATTACH_PARAM);
32*53ee8cc1Swenshuai.xi 
GPIO_adp_Init(FUtopiaIOctl * pIoctl)33*53ee8cc1Swenshuai.xi MS_U32 GPIO_adp_Init(FUtopiaIOctl* pIoctl)
34*53ee8cc1Swenshuai.xi {
35*53ee8cc1Swenshuai.xi //member of struct
36*53ee8cc1Swenshuai.xi //set table
37*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_Status);
38*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_SET_HIGH_PARAM);
39*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_SET_LOW_PARAM);
40*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_SET_INPUT_PARAM);
41*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_GET_INOUT_PARAM);
42*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_GET_LEVEL_PARAM);
43*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_DETACH_INTERRUPT_PARAM);
44*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_ENABLE_INTERRUPT_PARAM);
45*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_DISABLE_INTERRUPT_PARAM);
46*53ee8cc1Swenshuai.xi 	//UADP_SPT_1NXT(GPIO_ATTACH_INTERRUPT_PARAM, GPIO_Callback, void);
47*53ee8cc1Swenshuai.xi 	UADP_SPT_0NXT(GPIO_DISABLE_INTERRUPT_PARAM);
48*53ee8cc1Swenshuai.xi 	UADP_SDT_NAME0(GPIO_STS_READ,GPIO_Status);
49*53ee8cc1Swenshuai.xi 	UADP_SDT_NAME1(GPIO_PRIVATE_STS,GPIO_GET_STS_PARAM,UADP_SDT_P2N,pSts,GPIO_STS_READ);
50*53ee8cc1Swenshuai.xi 	UADP_SDT_NAME0(GPIO_CALL_BACK,void);
51*53ee8cc1Swenshuai.xi 	UADP_SDT_NAME1(GPIO_ATTACH_PARAM,GPIO_ATTACH_INTERRUPT_PARAM,UADP_SDT_P2N,GPIO_Callback,GPIO_CALL_BACK);
52*53ee8cc1Swenshuai.xi 	*pIoctl= (FUtopiaIOctl)GPIO_adp_Ioctl;
53*53ee8cc1Swenshuai.xi 	return 0;
54*53ee8cc1Swenshuai.xi }
55*53ee8cc1Swenshuai.xi 
GPIO_adp_Ioctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)56*53ee8cc1Swenshuai.xi MS_U32 GPIO_adp_Ioctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
57*53ee8cc1Swenshuai.xi {
58*53ee8cc1Swenshuai.xi     MS_U32 u32Ret=0;
59*53ee8cc1Swenshuai.xi     char buffer_arg[2048];
60*53ee8cc1Swenshuai.xi     switch(u32Cmd)
61*53ee8cc1Swenshuai.xi     {
62*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Init:
63*53ee8cc1Swenshuai.xi             u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
64*53ee8cc1Swenshuai.xi             break;
65*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_GetStauts:
66*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_PRIVATE_STS, spt_GPIO_PRIVATE_STS,buffer_arg,sizeof(buffer_arg));
67*53ee8cc1Swenshuai.xi             break;
68*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Set_High:
69*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_HIGH_PARAM, spt_GPIO_SET_HIGH_PARAM,buffer_arg,sizeof(buffer_arg));
70*53ee8cc1Swenshuai.xi             break;
71*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Set_Low:
72*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_LOW_PARAM, spt_GPIO_SET_LOW_PARAM,buffer_arg,sizeof(buffer_arg));
73*53ee8cc1Swenshuai.xi             break;
74*53ee8cc1Swenshuai.xi         case  MDrv_CMD_GPIO_Set_Input:
75*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_INPUT_PARAM, spt_GPIO_SET_INPUT_PARAM,buffer_arg,sizeof(buffer_arg));
76*53ee8cc1Swenshuai.xi             break;
77*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Get_Inout:
78*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_GET_INOUT_PARAM, spt_GPIO_GET_INOUT_PARAM,buffer_arg,sizeof(buffer_arg));
79*53ee8cc1Swenshuai.xi             break;
80*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Get_Level:
81*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_GET_LEVEL_PARAM, spt_GPIO_GET_LEVEL_PARAM,buffer_arg,sizeof(buffer_arg));
82*53ee8cc1Swenshuai.xi             break;
83*53ee8cc1Swenshuai.xi         case  MDrv_CMD_GPIO_Attach_Interrupt:
84*53ee8cc1Swenshuai.xi             u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_ATTACH_PARAM, spt_GPIO_ATTACH_PARAM,buffer_arg,sizeof(buffer_arg));
85*53ee8cc1Swenshuai.xi             break;;
86*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Detach_Interrupt:
87*53ee8cc1Swenshuai.xi 		u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_DETACH_INTERRUPT_PARAM, spt_GPIO_DETACH_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
88*53ee8cc1Swenshuai.xi             break;
89*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_En_Interrupt:
90*53ee8cc1Swenshuai.xi 		u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_ENABLE_INTERRUPT_PARAM, spt_GPIO_ENABLE_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
91*53ee8cc1Swenshuai.xi             break;
92*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Dis_Interrupt:
93*53ee8cc1Swenshuai.xi 		u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_DISABLE_INTERRUPT_PARAM, spt_GPIO_DISABLE_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
94*53ee8cc1Swenshuai.xi             break;
95*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Dis_Interrupt_All:
96*53ee8cc1Swenshuai.xi 		u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
97*53ee8cc1Swenshuai.xi             break;
98*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_En_Interrupt_All:
99*53ee8cc1Swenshuai.xi 		u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
100*53ee8cc1Swenshuai.xi 	     break;
101*53ee8cc1Swenshuai.xi         case MDrv_CMD_GPIO_Interrupt_Action:
102*53ee8cc1Swenshuai.xi 		u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
103*53ee8cc1Swenshuai.xi 	     break;
104*53ee8cc1Swenshuai.xi         default:
105*53ee8cc1Swenshuai.xi             break;
106*53ee8cc1Swenshuai.xi     }
107*53ee8cc1Swenshuai.xi 	return u32Ret;
108*53ee8cc1Swenshuai.xi }
109*53ee8cc1Swenshuai.xi 
110