void MsDrvInterfaceTouchDeviceResume(struct early_suspend *pSuspend)
{
    DBG("*** %s() ***\n", __func__);

    if(program_over ==0)
		return;
#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
    if (g_GestureWakeupFlag == 1)
    {
        DrvIcFwLyrCloseGestureWakeup();
    }
    else
    {
        DrvPlatformLyrEnableFingerTouchReport(); 
    }
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
    
    DrvPlatformLyrTouchDevicePowerOn();
/*
    DrvPlatformLyrFingerTouchReleased(0, 0);
    input_sync(g_InputDevice);
*/    
#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
    DrvIcFwLyrRestoreFirmwareModeToLogDataMode();
#endif //CONFIG_ENABLE_FIRMWARE_DATA_LOG

#ifndef CONFIG_ENABLE_GESTURE_WAKEUP
    DrvPlatformLyrEnableFingerTouchReport(); 
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
}
void MsDrvInterfaceTouchDeviceResume(struct early_suspend *pSuspend)
{
    DBG("*** %s() ***\n", __func__);
	
#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
    if (g_GestureWakeupFlag == 1)
    {
        DrvIcFwLyrCloseGestureWakeup();
    }
    else
    {
        DrvPlatformLyrEnableFingerTouchReport(); 
    }
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
    
    DrvPlatformLyrTouchDevicePowerOn();
    
#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
//    DrvIcFwLyrRestoreFirmwareModeToLogDataMode(); // Mark this function call for avoiding device driver may spend longer time to resume from suspend state.
#endif //CONFIG_ENABLE_FIRMWARE_DATA_LOG

#ifndef CONFIG_ENABLE_GESTURE_WAKEUP
    DrvPlatformLyrEnableFingerTouchReport(); 
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
}
static int msg_ts_resume(struct device *dev)
{
	DBG("*** %s() ***\n", __func__);

	DBG("resume bSuspendRuned=%d\n", bSuspendRuned);
	if (bSuspendRuned == 0)
		return 0;
	bSuspendRuned = 0;

#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
	if (g_GestureDebugMode == 1)
		DrvIcFwLyrCloseGestureDebugMode();
#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */

	if (g_GestureWakeupFlag == 1)
		DrvIcFwLyrCloseGestureWakeup();
	else
		DrvPlatformLyrEnableFingerTouchReport();
#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
#ifdef CONFIG_ENABLE_REGULATOR_POWER_ON
	DrvPlatformLyrTouchDeviceRegulatorPowerOn();
#endif
	DrvPlatformLyrTouchDevicePowerOn();

#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
	/*
	 * Mark this function call for avoiding device driver
	 * may spend longer time to resume from suspend state.
	 */
	DrvIcFwLyrRestoreFirmwareModeToLogDataMode();
#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */

#ifndef CONFIG_ENABLE_GESTURE_WAKEUP
	DrvPlatformLyrEnableFingerTouchReport();
#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
	return 0;
}
void MsDrvInterfaceTouchDeviceResume(void)
{
    DBG("*** %s() ***\n", __func__);
#ifdef CONFIG_UPDATE_FIRMWARE_BY_SW_ID
    if(program_over ==0)
		return;
#endif
    if(!tp_suspend_flag){
        DBG("*** Mstar is already resumed! ***\n");
        return;
    }
    tp_suspend_flag = 0;
#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
    if (g_GestureWakeupFlag == 1)
    {
        DrvIcFwLyrCloseGestureWakeup();
//	 printk(KERN_ERR"Msg2238 enter DrvIcFwLyrCloseGestureWakeup\n");
    }
    else
    {
        DrvPlatformLyrEnableFingerTouchReport(); 
    }
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
    
    DrvPlatformLyrTouchDevicePowerOn();
/*
    DrvPlatformLyrFingerTouchReleased(0, 0);
    input_sync(g_InputDevice);
*/    
#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
    DrvIcFwLyrRestoreFirmwareModeToLogDataMode();
#endif //CONFIG_ENABLE_FIRMWARE_DATA_LOG

#ifndef CONFIG_ENABLE_GESTURE_WAKEUP
    DrvPlatformLyrEnableFingerTouchReport(); 
#endif //CONFIG_ENABLE_GESTURE_WAKEUP
}
/* probe function is used for matching and initializing input device */
s32 /*__devinit*/ MsDrvInterfaceTouchDeviceProbe(struct i2c_client *pClient, const struct i2c_device_id *pDeviceId)
{
    s32 nRetVal = 0;

    DBG("*** %s() ***\n", __func__);

    DrvPlatformLyrInputDeviceInitialize(pClient);
  
    DrvPlatformLyrTouchDeviceRequestGPIO();
	
    DrvPlatformLyrTouchDeviceRegisterFingerTouchInterruptHandler();
	
#ifdef CONFIG_ENABLE_REGULATOR_POWER_ON
    DrvPlatformLyrTouchDeviceRegulatorPowerOn();
#endif //CONFIG_ENABLE_REGULATOR_POWER_ON

    DrvPlatformLyrTouchDevicePowerOn();

    nRetVal = DrvMainTouchDeviceInitialize();
    if (nRetVal == -ENODEV)
    {
        DrvPlatformLyrTouchDeviceRemove(pClient);
        return nRetVal;
    }
#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
#ifdef CONFIG_ENABLE_GESTURE_INFORMATION_MODE
    mstar_create_proc();
#endif
#endif


#if defined(CONFIG_FB)
    call_back_functions_init();
#endif

#ifndef CONFIG_UPDATE_FIRMWARE_BY_SW_ID
    DrvPlatformLyrEnableFingerTouchReport();
#endif	
    DBG("*** MStar touch driver registered ***\n");
//modify by pangle at 20150228 begin
#ifdef CONFIG_UPDATE_FIRMWARE_BY_SW_ID
	 program_over = 1;
#endif
//modify by pangle at 20150228 end
    return nRetVal;
}
/* probe function is used for matching and initializing input device */
s32 /*__devinit*/ MsDrvInterfaceTouchDeviceProbe(struct i2c_client *pClient, const struct i2c_device_id *pDeviceId)
{
    s32 nRetVal = 0;

    DBG("*** %s() ***\n", __func__);
  
    DrvPlatformLyrInputDeviceInitialize(pClient);
  
    DrvPlatformLyrTouchDeviceRequestGPIO();

#ifdef CONFIG_ENABLE_REGULATOR_POWER_ON
    DrvPlatformLyrTouchDeviceRegulatorPowerOn();
#endif //CONFIG_ENABLE_REGULATOR_POWER_ON

    DrvPlatformLyrTouchDevicePowerOn();

	g_ChipType = DrvIcFwLyrGetChipType();
	
	 //if (g_ChipType != CHIP_TYPE_MSG21XX &&   // (0x01) 
         //     g_ChipType != CHIP_TYPE_MSG21XXA &&  // (0x02) 
        //      g_ChipType != CHIP_TYPE_MSG26XXM &&  // (0x03) 
         //     g_ChipType != CHIP_TYPE_MSG22XX)     // (0x7A) 
	if (g_ChipType != CHIP_TYPE_MSG22XX)     // (0x7A) 
	{
			return -1;
	}
    DrvMainTouchDeviceInitialize();

    DrvPlatformLyrTouchDeviceRegisterFingerTouchInterruptHandler();

    DrvPlatformLyrTouchDeviceRegisterEarlySuspend();

    DrvPlatformLyrTouchDeviceResetHw();

    DrvPlatformLyrEnableFingerTouchReport();

    DBG("*** MStar touch driver registered ***\n");
    
    return nRetVal;
}