[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/devdrv/gpio/src/dcl_gpio.c b/mcu/driver/devdrv/gpio/src/dcl_gpio.c
new file mode 100644
index 0000000..1bbc682
--- /dev/null
+++ b/mcu/driver/devdrv/gpio/src/dcl_gpio.c
@@ -0,0 +1,624 @@
+
+
+#if !defined(DRV_GPIO_NOT_EXIST) && !defined(DRV_GPIO_OFF)
+
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "dcl.h"
+#include "drv_gpio.h"
+
+#include "drvpdn.h"
+
+#define DCL_GPIO_MAGIC_NUM			0x80000000
+#define DCL_GPO_MAGIC_NUM			0x40000000
+#define DCL_GPIO_CLK_MAGIC_NUM	0x20000000
+
+#define DCL_GPIO_IS_HANDLE_MAGIC(handle_)       ((handle_)& DCL_GPIO_MAGIC_NUM)
+#define DCL_GPIO_GET_DEV(handle_) 	   	      ((handle_)& (~DCL_GPIO_MAGIC_NUM))
+
+#define DCL_GPO_IS_HANDLE_MAGIC(handle_)        ((handle_) & DCL_GPO_MAGIC_NUM)
+#define DCL_GPO_GET_DEV(handle_)                ((handle_) & (~DCL_GPO_MAGIC_NUM))
+
+#define DCL_GPIO_CLK_IS_HANDLE_MAGIC(handle_)   ((handle_) & DCL_GPIO_CLK_MAGIC_NUM)
+#define DCL_GPIO_CLK_GET_DEV(handle_)           ((handle_) & (~DCL_GPIO_MAGIC_NUM))
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_Initialize
+*
+* DESCRIPTION
+*  This function is to initialize GPIO module. Note that all the GPIO pin
+* will be set to a predefined state.
+*
+* PARAMETERS
+*	DCL_STATUS_OK
+*
+* RETURNS
+*  none
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_Initialize(void)
+{
+   extern void GPIO_init(void);
+   
+   GPIO_init();
+   return STATUS_OK;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_Open
+* DESCRIPTION
+*  This function is to open the GPIO module and get a handle. Note that multiple opens are allowed.
+*
+* PARAMETERS
+*	eDev: - only valid for DCL_GPIO,DCL_GPO,DCL_GPIO_CLK.
+*	flags: - no sepcial flags is needed. Please use FLAGS_NONE
+*
+* RETURN VALUES
+*	DCL_HANDLE_INVALID: - Open failed.
+* other value: - a valid handle
+*
+*-----------------------------------------------------------------------*/
+
+DCL_HANDLE DclGPIO_Open(DCL_DEV eDev, DCL_FLAGS flags)
+{
+//   PDN_CLR(PDN_GPIO);
+   if(flags>GPIO_PIN_MAX)
+   {
+      ASSERT(0);
+      return DCL_HANDLE_INVALID;
+   }
+   if(eDev==DCL_GPIO)
+   {
+      return (DCL_GPIO_MAGIC_NUM | flags);
+   }
+   else if(eDev==DCL_GPO)
+   {
+      return (DCL_GPO_MAGIC_NUM | flags);
+   }
+   else if(eDev==DCL_GPIO_CLK)
+   {
+	   return (DCL_GPIO_CLK_MAGIC_NUM | flags);
+   }
+   else
+   {
+      EXT_ASSERT(0,eDev,flags,0);
+      return DCL_HANDLE_INVALID;
+   }	
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_ReadData
+*
+* DESCRIPTION
+*  This function is not supported for the GPIO module now.
+*
+* PARAMETERS
+*	N/A
+*
+* RETURN VALUES
+*	STATUS_UNSUPPORTED: 
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_ReadData(DCL_HANDLE handle, DCL_BUFF *buff, DCL_BUFF_LEN *buf_len, DCL_OPTIONS options)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_WriteData
+*
+* DESCRIPTION
+*  This function is not supported for the GPIO module now.
+*
+* PARAMETERS
+*	N/A
+*
+* RETURNS
+*	STATUS_UNSUPPORTED
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_WriteData(DCL_HANDLE handle, DCL_BUFF *buff, DCL_BUFF_LEN *buf_len, DCL_OPTIONS options)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_Configure
+*
+* DESCRIPTION
+*  This function is not supported for the GPIO module now.
+*
+* PARAMETERS
+*	N/A
+*
+* RETURNS
+*	STATUS_UNSUPPORTED
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_Configure(DCL_HANDLE handle, DCL_CONFIGURE_T *configure)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_RegisterCallback
+*
+* DESCRIPTION
+*  This function is not supported for the GPIO module now.
+*
+* PARAMETERS
+*	N/A
+*
+* RETURNS
+*	STATUS_UNSUPPORTED
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_RegisterCallback(DCL_HANDLE handle, DCL_EVENT event, PFN_DCL_CALLBACK callback)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_Control
+*
+* DESCRIPTION
+*  This function is to send command to control the GPIO module.
+*
+* PARAMETERS
+*	handle - a valid handle return by DclGPIO_Open()
+*  cmd   - a control command for GPIO module
+*          1. GPIO_CMD_READ: to read the input value from the GPIO port contain in handle.
+*          2. GPIO_CMD_WRITE_LOW: to write low to the output of GPIO port contain in handle.
+*          3. GPIO_CMD_WRITE_HIGH: to write high to the output of  GPIO port contain in handle.
+*          4. GPIO_CMD_SET_MODE_0: to set the mode of the GPIO port contain in handle as mode 0.
+*          5. GPIO_CMD_SET_MODE_1: to set the mode of the GPIO port contain in handle as mode 1.
+*          6. GPIO_CMD_SET_MODE_2: to set the mode of the GPIO port contain in handle as mode 2.
+*          7. GPIO_CMD_SET_MODE_3: to set the mode of the GPIO port contain in handle as mode 3.
+*          8. GPIO_CMD_SET_DIR_OUT: to set the direction of the GPIO port as output.
+*          9. GPIO_CMD_SET_DIR_IN: to set the direction of the GPIO port as input.
+*         10. GPIO_CMD_RETURN_MODE: to get the mode of the GPIO port
+*         11. GPIO_CMD_RETURN_DIR: to get the direction of the GPIO port
+*         12. GPIO_CMD_RETURN_OUT: to return the output value of the GPIO port
+*         13. GPIO_CMD_ENABLE_PULL: to enable the pull resister for a GPIO port
+*         14. GPIO_CMD_DISABLE_PULL: to disenable the pull resister for a GPIO port
+*         15. GPIO_CMD_SET_PULL_HIGH: to select the pull up for a GPIO port
+*         16. GPIO_CMD_SET_PULL_LOW: to select the pull down for a GPIO port
+*         17. GPIO_CMD_SET_DINV: to set the inversion of a GPIO port
+*         18. GPIO_CMD_SET_DEBUG: to enable or disable debug mode
+*         19. GPIO_CMD_SET_CLK_OUT: to set the clock frequency for a clock output
+*
+*         20. GPO_CMD_RETURN_MODE: to get the mode of the GPO port
+*         21. GPO_CMD_RETURN_OUT: to return the output value of the GPO port
+*         22. GPO_CMD_WRITE_HIGH: to write high to the output of  GPO port contain in handle.
+*         23. GPO_CMD_WRITE_LOW: to write low to the output of GPO port contain in handle.
+*         24. GPO_CMD_MODE_SET_0: to set the mode of the GPIO port contain in handle as mode 0.
+*         25. GPO_CMD_MODE_SET_1: to set the mode of the GPI1 port contain in handle as mode 1.
+*         26. GPO_CMD_MODE_SET_2: to set the mode of the GPI2 port contain in handle as mode 2.
+*         27. GPO_CMD_MODE_SET_3: to set the mode of the GPI3 port contain in handle as mode 3.
+
+*         28. GPIO_CMD_SET_DIR_OUT_NO_IRQ_MASK_T: to set the direction of the GPIO port as output without IRQ protect.
+*         29. GPIO_CMD_SET_DIR_IN_NO_IRQ_MASK_T:  to set the direction of the GPIO port as input without IRQ protect
+*         30. GPIO_CMD_WRITE_HIGH_NO_IRQ_MASK_T:  to write high to the output of  GPIO port contain in handle without IRQ protect.
+*         31. GPIO_CMD_WRITE_LOW_NO_IRQ_MASK_T:	  to write low to the output of GPIO port contain in handle without IRQ protect.
+*         32. GPIO_CMD_READ_NO_IRQ_MASK_T:		  to read the input value from the GPIO port contain in handle without IRQ protect..
+
+*         33. GPIO_CMD_WRITE_FOR_SPI_T: 
+*  data - for 1. GPIO_CMD_READ: 
+*          1. GPIO_CMD_READ: pointer to a GPIO_CTRLS structure
+*          2. GPIO_CMD_WRITE_LOW:		NULL.
+*          3. GPIO_CMD_WRITE_HIGH:		NULL.
+*          4. GPIO_CMD_SET_MODE_0:		NULL.
+*          5. GPIO_CMD_SET_MODE_1:		NULL.
+*          6. GPIO_CMD_SET_MODE_2:		NULL.
+*          7. GPIO_CMD_SET_MODE_3:		NULL.
+*          8. GPIO_CMD_SET_DIR_OUT:		NULL.
+*          9. GPIO_CMD_SET_DIR_IN:		NULL.
+*         10. GPIO_CMD_RETURN_MODE: pointer to a GPIO_CTRL_RETURN_MODE_T structure
+*         11. GPIO_CMD_RETURN_DIR:  pointer to a GPIO_CTRL_SET_DIR_T structure
+*         12. GPIO_CMD_RETURN_OUT:  pointer to a GPIO_CTRL_RETURN_OUT_T structure
+*         13. GPIO_CMD_ENABLE_PULL:		NULL.
+*         14. GPIO_CMD_DISABLE_PULL:	NULL.
+*         15. GPIO_CMD_SET_PULL_HIGH:	NULL.	
+*         16. GPIO_CMD_SET_PULL_LOW:	NULL.
+*         17. GPIO_CMD_SET_DINV:  pointer to a GPIO_CTRL_SET_DINV_T structure
+*         18. GPIO_CMD_SET_DEBUG: pointer to a GPIO_CTRL_SET_DEBUG_T structure
+*         19. GPIO_CMD_SET_CLK_OUT: pointer to a GPIO_CTRL_SET_CLK_OUT_T structure
+*
+*         20. GPO_CMD_RETURN_MODE: pointer to a GPO_CTRL_RETURN_MODE_T structure
+*         21. GPO_CMD_RETURN_OUT:  pointer to a GPO_CTRL_RETURN_OUT_T structure
+*         22. GPO_CMD_WRITE_HIGH: NULL.
+*         23. GPO_CMD_WRITE_LOW:  NULL.
+*         24. GPO_CMD_MODE_SET_0: NULL..
+*         25. GPO_CMD_MODE_SET_1: NULL..
+*         26. GPO_CMD_MODE_SET_2: NULL.
+*         27. GPO_CMD_MODE_SET_3: NULL.
+
+*         28. GPIO_CMD_SET_DIR_OUT_NO_IRQ_MASK_T: NULL.
+*         29. GPIO_CMD_SET_DIR_IN_NO_IRQ_MASK_T:  NULL.
+*         30. GPIO_CMD_WRITE_HIGH_NO_IRQ_MASK_T:  NULL.
+*         31. GPIO_CMD_WRITE_LOW_NO_IRQ_MASK_T:	  NULL.
+*         32. GPIO_CMD_READ_NO_IRQ_MASK_T:		  pointer to a GPIO_CTRLS structure
+
+*         33. GPIO_CMD_WRITE_FOR_SPI_T: pointer to
+* RETURNS
+*	STATUS_OK - command is executed successfully.
+*	STATUS_FAIL - command is failed.
+*  STATUS_INVALID_CMD - The command is invalid.
+*  STATUS_INVALID_HANDLE - The handle is invalid.
+*  STATUS_INVALID_CTRL_DATA - The ctrl data is not valid.
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_Control(DCL_HANDLE handle, DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data)
+{
+   kal_int16  port; 
+   port= 0x0000FFFF & handle;
+
+   if(DCL_HANDLE_INVALID==handle)
+   {
+   	return STATUS_FAIL;
+   }
+
+   if(DCL_GPIO_IS_HANDLE_MAGIC(handle))
+   {
+	   switch(cmd)
+	   {
+         case GPIO_CMD_READ:
+         {
+            GPIO_CTRL_READ_T   *prRead;
+            prRead = &(data->rRead);
+            prRead->u1IOData = GPIO_ReadIO(port);
+            break;
+         }
+         case GPIO_CMD_WRITE_LOW:
+         {
+            GPIO_WriteIO(GPIO_IO_LOW, port);
+            break;
+         }
+         case GPIO_CMD_WRITE_HIGH:
+         {
+            GPIO_WriteIO(GPIO_IO_HIGH, port);
+            break;
+         } 
+         case GPIO_CMD_SET_MODE_0:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_0);
+            break;
+         }
+         case GPIO_CMD_SET_MODE_1:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_1);
+            break;
+         }
+         case GPIO_CMD_SET_MODE_2:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_2);
+            break;		   	  	
+         }
+         case GPIO_CMD_SET_MODE_3:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_3);
+            break;			   	  	
+         }
+         case GPIO_CMD_SET_MODE_4: //mode4-7 only for chip support more than 3bit mode control.
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_4);
+            break;
+         }
+         case GPIO_CMD_SET_MODE_5:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_5);
+            break;
+         }
+         case GPIO_CMD_SET_MODE_6:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_6);
+            break;	
+         }
+         case GPIO_CMD_SET_MODE_7:
+         {
+            GPIO_ModeSetup(port, GPIO_MODE_7);
+            break;	
+         } 	  
+         case GPIO_CMD_SET_DIR_OUT:
+         {
+            GPIO_InitIO(GPIO_DIR_OUT,port);
+            break;
+         }
+         case GPIO_CMD_SET_DIR_IN:
+         {
+            GPIO_InitIO(GPIO_DIR_IN,port);
+            break;		   			
+         }
+         case GPIO_CMD_RETURN_MODE:
+         {
+            GPIO_CTRL_RETURN_MODE_T   *prReturnMode;
+            prReturnMode = &(data->rReturnMode);
+            prReturnMode->u1RetMode = GPIO_ReturnMode(port);
+            break;
+         }
+         case GPIO_CMD_RETURN_DIR:
+         {
+            GPIO_CTRL_RETURN_DIR_T   *prReturnDir;
+            prReturnDir = &(data->rReturnDir);
+            prReturnDir->u1RetDirData =GPIO_ReturnDir(port);
+            break;
+         }
+         case GPIO_CMD_RETURN_OUT:
+         {
+            GPIO_CTRL_RETURN_OUT_T   *prReturnOut;
+            prReturnOut = &(data->rReturnOut);
+            prReturnOut->u1RetOutData = GPIO_ReturnDout(port);
+            break;
+         }
+         case GPIO_CMD_ENABLE_PULL:
+         {
+            GPIO_PullenSetup(port, (kal_bool)GPIO_PULL_ENABLE);
+            break;
+         }
+         case GPIO_CMD_DISABLE_PULL:
+         {
+            GPIO_PullenSetup(port, (kal_bool)GPIO_PULL_DISABLE);
+            break;
+         }
+         case GPIO_CMD_SET_PULL_HIGH:
+         {
+            GPIO_PullSelSetup(port,(kal_bool) GPIO_PULL_HIGH);
+            break;
+         }
+         case GPIO_CMD_SET_PULL_LOW:
+         {
+            GPIO_PullSelSetup(port, (kal_bool)GPIO_PULL_LOW);
+            break;
+         }   
+         case GPIO_CMD_SET_DINV:
+         {
+            GPIO_CTRL_SET_DINV_T   *prSetDinv;
+            prSetDinv = &(data->rSetDinv);
+            GPIO_DinvSetup(port,(kal_bool)( prSetDinv->fgSetDinv));
+            break;
+         }
+         case GPIO_CMD_SET_DEBUG:
+         {
+//            GPIO_CTRL_SET_DEBUG_T   *prSetDebug;
+//            prSetDebug = &(data->rSetDebug);
+//            GPIO_SetDebugMode((kal_bool)(prSetDebug->fgSetDebug));
+            break;
+         }
+         #ifdef __CUST_NEW__
+         case GPIO_CMD_SET_DIR_OUT_NO_IRQ_MASK: 
+         {
+            GPIO_InitIO_FAST(GPIO_DIR_OUT,port);
+            break;
+         }
+         case GPIO_CMD_SET_DIR_IN_NO_IRQ_MASK:
+         {
+            GPIO_InitIO_FAST(GPIO_DIR_IN,port);
+            break;
+         }
+         case GPIO_CMD_WRITE_HIGH_NO_IRQ_MASK:
+         {
+            GPIO_WriteIO_FAST(GPIO_IO_HIGH,port);
+            break;
+         }
+         case GPIO_CMD_WRITE_LOW_NO_IRQ_MASK:
+         {
+            GPIO_WriteIO_FAST(GPIO_IO_LOW,port);
+            break;
+         }
+		  case GPIO_CMD_READ_NO_IRQ_MASK:
+         {
+            GPIO_CTRL_READ_T   *prRead;
+            prRead = &(data->rRead);
+            prRead->u1IOData = GPIO_ReadIO_FAST(port);
+            break;
+         }
+         #endif
+         case GPIO_CMD_WRITE_FOR_SPI:
+         {
+            GPIO_CTRL_WRITE_FOR_SPI_T *prWrite;
+            prWrite = &(data->rWriteSpi);
+            GPIO_WriteIO_FAST2(prWrite->data,prWrite->no,prWrite->remainder_shift);
+            break;
+         }		
+         case GPIO_CMD_SET_OWNERSHIP_TO_MD:
+         {
+         	gpio_set_ownership(port,GPIO_MD_OWNERSHIP);
+         	break;
+         }
+         case GPIO_CMD_SET_OWNERSHIP_TO_AP:
+         {
+         	gpio_set_ownership(port,GPIO_AP_OWNERSHIP);
+         	break;
+         }
+         case GPIO_CMD_SET_DRIVE:
+         {
+         	GPIO_CTRL_SET_DRIVE_T *prDrive;
+         	prDrive = &(data->rSetDrive);
+         	if(gpio_set_drive(port,prDrive->u1DriveMode)!=0)
+         	{
+         	 	return STATUS_FAIL;	
+         	}
+         	break;
+         }
+         case GPIO_CMD_RETURN_DRIVE:
+         {
+//         	GPIO_CTRL_SET_DRIVE_T *prDrive;
+//         	prDrive = &(data->rReturnDrive);
+//         	prDrive->u1DriveMode = gpio_get_drive_value(port);
+         	break;
+         }
+         case GPIO_CMD_RETURN_OWNERSHIP:
+         {
+         	GPIO_CTRL_RETURN_OWNERSHIP_T *prOwnership;
+         	prOwnership = &(data->rReturnOwnership);
+         	prOwnership->u1OwnerShip = gpio_get_ownership(port);
+         	break;
+         }
+         default:
+            EXT_ASSERT(0,handle,cmd,0);
+            return STATUS_INVALID_CMD;
+      }
+   }
+   else if(DCL_GPO_IS_HANDLE_MAGIC(handle))
+   {
+      switch(cmd)
+      {
+         case GPO_CMD_MODE_SET_0:
+         {
+//            GPO_ModeSetup(port,GPO_MODE_0);
+            break;
+         }
+         case GPO_CMD_MODE_SET_1:
+         {
+//            GPO_ModeSetup(port,GPO_MODE_1);
+            break;
+         }
+         case GPO_CMD_MODE_SET_2:
+         {
+//            GPO_ModeSetup(port,GPO_MODE_2);
+            break;
+         }
+         case GPO_CMD_MODE_SET_3:
+         {
+//            GPO_ModeSetup(port,GPO_MODE_3);
+            break;
+         }
+         case GPO_CMD_WRITE_LOW :
+         {
+//            GPO_WriteIO(port,GPO_IO_LOW);
+            break;
+         }
+         case GPO_CMD_WRITE_HIGH:
+         {
+//            GPO_WriteIO(port,GPO_IO_HIGH);
+            break;
+         }
+         case GPO_CMD_RETURN_OUT:
+         {
+//            GPO_CTRL_RETURN_OUT_T   *prReturnOut;
+//            prReturnOut = &(data->oReturnOut);
+//            prReturnOut->u1RetOutData = GPO_ReturnDout(port);
+            break;
+         }
+         case GPO_CMD_RETURN_MODE:
+         {
+//            GPO_CTRL_RETURN_MODE_T   *prReturnMode;
+//            prReturnMode = &(data->oReturnMode);
+//            prReturnMode->u1RetMode = GPO_ReturnMode(port);
+            break;
+         }
+         default:
+            EXT_ASSERT(0,handle,cmd,0);
+            return STATUS_INVALID_CMD;
+      }
+   }
+   else if (DCL_GPIO_CLK_IS_HANDLE_MAGIC(handle))
+   {
+      switch(cmd)
+      {
+         case GPIO_CMD_SET_CLK_OUT:
+         {
+         	/* //not support in MT6290
+            kal_uint8 mode=0;
+            kal_uint8 clknum=0;
+            GPIO_CTRL_SET_CLK_OUT_T   *prSetClkOut;
+            prSetClkOut = &(data->rSetClkOut);
+            mode = get_mode(prSetClkOut->u2Mode);
+            clknum=get_clknum(prSetClkOut->u2ClkNum);
+            GPIO_SetClkOut(clknum,(gpio_clk_mode)mode);
+            */
+            break;
+         }
+         case GPIO_CMD_SET_CLK_DIV:
+         {
+         	/* //not support in MT6290
+            kal_uint8 clknum=0;
+            GPIO_CTRL_SET_CLK_DIV_T *prSetClkDiv;
+            prSetClkDiv= &(data->rSetClkDiv);
+            clknum=get_clknum(prSetClkDiv->u2ClkNum);
+            GPIO_SetClkDiv(clknum,prSetClkDiv->u2Div);
+            */
+            break;
+         }
+         default:
+            EXT_ASSERT(0,handle,cmd,0);
+            return STATUS_INVALID_CMD;
+      }
+   }
+   else
+   {
+      EXT_ASSERT(0,handle,cmd,0);
+      return STATUS_INVALID_DCL_HANDLE;
+   }  
+   return STATUS_OK;
+}
+
+/*-----------------------------------------------------------------------*
+* FUNCTION
+*  DclGPIO_Close
+*
+* DESCRIPTION
+*  This function is not supported for the GPIO module now.
+*
+* PARAMETERS
+*	N/A
+*
+* RETURNS
+*	STATUS_UNSUPPORTED
+*
+*-----------------------------------------------------------------------*/
+DCL_STATUS DclGPIO_Close(DCL_HANDLE handle)
+{
+   return STATUS_OK;
+}
+
+
+#else /*!defined(DRV_GPIO_NOT_EXIST) && !defined(DRV_GPIO_OFF)*/
+
+DCL_STATUS DclGPIO_Initialize(void)
+{
+   return STATUS_FAIL;
+}
+
+DCL_HANDLE DclGPIO_Open(DCL_DEV dev, DCL_FLAGS flags)
+{
+   return DCL_HANDLE_INVALID;
+}
+
+DCL_STATUS DclGPIO_ReadData(DCL_HANDLE handle, DCL_BUFF *buff, DCL_BUFF_LEN *buf_len, DCL_OPTIONS options)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+DCL_STATUS DclGPIO_WriteData(DCL_HANDLE handle, DCL_BUFF *buff, DCL_BUFF_LEN *buf_len, DCL_OPTIONS options)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+DCL_STATUS DclGPIO_Configure(DCL_HANDLE handle, DCL_CONFIGURE_T *configure)
+{
+   return STATUS_UNSUPPORTED;
+}
+
+DCL_STATUS DclGPIO_RegisterCallback(DCL_HANDLE handle, DCL_EVENT event, PFN_DCL_CALLBACK callback)
+{
+   return STATUS_FAIL;
+}
+
+DCL_STATUS DclGPIO_Control(DCL_HANDLE handle, DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data)
+{
+   return STATUS_FAIL;
+}
+
+DCL_STATUS DclGPIO_Close(DCL_HANDLE handle)
+{
+   return STATUS_FAIL;
+}
+#endif /*!defined(DRV_GPIO_NOT_EXIST) && !defined(DRV_GPIO_OFF)*/
+
diff --git a/mcu/driver/devdrv/gpio/src/drv_gpio.c b/mcu/driver/devdrv/gpio/src/drv_gpio.c
new file mode 100644
index 0000000..9971f3f
--- /dev/null
+++ b/mcu/driver/devdrv/gpio/src/drv_gpio.c
@@ -0,0 +1,1447 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2012
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ * Filename:
+ * ---------
+ *   drv_gpio.c
+ *
+ * Project:
+ * --------
+ *   TATAKA
+ *
+ * Description:
+ * ------------
+ *   Low level GPIO driver
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 05 06 2022 yao.xue
+ * [MOLY00851720] [FM350][MIPI][IO_Driving][clock speed][zontn.wang]The MIPI IO Driving strength and clock speed setting
+ * modify GPIO IOCFG regbase.
+ *
+ * 11 16 2020 zhiqiang.yu
+ * [MOLY00595491] [Colgin]MD GPIO DRV Patchback From T700 Branch
+ * 	
+ * 	.
+ *
+ * 11 11 2020 zhiqiang.yu
+ * [MOLY00593568] [MT6877]Call For Check In MD GPIO Drv
+ * 	
+ * 	.
+ *
+ * 07 16 2020 zhiqiang.yu
+ * [MOLY00546611] [MT6833]Call For Check In MD GPIO Driver
+ * 	
+ * 	.
+ *
+ * 01 21 2020 zhiqiang.yu
+ * [MOLY00476172] [MT6853]Call For Check In GPIO Drv
+ * 	
+ * 	.
+ *
+ * 12 04 2019 zhiqiang.yu
+ * [MOLY00463572] [MMRF] Ddie driving customization development
+ * 	
+ * 	.GPIO DRIVER
+ *
+ * 09 24 2019 zhiqiang.yu
+ * [MOLY00443103] [MT6873]Check in md gpio driver
+ * 	
+ * 	.
+ *
+ * 06 18 2019 zhiqiang.yu
+ * [MOLY00413533] [MT6297]Fix GPIO Drv build Warning about LTO
+ * 	
+ * 	.
+ *
+ * 12 07 2018 zhiqiang.yu
+ * [MOLY00371362] [Pertus]check in gpio drv
+ * 	
+ * 	.fix build error
+ *
+ * 08 21 2018 zhiqiang.yu
+ * [MOLY00347417] [MT6297][VMOLY]check in md gpio&eint drv
+ * 	
+ * 	.fix build error
+ *
+ * 08 02 2018 zhiqiang.yu
+ * [MOLY00343825] [MT6779]Call For Check In,gpio driver
+ * 	
+ * 	.
+ *
+ * 04 03 2018 zhiqiang.yu
+ * remove ownership@6290.
+ *
+ * 12 18 2017 zhiqiang.yu
+ * [MOLY00296840] [EIGER]call for mt3967 gpio driver
+ * 	
+ * 	.
+ *
+ * 11 01 2017 zhiqiang.yu
+ * [MOLY00244517] [MT6295M]fix build error,for gpio driver.patch back from LR12A.MP2.MT6295M.DEV.
+ *
+ * 10 30 2017 zhiqiang.yu
+ * [MOLY00286048] [MT6765]check in gpio drv for MT6765.
+ *
+ * 08 24 2017 zhiqiang.yu
+ * [MOLY00273500] [MT6771]check in md gpio driver
+ * 	
+ * 	.
+ *
+ * 06 12 2017 zhiqiang.yu
+ * [MOLY00244007] [MT6739]check in gpio driver for zion
+ * 	
+ * 	.
+ *
+ * 11 16 2016 zhiqiang.yu
+ * [MOLY00213576] [MT6763]eint&gpio driver check in.
+ *
+ * 02 22 2016 zhiqiang.yu
+ * [MOLY00165689] Code Inspection and MSBB Scan
+ * Fix high impact defect.
+ *
+ * 08 04 2015 zhiqiang.yu
+ * [MOLY00135213] check in gpiodriver code for mt6797 project
+ * .
+ *
+ * 07 22 2015 zhiqiang.yu
+ * [MOLY00131033] enable sp set gpio mode funtion
+ * 	<saved by Perforce>
+ *
+ * 06 17 2015 zhiqiang.yu
+ * [MOLY00121904] checkin md eint code for mt6755
+ * .
+ *
+ * 06 16 2015 zhiqiang.yu
+ * [MOLY00121625] checkin md gpio code for mt6755
+ * 	.
+ *
+ * 06 30 2014 chuanbo.liao
+ * [MOLY00070787] [tk6291]fix 6291 build error
+ * [6291]modify the EINT/GPIO base address
+ *
+ * 05 10 2013 da.wang
+ * [MOLY00022149] [MT6290E1][TRUNK] Add GPIO driver API for Meta mode solution
+ * Upload GPIO driver API for meta mode.
+ *
+ * 02 04 2013 da.wang
+ * [MOLY00009904] [GPIO/EINT] Rename MT7280 to MT6290 on MOLY trunk
+ * .rename GPIO/EINT related keywords MT7208 to MT6290 in MOLY
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "drv_gpio.h"
+#include "kal_general_types.h"
+#include "devdrv_ls.h"
+
+
+//========================================================================
+//  Global variable
+//========================================================================   
+
+#ifdef __CUST_NEW__
+   #if defined(DRV_GPIO_8_MODES) || defined(DRV_GPIO_MODE_4BITS)
+   extern const kal_uint32  gpio_mode_allowed[][8];
+   #else //defined(DRV_GPIO_8_MODES) || defined(DRV_GPIO_MODE_4BITS)
+extern const kal_uint32  gpio_mode_allowed[][4];
+   #endif //defined(DRV_GPIO_8_MODES) || defined(DRV_GPIO_MODE_4BITS)
+extern const kal_uint32  gpio_dir_out_allowed[];
+extern const kal_uint32  gpio_dir_in_allowed[];
+extern const kal_uint16  gpo_mode_allowed[];
+extern kal_uint32  gpio_check_for_write[];
+extern kal_uint32  gpio_check_for_read[];
+extern kal_uint16  gpo_check_for_write[];
+extern kal_bool   gpio_debug_enable;
+#endif /* __CUST_NEW__ */
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+//========================================================================
+/**
+ *  @brief     get direction register value of pin
+ *  @param  gpio_pin :  The GPIO pin to be read.
+ *  @return   return the direction register value of gpio_pin
+ *		      0:                 the direction of gpio is input
+ *            1:                 the direction of gpio is output
+ *            GPIO_FAIL:   gpio_pin is out of range
+ */
+kal_int32 gpio_get_dir_value (gpio_pin_e gpio_pin)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	unsigned long pos;
+	unsigned long bit;
+	unsigned long data;
+
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}	
+
+	pos = gpio_pin/32;
+	bit = gpio_pin%32;
+
+	data = DRV_Reg32((GPIO_DIR1 + pos*0x10));
+
+	return ((data&(1<<bit))?1:0);	
+
+#endif
+}
+
+// ----------------------------------------------------------
+/**
+ *  @brief	Set GPIO_DIR input or output
+ *  @param  gpio_pin :  The GPIO pin to be set.
+ *  @param  direction : The direction to be set in gpio_pin.
+ *  					1: set as output pin
+ *					0: set as input pin
+ *  @return  GPIO_OK : set successful,  GPIO_FAIL : set failed
+ */
+static kal_int32 _GPIO_Set_Direction(gpio_pin_e gpio_pin, kal_uint32 direction)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	unsigned long pos;
+	unsigned long bit;
+	//unsigned long data;
+
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}	
+
+	pos = gpio_pin/32;
+	bit = gpio_pin%32;
+	if (direction == GPIO_AS_OUTPUT)
+		DRV_WriteReg32(GPIO_DIR_SET(pos),1<<bit);
+	else
+		DRV_WriteReg32(GPIO_DIR_CLR(pos),1<<bit);
+
+	return GPIO_OK; 
+
+#endif
+}
+
+
+
+//========================================================================
+/*-----------------------------------------------------------------------*
+*  @brief  Read the input value of the gpio pin.
+*  @param  gpio_pin :   The pin which to read value.
+*  @param  *value	   :	The variable to save value read from the pin, will be 0 or 1.
+*  @return GPIO_OK :   get successful,  GPIO_FAIL : get failed
+*-----------------------------------------------------------------------*/
+kal_int32 GPIO_READ_INPUT_VALUE (gpio_pin_e gpio_pin, kal_uint32 *value)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	unsigned long pos;
+	unsigned long bit;
+	unsigned long data;
+
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}	
+
+	pos = gpio_pin/32;
+	bit = gpio_pin%32;
+	data = DRV_Reg32((GPIO_DIN1 + pos*0x10));
+	*value=((data&(1<<bit))?1:0);
+
+	return GPIO_OK; 
+
+#endif
+}
+
+
+
+
+// ----------------------------------------------------------
+/**
+ *  @brief	Enable or Disable GPIO_PULLEN specific pin
+ *  @param  gpio_pin :  The GPIO pin to be set.
+ *  @param  pullen : set 1 to enable pull up/down in gpio_pin.
+ *  @return  GPIO_OK : set successful,  GPIO_FAIL : set failed
+ */
+kal_int32 _GPIO_Set_Pullen(gpio_pin_e gpio_pin, kal_uint32 pullen)  
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	return GPIO_FAIL;	
+#else
+	return GPIO_FAIL;
+#endif
+}
+
+// ----------------------------------------------------------
+/**
+ *  @brief	Set GPIO_PULLSEL to pull-up or pull-down
+ *  @param  gpio_pin :  The GPIO pin to be set.
+ *  @param  updown : set GPIO_PULL_UP to set gpio_pin in pull-up. set GPIO_PULL_DOWN to set gpio_pin pull_down.
+ *  @return  GPIO_OK : set successful,  GPIO_FAIL : set failed
+ */
+kal_int32 _GPIO_Set_Pullsel(gpio_pin_e gpio_pin, kal_uint32 updown)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	return GPIO_FAIL;	
+#else
+	return GPIO_FAIL;
+#endif
+}
+
+
+/**
+*  @brief  Set pin direction as an output pin.
+*  @param  gpio_pin : The pin which to be set direction to output pin.
+*  @return GPIO_OK : set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 GPIO_SET_DIRECT_OUTPUT (gpio_pin_e gpio_pin)
+{
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}
+	
+	if (GPIO_FAIL == _GPIO_Set_Pullen(gpio_pin, GPIO_DISABLE) )
+	{	return GPIO_FAIL; }
+		
+	if (GPIO_FAIL == _GPIO_Set_Direction(gpio_pin, GPIO_AS_OUTPUT) )
+	{	return GPIO_FAIL; }
+
+	return GPIO_OK;
+}
+
+//========================================================================
+/**
+*  @brief  Set pin direction as an input pin.
+*  @param  gpio_pin	   :	The pin which want to be set.
+*  @param  pull_en	   :   GPIO_ENABLE or GPIO_DISABLE, Set if pull-up/down function is enable. 
+*  @param  pull_updown  :   GPIO_PULL_UP / GPIO_PULL_DOWN, it works only when pull_en is enable.
+*  @return GPIO_OK : set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 GPIO_SET_DIRECT_INPUT (gpio_pin_e gpio_pin, kal_uint32 pull_en, kal_uint32 pull_updown)
+{
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}	
+				/* Step-1 Check GPIO_Mode to make sure the pin can be uesed as GPIO*/
+				//_GPIO_ShareMode_Chk(gpio_pin);
+
+				/* Step-2 set the pull-up/down */
+				// When input, the pullen could be set as required
+				// If the pullen is set, the pullsel should be set.
+	if (GPIO_FAIL == _GPIO_Set_Pullen(gpio_pin, pull_en) )
+	{	return GPIO_FAIL; }
+
+				/* Step-3 set the pull-up/down when gpio is input*/
+	if (GPIO_FAIL == _GPIO_Set_Pullsel(gpio_pin, pull_updown) )
+	{	return GPIO_FAIL; }
+
+				/* Step-4 set the direction to input*/
+	if (GPIO_FAIL == _GPIO_Set_Direction(gpio_pin, GPIO_AS_INPUT) )
+	{	return GPIO_FAIL; }		
+	
+	
+		return GPIO_OK;
+}
+	
+
+//========================================================================
+/**
+*  @brief  set the data inversion parameter of the gpio pin.
+*  @param  gpio_pin :	The pin which is to be set data inversion.
+*  @param  inversion:	The value to be set, will be 0 or 1.
+*					0: disable data inversion
+					1: enable data inversion
+*  @return GPIO_OK :   set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 gpio_set_data_inversion(gpio_pin_e gpio_pin, kal_uint32 inversion)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	return GPIO_FAIL;	
+#else
+	return GPIO_FAIL;
+#endif
+}
+
+
+
+//========================================================================
+/**
+*  @brief  Write the output value of the gpio pin. It only work when the pin is an output pin.
+*  @param  gpio_pin :	The pin which to be set output value.
+*  @param  value	   :	The value which want to be set, can be 0 or 1.
+*  @return GPIO_OK :   set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 GPIO_WRITE_OUTPUT_VALUE (gpio_pin_e gpio_pin, kal_uint32 value)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	unsigned long pos;
+	unsigned long bit;
+	//unsigned long data;
+
+	if (gpio_pin>GPIO_PIN_MAX)
+	{
+		GPIO_ERR("The gpio pin is out of range of MAX num (%d) !!!!", GPIO_PIN_MAX);
+		return GPIO_FAIL;
+	}	
+
+	pos = gpio_pin/32;
+	bit = gpio_pin%32;
+	if (value == GPIO_OUTPUT_HIGH)
+		DRV_WriteReg32(GPIO_DOUT_SET(pos),1<<bit);
+	else
+		DRV_WriteReg32(GPIO_DOUT_CLR(pos),1<<bit);
+
+	return GPIO_OK;	
+#endif
+}
+
+
+/*-----------------------------------------------------------------------*
+* FUNCTION                                                            
+*	GPIO_ReadIO
+*
+* DESCRIPTION                                                           
+*   	This function is to read data from one GPIO pin
+*
+* CALLS  
+*	Read data from one GPIO pin
+*
+* PARAMETERS
+*	port: pin number
+*	
+* RETURNS
+*	1 or 0
+*
+* GLOBALS AFFECTED
+*   external_global
+*-----------------------------------------------------------------------*/
+char GPIO_ReadIO(kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+	kal_uint32 input_val = 0;
+	if(GPIO_READ_INPUT_VALUE((gpio_pin_e)port, &input_val) != GPIO_OK)
+	{
+		GPIO_ERR("\tGPIO_ReadIO: read the value of port[%d] failed!! ",port);
+	}
+	return (char)input_val;
+#endif
+}
+
+
+/*
+* FUNCTION                                                            
+*	GPIO_WriteIO
+*
+* DESCRIPTION                                                           
+*   	This function is to write data to one GPIO port
+*
+* CALLS  
+*	Write data to one GPIO port
+*
+* PARAMETERS
+*	data: KAL_TRUE(1) or KAL_FALSE(0)
+*	port: gpio pin number
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global        
+*/
+void GPIO_WriteIO(char data, kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	GPIO_WRITE_OUTPUT_VALUE((gpio_pin_e)port,data);
+#endif
+}
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+#define MAX_GPIO_MODE_PER_REG 8
+#define GPIO_MODE_BITS  4
+#endif
+void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_data)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+#if defined(__FPGA__) && defined(MT6295M)
+
+#else
+	unsigned long pos;
+	unsigned long bit;
+	unsigned long data;
+	unsigned long mask = (1L << GPIO_MODE_BITS)-1;
+	unsigned long offset;
+
+	pos = pin/MAX_GPIO_MODE_PER_REG;
+	bit = pin%MAX_GPIO_MODE_PER_REG;
+
+	offset = GPIO_MODE_BITS*bit;
+	
+	data = DRV_Reg32(GPIO_MODE(pos));
+	data &= ~(mask << offset);
+	data |= (conf_data << offset);
+	//to avoid possible race condition with AP,use SET/CLR reg to setup MODE register
+	DRV_WriteReg32(GPIO_MODE_CLR(pos),(mask << (GPIO_MODE_BITS*bit)));
+	DRV_WriteReg32(GPIO_MODE_SET(pos),data);
+#endif	
+#endif	
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_InitIO
+*
+* DESCRIPTION                                                           
+*   	This function is to initialize one GPIO pin as INPUT or OUTPUT
+*
+* CALLS  
+*	Initialize one GPIO pin as INPUT or OUTPUT
+*
+* PARAMETERS
+*	direction: INPUT or OUTPUT
+*	port: pin number
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+void GPIO_InitIO(char direction, kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	if(GPIO_OUTPUT == direction)
+	{
+		_GPIO_Set_Direction((gpio_pin_e)port,GPIO_OUTPUT);
+	}
+	else
+	{
+		_GPIO_Set_Direction((gpio_pin_e)port,GPIO_INPUT);
+	}
+
+#endif
+}
+
+char GPIO_ReturnMode(kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+#if defined(__FPGA__) && defined(MT6295M)
+	return GPIO_FAIL;
+#else
+	unsigned long pos;
+	unsigned long bit;
+	unsigned long data;
+	unsigned long mask = (1L << GPIO_MODE_BITS)-1;
+	unsigned long offset;
+
+	pos = port/MAX_GPIO_MODE_PER_REG;
+	bit = port%MAX_GPIO_MODE_PER_REG;
+
+	offset = GPIO_MODE_BITS*bit;
+	
+	data = DRV_Reg32(GPIO_MODE(pos));
+	data = (data >> offset)&mask;
+	return (char)data;
+#endif	
+#else
+	return GPIO_FAIL;
+#endif	
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_ReturnDir
+*
+* DESCRIPTION                                                           
+*   	This function is to report GPIO direction value
+*
+* CALLS  
+*	Report GPIO direction value accoding to input pin
+*
+* PARAMETERS
+*	GPIO pin 
+*	
+* RETURNS
+*	GPIO direction value
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+char GPIO_ReturnDir(kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	return gpio_get_dir_value(port);
+#endif
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_ReturnDout
+*
+* DESCRIPTION                                                           
+*   	This function is to report GPIO output value
+*
+* CALLS  
+*	Report GPIO output value accoding to input pin
+*
+* PARAMETERS
+*	GPIO pin 
+*	
+* RETURNS
+*	GPIO output value
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+char GPIO_ReturnDout(kal_int16 port)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	return GPIO_FAIL;
+#endif
+}
+
+
+/*
+* FUNCTION                                                            
+*	GPIO_PullenSetup
+*
+* DESCRIPTION                                                           
+*   	This function is to enable or disable the pull up/down of the related GPIO pin.
+*		You can not decide to pull up or down, it is set inside the chip.
+*		And, the setting is different from pin by pin.
+*
+* PARAMETERS
+*	pin : gpio pin number range from 0~63
+*	enable: enable the pull up/down
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*
+*/
+void GPIO_PullenSetup(kal_uint16 pin, kal_bool enable)
+{
+	#ifdef __CUST_NEW__  
+	pin &= (~GPIO_MAGIC_NUM);
+	#endif
+	_GPIO_Set_Pullen(pin,enable);
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_PullSelSetup
+*
+* DESCRIPTION                                                           
+*   	This function is to select pull up/down of the related GPIO pin.
+*
+* PARAMETERS
+*	pin : gpio pin number range from 0~63
+*	enable: enable the pull up/down
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*
+*/
+void GPIO_PullSelSetup(kal_uint16 pin, kal_bool pull_up)
+{
+	#ifdef __CUST_NEW__  
+	pin &= (~GPIO_MAGIC_NUM);
+	#endif
+	_GPIO_Set_Pullsel(pin,pull_up);
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_DinvSetup
+*
+* DESCRIPTION                                                           
+*   	This function is to enable data invert of the related GPIO pin
+*
+* PARAMETERS
+*	pin : gpio pin number range from 0~63
+*	enable: enable the data inversion
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*
+*/
+void GPIO_DinvSetup(kal_uint16 pin, kal_bool enable)
+{
+	#ifdef __CUST_NEW__  
+	pin &= (~GPIO_MAGIC_NUM);
+	#endif
+	gpio_set_data_inversion(pin,enable);
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_SetDebugMode
+*
+* DESCRIPTION                                                           
+*  This function is to set GPIO HW debug mode
+*  currently MT6290 not support this function
+*
+* CALLS  
+*	set GPIO HW debug mode
+*
+* PARAMETERS
+*	enable   - KAL_TRUE: turn on the debug mode
+*             KAL_FALSE: turn off the debug mode
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+void GPIO_SetDebugMode(kal_bool enable)
+{
+	//not support in MT6290
+}
+
+#ifdef __CUST_NEW__
+
+/*
+* FUNCTION                                                            
+*	GPIO_InitIO_FAST
+*
+* DESCRIPTION                                                           
+*   	This function is to initialize one GPIO pin as INPUT or OUTPUT. 
+*  Note that it's for fast access without debug checking and only exists
+*  when __CUST_NEW__ is defined.
+*
+* CALLS  
+*	Initialize one GPIO pin as INPUT or OUTPUT
+*
+* PARAMETERS
+*	direction: INPUT or OUTPUT
+*	port: pin number
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+void GPIO_InitIO_FAST(char direction, kal_int16 port)
+{
+	 #ifdef __GPIO_FAST_DEBUB__
+   if (gpio_debug_enable == KAL_TRUE)
+   {
+      if (direction == 0)
+      {
+      #ifdef __GPIO_CHECK_WARNING__
+         if (!kal_if_lisr()) {
+            if (!((gpio_dir_in_allowed[(kal_uint8)port>>5]) & (1 << (port & 0x1f))))
+            {
+               kal_int32 ret;
+             system_print("GPIO WARNING!! GPIO_InitIO_FAST: Direction Input is not allowed!");
+             ret = sprintf(buff, "pin=%d", port);
+             system_print(buff);
+            }
+         }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+         ASSERT((gpio_dir_in_allowed[(kal_uint8)port>>5]) & (1 << (port & 0x1f)));
+		#endif  /* __GPIO_CHECK_WARNING__ */
+      }
+      else
+      {
+      #ifdef __GPIO_CHECK_WARNING__
+         if (!kal_if_lisr()) {
+            if (!((gpio_dir_out_allowed[(kal_uint8)port>>5]) & (1 << (port & 0x1f))))
+            {
+               kal_int32 ret;
+             system_print("GPIO WARNING!! GPIO_InitIO_FAST: Direction Output is not allowed!");
+             ret = sprintf(buff, "pin=%d", port);
+             system_print(buff);
+            }
+         }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+         ASSERT((gpio_dir_out_allowed[(kal_uint8)port>>5]) & (1 << (port & 0x1f)));
+		#endif  /* __GPIO_CHECK_WARNING__ */
+      }
+	  gpio_check_for_write[(kal_uint8)port>>5] |= (1 << (port & 0x1f));
+	  gpio_check_for_read[(kal_uint8)port>>5] |= (1 << (port & 0x1f));
+   }
+   #endif /* __GPIO_FAST_DEBUB__ */
+
+   #ifdef __CUST_NEW__   	
+   port &= (~GPIO_MAGIC_NUM);
+   #endif /* __CUST_NEW__ */
+	if(GPIO_OUTPUT == direction)
+	{
+		GPIO_SET_DIRECT_OUTPUT((gpio_pin_e)port);
+	}
+	else
+	{
+		_GPIO_Set_Direction((gpio_pin_e)port,GPIO_INPUT);
+	}
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_WriteIO_FAST
+*
+* DESCRIPTION                                                           
+*   	This function is to write data to one GPIO port
+*  Note that it's for fast access without debug checking and only exists
+*  when __CUST_NEW__ is defined.
+*
+* CALLS  
+*	Write data to one GPIO port
+*
+* PARAMETERS
+*	data: KAL_TRUE(1) or KAL_FALSE(0)
+*	port: gpio pin number
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global        
+*/
+void GPIO_WriteIO_FAST(char data, kal_int16 port)
+{
+   #ifdef __GPIO_FAST_DEBUB__
+   if ((gpio_debug_enable == KAL_TRUE) && 
+	   (gpio_check_for_write[(kal_uint8)port>>5] & (1 << (port & 0x1f))))
+   {
+
+      #ifdef __GPIO_CHECK_WARNING__
+      if (!kal_if_lisr()) {
+         kal_uint16 mode;
+         mode = GPIO_ReturnMode(port);
+         if (mode != 0)
+         {
+            kal_int32 ret;
+          system_print("GPIO WARNING!! GPIO_WriteIO_FAST: mode is not correct.");
+          ret = sprintf(buff, "pin=%d, mode=%d", port, mode);
+          system_print(buff);
+         }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+         ASSERT(GPIO_ReturnMode(port) == 0);
+		#endif  /* __GPIO_CHECK_WARNING__ */
+      }
+      #ifdef __GPIO_CHECK_WARNING__
+      if (!kal_if_lisr()) {
+         char dir;
+         dir = GPIO_ReturnDir(port);
+         if (dir != 1)
+         {
+            kal_int32 ret;
+          system_print("GPIO WARNING!! GPIO_WriteIO_FAST: direction is not correct.");
+          ret = sprintf(buff, "pin=%d, direction=%d", port, dir);
+          system_print(buff);
+         }
+      }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+      ASSERT(GPIO_ReturnDir(port) == 1);
+		#endif  /* __GPIO_CHECK_WARNING__ */
+	  gpio_check_for_write[(kal_uint8)port>>5] &= (~(1 << (port & 0x1f)));
+   }
+   #endif /* __GPIO_FAST_DEBUB__ */
+
+   	#ifdef __CUST_NEW__  
+	port &= (~GPIO_MAGIC_NUM);
+	#endif
+	GPIO_WRITE_OUTPUT_VALUE((gpio_pin_e)port,data);
+
+}
+
+/*
+* FUNCTION                                                            
+*	GPIO_ReadIO_FAST
+*
+* DESCRIPTION                                                           
+*   	This function is to read data from one GPIO pin.
+*  Note that it's for fast access without debug checking and only exists
+*  when __CUST_NEW__ is defined.
+*
+* CALLS  
+*	Read data from one GPIO pin
+*
+* PARAMETERS
+*	port: pin number
+*	
+* RETURNS
+*	1 or 0
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+char GPIO_ReadIO_FAST(kal_int16 port)
+{
+	kal_uint32 input_val;
+
+   #ifdef __GPIO_FAST_DEBUB__
+   if ((gpio_debug_enable == KAL_TRUE) && 
+	   (gpio_check_for_read[(kal_uint8)port>>5] & (1 << (port & 0x1f))))
+   {
+      #ifdef __GPIO_CHECK_WARNING__
+      if (!kal_if_lisr()) {
+         kal_uint16 mode;
+         char dir;
+         mode = GPIO_ReturnMode(port);
+         dir = GPIO_ReturnDir(port);
+         if ((mode != 0) || (dir != 0))
+         {
+            kal_int32 ret;
+          system_print("GPIO WARNING!! GPIO_ReadIO_FAST: mode or direction is not correct.");
+          ret = sprintf(buff, "pin=%d, mode=%d, direction=%d", port, mode, dir);
+          system_print(buff);
+         }
+      }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+      ASSERT(GPIO_ReturnMode(port) == 0);
+      ASSERT(GPIO_ReturnDir(port) == 0);
+		#endif  /* __GPIO_CHECK_WARNING__ */
+	  gpio_check_for_read[(kal_uint8)port>>5] &= (~(1 << (port & 0x1f)));
+   }
+   #endif /* __GPIO_FAST_DEBUB__ */
+
+   #ifdef __CUST_NEW__   	
+   port &= (~GPIO_MAGIC_NUM);
+   #endif /* __CUST_NEW__ */
+   
+	if(GPIO_READ_INPUT_VALUE((gpio_pin_e)port, &input_val) != GPIO_OK)
+	{
+		GPIO_ERR("\tGPIO_ReadIO: read the value of port[%d] failed!! ",port);
+	}
+	return (char)input_val;
+}
+
+
+#endif
+
+//#pragma arm section code = "INTERNCODE"
+/*
+* FUNCTION                                                            
+*	GPIO_WriteIO_FAST2
+*
+* DESCRIPTION                                                           
+*   	This function is to write data to one GPIO port
+*  Note that it's for faster access without debug checking.
+*
+* CALLS  
+*	Write data to one GPIO port
+*
+* PARAMETERS
+*	data: KAL_TRUE(1) or KAL_FALSE(0)
+*	no: no = port/16; port: GPIO port number
+*	remainder_shift: remainder_shift = 1<<(port%16);
+*
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global        
+*/
+void DEVDRV_LS_INTERNCODE GPIO_WriteIO_FAST2(char data, kal_uint16 no, kal_uint16 remainder_shift)
+{
+	kal_uint32 gpio_pin,shift_bit;
+
+   #if defined(__CUST_NEW__)&&defined(__GPIO_FAST_DEBUB__)
+   if ((gpio_debug_enable == KAL_TRUE) && 
+	   (gpio_check_for_write[(kal_uint8)port>>5] & (1 << (port & 0x1f))))
+   {
+      kal_int16 port;
+      kal_uint16 index;
+
+      for (index = 0; index < 16; index++)
+      {
+         if (remainder_shift & (1 << index))
+            break;
+      }
+      port = (kal_int16)((no<<4)+(index&0x000f));
+
+      #ifdef __GPIO_CHECK_WARNING__
+      if (!kal_if_lisr()) {
+         kal_uint16 mode;
+         mode = GPIO_ReturnMode(port);
+         if (mode != 0)
+         {
+            kal_int32 ret;
+          system_print("GPIO WARNING!! GPIO_WriteIO_FAST: mode is not correct.");
+          ret = sprintf(buff, "pin=%d, mode=%d", port, mode);
+          system_print(buff);
+         }
+
+      #elif defined(__GPIO_CHECK_ASSERT__)
+         ASSERT(GPIO_ReturnMode(port) == 0);
+		#endif  /* __GPIO_CHECK_WARNING__ */
+      }
+      #ifdef __GPIO_CHECK_WARNING__
+      if (!kal_if_lisr()) {
+         char dir;
+         dir = GPIO_ReturnDir(port);
+         if (dir != 1)
+         {
+            kal_int32 ret;
+          system_print("GPIO WARNING!! GPIO_WriteIO_FAST: direction is not correct.");
+          ret = sprintf(buff, "pin=%d, direction=%d", port, dir);
+          system_print(buff);
+         }
+      }
+      #elif defined(__GPIO_CHECK_ASSERT__)
+      ASSERT(GPIO_ReturnDir(port) == 1);
+		#endif  /* __GPIO_CHECK_WARNING__ */
+	  gpio_check_for_write[(kal_uint8)port>>5] &= (~(1 << (port & 0x1f)));
+   }
+   #endif /* __GPIO_FAST_DEBUB__ */
+   
+  for (shift_bit = 0; shift_bit < 16; shift_bit++)
+  {
+     if (remainder_shift & (1 << shift_bit))
+        break;
+  }
+  gpio_pin = (kal_int16)((no<<4)+(shift_bit&0x000f));
+  
+  GPIO_WRITE_OUTPUT_VALUE((gpio_pin_e)gpio_pin,data);
+
+}
+
+//#pragma arm section code
+
+
+/*conf_data = 0~3*/
+void GPO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)
+{
+	//not support in MT6290
+}
+
+
+/*
+* FUNCTION                                                            
+*	GPI_O_WriteIO
+*
+* DESCRIPTION                                                           
+*   	This function is to write data to one GPO pin
+*
+* CALLS  
+*	Write data to one GPO pin
+*
+* PARAMETERS
+*	data: KAL_TRUE(1) or KAL_FALSE(0)
+*	port: gpo pin number
+*	
+* RETURNS
+*	None
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+
+void GPO_WriteIO(char data,kal_int16 port)
+{
+	//not support in MT6290
+}
+
+/*
+* FUNCTION                                                            
+*	GPO_ReturnDout
+*
+* DESCRIPTION                                                           
+*   	This function is to report GPO output value
+*
+* CALLS  
+*	Report GPO output value accoding to input pin
+*
+* PARAMETERS
+*	GPO pin 
+*	
+* RETURNS
+*	GPO output value
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+char GPO_ReturnDout(kal_int16 port)
+{
+	return 0;
+}
+
+
+/*
+* FUNCTION                                                            
+*	GPO_ReturnMode
+*
+* DESCRIPTION                                                           
+*   	This function is to report GPO mode value
+*
+* CALLS  
+*	Report GPO mode value accoding to input pin
+*
+* PARAMETERS
+*	GPO pin 
+*	
+* RETURNS
+*	GPO mode value
+*
+* GLOBALS AFFECTED
+*   external_global
+*/
+char GPO_ReturnMode(kal_int16 port)
+{
+	return 0;
+}
+
+
+/**
+*  @brief  set gpio ownership register
+*  @param  pin_num  : the gpio pin to set ownerhsip
+*  @param  ownership : the ownership register bit value to set ,it should be 0~1
+*                                    0: set ownership to MD
+*                                    1: set ownership to AP
+*  @return GPIO_OK :	set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 gpio_set_ownership(kal_uint32 pin_num,kal_uint32 ownership)
+{
+    return GPIO_FAIL;
+}
+#if defined(MT6885)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 2
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}	
+	    }
+    },
+};
+
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,57,0, 6, 0xC1E20000},
+  {1,58,0, 9, 0xC1E20000},
+  {1,59,0,12, 0xC1E20000},
+  {1,60,0,15, 0xC1E20000},
+  {1,85,0,12, 0xC1E70000},
+  {1,86,0,15, 0xC1E70000},
+  {1,87,0, 6, 0xC1E70000},
+  {1,88,0, 9, 0xC1E70000}
+};
+#endif
+#if defined(MT6873)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 1
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}
+	    }
+    },
+};
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,57,0,24, 0xC1D30010},
+  {1,58,0,24, 0xC1D30010},
+  {1,59,0,27, 0xC1D30010},
+  {1,60,0,27, 0xC1D30010},
+  {1,85,0,21, 0xC1D30010},
+  {1,86,0,21, 0xC1D30010},
+  {1,87,0,18, 0xC1D30010},
+  {1,88,0,18, 0xC1D30010}
+};
+#endif
+#if defined(MT6853)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 1
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}
+	    }
+    },
+};
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,162,0,24, 0xC1D30000},
+  {1,163,0,24, 0xC1D30000},
+  {1,164,0,27, 0xC1D30000},
+  {1,165,0,27, 0xC1D30000},
+  {1,188,0,21, 0xC1D30000},
+  {1,189,0,21, 0xC1D30000},
+  {1,190,0,18, 0xC1D30000},
+  {1,191,0,18, 0xC1D30000}
+};
+#endif
+#if defined(MT6833)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 1
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}
+	    }
+    },
+};
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,162,0,3,  0xC1D10030},
+  {1,163,0,3,  0xC1D10030},
+  {1,164,0,6,  0xC1D10030},
+  {1,165,0,6,  0xC1D10030},
+  {1,188,0,0,  0xC1D10030},
+  {1,189,0,0,  0xC1D10030},
+  {1,190,0,27, 0xC1D10020},
+  {1,191,0,27, 0xC1D10020}
+};
+#endif
+#if defined(MT6877)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 1
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}
+	    }
+    },
+};
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,66,0, 3, 0xC1D30010},
+  {1,67,0, 3, 0xC1D30010},
+  {1,68,0, 0, 0xC1D30010},
+  {1,69,0, 0, 0xC1D30010},
+  {1,82,0,27, 0xC1D30000},
+  {1,83,0,27, 0xC1D30000},
+  {1,84,0,24, 0xC1D30000},
+  {1,85,0,24, 0xC1D30000}
+};
+#endif
+#if defined(CHIP10992)
+#define DRIVING_SETTING_GPIO_NUM  8
+#define DRIVING_GEAR_NUM 1
+const gpio_driving_gear_t gpio_driving_gear[DRIVING_GEAR_NUM]=
+{
+	{
+	    0x07,
+	    0x08,
+	    {
+		    {0x00,2},	
+		    {0x01,4},	
+		    {0x02,6},	
+		    {0x03,8},	
+		    {0x04,10},	
+		    {0x05,12},	
+		    {0x06,14},	
+		    {0x07,16}
+	    }
+    },
+};
+const drv_gpio_driving_priv_t drv_gpio_driving_priv[DRIVING_SETTING_GPIO_NUM]=
+{
+  {1,138,0,3, 0xC1D20000},
+  {1,139,0,3, 0xC1D20000},
+  {1,140,0,0, 0xC1D20000},
+  {1,141,0,0, 0xC1D20000},
+  {1,164,0,18, 0xC1C10010},
+  {1,165,0,18, 0xC1C10010},
+  {1,166,0,21, 0xC1C10010},
+  {1,167,0,21, 0xC1C10010}
+};
+#endif
+/**
+*  @brief  set the drive parameter of the gpio pin.
+*  @param  gpio_pin :	The pin which is to set drive.
+*  @param  drive:         the value of drive parameter to set, it should be 0~3
+*  @return GPIO_OK :   set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 gpio_set_drive(gpio_pin_e gpio_pin,kal_uint32 drive)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MERCURY)	
+	return GPIO_FAIL;
+#elif defined(MT6885)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)
+   kal_uint8 temp0,temp1;
+   kal_uint8 result = 0;
+   const drv_gpio_driving_priv_t *pGpio_driving_priv;
+   for(temp0=0;temp0<DRIVING_SETTING_GPIO_NUM;temp0++)
+   {
+   	  if(drv_gpio_driving_priv[temp0].valid)
+   	  {
+   	     pGpio_driving_priv = (drv_gpio_driving_priv + temp0);
+   	  	 if(drv_gpio_driving_priv[temp0].gpio_num==gpio_pin)
+   	  	 {
+   	  	 	  for(temp1=0;temp1<gpio_driving_gear[pGpio_driving_priv->driving_gear].gear_cnt;temp1++)
+   	  	 	  {
+	   	  	   	  if((gpio_driving_gear[pGpio_driving_priv->driving_gear].gear_mapping[temp1][1])==drive)
+	   	  	   	  {
+	   	  	   	    DRV_WriteReg32((pGpio_driving_priv->addr+8),
+	   	  	   	                  ((gpio_driving_gear[pGpio_driving_priv->driving_gear].mask) << (pGpio_driving_priv->offset)));
+	   	  	   	    DRV_WriteReg32((pGpio_driving_priv->addr+4),
+	   	  	   	                  ((gpio_driving_gear[pGpio_driving_priv->driving_gear].gear_mapping[temp1][0]) << (pGpio_driving_priv->offset)));
+	   	  	   	    result = 1;
+	   	  	   	    break;
+	              }   	  	    
+   	  	    }
+   	  	 }
+   	  }
+   	}
+    if(result==1)
+    	  return GPIO_OK;
+    else
+    	  return GPIO_FAIL;
+#else
+  return GPIO_FAIL;
+#endif
+}
+
+
+//========================================================================
+/**
+ *  @brief     get drive register value of pin
+ *  @param  gpio_pin :  The GPIO pin to be read.
+ *  @return   return the drive register value of pin, it should be 0x0~0x3.
+ *		      if gpio_pin is out of range, the return value will be GPIO_FAIL
+ */
+kal_int32 gpio_get_drive_value(gpio_pin_e gpio_pin)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	return GPIO_FAIL;
+#endif
+}
+
+
+
+/**
+*  @brief  set gpio ownership register
+*  @param  pin_num  : the gpio pin to set ownerhsip
+*  @param  ownership : the ownership register bit value to set ,it should be 0~1
+*                                    0: set ownership to MD
+*                                    1: set ownership to AP
+*  @return GPIO_OK :	set successful,  GPIO_FAIL : set failed
+*/
+kal_int32 gpio_get_ownership(kal_uint32 pin_num)
+{
+	return GPIO_FAIL;
+}
+
+void GPIO_MetaModeInit(void)
+{
+}
+
+kal_int32 GPIO_GetMetaMode(void)
+{
+#if defined(MT6763)||defined(MT6739)||defined(MT6771)|| defined(MT6765)|| defined(MT6295M)|| defined(MT3967)|| defined(MT6779)||defined(MT6297)||defined(MT6885)||defined(MERCURY)||defined(MT6873)||defined(MT6853)||defined(MT6833)||defined(MT6877)||defined(CHIP10992)	
+	return GPIO_FAIL;
+#endif
+}
+
diff --git a/mcu/driver/devdrv/gpio/src/gpio_setting.c b/mcu/driver/devdrv/gpio/src/gpio_setting.c
new file mode 100644
index 0000000..3bf8973
--- /dev/null
+++ b/mcu/driver/devdrv/gpio/src/gpio_setting.c
@@ -0,0 +1,1662 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *    gpio_setting.c
+ *
+ * Project:
+ * --------
+ *   Dragonfly
+ *
+ * Description:
+ * ------------
+ *   This Module defines the GPIO and GPO settings.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef __CUST_NEW__
+#include "gpio_def.h"
+#include "drv_comm.h"
+#include "reg_base.h"
+//#include "gpio_hw.h"
+//#include "gpio_sw.h"
+#include "gpio_drv.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+
+#include "kal_general_types.h"
+#include "drv_gpio.h"
+#include "drvpdn.h"
+
+
+#define GPIO_PORTNULL_MODE  0
+#define GPO_PORTNULL_MODE  0
+#define GPIO_PORTNULL_DIR   0
+#define GPIO_PORTNULL_PULL  0
+#define GPIO_PORTNULL_INV   0
+#define GPIO_PORTNULL_OUTPUT_LEVEL  0
+#define GPO_PORTNULL_OUTPUT_LEVEL  0
+#define GPIO_PORTNULL_PULL_SEL  0
+
+#define MODE0_GPIONULL     0
+#define MODE1_GPIONULL     0
+#define MODE2_GPIONULL     0
+#define MODE3_GPIONULL     0
+#define MODE4_GPIONULL     0
+#define MODE5_GPIONULL     0
+#define MODE6_GPIONULL     0
+#define MODE7_GPIONULL     0
+
+#define DIR_OUT_GPIONULL   0
+#define DIR_IN_GPIONULL   0
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/******** If DRV_GPIO is not off, we will open to use  GPIO_DRV_TOOL ****************/
+
+#if !defined(DRV_GPIO_OFF)    
+    #if defined(DRV_GPIO_REG_AS_6205B) || defined(DRV_GPIO_REG_AS_6218B) || defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_TK6516) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6270A) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6251) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6253E_1)|| defined(DRV_GPIO_REG_AS_6256)||defined(DRV_GPIO_REG_AS_6290)
+       #define __CHIP_SUPP_GPIO_DRV_TOOL__
+    #else
+       #error "No support driver customization tool for this chip."
+    #endif
+#endif //#if !defined(DRV_GPIO_OFF)
+
+
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/***************General macro to calculate GPIO MODE register************************/
+
+
+#if defined(DRV_GPIO_MODE_4BITS)
+   #if defined(GPIO_MODE_32BIT_LENGTH)
+      #define GPIO_MODE_4BITS_REG_VAL(port0, port1, port2, port3, port4, port5, port6, port7) \
+          ((GPIO_PORT##port0##_MODE) | (GPIO_PORT##port1##_MODE<<4) | (GPIO_PORT##port2##_MODE<<8) |    \
+          (GPIO_PORT##port3##_MODE<<12) | (GPIO_PORT##port4##_MODE<<16) | (GPIO_PORT##port5##_MODE<<20) | \
+          (GPIO_PORT##port6##_MODE<<24) | (GPIO_PORT##port7##_MODE<<28))
+   #else //defined(GPIO_MODE_32BIT_LENGTH)
+     /* General macro to calculate GPIO MODE (with 4 bits per mode) register. */
+       #define GPIO_MODE_4BITS_REG_VAL(port0, port1, port2, port3)                 \
+          ((GPIO_PORT##port0##_MODE) | (GPIO_PORT##port1##_MODE<<4) | (GPIO_PORT##port2##_MODE<<8) |    \
+          (GPIO_PORT##port3##_MODE<<12))
+   #endif // define(GPIO_MODE_32BIT_LENGTH)
+#elif defined(DRV_GPIO_MODE_3BITS)
+	#define GPIO_MODE_3BITS_REG_VAL(port0,port1,port2,port3,port4)	\
+		((GPIO_PORT##port0##_MODE) | (GPIO_PORT##port1##_MODE<<3) | (GPIO_PORT##port2##_MODE<<6) |	  \
+		(GPIO_PORT##port3##_MODE<<9) | (GPIO_PORT##port4##_MODE<<12))
+#else //defined(DRV_GPIO_MODE_4BITS)
+
+    #define GPIO_MODE_REG_VAL(port0, port1, port2, port3, port4, port5, port6, port7)                 \
+      ((GPIO_PORT##port0##_MODE) | (GPIO_PORT##port1##_MODE<<2) | (GPIO_PORT##port2##_MODE<<4) |    \
+      (GPIO_PORT##port3##_MODE<<6) | (GPIO_PORT##port4##_MODE<<8) | (GPIO_PORT##port5##_MODE<<10) | \
+      (GPIO_PORT##port6##_MODE<<12) | (GPIO_PORT##port7##_MODE<<14))
+#endif //defined(DRV_GPIO_MODE_4BITS)
+
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/****************** General macro to calculate GPO MODE register********************/
+
+
+#define GPO_MODE_REG_VAL(port0, port1, port2, port3, port4, port5, port6, port7)                 \
+    ((GPO_PORT##port0##_MODE) | (GPO_PORT##port1##_MODE<<2) | (GPO_PORT##port2##_MODE<<4) |    \
+    (GPO_PORT##port3##_MODE<<6) | (GPO_PORT##port4##_MODE<<8) | (GPO_PORT##port5##_MODE<<10) | \
+    (GPO_PORT##port6##_MODE<<12) | (GPO_PORT##port7##_MODE<<14))
+
+
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/************* General macro to calculate GPIO register with 1 bit unit**************/
+
+#if !defined(DRV_GPIO_REG_AS_6290)
+#define GPIO_HWORD_REG_FOR_1BIT(name, port0, port1, port2, port3, port4, port5, port6, port7, port8, port9, \
+                                port10, port11, port12, port13, port14, port15)	\
+    ((GPIO_PORT##port0##_##name) | (GPIO_PORT##port1##_##name<<1) | (GPIO_PORT##port2##_##name<<2) |         \
+    (GPIO_PORT##port3##_##name<<3) | (GPIO_PORT##port4##_##name<<4) | (GPIO_PORT##port5##_##name<<5) |       \
+    (GPIO_PORT##port6##_##name<<6) | (GPIO_PORT##port7##_##name<<7) | (GPIO_PORT##port8##_##name<<8) |       \
+    (GPIO_PORT##port9##_##name<<9) | (GPIO_PORT##port10##_##name<<10) | (GPIO_PORT##port11##_##name<<11) |   \
+    (GPIO_PORT##port12##_##name<<12) | (GPIO_PORT##port13##_##name<<13) | (GPIO_PORT##port14##_##name<<14) | \
+    (GPIO_PORT##port15##_##name<<15))
+#else
+#define GPIO_HWORD_REG_FOR_1BIT(name, port0, port1, port2, port3, port4, port5, port6, port7, port8, port9, \
+                                port10, port11, port12, port13, port14, port15, port16, port17, port18, port19,\
+                                port20,port21, port22, port23, port24, port25, port26, port27, port28, port29, \
+                                port30, port31)	\
+    ((GPIO_PORT##port0##_##name) | (GPIO_PORT##port1##_##name<<1) | (GPIO_PORT##port2##_##name<<2) |         \
+    (GPIO_PORT##port3##_##name<<3) | (GPIO_PORT##port4##_##name<<4) | (GPIO_PORT##port5##_##name<<5) |       \
+    (GPIO_PORT##port6##_##name<<6) | (GPIO_PORT##port7##_##name<<7) | (GPIO_PORT##port8##_##name<<8) |       \
+    (GPIO_PORT##port9##_##name<<9) | (GPIO_PORT##port10##_##name<<10) | (GPIO_PORT##port11##_##name<<11) |   \
+    (GPIO_PORT##port12##_##name<<12) | (GPIO_PORT##port13##_##name<<13) | (GPIO_PORT##port14##_##name<<14) | \
+    (GPIO_PORT##port15##_##name<<15) | (GPIO_PORT##port16##_##name<<16) | (GPIO_PORT##port17##_##name<<17) | \
+    (GPIO_PORT##port18##_##name<<18) | (GPIO_PORT##port19##_##name<<19) | (GPIO_PORT##port20##_##name<<20) | \
+    (GPIO_PORT##port21##_##name<<21) | (GPIO_PORT##port22##_##name<<22) | (GPIO_PORT##port23##_##name<<23) | \
+    (GPIO_PORT##port24##_##name<<24) | (GPIO_PORT##port25##_##name<<25) | (GPIO_PORT##port26##_##name<<26) | \
+    (GPIO_PORT##port27##_##name<<27) | (GPIO_PORT##port28##_##name<<28) | (GPIO_PORT##port29##_##name<<29) | \
+    (GPIO_PORT##port30##_##name<<30) | (GPIO_PORT##port31##_##name<<31)) 
+#endif
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/***************** General macro to calculate GPO register with 1 bit unit.**********/
+
+#define GPO_HWORD_REG_FOR_1BIT(name, port0, port1, port2, port3, port4, port5, port6, port7, port8, port9, \
+                                port10, port11, port12, port13, port14, port15)	\
+    ((GPO_PORT##port0##_##name) | (GPO_PORT##port1##_##name<<1) | (GPO_PORT##port2##_##name<<2) |         \
+    (GPO_PORT##port3##_##name<<3) | (GPO_PORT##port4##_##name<<4) | (GPO_PORT##port5##_##name<<5) |       \
+    (GPO_PORT##port6##_##name<<6) | (GPO_PORT##port7##_##name<<7) | (GPO_PORT##port8##_##name<<8) |       \
+    (GPO_PORT##port9##_##name<<9) | (GPO_PORT##port10##_##name<<10) | (GPO_PORT##port11##_##name<<11) |   \
+    (GPO_PORT##port12##_##name<<12) | (GPO_PORT##port13##_##name<<13) | (GPO_PORT##port14##_##name<<14) | \
+    (GPO_PORT##port15##_##name<<15))
+
+
+/************************************************************************************/
+/************************************************************************************/
+/************************************************************************************/
+/*****General macro to calculate GPIO word-length variable value with 1 bit unit.****/
+
+
+#define GPIO_WORD_VAR_FOR_1BIT(name, port0, port1, port2, port3, port4, port5, port6, port7, port8, port9, port10, \
+	                            port11, port12, port13, port14, port15, port16, port17, port18, port19, port20, port21, \
+                               port22, port23, port24, port25, port26, port27, port28, port29, port30, port31) \
+    ((name##_GPIO##port0) | (name##_GPIO##port1<<1) | (name##_GPIO##port2<<2) | (name##_GPIO##port3<<3) | (name##_GPIO##port4<<4) | \
+    (name##_GPIO##port5<<5) | (name##_GPIO##port6<<6) | (name##_GPIO##port7<<7) | (name##_GPIO##port8<<8) | (name##_GPIO##port9<<9) | \
+    (name##_GPIO##port10<<10) | (name##_GPIO##port11<<11) | (name##_GPIO##port12<<12) | (name##_GPIO##port13<<13) | (name##_GPIO##port14<<14) | \
+    (name##_GPIO##port15<<15) | (name##_GPIO##port16<<16) | (name##_GPIO##port17<<17) | (name##_GPIO##port18<<18) | (name##_GPIO##port19<<19) | \
+    (name##_GPIO##port20<<20) | (name##_GPIO##port21<<21) | (name##_GPIO##port22<<22) | (name##_GPIO##port23<<23) | (name##_GPIO##port24<<24) | \
+    (name##_GPIO##port25<<25) | (name##_GPIO##port26<<26) | (name##_GPIO##port27<<27) | (name##_GPIO##port28<<28) | (name##_GPIO##port29<<29) | \
+    (name##_GPIO##port30<<30) | (name##_GPIO##port31<<31))
+
+
+
+/****************************************************************************************/
+/****************************************************************************************/
+/****************************************************************************************/
+/*********************************__CHIP_SUPP_GPIO_DRV_TOOL__****************************/
+
+#if defined(__CHIP_SUPP_GPIO_DRV_TOOL__)
+
+/***************************GPIO MODE IS NEITHER 4 BIT NOR 3 BIT**********START*********/
+
+#if !defined(DRV_GPIO_MODE_4BITS) && !defined(DRV_GPIO_MODE_3BITS)
+   /* GPIO mode register values for different platforms. */
+
+  #if defined(DRV_GPIO_REG_AS_TK6516)
+      #define GPIO_MODE_REG1  GPIO_MODE_REG_VAL(0, 1, 2, 3, NULL, NULL, NULL, NULL)
+  #else /* DRV_GPIO_REG_AS_TK6516 */
+     #define GPIO_MODE_REG1  GPIO_MODE_REG_VAL(0, 1, 2, 3, 4, 5, 6, 7)
+     #define GPIO_MODE_REG2  GPIO_MODE_REG_VAL(8, 9, 10, 11, 12, 13, 14, 15)
+     #if defined(DRV_GPIO_REG_AS_6205B)
+         #define GPIO_MODE_REG3  GPIO_MODE_REG_VAL(16, 17, 18, 19, 20, 21, NULL, NULL)
+         #define GPO_MODE_REG    GPO_MODE_REG_VAL(0, 1, 2, 3, NULL, NULL, NULL, NULL)
+     #elif defined(DRV_GPIO_REG_AS_6270A)
+          #define GPIO_MODE_REG3  GPIO_MODE_REG_VAL(16, 17, 18, 19, 20, 21, 22, 23)
+          #define GPIO_MODE_REG4  GPIO_MODE_REG_VAL(24, 25, 26, 27, NULL, NULL, NULL, NULL)
+     #else /* DRV_GPIO_REG_AS_6270A */
+          #define GPIO_MODE_REG3  GPIO_MODE_REG_VAL(16, 17, 18, 19, 20, 21, 22, 23)
+          #define GPIO_MODE_REG4  GPIO_MODE_REG_VAL(24, 25, 26, 27, 28, 29, 30, 31)
+          #define GPIO_MODE_REG5  GPIO_MODE_REG_VAL(32, 33, 34, 35, 36, 37, 38, 39)
+          #define GPIO_MODE_REG6  GPIO_MODE_REG_VAL(40, 41, 42, 43, 44, 45, 46, 47)
+         #if defined(DRV_GPIO_REG_AS_6218B)
+              #define GPO_MODE_REG  GPO_MODE_REG_VAL(0, 1, 2, NULL, NULL, NULL, NULL, NULL)
+         #elif defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6225)
+             #define GPIO_MODE_REG7  GPIO_MODE_REG_VAL(48, 49, 50, 51, 52, 53, 54, NULL)
+             #if defined(DRV_GPIO_REG_AS_6219)
+                 #define GPO_MODE_REG  GPO_MODE_REG_VAL(0, 1, 2, 3, 4, NULL, NULL, NULL)
+             #elif defined(DRV_GPIO_REG_AS_6225)
+                 #define GPO_MODE_REG  GPO_MODE_REG_VAL(0, 1, 2, 3, NULL, NULL, NULL, NULL)
+             #endif
+         #elif defined(DRV_GPIO_REG_AS_6227)
+             #define GPIO_MODE_REG7  GPIO_MODE_REG_VAL(48, 49, 50, 51, 52, 53, 54, 55)
+             #define GPIO_MODE_REG8  GPIO_MODE_REG_VAL(56, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+             #define GPO_MODE_REG  GPO_MODE_REG_VAL(0, 1, 2, 3, 4, NULL, NULL, NULL)
+        #elif defined(DRV_GPIO_REG_AS_6228)
+            #define GPIO_MODE_REG7  GPIO_MODE_REG_VAL(48, 49, 50, 51, 52, 53, 54, 55)
+            #define GPIO_MODE_REG8  GPIO_MODE_REG_VAL(56, 57, 58, 59, 60, 61, 62, 63)
+            #define GPIO_MODE_REG9  GPIO_MODE_REG_VAL(64, 65, 66, 67, 68, 69, 70, 71)
+            #define GPIO_MODE_REG10  GPIO_MODE_REG_VAL(72, 73, 74, NULL, NULL, NULL, NULL, NULL)
+            #define GPO_MODE_REG  GPO_MODE_REG_VAL(0, 1, 2, NULL, NULL, NULL, NULL, NULL)
+        #elif defined(DRV_GPIO_REG_AS_6223)
+            #define GPIO_MODE_REG7  GPIO_MODE_REG_VAL(48, 49, 50, 51, 52, NULL, NULL, NULL)
+        #elif defined(DRV_GPIO_REG_AS_6238)  || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E)
+            #define GPIO_MODE_REG7  GPIO_MODE_REG_VAL(48, 49, 50, 51, 52, 53, 54, 55)
+            #define GPIO_MODE_REG8  GPIO_MODE_REG_VAL(56, 57, 58, 59, 60, 61, 62, 63)
+         #if defined(DRV_GPIO_REG_AS_6236) 
+            #define GPIO_MODE_REG9  GPIO_MODE_REG_VAL(64, 65, 66, 67, NULL, NULL, NULL, NULL)
+         #else // defined(DRV_GPIO_REG_AS_6236) 
+            #define GPIO_MODE_REG9  GPIO_MODE_REG_VAL(64, 65, 66, 67, 68, 69, 70, 71)
+            #if defined(DRV_GPIO_REG_AS_6238)
+               #define GPIO_MODE_REGA  GPIO_MODE_REG_VAL(72, 73, 74, 75, 76, 77, 78, 79)
+               #define GPIO_MODE_REGB  GPIO_MODE_REG_VAL(80, 81, 82, 83, 84, NULL, NULL, NULL)
+            #elif defined(DRV_GPIO_REG_AS_6235)
+               #define GPIO_MODE_REGA  GPIO_MODE_REG_VAL(72, 73, 74, 75, 76, 77, 78, NULL)
+            #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+               #define GPIO_MODE_REGA  GPIO_MODE_REG_VAL(72, 73, 74, 75, 76, 77, 78, 79)
+               #define GPIO_MODE_REGB  GPIO_MODE_REG_VAL(80, 81, 82, 83, 84, 85, 86, 87)
+               #define GPIO_MODE_REGC  GPIO_MODE_REG_VAL(88, 89, 90, 91, 92, 93, 94, 95)
+               #if defined(DRV_GPIO_REG_AS_6268A)
+               #define GPIO_MODE_REGD  GPIO_MODE_REG_VAL(96, 97, 98, 99, 100, NULL, NULL, NULL)
+               #elif defined(DRV_GPIO_REG_AS_6268)
+               #define GPIO_MODE_REGD  GPIO_MODE_REG_VAL(96, 97, 98, 99, NULL, NULL, NULL, NULL)
+               #elif defined(DRV_GPIO_REG_AS_6276)
+               #define GPIO_MODE_REGD  GPIO_MODE_REG_VAL(96, 97, 98, 99, 100, 101, 102, 103)
+               #define GPIO_MODE_REGE  GPIO_MODE_REG_VAL(104, 105, 106, 107, 108, NULL, NULL, NULL)
+               #endif
+            #elif defined(DRV_GPIO_REG_AS_6253T)
+               #define GPIO_MODE_REGA  GPIO_MODE_REG_VAL(72, 73, 74, 75, 76, 77, 78, 79)
+               #if defined(DRV_GPIO_6253_MODE11_DEFAULT)
+                  #define GPIO_PORT82FOR6253_MODE MODE_1 //GPIO82 for MT6253 should be fixed to mode1
+                  #define GPIO_MODE_REGB  GPIO_MODE_REG_VAL(80, 81, 82FOR6253, NULL, NULL, NULL, NULL, NULL)
+               #else //defined(DRV_GPIO_6253_MODE11_DEFAULT)
+               #define GPIO_MODE_REGB  GPIO_MODE_REG_VAL(80, 81, NULL, NULL, NULL, NULL, NULL, NULL)
+               #endif //defined(DRV_GPIO_6253_MODE11_DEFAULT)
+            #endif
+         #endif // defined(DRV_GPIO_REG_AS_6236) 
+      #endif
+   #endif /* DRV_GPIO_REG_AS_6205B */
+#endif /* DRV_GPIO_REG_AS_TK6516 */
+
+
+/***************************GPIO MODE IS NEITHER 4 BIT NOR 3 BIT**********END*********/
+
+
+/***************************GPIO MODE IS 4 BIT ***********************START***********/
+
+#elif defined(DRV_GPIO_MODE_4BITS) // DRV_GPIO_MODE_4BITS is defined
+#if defined(DRV_GPIO_REG_AS_6253E_1)
+   #define GPIO_MODE_REG1  GPIO_MODE_4BITS_REG_VAL(0, 1, 2, 3, 4, 5, 6, 7)
+   #define GPIO_MODE_REG2  GPIO_MODE_4BITS_REG_VAL(8, 9, 10, 11, 12, 13, 14, 15)
+   #define GPIO_MODE_REG3  GPIO_MODE_4BITS_REG_VAL(16, 17, 18, 19, 20, 21, 22, 23)
+   #define GPIO_MODE_REG4  GPIO_MODE_4BITS_REG_VAL(24, 25, 26, 27, 28, 29, 30, 31)
+   #define GPIO_MODE_REG5  GPIO_MODE_4BITS_REG_VAL(32, 33, 34, 35, 36, 37, 38, 39)
+   #define GPIO_MODE_REG6  GPIO_MODE_4BITS_REG_VAL(40, 41, 42, 43, 44, 45, 46, 47)
+   #define GPIO_MODE_REG7  GPIO_MODE_4BITS_REG_VAL(48, 49, 50, 51, 52, 53, 54, 55)
+   #define GPIO_MODE_REG8  GPIO_MODE_4BITS_REG_VAL(56, 57, 58, 59, 60, 61, 62, 63)
+   #define GPIO_MODE_REG9  GPIO_MODE_4BITS_REG_VAL(64, 65, 66, 67, 68, 69, 70, NULL)
+#endif //defined(DRV_GPIO_REG_AS_6253E_1)
+#if defined(DRV_GPIO_REG_AS_6255) 
+   #define GPIO_MODE_REG1  GPIO_MODE_4BITS_REG_VAL(0, 1, 2, 3)
+   #define GPIO_MODE_REG2  GPIO_MODE_4BITS_REG_VAL(4, 5, 6, 7)
+   #define GPIO_MODE_REG3  GPIO_MODE_4BITS_REG_VAL(8, 9, 10, 11)
+   #define GPIO_MODE_REG4  GPIO_MODE_4BITS_REG_VAL(12, 13, 14, 15)
+   #define GPIO_MODE_REG5  GPIO_MODE_4BITS_REG_VAL(16, 17, 18, 19)
+   #define GPIO_MODE_REG6  GPIO_MODE_4BITS_REG_VAL(20, 21, 22, 23)
+   #define GPIO_MODE_REG7  GPIO_MODE_4BITS_REG_VAL(24, 25, 26, 27)
+   #define GPIO_MODE_REG8  GPIO_MODE_4BITS_REG_VAL(28, 29, 30, 31)
+   #define GPIO_MODE_REG9  GPIO_MODE_4BITS_REG_VAL(32, 33, 34, 35)
+   #define GPIO_MODE_REG10  GPIO_MODE_4BITS_REG_VAL(36, 37, 38, 39)
+   #define GPIO_MODE_REG11  GPIO_MODE_4BITS_REG_VAL(40, 41, 42, 43)
+   #define GPIO_MODE_REG12  GPIO_MODE_4BITS_REG_VAL(44, 45, 46, 47)
+   #define GPIO_MODE_REG13  GPIO_MODE_4BITS_REG_VAL(48, 49, 50, 51)
+   #define GPIO_MODE_REG14  GPIO_MODE_4BITS_REG_VAL(52, 53, 54, 55)
+   #define GPIO_MODE_REG15  GPIO_MODE_4BITS_REG_VAL(56, 57, 58, 59)
+   #define GPIO_MODE_REG16  GPIO_MODE_4BITS_REG_VAL(60, 61, 62, 63)
+   #define GPIO_MODE_REG17  GPIO_MODE_4BITS_REG_VAL(64, 65, 66, 67)
+   #define GPIO_MODE_REG18  GPIO_MODE_4BITS_REG_VAL(68, 69, 70, 71)
+   #define GPIO_MODE_REG19  GPIO_MODE_4BITS_REG_VAL(72, 73, 74, 75)
+   #define GPIO_MODE_REG20  GPIO_MODE_4BITS_REG_VAL(76, 77, 78, 79)
+   #define GPIO_MODE_REG21  GPIO_MODE_4BITS_REG_VAL(80, 81, 82, 83)
+   #define GPIO_MODE_REG22  GPIO_MODE_4BITS_REG_VAL(84, 85, 86, 87)
+#define GPIO_MODE_REG23  GPIO_MODE_4BITS_REG_VAL(88, 89, 90, 91)
+#define GPIO_MODE_REG24  GPIO_MODE_4BITS_REG_VAL(92, 93, 94, 95)
+#define GPIO_MODE_REG25  GPIO_MODE_4BITS_REG_VAL(96, 97, 98, 99)
+#define GPIO_MODE_REG26  GPIO_MODE_4BITS_REG_VAL(100, 101, 102,103)
+#define GPIO_MODE_REG27  GPIO_MODE_4BITS_REG_VAL(104, NULL, NULL,NULL)
+
+ #endif 
+#if defined(DRV_GPIO_REG_AS_6256)
+   #define GPIO_MODE_REG1  GPIO_MODE_4BITS_REG_VAL(0, 1, 2, 3)
+   #define GPIO_MODE_REG2  GPIO_MODE_4BITS_REG_VAL(4, 5, 6, 7)
+   #define GPIO_MODE_REG3  GPIO_MODE_4BITS_REG_VAL(8, 9, 10, 11)
+   #define GPIO_MODE_REG4  GPIO_MODE_4BITS_REG_VAL(12, 13, 14, 15)
+   #define GPIO_MODE_REG5  GPIO_MODE_4BITS_REG_VAL(16, 17, 18, 19)
+   #define GPIO_MODE_REG6  GPIO_MODE_4BITS_REG_VAL(20, 21, 22, 23)
+   #define GPIO_MODE_REG7  GPIO_MODE_4BITS_REG_VAL(24, 25, 26, 27)
+   #define GPIO_MODE_REG8  GPIO_MODE_4BITS_REG_VAL(28, 29, 30, 31)
+   #define GPIO_MODE_REG9  GPIO_MODE_4BITS_REG_VAL(32, 33, 34, 35)
+   #define GPIO_MODE_REG10  GPIO_MODE_4BITS_REG_VAL(36, 37, 38, 39)
+   #define GPIO_MODE_REG11  GPIO_MODE_4BITS_REG_VAL(40, 41, 42, 43)
+   #define GPIO_MODE_REG12  GPIO_MODE_4BITS_REG_VAL(44, 45, 46, 47)
+   #define GPIO_MODE_REG13  GPIO_MODE_4BITS_REG_VAL(48, 49, 50, 51)
+   #define GPIO_MODE_REG14  GPIO_MODE_4BITS_REG_VAL(52, 53, 54, 55)
+   #define GPIO_MODE_REG15  GPIO_MODE_4BITS_REG_VAL(56, 57, 58, 59)
+   #define GPIO_MODE_REG16  GPIO_MODE_4BITS_REG_VAL(60, 61, 62, 63)
+   #define GPIO_MODE_REG17  GPIO_MODE_4BITS_REG_VAL(64, 65, 66, 67)
+   #define GPIO_MODE_REG18  GPIO_MODE_4BITS_REG_VAL(68, 69, 70, 71)
+   #define GPIO_MODE_REG19  GPIO_MODE_4BITS_REG_VAL(72, 73, 74, 75)
+   #define GPIO_MODE_REG20  GPIO_MODE_4BITS_REG_VAL(76, 77, 78, 79)
+   #define GPIO_MODE_REG21  GPIO_MODE_4BITS_REG_VAL(80, 81, 82, 83)
+   #define GPIO_MODE_REG22  GPIO_MODE_4BITS_REG_VAL(84, 85, 86, 87)
+   #define GPIO_MODE_REG23  GPIO_MODE_4BITS_REG_VAL(88, 89, 90, 91)
+   #define GPIO_MODE_REG24  GPIO_MODE_4BITS_REG_VAL(92, 93, 94, 95)
+   #define GPIO_MODE_REG25  GPIO_MODE_4BITS_REG_VAL(96, 97, 98, 99)
+   #define GPIO_MODE_REG26  GPIO_MODE_4BITS_REG_VAL(100, 101, 102, 103)
+   #define GPIO_MODE_REG27  GPIO_MODE_4BITS_REG_VAL(104, NULL, NULL, NULL)
+#endif      
+#if defined(DRV_GPIO_REG_AS_6251)
+   #define GPIO_MODE_REG1  GPIO_MODE_4BITS_REG_VAL(0, 1, 2, 3)
+   #define GPIO_MODE_REG2  GPIO_MODE_4BITS_REG_VAL(4, 5, 6, 7)
+   #define GPIO_MODE_REG3  GPIO_MODE_4BITS_REG_VAL(8, 9, 10, 11)
+   #define GPIO_MODE_REG4  GPIO_MODE_4BITS_REG_VAL(12, 13, 14, 15)
+   #define GPIO_MODE_REG5  GPIO_MODE_4BITS_REG_VAL(16, 17, 18, 19)
+   #define GPIO_MODE_REG6  GPIO_MODE_4BITS_REG_VAL(20, 21, 22, 23)
+   #define GPIO_MODE_REG7  GPIO_MODE_4BITS_REG_VAL(24, 25, 26, 27)
+   #define GPIO_MODE_REG8  GPIO_MODE_4BITS_REG_VAL(28, 29, 30, 31)
+#endif // defined(DRV_GPIO_REG_AS_6255)
+
+/***************************GPIO MODE IS NEITHER 4 BIT *********END**********/
+
+/***************************GPIO MODE IS 3 BIT******************START********/
+#elif defined(DRV_GPIO_MODE_3BITS)
+#if defined(DRV_GPIO_REG_AS_6276)
+    #define GPIO_MODE_REG0	GPIO_MODE_3BITS_REG_VAL(0, 1, 2, 3, 4)
+    #define GPIO_MODE_REG1	GPIO_MODE_3BITS_REG_VAL(5, 6, 7, 8, 9)
+    #define GPIO_MODE_REG2	GPIO_MODE_3BITS_REG_VAL(10, 11, 12, 13, 14)
+    #define GPIO_MODE_REG3	GPIO_MODE_3BITS_REG_VAL(15, 16, 17, 18, 19)
+    #define GPIO_MODE_REG4	GPIO_MODE_3BITS_REG_VAL(20, 21, 22, 23, 24)
+    #define GPIO_MODE_REG5	GPIO_MODE_3BITS_REG_VAL(25, 26, 27, 28, 29)	
+    #define GPIO_MODE_REG6	GPIO_MODE_3BITS_REG_VAL(30, 31, 32, 33, 34)
+    #define GPIO_MODE_REG7	GPIO_MODE_3BITS_REG_VAL(35, 36, 37, 38, 39)
+    #define GPIO_MODE_REG8	GPIO_MODE_3BITS_REG_VAL(40, 41, 42, 43, 44)	
+    #define GPIO_MODE_REG9	GPIO_MODE_3BITS_REG_VAL(45, 46, 47, 48, 49)
+    #define GPIO_MODE_REGA	GPIO_MODE_3BITS_REG_VAL(50, 51, 52, 53, 54)
+    #define GPIO_MODE_REGB	GPIO_MODE_3BITS_REG_VAL(55, 56, 57, 58, 59)
+    #define GPIO_MODE_REGC	GPIO_MODE_3BITS_REG_VAL(60, 61, 62, 63, 64)
+    #define GPIO_MODE_REGD	GPIO_MODE_3BITS_REG_VAL(65, 66, 67, 68, 69)
+    #define GPIO_MODE_REGE	GPIO_MODE_3BITS_REG_VAL(70, 71, 72, 73, 74)
+    #define GPIO_MODE_REGF	GPIO_MODE_3BITS_REG_VAL(75, 76, 77, 78, 79)
+    #define GPIO_MODE_REG10	GPIO_MODE_3BITS_REG_VAL(80, 81, 82, 83, 84)
+    #define GPIO_MODE_REG11	GPIO_MODE_3BITS_REG_VAL(85, 86, 87, 88, 89)
+    #define GPIO_MODE_REG12	GPIO_MODE_3BITS_REG_VAL(90, 91, 92, 93, 94)	
+    #define GPIO_MODE_REG13	GPIO_MODE_3BITS_REG_VAL(95, 96, 97, 98, 99)
+    #define GPIO_MODE_REG14	GPIO_MODE_3BITS_REG_VAL(100, 101, 102, 103, 104)
+    #define GPIO_MODE_REG15	GPIO_MODE_3BITS_REG_VAL(105, 106, 107, 108, 109)
+#endif //defined(DRV_GPIO_REG_AS_6276)
+
+#endif //!defined(DRV_GPIO_MODE_4BITS) && !defined(DRV_GPIO_MODE_3BITS)
+
+/****************************************************************************************/
+/*********************************__CHIP_SUPP_GPIO_DRV_TOOL__****************************/
+/*********************************************END****************************************/
+/****************************************************************************************/
+
+
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/
+ /* Macros to calulate GPIO related register value of different platforms with 1 bit unit 
+   for different settings, like dirction control pull-up/pull-down enable, inversion control. */
+/*****************************************START***********************************************/
+/*********************************************************************************************/
+
+
+#if defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_HWORD_REG1(name)  GPIO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+#else /* DRV_GPIO_REG_AS_TK6516 */
+   #if !defined(DRV_GPIO_REG_AS_6290)
+   #define GPIO_HWORD_REG1(name)  GPIO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
+   #else
+   #define GPIO_HWORD_REG1(name)  GPIO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 ,25 ,26 ,27,28, 29 ,30, 31)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6205B)
+      #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #define GPIO_HWORD_REG2(name)  GPIO_HWORD_REG_FOR_1BIT(name, 16, 17, 18, 19, 20, 21, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6270A)
+      #define GPIO_HWORD_REG2(name)  GPIO_HWORD_REG_FOR_1BIT(name, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6251)
+      #define GPIO_HWORD_REG2(name)  GPIO_HWORD_REG_FOR_1BIT(name, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)
+      #define GPIO_HWORD_REG3(name)  GPIO_HWORD_REG_FOR_1BIT(name, 32, 33, 34, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #define GPIO_HWORD_REG3_TO_38(name)  GPIO_HWORD_REG_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+   #else /* DRV_GPIO_REG_AS_6270A) */
+   	  #if !defined(DRV_GPIO_REG_AS_6290)
+      #define GPIO_HWORD_REG2(name)  GPIO_HWORD_REG_FOR_1BIT(name, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)
+      #else
+	  #define GPIO_HWORD_REG2(name)  GPIO_HWORD_REG_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 ,57 ,58 ,59,60, 61 ,62, 63)
+	  #endif
+      #define GPIO_HWORD_REG3(name)  GPIO_HWORD_REG_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47)
+      #if defined(DRV_GPIO_REG_AS_6218B)
+         #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6225)  
+         #if defined(DRV_GPIO_REG_AS_6219)
+            #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, 4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #elif defined(DRV_GPIO_REG_AS_6225)
+            #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #endif
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6227)
+         #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, 3, 4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6228)
+         #define GPO_HWORD_REG1(name)  GPO_HWORD_REG_FOR_1BIT(name, 0, 1, 2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6223)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6238)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)
+         #define GPIO_HWORD_REG6(name)  GPIO_HWORD_REG_FOR_1BIT(name, 80, 81, 82, 83, 84, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6235)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6236)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)
+         #define GPIO_HWORD_REG6(name)  GPIO_HWORD_REG_FOR_1BIT(name, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95)
+         #if defined(DRV_GPIO_REG_AS_6268A)
+         #define GPIO_HWORD_REG7(name)  GPIO_HWORD_REG_FOR_1BIT(name, 96, 97, 98, 99, 100, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #elif defined(DRV_GPIO_REG_AS_6268)
+         #define GPIO_HWORD_REG7(name)  GPIO_HWORD_REG_FOR_1BIT(name, 96, 97, 98, 99, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #elif defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_HWORD_REG7(name)  GPIO_HWORD_REG_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, NULL, NULL, NULL)
+         #endif
+      #elif defined(DRV_GPIO_REG_AS_6253T)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)
+         #define GPIO_HWORD_REG6(name)  GPIO_HWORD_REG_FOR_1BIT(name, 80, 81, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6255)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)
+         #define GPIO_HWORD_REG6(name)  GPIO_HWORD_REG_FOR_1BIT(name, 80, 81, 82, 83, 84, 85, 86, 87, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+         #define GPIO_HWORD_REG7(name)  GPIO_HWORD_REG_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+#elif defined(DRV_GPIO_REG_AS_6253E)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+     #elif defined(DRV_GPIO_REG_AS_6253E_1) 
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)     
+     #elif defined(DRV_GPIO_REG_AS_6256)
+         #define GPIO_HWORD_REG4(name)  GPIO_HWORD_REG_FOR_1BIT(name, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+         #define GPIO_HWORD_REG5(name)  GPIO_HWORD_REG_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)
+         #define GPIO_HWORD_REG6(name)  GPIO_HWORD_REG_FOR_1BIT(name, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95)
+         #define GPIO_HWORD_REG7(name)  GPIO_HWORD_REG_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, NULL, NULL, NULL, NULL, NULL, NULL, NULL)    
+ #endif      
+   #endif /* DRV_GPIO_REG_AS_6205B */
+#endif /* DRV_GPIO_REG_AS_TK6516 */
+
+/*********************************************************************************************/
+/*********************************************************************************************/
+ /* Macros to calulate GPIO related register value of different platforms with 1 bit unit 
+   for different settings, like dirction control pull-up/pull-down enable, inversion control. */
+/*****************************************END***********************************************/
+/*********************************************************************************************/
+
+#if defined(DRV_GPIO_REG_AS_6290)
+
+   #define GPIO_OWNERSHIP_REG1 GPIO_HWORD_REG1(OWNERSHIP)
+   #define GPIO_OWNERSHIP_REG2 GPIO_HWORD_REG2(OWNERSHIP)   
+
+#endif
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************** GPIO direction control register value*************************************/
+/*************************************START************************************************/ 
+/*********************************************************************************************/ 
+
+   #define GPIO_DIR_REG1   GPIO_HWORD_REG1(DIR)
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_DIR_REG2   GPIO_HWORD_REG2(DIR)
+#if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A)
+   #define GPIO_DIR_REG3   GPIO_HWORD_REG3(DIR)
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6253E)
+      #define GPIO_DIR_REG4   GPIO_HWORD_REG4(DIR)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6228)
+      #define GPIO_DIR_REG5   GPIO_HWORD_REG5(DIR)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1)
+      #define GPIO_DIR_REG4   GPIO_HWORD_REG4(DIR)
+      #define GPIO_DIR_REG5   GPIO_HWORD_REG5(DIR)
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) 
+         #define GPIO_DIR_REG6   GPIO_HWORD_REG6(DIR)
+      #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_DIR_REG6   GPIO_HWORD_REG6(DIR)
+         #define GPIO_DIR_REG7   GPIO_HWORD_REG7(DIR)
+      #endif
+  #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255) 
+      #define GPIO_DIR_REG4   GPIO_HWORD_REG4(DIR)
+      #define GPIO_DIR_REG5   GPIO_HWORD_REG5(DIR)
+      #define GPIO_DIR_REG6   GPIO_HWORD_REG6(DIR)
+      #define GPIO_DIR_REG7   GPIO_HWORD_REG7(DIR)
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************** GPIO direction control register value*************************************/
+/*************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************** GPIO Pull-up/Pull-down enable register value******************************/
+/*************************************START***************************************************/ 
+/*********************************************************************************************/ 
+
+   #define GPIO_PULL_REG1   GPIO_HWORD_REG1(PULL)
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_PULL_REG2   GPIO_HWORD_REG2(PULL)
+#if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A)
+   #if defined(DRV_GPIO_REG_AS_6251)
+      #define GPIO_PULL_REG3   GPIO_HWORD_REG3_TO_38(PULL)
+   #else
+      #define GPIO_PULL_REG3   GPIO_HWORD_REG3(PULL)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223)|| defined(DRV_GPIO_REG_AS_6253E)
+      #define GPIO_PULL_REG4   GPIO_HWORD_REG4(PULL)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6228)
+      #define GPIO_PULL_REG5   GPIO_HWORD_REG5(PULL)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1)
+      #define GPIO_PULL_REG4   GPIO_HWORD_REG4(PULL)
+      #define GPIO_PULL_REG5   GPIO_HWORD_REG5(PULL)
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) 
+         #define GPIO_PULL_REG6   GPIO_HWORD_REG6(PULL)
+      #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_PULL_REG6   GPIO_HWORD_REG6(PULL)
+         #define GPIO_PULL_REG7   GPIO_HWORD_REG7(PULL)
+      #endif
+  #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255) 
+      #define GPIO_PULL_REG4   GPIO_HWORD_REG4(PULL)
+      #define GPIO_PULL_REG5   GPIO_HWORD_REG5(PULL)   
+      #define GPIO_PULL_REG6   GPIO_HWORD_REG6(PULL)
+      #define GPIO_PULL_REG7   GPIO_HWORD_REG7(PULL)
+   #endif
+#endif /* #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************** GPIO Pull-up/Pull-down enable register value******************************/
+/*************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/******************GPIO inversion control register value**************************************/
+/************************************START*****************************************************/ 
+/*********************************************************************************************/ 
+
+#if !defined(DRV_GPIO_REG_AS_6205B)
+   #define GPIO_INV_REG1   GPIO_HWORD_REG1(INV)
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_INV_REG2   GPIO_HWORD_REG2(INV)
+#if !defined(DRV_GPIO_REG_AS_6270A) && !defined(DRV_GPIO_REG_AS_6251)
+   #define GPIO_INV_REG3   GPIO_HWORD_REG3(INV)
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6253E)
+      #define GPIO_INV_REG4   GPIO_HWORD_REG4(INV)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6228)
+      #define GPIO_INV_REG5   GPIO_HWORD_REG5(INV)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T)  || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1)
+      #define GPIO_INV_REG4   GPIO_HWORD_REG4(INV)
+      #define GPIO_INV_REG5   GPIO_HWORD_REG5(INV)
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T)
+         #define GPIO_INV_REG6   GPIO_HWORD_REG6(INV)
+      #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_INV_REG6   GPIO_HWORD_REG6(INV)
+         #define GPIO_INV_REG7   GPIO_HWORD_REG7(INV)
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)  
+      #define GPIO_INV_REG4   GPIO_HWORD_REG4(INV)
+      #define GPIO_INV_REG5   GPIO_HWORD_REG5(INV)
+      #define GPIO_INV_REG6   GPIO_HWORD_REG6(INV)
+      #define GPIO_INV_REG7   GPIO_HWORD_REG7(INV)
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6270A) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/******************GPIO inversion control register value**************************************/
+/************************************END******************************************************/ 
+/*********************************************************************************************/ 
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*****************************GPIO Output register value**************************************/
+/************************************START*****************************************************/ 
+/*********************************************************************************************/ 
+
+   #define GPIO_OUTPUT_REG1   GPIO_HWORD_REG1(OUTPUT_LEVEL)
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_OUTPUT_REG2   GPIO_HWORD_REG2(OUTPUT_LEVEL)
+#if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A)
+   #define GPIO_OUTPUT_REG3   GPIO_HWORD_REG3(OUTPUT_LEVEL)
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6253E)
+      #define GPIO_OUTPUT_REG4   GPIO_HWORD_REG4(OUTPUT_LEVEL)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6228)
+      #define GPIO_OUTPUT_REG5   GPIO_HWORD_REG5(OUTPUT_LEVEL)
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T)  || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1)
+      #define GPIO_OUTPUT_REG4   GPIO_HWORD_REG4(OUTPUT_LEVEL)
+      #define GPIO_OUTPUT_REG5   GPIO_HWORD_REG5(OUTPUT_LEVEL)
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255)
+         #define GPIO_OUTPUT_REG6   GPIO_HWORD_REG6(OUTPUT_LEVEL)
+      #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+         #define GPIO_OUTPUT_REG6   GPIO_HWORD_REG6(OUTPUT_LEVEL)
+         #define GPIO_OUTPUT_REG7   GPIO_HWORD_REG7(OUTPUT_LEVEL)
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)
+      #define GPIO_OUTPUT_REG4   GPIO_HWORD_REG4(OUTPUT_LEVEL)
+      #define GPIO_OUTPUT_REG5   GPIO_HWORD_REG5(OUTPUT_LEVEL)
+      #define GPIO_OUTPUT_REG6   GPIO_HWORD_REG6(OUTPUT_LEVEL)
+      #define GPIO_OUTPUT_REG7   GPIO_HWORD_REG7(OUTPUT_LEVEL)
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_6270A) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*****************************GPIO Output register value**************************************/
+/************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*****************************GPO Output register value**************************************/
+/************************************START*****************************************************/ 
+/*********************************************************************************************/ 
+
+#if (!defined(DRV_GPIO_WO_GPO))
+   #define GPO_OUTPUT_REG1   GPO_HWORD_REG1(OUTPUT_LEVEL)
+#endif
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*****************************GPO Output register value**************************************/
+/************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+  
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************************GPIO PULL up/down selection register value***********************/
+/************************************START*****************************************************/ 
+/*********************************************************************************************/ 
+
+#if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_TK6516) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6270A) || defined(DRV_GPIO_REG_AS_6253E)  || defined(DRV_GPIO_REG_AS_6276)|| defined(DRV_GPIO_REG_AS_6251) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6290)
+   #define GPIO_PULLSEL_REG1   GPIO_HWORD_REG1(PULL_SEL)
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_PULLSEL_REG2   GPIO_HWORD_REG2(PULL_SEL)
+#if defined(DRV_GPIO_REG_AS_6251)
+   #define GPIO_PULLSEL_REG3   GPIO_HWORD_REG3_TO_38(PULL_SEL)
+#elif !defined(DRV_GPIO_REG_AS_6270A) && !defined(DRV_GPIO_REG_AS_6290)
+   #define GPIO_PULLSEL_REG3   GPIO_HWORD_REG3(PULL_SEL)
+   #define GPIO_PULLSEL_REG4   GPIO_HWORD_REG4(PULL_SEL)
+#if !defined(DRV_GPIO_REG_AS_6253E)
+   #define GPIO_PULLSEL_REG5   GPIO_HWORD_REG5(PULL_SEL)
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255)
+      #define GPIO_PULLSEL_REG6   GPIO_HWORD_REG6(PULL_SEL)
+   #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      #define GPIO_PULLSEL_REG6   GPIO_HWORD_REG6(PULL_SEL)
+      #define GPIO_PULLSEL_REG7   GPIO_HWORD_REG7(PULL_SEL)
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6253E) */
+#endif /* !defined(DRV_GPIO_REG_AS_6270A) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+#elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255) 
+	#define GPIO_PULLSEL_REG1   GPIO_HWORD_REG1(PULL_SEL)
+	#define GPIO_PULLSEL_REG2   GPIO_HWORD_REG2(PULL_SEL)
+	#define GPIO_PULLSEL_REG3   GPIO_HWORD_REG3(PULL_SEL)
+	#define GPIO_PULLSEL_REG4   GPIO_HWORD_REG4(PULL_SEL)
+	#define GPIO_PULLSEL_REG5   GPIO_HWORD_REG5(PULL_SEL)
+	#define GPIO_PULLSEL_REG6   GPIO_HWORD_REG6(PULL_SEL)
+	#define GPIO_PULLSEL_REG7   GPIO_HWORD_REG7(PULL_SEL)
+#endif /* defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) */
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/****************************GPIO PULL up/down selection register value***********************/
+/************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+
+#if defined(DRV_GPIO_REG_AS_6253E)
+   #define GPIO_SPMODE_REG ((SP_MODE_BIT0) | (SP_MODE_BIT2<<2) | (SP_MODE_BIT4<<4) | (SP_MODE_BIT6<<6) | (SP_MODE_BIT8<<8))
+   #define GPIO_BANK_REG ((BANK0) | (BANK1<<1) | (BANK2<<2) | (BANK3<<3) | (BANK4<<4) | (BANK5<<5) | (BANK6<<6) | (BANK7<<7))
+#endif //defined(DRV_GPIO_REG_AS_6253E)
+
+//this need to confirm after WS.chen work done!!!!
+#if defined(DRV_GPIO_REG_AS_6253E_1)
+   #define GPIO_SPMODE0_REG ((SP_MODE0_BIT0) | (SP_MODE0_BIT2<<2) | (SP_MODE0_BIT4<<4) | (SP_MODE0_BIT6<<6) | (SP_MODE0_BIT8<<8) |\
+   	   (SP_MODE0_BIT10<<10) | (SP_MODE0_BIT12<<12) | (SP_MODE0_BIT14<<14) | (SP_MODE0_BIT16<<16) | (SP_MODE0_BIT18<<18) |\
+   	   (SP_MODE0_BIT20<<20) | (SP_MODE0_BIT22<<22) | (SP_MODE0_BIT24<<24) | (SP_MODE0_BIT26<<26) | (SP_MODE0_BIT28<<28) |\
+   	   (SP_MODE0_BIT30<<30))
+
+   #define GPIO_SPMODE1_REG ((SP_MODE1_BIT0) | (SP_MODE1_BIT2<<2) | (SP_MODE1_BIT4<<4) | (SP_MODE1_BIT8<<8) | (SP_MODE1_BIT12<<12) |\
+   	   (SP_MODE1_BIT14<<14))
+  // #define GPIO_BANK_REG ((BANK0) | (BANK1<<1) | (BANK2<<2) | (BANK3<<3) | (BANK4<<4) | (BANK5<<5) | (BANK6<<6) | (BANK7<<7))
+#endif //defined(DRV_GPIO_REG_AS_6253E_1)
+
+
+
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** General macros to calulate GPIO word-length variable************/
+/**************************value with 1 bit unit for different platform***********************/
+/************************************START*****************************************************/ 
+/*********************************************************************************************/ 
+
+#if defined(DRV_GPIO_REG_AS_TK6516)
+   #define GPIO_WORD_VAR0(name)  GPIO_WORD_VAR_FOR_1BIT(name, 0, 1, 2, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                    NULL, NULL, NULL, NULL)		
+#elif defined(DRV_GPIO_REG_AS_6205B)
+   #define GPIO_WORD_VAR0(name)  GPIO_WORD_VAR_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \
+                                                    20, 21, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)		
+#elif defined(DRV_GPIO_REG_AS_6270A)
+   #define GPIO_WORD_VAR0(name)  GPIO_WORD_VAR_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \
+                                                    20, 21, 22, 23, 24, 25, 26, 27, NULL, NULL, NULL, NULL)		
+#elif defined(DRV_GPIO_REG_AS_6251)
+   #define GPIO_WORD_VAR0(name)  GPIO_WORD_VAR_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \
+                                                    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)		
+   #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+#else /* defined(DRV_GPIO_REG_AS_6270A) */
+   #define GPIO_WORD_VAR0(name)  GPIO_WORD_VAR_FOR_1BIT(name, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \
+                                                    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)		
+   #if defined(DRV_GPIO_REG_AS_6218B)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, NULL, \
+                                                       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6225)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                       49, 50, 51, 52, 53, 54, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6227)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                       49, 50, 51, 52, 53, 54, 55, 56, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6228)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6223)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                       49, 50, 51, 52, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6238)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
+                                                  79, 80, 81, 82, 83, 84, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6235)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6236)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
+                                                  79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95)
+      #if defined(DRV_GPIO_REG_AS_6268A)
+      #define GPIO_WORD_VAR3(name)  GPIO_WORD_VAR_FOR_1BIT(name, 96, 97, 98, 99, 100, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6268)
+      #define GPIO_WORD_VAR3(name)  GPIO_WORD_VAR_FOR_1BIT(name, 96, 97, 98, 99, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL)
+      #elif defined(DRV_GPIO_REG_AS_6276)
+      #define GPIO_WORD_VAR3(name)  GPIO_WORD_VAR_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL)
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6253T)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
+                                                  79, 80, 81, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6255)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
+                                                  79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95)
+      #define GPIO_WORD_VAR3(name)  GPIO_WORD_VAR_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6253E)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 
+   #elif defined(DRV_GPIO_REG_AS_6253E_1)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL)                                            
+#elif defined(DRV_GPIO_REG_AS_6256) 
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+      #define GPIO_WORD_VAR2(name)  GPIO_WORD_VAR_FOR_1BIT(name, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
+                                                  79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95)
+      #define GPIO_WORD_VAR3(name)  GPIO_WORD_VAR_FOR_1BIT(name, 96, 97, 98, 99, 100, 101, 102, 103, 104, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+                                                  NULL, NULL, NULL, NULL, NULL)
+   #elif defined(DRV_GPIO_REG_AS_6290)
+      #define GPIO_WORD_VAR1(name)  GPIO_WORD_VAR_FOR_1BIT(name, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
+                                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)
+
+#endif
+
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** General macros to calulate GPIO word-length variable************/
+/**************************value with 1 bit unit for different platform***********************/
+/************************************END*****************************************************/ 
+/*********************************************************************************************/ 
+
+
+  
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** For each GPIO mode, specify if each GPIO pin is allowed to ******/
+/****************set to this mode with '1' allowed, '0' on the corresponding bit position******/
+/**********  Bit 0 means GPIO0, Bit 1 means GPIO1... etc ****************************************/ 
+/**************************************START****************************************************/ 
+/************************************************************************************************/ 
+
+   #define GPIO_MODE0_VAR0  GPIO_WORD_VAR0(MODE0)
+   #define GPIO_MODE1_VAR0  GPIO_WORD_VAR0(MODE1)
+   #define GPIO_MODE2_VAR0  GPIO_WORD_VAR0(MODE2)
+   #define GPIO_MODE3_VAR0  GPIO_WORD_VAR0(MODE3)
+   #if defined(DRV_GPIO_MODE_3BITS)
+   #define GPIO_MODE4_VAR0  GPIO_WORD_VAR0(MODE4)
+   #elif defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_MODE4_VAR0  GPIO_WORD_VAR0(MODE4)
+   #define GPIO_MODE5_VAR0  GPIO_WORD_VAR0(MODE5)
+   #define GPIO_MODE6_VAR0  GPIO_WORD_VAR0(MODE6)
+   #define GPIO_MODE7_VAR0  GPIO_WORD_VAR0(MODE7)
+   #endif //defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_DIROUT_VAR0  GPIO_WORD_VAR0(DIR_OUT)
+   #define GPIO_DIRIN_VAR0  GPIO_WORD_VAR0(DIR_IN)
+   
+   #if defined(DRV_GPIO_REG_AS_6251)
+   #define GPIO_DIROUT_VAR1  GPIO_WORD_VAR1(DIR_OUT)
+   #define GPIO_DIRIN_VAR1  GPIO_WORD_VAR1(DIR_IN)
+   #elif !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   #define GPIO_MODE0_VAR1  GPIO_WORD_VAR1(MODE0)
+   #define GPIO_MODE1_VAR1  GPIO_WORD_VAR1(MODE1)
+   #define GPIO_MODE2_VAR1  GPIO_WORD_VAR1(MODE2)
+   #define GPIO_MODE3_VAR1  GPIO_WORD_VAR1(MODE3)
+   #if defined(DRV_GPIO_MODE_3BITS)
+   #define GPIO_MODE4_VAR1  GPIO_WORD_VAR1(MODE4)
+   #elif defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_MODE4_VAR1  GPIO_WORD_VAR1(MODE4)
+   #define GPIO_MODE5_VAR1  GPIO_WORD_VAR1(MODE5)
+   #define GPIO_MODE6_VAR1  GPIO_WORD_VAR1(MODE6)
+   #define GPIO_MODE7_VAR1  GPIO_WORD_VAR1(MODE7)
+   #endif //defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_DIROUT_VAR1  GPIO_WORD_VAR1(DIR_OUT)
+   #define GPIO_DIRIN_VAR1  GPIO_WORD_VAR1(DIR_IN)
+   
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)
+   #define GPIO_MODE0_VAR2     GPIO_WORD_VAR2(MODE0)
+   #define GPIO_MODE1_VAR2     GPIO_WORD_VAR2(MODE1)
+   #define GPIO_MODE2_VAR2     GPIO_WORD_VAR2(MODE2)
+   #define GPIO_MODE3_VAR2     GPIO_WORD_VAR2(MODE3)
+   #if defined(DRV_GPIO_MODE_3BITS)
+   #define GPIO_MODE4_VAR2  GPIO_WORD_VAR2(MODE4)
+   #elif defined(DRV_GPIO_MODE_4BITS) 
+   #define GPIO_MODE4_VAR2  GPIO_WORD_VAR2(MODE4)
+   #define GPIO_MODE5_VAR2  GPIO_WORD_VAR2(MODE5)
+   #define GPIO_MODE6_VAR2  GPIO_WORD_VAR2(MODE6)
+   #define GPIO_MODE7_VAR2  GPIO_WORD_VAR2(MODE7)
+   #endif //defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_DIROUT_VAR2    GPIO_WORD_VAR2(DIR_OUT)
+   #define GPIO_DIRIN_VAR2     GPIO_WORD_VAR2(DIR_IN)
+   #endif /* DRV_GPIO_REG_AS_6228 */
+   
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256)|| defined(DRV_GPIO_REG_AS_6255)
+   #define GPIO_MODE0_VAR3     GPIO_WORD_VAR3(MODE0)
+   #define GPIO_MODE1_VAR3     GPIO_WORD_VAR3(MODE1)
+   #define GPIO_MODE2_VAR3     GPIO_WORD_VAR3(MODE2)
+   #define GPIO_MODE3_VAR3     GPIO_WORD_VAR3(MODE3)
+   #if defined(DRV_GPIO_MODE_3BITS)
+   #define GPIO_MODE4_VAR3  GPIO_WORD_VAR3(MODE4)   
+   #elif defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_MODE4_VAR3  GPIO_WORD_VAR3(MODE4)
+   #define GPIO_MODE5_VAR3  GPIO_WORD_VAR3(MODE5)
+   #define GPIO_MODE6_VAR3  GPIO_WORD_VAR3(MODE6)
+   #define GPIO_MODE7_VAR3  GPIO_WORD_VAR3(MODE7)
+   #endif //defined(DRV_GPIO_MODE_4BITS)
+   #define GPIO_DIROUT_VAR3    GPIO_WORD_VAR3(DIR_OUT)
+   #define GPIO_DIRIN_VAR3     GPIO_WORD_VAR3(DIR_IN)
+   #endif /* DRV_GPIO_REG_AS_6228 */
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A) */
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** For each GPIO mode, specify if each GPIO pin is allowed to ******/
+/****************set to this mode with '1' allowed, '0' on the corresponding bit position******/
+/**********  Bit 0 means GPIO0, Bit 1 means GPIO1... etc ****************************************/ 
+/**************************************END****************************************************/ 
+/************************************************************************************************/ 
+
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** For each GPO mode, specify if each GPO pin is allowed to ******/
+/****************set to this mode with '1' allowed, '0' on the corresponding bit position******/
+/**********  Bit 0 means GPO0, Bit 1 means GPO1... etc ****************************************/ 
+/**************************************START****************************************************/ 
+/************************************************************************************************/ 
+
+#if defined(DRV_GPIO_REG_AS_6205B) || defined(DRV_GPIO_REG_AS_6225)
+   #define GPO_MODE0_VAR0  (MODE0_GPO0 | (MODE0_GPO1 << 1) | (MODE0_GPO2 << 2) | (MODE0_GPO3 << 3))
+   #define GPO_MODE1_VAR0  (MODE1_GPO0 | (MODE1_GPO1 << 1) | (MODE1_GPO2 << 2) | (MODE1_GPO3 << 3))
+   #define GPO_MODE2_VAR0  (MODE2_GPO0 | (MODE2_GPO1 << 1) | (MODE2_GPO2 << 2) | (MODE2_GPO3 << 3))
+   #define GPO_MODE3_VAR0  (MODE3_GPO0 | (MODE3_GPO1 << 1) | (MODE3_GPO2 << 2) | (MODE3_GPO3 << 3))
+#elif defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227)
+   #define GPO_MODE0_VAR0  (MODE0_GPO0 | (MODE0_GPO1 << 1) | (MODE0_GPO2 << 2) | (MODE0_GPO3 << 3) | (MODE0_GPO4 << 4))
+   #define GPO_MODE1_VAR0  (MODE1_GPO0 | (MODE1_GPO1 << 1) | (MODE1_GPO2 << 2) | (MODE1_GPO3 << 3) | (MODE1_GPO4 << 4))
+   #define GPO_MODE2_VAR0  (MODE2_GPO0 | (MODE2_GPO1 << 1) | (MODE2_GPO2 << 2) | (MODE2_GPO3 << 3) | (MODE2_GPO4 << 4))
+   #define GPO_MODE3_VAR0  (MODE3_GPO0 | (MODE3_GPO1 << 1) | (MODE3_GPO2 << 2) | (MODE3_GPO3 << 3) | (MODE3_GPO4 << 4))
+#elif defined(DRV_GPIO_REG_AS_6218B) || defined(DRV_GPIO_REG_AS_6228)
+   #define GPO_MODE0_VAR0  (MODE0_GPO0 | (MODE0_GPO1 << 1) | (MODE0_GPO2 << 2))
+   #define GPO_MODE1_VAR0  (MODE1_GPO0 | (MODE1_GPO1 << 1) | (MODE1_GPO2 << 2))
+   #define GPO_MODE2_VAR0  (MODE2_GPO0 | (MODE2_GPO1 << 1) | (MODE2_GPO2 << 2))
+   #define GPO_MODE3_VAR0  (MODE3_GPO0 | (MODE3_GPO1 << 1) | (MODE3_GPO2 << 2))
+#endif
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/**************************** For each GPO mode, specify if each GPO pin is allowed to ******/
+/****************set to this mode with '1' allowed, '0' on the corresponding bit position******/
+/**********  Bit 0 means GPO0, Bit 1 means GPO1... etc ****************************************/ 
+/**************************************END****************************************************/ 
+/************************************************************************************************/ 
+
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*** The '1' of the bit in the variables denotes that the mode is allowed to be set for the **/
+/*** corresponding pin.******************gpio_mode_allowed[][4]*******************************/
+/**************************************START***************************************************/
+/**********************************************************************************************/ 
+#if !defined(DRV_GPIO_MODE_4BITS) && !defined(DRV_GPIO_MODE_3BITS) && !defined(DRV_GPIO_REG_AS_6290)
+const kal_uint32  gpio_mode_allowed[][4] = {
+   {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0}
+   #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   ,{GPIO_MODE0_VAR1, GPIO_MODE1_VAR1, GPIO_MODE2_VAR1, GPIO_MODE3_VAR1}
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276)
+   ,{GPIO_MODE0_VAR2, GPIO_MODE1_VAR2, GPIO_MODE2_VAR2, GPIO_MODE3_VAR2}
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+   ,{GPIO_MODE0_VAR3, GPIO_MODE1_VAR3, GPIO_MODE2_VAR3, GPIO_MODE3_VAR3}
+   #endif
+   #endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+};
+#elif defined(DRV_GPIO_MODE_4BITS)//#if defined(DRV_GPIO_MODE_4BITS)
+const kal_uint32  gpio_mode_allowed[][8] = {
+#if defined(DRV_GPIO_REG_AS_6255)
+   {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0, GPIO_MODE4_VAR0, GPIO_MODE5_VAR0, GPIO_MODE6_VAR0, GPIO_MODE7_VAR0}
+   ,{GPIO_MODE0_VAR1, GPIO_MODE1_VAR1, GPIO_MODE2_VAR1, GPIO_MODE3_VAR1, GPIO_MODE4_VAR1, GPIO_MODE5_VAR1, GPIO_MODE6_VAR1, GPIO_MODE7_VAR1}
+   ,{GPIO_MODE0_VAR2, GPIO_MODE1_VAR2, GPIO_MODE2_VAR2, GPIO_MODE3_VAR2, GPIO_MODE4_VAR2, GPIO_MODE5_VAR2, GPIO_MODE6_VAR2, GPIO_MODE7_VAR2}
+   ,{GPIO_MODE0_VAR3, GPIO_MODE1_VAR3, GPIO_MODE2_VAR3, GPIO_MODE3_VAR3, GPIO_MODE4_VAR3, GPIO_MODE5_VAR3, GPIO_MODE6_VAR3, GPIO_MODE7_VAR3}
+#elif defined(DRV_GPIO_REG_AS_6256)
+    {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0, GPIO_MODE4_VAR0, GPIO_MODE5_VAR0, GPIO_MODE6_VAR0, GPIO_MODE7_VAR0}
+   ,{GPIO_MODE0_VAR1, GPIO_MODE1_VAR1, GPIO_MODE2_VAR1, GPIO_MODE3_VAR1, GPIO_MODE4_VAR1, GPIO_MODE5_VAR1, GPIO_MODE6_VAR1, GPIO_MODE7_VAR1}
+   ,{GPIO_MODE0_VAR2, GPIO_MODE1_VAR2, GPIO_MODE2_VAR2, GPIO_MODE3_VAR2, GPIO_MODE4_VAR2, GPIO_MODE5_VAR2, GPIO_MODE6_VAR2, GPIO_MODE7_VAR2}
+   ,{GPIO_MODE0_VAR3, GPIO_MODE1_VAR3, GPIO_MODE2_VAR3, GPIO_MODE3_VAR3, GPIO_MODE4_VAR3, GPIO_MODE5_VAR3, GPIO_MODE6_VAR3, GPIO_MODE7_VAR3}
+#elif defined(DRV_GPIO_REG_AS_6253E_1)
+   {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0, GPIO_MODE4_VAR0, GPIO_MODE5_VAR0, GPIO_MODE6_VAR0, GPIO_MODE7_VAR0}
+   ,{GPIO_MODE0_VAR1, GPIO_MODE1_VAR1, GPIO_MODE2_VAR1, GPIO_MODE3_VAR1, GPIO_MODE4_VAR1, GPIO_MODE5_VAR1, GPIO_MODE6_VAR1, GPIO_MODE7_VAR1}
+#elif defined(DRV_GPIO_REG_AS_6251)
+   {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0, GPIO_MODE4_VAR0, GPIO_MODE5_VAR0, GPIO_MODE6_VAR0, GPIO_MODE7_VAR0}
+#endif //defined(DRV_GPIO_REG_AS_6255)
+};
+#elif defined(DRV_GPIO_MODE_3BITS)
+const kal_uint32  gpio_mode_allowed[][5] = {
+#if defined(DRV_GPIO_REG_AS_6276)
+    {GPIO_MODE0_VAR0, GPIO_MODE1_VAR0, GPIO_MODE2_VAR0, GPIO_MODE3_VAR0,GPIO_MODE4_VAR0}
+   ,{GPIO_MODE0_VAR1, GPIO_MODE1_VAR1, GPIO_MODE2_VAR1, GPIO_MODE3_VAR1,GPIO_MODE4_VAR1}
+   ,{GPIO_MODE0_VAR2, GPIO_MODE1_VAR2, GPIO_MODE2_VAR2, GPIO_MODE3_VAR2,GPIO_MODE4_VAR2}
+   ,{GPIO_MODE0_VAR3, GPIO_MODE1_VAR3, GPIO_MODE2_VAR3, GPIO_MODE3_VAR3,GPIO_MODE4_VAR3}
+#endif  
+};
+
+#endif //#if !defined(DRV_GPIO_MODE_4BITS) && !defined(DRV_GPIO_MODE_3BITS)
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*** The '1' of the bit in the variables denotes that the mode is allowed to be set for the **/
+/*** corresponding pin.***********************************************************************/
+/*************************************START***************************************************/
+/**********************************************************************************************/ 
+
+kal_uint32  gpio_check_for_write[] = {
+   0xffffffff
+   #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   #if defined(DRV_GPIO_REG_AS_6251)
+   ,0x0
+   #else //defined(DRV_GPIO_REG_AS_6251)
+   ,0xffffffff
+   #endif //defined(DRV_GPIO_REG_AS_6251)
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)
+   ,0xffffffff
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256)
+   ,0xffffffff
+   #endif /* DRV_GPIO_REG_AS_6268A */
+   #endif
+   #endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+};
+
+kal_uint32  gpio_check_for_read[] = {
+   0xffffffff
+   #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   #if defined(DRV_GPIO_REG_AS_6251)
+   ,0x0
+   #else //defined(DRV_GPIO_REG_AS_6251)
+   ,0xffffffff
+   #endif //defined(DRV_GPIO_REG_AS_6251)
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)
+   ,0xffffffff
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256)
+   ,0xffffffff
+   #endif /* DRV_GPIO_REG_AS_6268A */
+   #endif
+   #endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+};
+
+/* The '1' of the bit in the variables denotes that the direction output is allowed to be 
+   set for the corresponding pin. */
+const kal_uint32  gpio_dir_out_allowed[] = {
+   GPIO_DIROUT_VAR0
+   #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   ,GPIO_DIROUT_VAR1
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)
+   ,GPIO_DIROUT_VAR2
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256)
+   ,GPIO_DIROUT_VAR3
+   #endif
+   #endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+};
+
+/* The '1' of the bit in the variables denotes that the direction input is allowed to be 
+   set for the corresponding pin. */
+const kal_uint32  gpio_dir_in_allowed[] = {
+	GPIO_DIRIN_VAR0
+   #if !defined(DRV_GPIO_REG_AS_6205B) && !defined(DRV_GPIO_REG_AS_TK6516) && !defined(DRV_GPIO_REG_AS_6270A)
+   ,GPIO_DIRIN_VAR1
+   #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)
+   ,GPIO_DIRIN_VAR2
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256)
+   ,GPIO_DIRIN_VAR3
+   #endif
+   #endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+};
+
+#if (!defined(DRV_GPIO_WO_GPO))
+const kal_uint16  gpo_mode_allowed[] = {
+	GPO_MODE0_VAR0, GPO_MODE1_VAR0, GPO_MODE2_VAR0, GPO_MODE3_VAR0
+};
+kal_uint16  gpo_check_for_write[] = {
+	0xffff
+};
+#endif /*!defined(DRV_GPIO_REG_AS_6223)*/
+
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/*** The '1' of the bit in the variables denotes that the mode is allowed to be set for the **/
+/*** corresponding pin.***********************************************************************/
+/*************************************END*****************************************************/
+/**********************************************************************************************/ 
+
+#if defined(MT6276_S01)
+#define CLK_MUX_SEL0_VALUE (CLKSEL1 | (CLKSEL2<<4) | (CLKSEL3<<8)| (CLKSEL4<<12) \
+														|(CLKSEL5<<16)|(CLKSEL6<<20)|(CLKSEL7<<24)|(CLKSEL8<<28))
+														
+#define CLK_MUX_SEL1_VALUE (CLKSEL9 | (CLKSEL10<<4) | (CLKSEL11<<8)| (CLKSEL12<<12) \
+														|(CLKSEL13<<16))
+const kal_uint32 GPIO_CLK_SEL[13]={CLKSEL1,CLKSEL2,CLKSEL3,CLKSEL4,CLKSEL5,CLKSEL6,CLKSEL7, \
+                                    CLKSEL8,CLKSEL9,CLKSEL10,CLKSEL11,CLKSEL12,CLKSEL13};
+#endif
+
+#endif /* __CHIP_SUPP_GPIO_DRV_TOOL__ */
+
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/************************************** GPIO_Setting_init*************************************/
+/************************************START***************************************************/
+/**********************************************************************************************/ 
+
+void GPIO_setting_init(void)
+{
+#if !defined(DRV_GPIO_OFF)
+#if defined(__CHIP_SUPP_GPIO_DRV_TOOL__)
+#if defined(DRV_GPIO_6290_SERIES)
+//	PDN_CLR(PDN_GPIO);
+#if 0 // !defined(TK6291)
+/* under construction !*/
+/* under construction !*/
+#endif
+#endif
+
+#if !defined(DRV_GPIO_MODE_4BITS) && !defined(DRV_GPIO_MODE_3BITS) && !defined(DRV_GPIO_6290_SERIES)
+   DRV_GPIO_WriteReg(GPIO_MODE1, GPIO_MODE_REG1);
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg(GPIO_MODE3, GPIO_MODE_REG3);
+#if defined(DRV_GPIO_REG_AS_6205B)
+   /* Note that for MT6205B, GPO mode register is on GPIO_MODE3, not GPO_MODE. */
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPO_MODE_REG);
+#elif defined(DRV_GPIO_REG_AS_6270A)
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+#else /* defined(DRV_GPIO_REG_AS_6270A) */
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg(GPIO_MODE6, GPIO_MODE_REG6);
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E)
+   DRV_GPIO_WriteReg(GPIO_MODE7, GPIO_MODE_REG7);
+      #if defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6276)
+      DRV_GPIO_WriteReg(GPIO_MODE8, GPIO_MODE_REG8);
+         #if defined(DRV_GPIO_REG_AS_6228)
+         DRV_GPIO_WriteReg(GPIO_MODE9, GPIO_MODE_REG9);
+         DRV_GPIO_WriteReg(GPIO_MODE10, GPIO_MODE_REG10);
+         #endif
+         #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276)
+         DRV_GPIO_WriteReg(GPIO_MODE9, GPIO_MODE_REG9);
+            #if !defined(DRV_GPIO_REG_AS_6236) 
+            DRV_GPIO_WriteReg(GPIO_MODEA, GPIO_MODE_REGA);
+               #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T)
+               DRV_GPIO_WriteReg(GPIO_MODEB, GPIO_MODE_REGB);
+               #endif
+               #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+               DRV_GPIO_WriteReg(GPIO_MODEB, GPIO_MODE_REGB);
+               DRV_GPIO_WriteReg(GPIO_MODEC, GPIO_MODE_REGC);
+               DRV_GPIO_WriteReg(GPIO_MODED, GPIO_MODE_REGD);
+                  #if  defined(DRV_GPIO_REG_AS_6276)
+                  DRV_GPIO_WriteReg(GPIO_MODEE, GPIO_MODE_REGE);
+                  #endif // defined(DRV_GPIO_REG_AS_6276)
+               #endif
+            #endif //!defined(DRV_GPIO_REG_AS_6236) 
+         #endif
+      #endif
+   #endif
+   #if (!defined(DRV_GPIO_WO_GPO))
+   DRV_GPIO_WriteReg(GPO_MODE, GPO_MODE_REG);
+   #endif
+#endif /* defined(DRV_GPIO_REG_AS_6205B) */
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+#elif defined(DRV_GPIO_MODE_3BITS)
+#if defined(DRV_GPIO_REG_AS_6276)
+   DRV_GPIO_WriteReg(GPIO_MODE0, GPIO_MODE_REG0);
+   DRV_GPIO_WriteReg(GPIO_MODE1, GPIO_MODE_REG1);
+   DRV_GPIO_WriteReg(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg(GPIO_MODE3, GPIO_MODE_REG3);
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg(GPIO_MODE6, GPIO_MODE_REG6);
+   DRV_GPIO_WriteReg(GPIO_MODE7, GPIO_MODE_REG7);
+   DRV_GPIO_WriteReg(GPIO_MODE8, GPIO_MODE_REG8);
+   DRV_GPIO_WriteReg(GPIO_MODE9, GPIO_MODE_REG9);
+   DRV_GPIO_WriteReg(GPIO_MODEA, GPIO_MODE_REGA);
+   DRV_GPIO_WriteReg(GPIO_MODEB, GPIO_MODE_REGB);
+   DRV_GPIO_WriteReg(GPIO_MODEC, GPIO_MODE_REGC);
+   DRV_GPIO_WriteReg(GPIO_MODED, GPIO_MODE_REGD);
+   DRV_GPIO_WriteReg(GPIO_MODEE, GPIO_MODE_REGE);
+   DRV_GPIO_WriteReg(GPIO_MODEF, GPIO_MODE_REGF);
+   DRV_GPIO_WriteReg(GPIO_MODE10, GPIO_MODE_REG10);
+   DRV_GPIO_WriteReg(GPIO_MODE11, GPIO_MODE_REG11);
+   DRV_GPIO_WriteReg(GPIO_MODE12, GPIO_MODE_REG12);
+   DRV_GPIO_WriteReg(GPIO_MODE13, GPIO_MODE_REG13);
+   DRV_GPIO_WriteReg(GPIO_MODE14, GPIO_MODE_REG14);
+   DRV_GPIO_WriteReg(GPIO_MODE15, GPIO_MODE_REG15);	
+	//wait after drv_tool check in, there should modify.
+  // DRV_GPIO_WriteReg(GPIO_MODE16, GPIO_MODE_REG16);	
+#endif   
+#else // DRV_GPIO_MODE_4BITS is not defined
+#if defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg32(GPIO_MODE1, GPIO_MODE_REG1);
+   DRV_GPIO_WriteReg32(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg32(GPIO_MODE3, GPIO_MODE_REG3);
+   DRV_GPIO_WriteReg32(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg32(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg32(GPIO_MODE6, GPIO_MODE_REG6);
+   DRV_GPIO_WriteReg32(GPIO_MODE7, GPIO_MODE_REG7);
+   DRV_GPIO_WriteReg32(GPIO_MODE8, GPIO_MODE_REG8);
+   DRV_GPIO_WriteReg32(GPIO_MODE9, GPIO_MODE_REG9);
+#endif
+
+#if defined(DRV_GPIO_REG_AS_6255)
+   DRV_GPIO_WriteReg(GPIO_MODE1, GPIO_MODE_REG1);
+   DRV_GPIO_WriteReg(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg(GPIO_MODE3, GPIO_MODE_REG3);
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg(GPIO_MODE6, GPIO_MODE_REG6);
+   DRV_GPIO_WriteReg(GPIO_MODE7, GPIO_MODE_REG7);
+   DRV_GPIO_WriteReg(GPIO_MODE8, GPIO_MODE_REG8);
+   DRV_GPIO_WriteReg(GPIO_MODE9, GPIO_MODE_REG9);
+   DRV_GPIO_WriteReg(GPIO_MODE10, GPIO_MODE_REG10);
+   DRV_GPIO_WriteReg(GPIO_MODE11, GPIO_MODE_REG11);
+   DRV_GPIO_WriteReg(GPIO_MODE12, GPIO_MODE_REG12);
+   DRV_GPIO_WriteReg(GPIO_MODE13, GPIO_MODE_REG13);
+   DRV_GPIO_WriteReg(GPIO_MODE14, GPIO_MODE_REG14);
+   DRV_GPIO_WriteReg(GPIO_MODE15, GPIO_MODE_REG15);
+   DRV_GPIO_WriteReg(GPIO_MODE16, GPIO_MODE_REG16);
+   DRV_GPIO_WriteReg(GPIO_MODE17, GPIO_MODE_REG17);
+   DRV_GPIO_WriteReg(GPIO_MODE18, GPIO_MODE_REG18);
+   DRV_GPIO_WriteReg(GPIO_MODE19, GPIO_MODE_REG19);
+   DRV_GPIO_WriteReg(GPIO_MODE20, GPIO_MODE_REG20);
+   DRV_GPIO_WriteReg(GPIO_MODE21, GPIO_MODE_REG21);
+   DRV_GPIO_WriteReg(GPIO_MODE22, GPIO_MODE_REG22);
+   DRV_GPIO_WriteReg(GPIO_MODE23, GPIO_MODE_REG23);
+   DRV_GPIO_WriteReg(GPIO_MODE24, GPIO_MODE_REG24);
+   DRV_GPIO_WriteReg(GPIO_MODE25, GPIO_MODE_REG25);
+   DRV_GPIO_WriteReg(GPIO_MODE26, GPIO_MODE_REG26);
+   DRV_GPIO_WriteReg(GPIO_MODE27, GPIO_MODE_REG27);
+#elif defined(DRV_GPIO_REG_AS_6251)
+   DRV_GPIO_WriteReg(GPIO_MODE1, GPIO_MODE_REG1);
+   DRV_GPIO_WriteReg(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg(GPIO_MODE3, GPIO_MODE_REG3);
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg(GPIO_MODE6, GPIO_MODE_REG6);
+   DRV_GPIO_WriteReg(GPIO_MODE7, GPIO_MODE_REG7);
+   DRV_GPIO_WriteReg(GPIO_MODE8, GPIO_MODE_REG8);
+#endif //defined(DRV_GPIO_REG_AS_6255)
+#if defined(DRV_GPIO_REG_AS_6256)
+   DRV_GPIO_WriteReg(GPIO_MODE1, GPIO_MODE_REG1);
+   DRV_GPIO_WriteReg(GPIO_MODE2, GPIO_MODE_REG2);
+   DRV_GPIO_WriteReg(GPIO_MODE3, GPIO_MODE_REG3);
+   DRV_GPIO_WriteReg(GPIO_MODE4, GPIO_MODE_REG4);
+   DRV_GPIO_WriteReg(GPIO_MODE5, GPIO_MODE_REG5);
+   DRV_GPIO_WriteReg(GPIO_MODE6, GPIO_MODE_REG6);
+   DRV_GPIO_WriteReg(GPIO_MODE7, GPIO_MODE_REG7);
+   DRV_GPIO_WriteReg(GPIO_MODE8, GPIO_MODE_REG8);
+   DRV_GPIO_WriteReg(GPIO_MODE9, GPIO_MODE_REG9);
+   DRV_GPIO_WriteReg(GPIO_MODE10, GPIO_MODE_REG10);
+   DRV_GPIO_WriteReg(GPIO_MODE11, GPIO_MODE_REG11);
+   DRV_GPIO_WriteReg(GPIO_MODE12, GPIO_MODE_REG12);
+   DRV_GPIO_WriteReg(GPIO_MODE13, GPIO_MODE_REG13);
+   DRV_GPIO_WriteReg(GPIO_MODE14, GPIO_MODE_REG14);
+   DRV_GPIO_WriteReg(GPIO_MODE15, GPIO_MODE_REG15);
+   DRV_GPIO_WriteReg(GPIO_MODE16, GPIO_MODE_REG16);
+   DRV_GPIO_WriteReg(GPIO_MODE17, GPIO_MODE_REG17);
+   DRV_GPIO_WriteReg(GPIO_MODE18, GPIO_MODE_REG18);
+   DRV_GPIO_WriteReg(GPIO_MODE19, GPIO_MODE_REG19);
+   DRV_GPIO_WriteReg(GPIO_MODE20, GPIO_MODE_REG20);
+   DRV_GPIO_WriteReg(GPIO_MODE21, GPIO_MODE_REG21);
+   DRV_GPIO_WriteReg(GPIO_MODE22, GPIO_MODE_REG22);
+   DRV_GPIO_WriteReg(GPIO_MODE23, GPIO_MODE_REG23);
+   DRV_GPIO_WriteReg(GPIO_MODE24, GPIO_MODE_REG24);
+   DRV_GPIO_WriteReg(GPIO_MODE25, GPIO_MODE_REG25);
+   DRV_GPIO_WriteReg(GPIO_MODE26, GPIO_MODE_REG26);
+   DRV_GPIO_WriteReg(GPIO_MODE27, GPIO_MODE_REG27);
+#endif //defined(DRV_GPIO_REG_AS_6256)
+#endif //defined(DRV_GPIO_MODE_4BITS)
+
+#if defined(DRV_GPIO_REG_AS_6205B)
+   DRV_GPIO_WriteReg(GPIO_DIR, GPIO_DIR_REG1);
+   DRV_GPIO_WriteReg(GPIO_DIR2, GPIO_DIR_REG2);
+#elif defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_DIR1, GPIO_DIR_REG1);
+#elif defined(DRV_GPIO_REG_AS_6270A)
+   DRV_GPIO_WriteReg(GPIO_DIR1, GPIO_DIR_REG1);
+   DRV_GPIO_WriteReg(GPIO_DIR2, GPIO_DIR_REG2);
+#else  /* defined(DRV_GPIO_REG_AS_6270A) */
+   
+   DRV_GPIO_WriteReg(GPIO_DIR1, GPIO_DIR_REG1);
+   DRV_GPIO_WriteReg(GPIO_DIR2, GPIO_DIR_REG2);
+   #if !defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_DIR3, GPIO_DIR_REG3);
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E)|| defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg(GPIO_DIR4, GPIO_DIR_REG4);
+      #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6253E_1)
+      DRV_GPIO_WriteReg(GPIO_DIR5, GPIO_DIR_REG5);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T)
+      DRV_GPIO_WriteReg(GPIO_DIR5, GPIO_DIR_REG5);
+      DRV_GPIO_WriteReg(GPIO_DIR6, GPIO_DIR_REG6);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      DRV_GPIO_WriteReg(GPIO_DIR5, GPIO_DIR_REG5);
+      DRV_GPIO_WriteReg(GPIO_DIR6, GPIO_DIR_REG6);
+      DRV_GPIO_WriteReg(GPIO_DIR7, GPIO_DIR_REG7);
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256)  || defined(DRV_GPIO_REG_AS_6255)
+    DRV_GPIO_WriteReg(GPIO_DIR4, GPIO_DIR_REG4);
+    DRV_GPIO_WriteReg(GPIO_DIR5, GPIO_DIR_REG5);
+    DRV_GPIO_WriteReg(GPIO_DIR6, GPIO_DIR_REG6);
+    DRV_GPIO_WriteReg(GPIO_DIR7, GPIO_DIR_REG7); 
+   #endif
+#endif
+
+#if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_TK6516) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6270A) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6251) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6253E_1) || defined(DRV_GPIO_REG_AS_6256)  || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL1, GPIO_PULLSEL_REG1);
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL2, GPIO_PULLSEL_REG2);
+   #if !defined(DRV_GPIO_REG_AS_6270A) && !defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL3, GPIO_PULLSEL_REG3);
+   #if !defined(DRV_GPIO_REG_AS_6251)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL4, GPIO_PULLSEL_REG4);
+   #if !defined(DRV_GPIO_REG_AS_6253E)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL5, GPIO_PULLSEL_REG5);
+   #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) 
+   DRV_GPIO_WriteReg(GPIO_PULLSEL6, GPIO_PULLSEL_REG6);
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)
+   DRV_GPIO_WriteReg(GPIO_PULLSEL6, GPIO_PULLSEL_REG6);
+   DRV_GPIO_WriteReg(GPIO_PULLSEL7, GPIO_PULLSEL_REG7);
+   #endif
+   #endif //!defined(DRV_GPIO_REG_AS_6253E)
+   #endif //!defined(DRV_GPIO_REG_AS_6251)
+   #endif //!defined(DRV_GPIO_REG_AS_6270A)
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+#endif
+
+#if defined(DRV_GPIO_REG_AS_6205B)
+   DRV_GPIO_WriteReg(GPIO_PULLEN, GPIO_PULL_REG1);
+   DRV_GPIO_WriteReg(GPIO_PULLEN2, GPIO_PULL_REG2);
+#elif defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_PULLEN1, GPIO_PULL_REG1);
+#elif defined(DRV_GPIO_REG_AS_6270A)
+   DRV_GPIO_WriteReg(GPIO_PULLEN1, GPIO_PULL_REG1);
+   DRV_GPIO_WriteReg(GPIO_PULLEN2, GPIO_PULL_REG2);
+#else  /* defined(DRV_GPIO_REG_AS_6270A) */
+   DRV_GPIO_WriteReg(GPIO_PULLEN1, GPIO_PULL_REG1);
+   DRV_GPIO_WriteReg(GPIO_PULLEN2, GPIO_PULL_REG2);
+   #if !defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_PULLEN3, GPIO_PULL_REG3);
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg(GPIO_PULLEN4, GPIO_PULL_REG4);
+      #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6253E_1)
+      DRV_GPIO_WriteReg(GPIO_PULLEN5, GPIO_PULL_REG5);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) 
+      DRV_GPIO_WriteReg(GPIO_PULLEN5, GPIO_PULL_REG5);
+      DRV_GPIO_WriteReg(GPIO_PULLEN6, GPIO_PULL_REG6);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      DRV_GPIO_WriteReg(GPIO_PULLEN5, GPIO_PULL_REG5);
+      DRV_GPIO_WriteReg(GPIO_PULLEN6, GPIO_PULL_REG6);
+      DRV_GPIO_WriteReg(GPIO_PULLEN7, GPIO_PULL_REG7);
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)
+      DRV_GPIO_WriteReg(GPIO_PULLEN4, GPIO_PULL_REG4);
+      DRV_GPIO_WriteReg(GPIO_PULLEN5, GPIO_PULL_REG5);
+      DRV_GPIO_WriteReg(GPIO_PULLEN6, GPIO_PULL_REG6);
+      DRV_GPIO_WriteReg(GPIO_PULLEN7, GPIO_PULL_REG7);
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+
+#if !defined(DRV_GPIO_REG_AS_6205B)
+   DRV_GPIO_WriteReg(GPIO_DINV1, GPIO_INV_REG1);
+#if !defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_DINV2, GPIO_INV_REG2);
+   #if !defined(DRV_GPIO_REG_AS_6270A) && !defined(DRV_GPIO_REG_AS_6251) && !defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_DINV3, GPIO_INV_REG3);
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228)  || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg(GPIO_DINV4, GPIO_INV_REG4);
+      #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6253E_1)
+      DRV_GPIO_WriteReg(GPIO_DINV5, GPIO_INV_REG5);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) 
+      DRV_GPIO_WriteReg(GPIO_DINV5, GPIO_INV_REG5);
+      DRV_GPIO_WriteReg(GPIO_DINV6, GPIO_INV_REG6);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      DRV_GPIO_WriteReg(GPIO_DINV5, GPIO_INV_REG5);
+      DRV_GPIO_WriteReg(GPIO_DINV6, GPIO_INV_REG6);
+      DRV_GPIO_WriteReg(GPIO_DINV7, GPIO_INV_REG7);
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)
+      DRV_GPIO_WriteReg(GPIO_DINV4, GPIO_INV_REG4); 
+      DRV_GPIO_WriteReg(GPIO_DINV5, GPIO_INV_REG5);
+      DRV_GPIO_WriteReg(GPIO_DINV6, GPIO_INV_REG6);
+      DRV_GPIO_WriteReg(GPIO_DINV7, GPIO_INV_REG7);  
+   #endif
+   #endif //!defined(DRV_GPIO_REG_AS_6270A)
+#endif /* !defined(DRV_GPIO_REG_AS_TK6516) */
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+
+#if defined(DRV_GPIO_REG_AS_6205B)
+   DRV_GPIO_WriteReg(GPIO_DOUT, GPIO_OUTPUT_REG1);
+   DRV_GPIO_WriteReg(GPIO_DOUT2, GPIO_OUTPUT_REG2);
+#elif defined(DRV_GPIO_REG_AS_TK6516)
+   DRV_GPIO_WriteReg(GPIO_DOUT1, GPIO_OUTPUT_REG1);
+#elif defined(DRV_GPIO_REG_AS_6270A)
+   DRV_GPIO_WriteReg(GPIO_DOUT1, GPIO_OUTPUT_REG1);
+   DRV_GPIO_WriteReg(GPIO_DOUT2, GPIO_OUTPUT_REG2);
+#else  /* defined(DRV_GPIO_REG_AS_6270A) */
+   DRV_GPIO_WriteReg(GPIO_DOUT1, GPIO_OUTPUT_REG1);
+   DRV_GPIO_WriteReg(GPIO_DOUT2, GPIO_OUTPUT_REG2);
+   #if !defined(DRV_GPIO_REG_AS_6290)
+   DRV_GPIO_WriteReg(GPIO_DOUT3, GPIO_OUTPUT_REG3);
+   #endif
+   #if defined(DRV_GPIO_REG_AS_6219) || defined(DRV_GPIO_REG_AS_6227) || defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6225) || defined(DRV_GPIO_REG_AS_6223) || defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255) || defined(DRV_GPIO_REG_AS_6276) || defined(DRV_GPIO_REG_AS_6253E) || defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg(GPIO_DOUT4, GPIO_OUTPUT_REG4);
+      #if defined(DRV_GPIO_REG_AS_6228) || defined(DRV_GPIO_REG_AS_6235) || defined(DRV_GPIO_REG_AS_6236) || defined(DRV_GPIO_REG_AS_6253E_1)
+      DRV_GPIO_WriteReg(GPIO_DOUT5, GPIO_OUTPUT_REG5);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6238) || defined(DRV_GPIO_REG_AS_6253T) || defined(DRV_GPIO_REG_AS_6255)
+      DRV_GPIO_WriteReg(GPIO_DOUT5, GPIO_OUTPUT_REG5);
+      DRV_GPIO_WriteReg(GPIO_DOUT6, GPIO_OUTPUT_REG6);
+      #endif
+      #if defined(DRV_GPIO_REG_AS_6268A) || defined(DRV_GPIO_REG_AS_6268) || defined(DRV_GPIO_REG_AS_6276)
+      DRV_GPIO_WriteReg(GPIO_DOUT5, GPIO_OUTPUT_REG5);
+      DRV_GPIO_WriteReg(GPIO_DOUT6, GPIO_OUTPUT_REG6);
+      DRV_GPIO_WriteReg(GPIO_DOUT7, GPIO_OUTPUT_REG7);
+      #endif
+   #elif defined(DRV_GPIO_REG_AS_6256) || defined(DRV_GPIO_REG_AS_6255)
+      DRV_GPIO_WriteReg(GPIO_DOUT4, GPIO_OUTPUT_REG4);
+      DRV_GPIO_WriteReg(GPIO_DOUT5, GPIO_OUTPUT_REG5);
+      DRV_GPIO_WriteReg(GPIO_DOUT6, GPIO_OUTPUT_REG6);
+      DRV_GPIO_WriteReg(GPIO_DOUT7, GPIO_OUTPUT_REG7); 
+   #endif
+#endif /* !defined(DRV_GPIO_REG_AS_6205B) */
+#if (!defined(DRV_GPIO_WO_GPO))
+   DRV_GPIO_WriteReg(GPO_DOUT, GPO_OUTPUT_REG1);
+#endif
+
+#if defined(DRV_GPIO_REG_AS_6253E)
+   DRV_GPIO_WriteReg(GPIO_SPMODE, GPIO_SPMODE_REG);
+   DRV_GPIO_WriteReg(GPIO_BANK, GPIO_BANK_REG);
+#elif defined(DRV_GPIO_REG_AS_6253E_1)
+   DRV_GPIO_WriteReg32(GPIO_SPMODE0, GPIO_SPMODE0_REG);
+   DRV_GPIO_WriteReg32(GPIO_SPMODE1, GPIO_SPMODE1_REG);
+#endif //defined(DRV_GPIO_REG_AS_6253E)
+
+#if defined(MT6276_S01)
+   DRV_GPIO_WriteReg32(CLK_MUX_SEL0, CLK_MUX_SEL0_VALUE);
+   DRV_GPIO_WriteReg32(CLK_MUX_SEL1, CLK_MUX_SEL1_VALUE);
+#endif
+
+#endif /* __CHIP_SUPP_GPIO_DRV_TOOL__*/
+#endif /*!defined(DRV_GPIO_OFF)*/
+}
+
+#endif /* __CUST_NEW__ */
+
+/*********************************************************************************************/
+/*********************************************************************************************/ 
+/************************************** GPIO_Setting_init*************************************/
+/************************************END******************************************************/