aboutsummaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c')
-rw-r--r--drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c2122
1 files changed, 2122 insertions, 0 deletions
diff --git a/drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c b/drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c
new file mode 100644
index 00000000000..f2773403884
--- /dev/null
+++ b/drivers/input/touchscreen/mstarTouchPanel/mstar_drv_main.c
@@ -0,0 +1,2122 @@
+/*
+ * Copyright (c) 2006-2014 MStar Semiconductor, Inc.
+ * All rights reserved.
+ *
+ * Unless otherwise stipulated in writing, any and all information contained
+ * herein regardless in any format shall remain the sole proprietary of
+ * MStar Semiconductor Inc. and be kept in strict confidence
+ * (??MStar Confidential Information??) by the recipient.
+ * Any unauthorized act including without limitation unauthorized disclosure,
+ * copying, use, reproduction, sale, distribution, modification, disassembling,
+ * reverse engineering and compiling of the contents of MStar Confidential
+ * Information is unlawful and strictly prohibited. MStar hereby reserves the
+ * rights to any and all damages, losses, costs and expenses resulting
+ * therefrom.
+ */
+
+/**
+ *
+ * @file mstar_drv_main.c
+ *
+ * @brief This file defines the interface of touch screen
+ *
+ *
+ */
+
+#include "mstar_drv_main.h"
+#include "mstar_drv_utility_adaption.h"
+#include "mstar_drv_platform_porting_layer.h"
+#include "mstar_drv_ic_fw_porting_layer.h"
+
+#ifdef CONFIG_HIPAD_FIRMWARE_UPGRADE
+#include "hipad_firmware_upgrade.h"
+#endif
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+#ifdef CONFIG_ENABLE_GESTURE_INFORMATION_MODE
+static u32 _gLogGestureCount;
+static u8 _gLogGestureInforType;
+#endif /* CONFIG_ENABLE_GESTURE_INFORMATION_MODE */
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+static u32 _gIsUpdateComplete;
+static u8 *_gFwVersion; /* customer firmware version */
+
+static u16 _gDebugReg[MAX_DEBUG_REGISTER_NUM] = {0};
+static u16 _gDebugRegValue[MAX_DEBUG_REGISTER_NUM] = {0};
+static u32 _gDebugRegCount;
+static u8 *_gPlatformFwVersion; /* internal use firmware version for MStar */
+
+static struct proc_dir_entry *_gProcClass;
+static struct proc_dir_entry *_gProcMsTouchScreenMsg20xx;
+static struct proc_dir_entry *_gProcDevice;
+
+static const struct file_operations _gProcChipType = {
+ .read = DrvMainProcfsChipTypeRead,
+ .write = DrvMainProcfsChipTypeWrite,
+};
+
+static const struct file_operations _gProcFirmwareData = {
+ .read = DrvMainProcfsFirmwareDataRead,
+ .write = DrvMainProcfsFirmwareDataWrite,
+};
+
+static const struct file_operations _gProcApkFirmwareUpdate = {
+ .read = DrvMainProcfsFirmwareUpdateRead,
+ .write = DrvMainProcfsFirmwareUpdateWrite,
+};
+
+static const struct file_operations _gProcCustomerFirmwareVersion = {
+ .read = DrvMainProcfsCustomerFirmwareVersionRead,
+ .write = DrvMainProcfsCustomerFirmwareVersionWrite,
+};
+
+static const struct file_operations _gProcPlatformFirmwareVersion = {
+ .read = DrvMainProcfsPlatformFirmwareVersionRead,
+ .write = DrvMainProcfsPlatformFirmwareVersionWrite,
+};
+
+static const struct file_operations _gProcDeviceDriverVersion = {
+ .read = DrvMainProcfsDeviceDriverVersionRead,
+ .write = DrvMainProcfsDeviceDriverVersionWrite,
+};
+
+static const struct file_operations _gProcSdCardFirmwareUpdate = {
+ .read = DrvMainProcfsSdCardFirmwareUpdateRead,
+ .write = DrvMainProcfsSdCardFirmwareUpdateWrite,
+};
+
+static const struct file_operations _gProcFirmwareDebug = {
+ .read = DrvMainProcfsFirmwareDebugRead,
+ .write = DrvMainProcfsFirmwareDebugWrite,
+};
+
+static const struct file_operations _gProcFirmwareSetDebugValue = {
+ .read = DrvMainProcfsFirmwareSetDebugValueRead,
+ .write = DrvMainProcfsFirmwareSetDebugValueWrite,
+};
+
+#ifdef CONFIG_ENABLE_ITO_MP_TEST
+static const struct file_operations _gProcMpTest = {
+ .read = DrvMainProcfsMpTestRead,
+ .write = DrvMainProcfsMpTestWrite,
+};
+
+static const struct file_operations _gProcMpTestLog = {
+ .read = DrvMainProcfsMpTestLogRead,
+ .write = DrvMainProcfsMpTestLogWrite,
+};
+
+static const struct file_operations _gProcMpTestFailChannel = {
+ .read = DrvMainProcfsMpTestFailChannelRead,
+ .write = DrvMainProcfsMpTestFailChannelWrite,
+};
+
+static const struct file_operations _gProcMpTestScope = {
+ .read = DrvMainProcfsMpTestScopeRead,
+ .write = DrvMainProcfsMpTestScopeWrite,
+};
+#endif /* CONFIG_ENABLE_ITO_MP_TEST */
+
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+static const struct file_operations _gProcFirmwareMode = {
+ .read = DrvMainProcfsFirmwareModeRead,
+ .write = DrvMainProcfsFirmwareModeWrite,
+};
+
+static const struct file_operations _gProcFirmwareSensor = {
+ .read = DrvMainProcfsFirmwareSensorRead,
+ .write = DrvMainProcfsFirmwareSensorWrite,
+};
+
+static const struct file_operations _gProcFirmwarePacketHeader = {
+ .read = DrvMainProcfsFirmwarePacketHeaderRead,
+ .write = DrvMainProcfsFirmwarePacketHeaderWrite,
+};
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+static const struct file_operations _gProcGestureWakeupMode = {
+ .read = DrvMainProcfsGestureWakeupModeRead,
+ .write = DrvMainProcfsGestureWakeupModeWrite,
+};
+#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
+static const struct file_operations _gProcGestureDebugMode = {
+ .read = DrvMainProcfsGestureDebugModeRead,
+ .write = DrvMainProcfsGestureDebugModeWrite,
+};
+#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */
+#ifdef CONFIG_ENABLE_GESTURE_INFORMATION_MODE
+static const struct file_operations _gProcGestureInforMode = {
+ .read = DrvMainProcfsGestureInforModeRead,
+ .write = DrvMainProcfsGestureInforModeWrite,
+};
+#endif /* CONFIG_ENABLE_GESTURE_INFORMATION_MODE */
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+struct kset *g_TouchKSet = NULL;
+struct kobject *g_TouchKObj = NULL;
+
+u8 g_IsSwitchModeByAPK = 0;
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+
+#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
+struct kset *g_GestureKSet = NULL;
+struct kobject *g_GestureKObj = NULL;
+#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */
+
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+#ifdef CONFIG_ENABLE_SEGMENT_READ_FINGER_TOUCH_DATA
+u16 g_FwPacketDataAddress = 0;
+u16 g_FwPacketFlagAddress = 0;
+u8 g_FwSupportSegment = 0;
+#endif /* CONFIG_ENABLE_SEGMENT_READ_FINGER_TOUCH_DATA */
+
+u8 g_FwData[MAX_UPDATE_FIRMWARE_BUFFER_SIZE][1024];
+u32 g_FwDataCount = 0;
+
+static s32 _DrvMainCreateProcfsDirEntry(void);
+
+ssize_t DrvMainProcfsChipTypeRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return sprintf(pBuffer, "%d", g_ChipType);
+}
+
+ssize_t DrvMainProcfsChipTypeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwareDataRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() g_FwDataCount = %d ***\n", __func__, g_FwDataCount);
+ return g_FwDataCount;
+}
+
+ssize_t DrvMainProcfsFirmwareDataWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 nNum = nCount / 1024;
+ u32 nRemainder = nCount % 1024;
+ u32 i;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (nNum > 0) {
+ for (i = 0; i < nNum; i++) {
+ memcpy(g_FwData[g_FwDataCount], pBuffer+(i*1024), 1024);
+ g_FwDataCount++;
+ }
+
+ /* Handle special firmware size like MSG22XX(48.5KB) */
+ if (nRemainder > 0) {
+ DBG("nRemainder = %d\n", nRemainder);
+ memcpy(g_FwData[g_FwDataCount], pBuffer+(i*1024),
+ nRemainder);
+ g_FwDataCount++;
+ }
+ } else {/* nCount < 1024 */
+ if (nCount > 0) {
+ memcpy(g_FwData[g_FwDataCount], pBuffer, nCount);
+ g_FwDataCount++;
+ }
+ }
+
+ DBG("*** g_FwDataCount = %d ***\n", g_FwDataCount);
+ if (pBuffer != NULL)
+ DBG("*** buf[0] = %c ***\n", pBuffer[0]);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwareUpdateRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() _gFwVersion = %s ***\n", __func__, _gFwVersion);
+
+ return sprintf(pBuffer, "%s\n", _gFwVersion);
+}
+
+ssize_t DrvMainProcfsFirmwareUpdateWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DrvPlatformLyrDisableFingerTouchReport();
+
+ DBG("*** %s() g_FwDataCount = %d ***\n", __func__, g_FwDataCount);
+
+ if (0 != DrvIcFwLyrUpdateFirmware(g_FwData, EMEM_ALL)) {
+ _gIsUpdateComplete = 0;
+ DBG("Update FAILED\n");
+ } else {
+ _gIsUpdateComplete = 1;
+ DBG("Update SUCCESS\n");
+ }
+
+ DrvPlatformLyrEnableFingerTouchReport();
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsCustomerFirmwareVersionRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() _gFwVersion = %s ***\n", __func__, _gFwVersion);
+
+ sprintf(pBuffer, "%s\n", _gFwVersion);
+ return 0;
+}
+
+ssize_t DrvMainProcfsCustomerFirmwareVersionWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u16 nMajor = 0, nMinor = 0;
+
+ DrvIcFwLyrGetCustomerFirmwareVersion(&nMajor, &nMinor, &_gFwVersion);
+
+ DBG("*** %s() _gFwVersion = %s ***\n", __func__, _gFwVersion);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsPlatformFirmwareVersionRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() _gPlatformFwVersion = %s ***\n", __func__,
+ _gPlatformFwVersion);
+
+ return sprintf(pBuffer, "%s\n", _gPlatformFwVersion);
+}
+
+ssize_t DrvMainProcfsPlatformFirmwareVersionWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DrvIcFwLyrGetPlatformFirmwareVersion(&_gPlatformFwVersion);
+
+ DBG("*** %s() _gPlatformFwVersion = %s ***\n", __func__,
+ _gPlatformFwVersion);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsDeviceDriverVersionRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+ return sprintf(pBuffer, "%s", DEVICE_DRIVER_RELEASE_VERSION);
+}
+
+ssize_t DrvMainProcfsDeviceDriverVersionWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsSdCardFirmwareUpdateRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u16 nMajor = 0, nMinor = 0;
+
+ DrvIcFwLyrGetCustomerFirmwareVersion(&nMajor, &nMinor, &_gFwVersion);
+
+ DBG("*** %s() _gFwVersion = %s ***\n", __func__, _gFwVersion);
+
+ return sprintf(pBuffer, "%s\n", _gFwVersion);
+}
+
+ssize_t DrvMainProcfsSdCardFirmwareUpdateWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ char *pValid = NULL;
+ char *pTmpFilePath = NULL;
+ char szFilePath[100] = {0};
+
+ DBG("*** %s() ***\n", __func__);
+ DBG("pBuffer = %s\n", pBuffer);
+
+ if (pBuffer != NULL) {
+ pValid = strstr(pBuffer, ".bin");
+
+ if (pValid) {
+ pTmpFilePath = strsep((char **)&pBuffer, ".");
+
+ DBG("pTmpFilePath = %s\n", pTmpFilePath);
+
+ strcat(szFilePath, pTmpFilePath);
+ strcat(szFilePath, ".bin");
+
+ DBG("szFilePath = %s\n", szFilePath);
+
+ if (0 != DrvFwCtrlUpdateFirmwareBySdCard(szFilePath))
+ DBG("Update FAILED\n");
+ else
+ DBG("Update SUCCESS\n");
+ } else
+ DBG("The file type of the update firmware bin file",
+ "is not a .bin file.\n");
+ } else
+ DBG("The file path of the update firmware bin file is NULL.\n");
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwareDebugRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 i;
+ u8 nBank, nAddr;
+ u16 szRegData[MAX_DEBUG_REGISTER_NUM] = {0};
+ u8 szOut[MAX_DEBUG_REGISTER_NUM*25] = {0}, szValue[10] = {0};
+
+ DBG("*** %s() ***\n", __func__);
+
+ DrvPlatformLyrTouchDeviceResetHw();
+
+ DbBusEnterSerialDebugMode();
+ DbBusStopMCU();
+ DbBusIICUseBus();
+ DbBusIICReshape();
+ mdelay(100);
+
+ for (i = 0; i < _gDebugRegCount; i++)
+ szRegData[i] = RegGet16BitValue(_gDebugReg[i]);
+
+ DbBusIICNotUseBus();
+ DbBusNotStopMCU();
+ DbBusExitSerialDebugMode();
+
+ for (i = 0; i < _gDebugRegCount; i++) {
+ nBank = (_gDebugReg[i] >> 8) & 0xFF;
+ nAddr = _gDebugReg[i] & 0xFF;
+
+ DBG("reg(0x%X,0x%X)=0x%04X\n", nBank, nAddr, szRegData[i]);
+
+ strcat(szOut, "reg(");
+ sprintf(szValue, "0x%X", nBank);
+ strcat(szOut, szValue);
+ strcat(szOut, ",");
+ sprintf(szValue, "0x%X", nAddr);
+ strcat(szOut, szValue);
+ strcat(szOut, ")=");
+ sprintf(szValue, "0x%04X", szRegData[i]);
+ strcat(szOut, szValue);
+ strcat(szOut, "\n");
+ }
+
+ return sprintf(pBuffer, "%s\n", szOut);
+}
+
+ssize_t DrvMainProcfsFirmwareDebugWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 i;
+ char *pCh;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+ DBG("*** %s() pBuffer[0] = %c ***\n", __func__, pBuffer[0]);
+ DBG("*** %s() pBuffer[1] = %c ***\n", __func__, pBuffer[1]);
+ DBG("*** %s() pBuffer[2] = %c ***\n", __func__, pBuffer[2]);
+ DBG("*** %s() pBuffer[3] = %c ***\n", __func__, pBuffer[3]);
+ DBG("*** %s() pBuffer[4] = %c ***\n", __func__, pBuffer[4]);
+ DBG("*** %s() pBuffer[5] = %c ***\n", __func__, pBuffer[5]);
+
+ DBG("nCount = %d\n", (int)nCount);
+
+ i = 0;
+ while ((pCh = strsep((char **)&pBuffer, " ,"))
+ && (i < MAX_DEBUG_REGISTER_NUM)) {
+ DBG("pCh = %s\n", pCh);
+
+ _gDebugReg[i] = DrvCommonConvertCharToHexDigit(pCh,
+ strlen(pCh));
+
+ DBG("_gDebugReg[%d] = 0x%04X\n", i, _gDebugReg[i]);
+ i++;
+ }
+ _gDebugRegCount = i;
+
+ DBG("_gDebugRegCount = %d\n", _gDebugRegCount);
+ }
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwareSetDebugValueRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 i;
+ u8 nBank, nAddr;
+ u16 szRegData[MAX_DEBUG_REGISTER_NUM] = {0};
+ u8 szOut[MAX_DEBUG_REGISTER_NUM*25] = {0}, szValue[10] = {0};
+
+ DBG("*** %s() ***\n", __func__);
+
+ DrvPlatformLyrTouchDeviceResetHw();
+
+ DbBusEnterSerialDebugMode();
+ DbBusStopMCU();
+ DbBusIICUseBus();
+ DbBusIICReshape();
+ mdelay(100);
+
+ for (i = 0; i < _gDebugRegCount; i++)
+ szRegData[i] = RegGet16BitValue(_gDebugReg[i]);
+
+ DbBusIICNotUseBus();
+ DbBusNotStopMCU();
+ DbBusExitSerialDebugMode();
+
+ for (i = 0; i < _gDebugRegCount; i++) {
+ nBank = (_gDebugReg[i] >> 8) & 0xFF;
+ nAddr = _gDebugReg[i] & 0xFF;
+
+ DBG("reg(0x%X,0x%X)=0x%04X\n", nBank, nAddr, szRegData[i]);
+
+ strcat(szOut, "reg(");
+ sprintf(szValue, "0x%X", nBank);
+ strcat(szOut, szValue);
+ strcat(szOut, ",");
+ sprintf(szValue, "0x%X", nAddr);
+ strcat(szOut, szValue);
+ strcat(szOut, ")=");
+ sprintf(szValue, "0x%04X", szRegData[i]);
+ strcat(szOut, szValue);
+ strcat(szOut, "\n");
+ }
+
+ return sprintf(pBuffer, "%s\n", szOut);
+}
+
+ssize_t DrvMainProcfsFirmwareSetDebugValueWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 i, j, k;
+ char *pCh;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+ DBG("*** %s() pBuffer[0] = %c ***\n", __func__, pBuffer[0]);
+ DBG("*** %s() pBuffer[1] = %c ***\n", __func__, pBuffer[1]);
+
+ DBG("nCount = %d\n", (int)nCount);
+
+ i = 0;
+ j = 0;
+ k = 0;
+
+ while ((pCh = strsep((char **)&pBuffer, " ,")) && (i < 2)) {
+ DBG("pCh = %s\n", pCh);
+
+ if ((i%2) == 0) {
+ _gDebugReg[j] =
+ DrvCommonConvertCharToHexDigit(pCh,
+ strlen(pCh));
+ DBG("_gDebugReg[%d] = 0x%04X\n", j,
+ _gDebugReg[j]);
+ j++;
+ } else {
+ _gDebugRegValue[k] =
+ DrvCommonConvertCharToHexDigit(pCh,
+ strlen(pCh));
+ DBG("_gDebugRegValue[%d] = 0x%04X\n",
+ k, _gDebugRegValue[k]);
+ k++;
+ }
+
+ i++;
+ }
+ _gDebugRegCount = j;
+
+ DBG("_gDebugRegCount = %d\n", _gDebugRegCount);
+
+ DrvPlatformLyrTouchDeviceResetHw();
+
+ DbBusEnterSerialDebugMode();
+ DbBusStopMCU();
+ DbBusIICUseBus();
+ DbBusIICReshape();
+ mdelay(100);
+
+ for (i = 0; i < _gDebugRegCount; i++) {
+ RegSet16BitValue(_gDebugReg[i], _gDebugRegValue[i]);
+ DBG("_gDebugReg[%d] = 0x%04X, ",
+ "_gDebugRegValue[%d] = 0x%04X\n",
+ i, _gDebugReg[i],
+ i, _gDebugRegValue[i]);
+ }
+
+ DbBusIICNotUseBus();
+ DbBusNotStopMCU();
+ DbBusExitSerialDebugMode();
+ }
+
+ return nCount;
+}
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef CONFIG_ENABLE_ITO_MP_TEST
+
+ssize_t DrvMainProcfsMpTestRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+ DBG("*** ctp mp test status = %d ***\n", DrvIcFwLyrGetMpTestResult());
+
+ return sprintf(pBuffer, "%d", DrvIcFwLyrGetMpTestResult());
+}
+
+ssize_t DrvMainProcfsMpTestWrite(struct file *pFile, const char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ u32 nMode = 0;
+ s32 err;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+ err = sscanf(pBuffer, "%x", &nMode);
+ if (0 == err)
+ return -EINVAL;
+
+ DBG("Mp Test Mode = 0x%x\n", nMode);
+
+ if (nMode == ITO_TEST_MODE_OPEN_TEST) {
+ _gItoTestMode = ITO_TEST_MODE_OPEN_TEST;
+ DBG("open test result : %d\n", _DrvMpTestItoOpenTest());
+ } else if (nMode == ITO_TEST_MODE_SHORT_TEST) {
+ _gItoTestMode = ITO_TEST_MODE_SHORT_TEST;
+ DrvIcFwLyrScheduleMpTestWork(ITO_TEST_MODE_SHORT_TEST);
+ } else
+ DBG("*** Undefined MP Test Mode ***\n");
+ }
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsMpTestLogRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ u32 nLength = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ DrvIcFwLyrGetMpTestDataLog(_gItoTestMode, pBuffer, &nLength);
+
+ return nLength;
+}
+
+ssize_t DrvMainProcfsMpTestLogWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsMpTestFailChannelRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 nNum = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ DrvIcFwLyrGetMpTestFailChannel(_gItoTestMode, pBuffer, &nNum);
+
+ return nNum;
+}
+
+ssize_t DrvMainProcfsMpTestFailChannelWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsMpTestScopeRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ DrvIcFwLyrGetMpTestScope(&g_TestScopeInfo);
+
+ return sprintf(pBuffer, "%d,%d", g_TestScopeInfo.nMx,
+ g_TestScopeInfo.nMy);
+#else
+ return 0;
+#endif /* CONFIG_ENABLE_CHIP_MSG26XXM */
+}
+
+ssize_t DrvMainProcfsMpTestScopeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return nCount;
+}
+
+#endif /* CONFIG_ENABLE_ITO_MP_TEST */
+
+/*--------------------------------------------------------------------------*/
+#ifdef CONFIG_HIPAD_FIRMWARE_UPGRADE
+#define FW_SIZE (49 * 1024)
+static u8 fw_buf[FW_SIZE];
+int msg_firmware_upgrade(struct firmware_miscdevice *mdev,
+ const char __user *buff, int size)
+{
+ int ret = 0;
+
+ if (mdev->is_prepare) {
+ memset(fw_buf, 0, FW_SIZE);
+ mdev->is_prepare = 0;
+ }
+
+ if (copy_from_user(&fw_buf[mdev->fw_count], buff, size)) {
+ fw_mdev_err("copy_from_user failure\n");
+ return -EFAULT;
+ }
+ mdev->fw_count += size;
+
+ fw_mdev_debug("writen size = %d, fw_count = %d\n",
+ size, mdev->fw_count);
+
+ if (mdev->fw_count != mdev->fw_size)
+ return 0;
+
+ memcpy(g_FwData, fw_buf, mdev->fw_count);
+
+ DrvPlatformLyrDisableFingerTouchReport();
+
+ ret = DrvIcFwLyrUpdateFirmware(g_FwData, EMEM_ALL);
+ if (ret != 0) {
+ _gIsUpdateComplete = 0;
+ g_FwDataCount = 0;
+ pr_info("%s: Update FAILED\n", __func__);
+ } else {
+ _gIsUpdateComplete = 1;
+ g_FwDataCount = 0;
+ pr_info("%s: Update SUCCESS\n", __func__);
+ }
+
+ DrvPlatformLyrEnableFingerTouchReport();
+
+ return ret;
+}
+
+void msg_get_firmware_id(u16 *major, u16 *minor)
+{
+ DrvPlatformLyrDisableFingerTouchReport();
+ DrvIcFwLyrGetCustomerFirmwareVersion(major, minor, &_gFwVersion);
+ DrvPlatformLyrEnableFingerTouchReport();
+}
+#endif
+
+/*--------------------------------------------------------------------------*/
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+
+ssize_t DrvMainProcfsFirmwareModeRead(struct file *pFile, char __user *pBuffer,
+ size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ DrvPlatformLyrDisableFingerTouchReport();
+
+ g_FirmwareMode = DrvIcFwLyrGetFirmwareMode();
+
+ DrvPlatformLyrEnableFingerTouchReport();
+
+ DBG("%s() firmware mode = 0x%x\n", __func__, g_FirmwareMode);
+
+ return sprintf(pBuffer, "%x", g_FirmwareMode);
+#elif defined(CONFIG_ENABLE_CHIP_MSG21XXA) || \
+ defined(CONFIG_ENABLE_CHIP_MSG22XX)
+ DrvPlatformLyrDisableFingerTouchReport();
+
+ DrvIcFwLyrGetFirmwareInfo(&g_FirmwareInfo);
+ g_FirmwareMode = g_FirmwareInfo.nFirmwareMode;
+
+ DrvPlatformLyrEnableFingerTouchReport();
+
+ DBG("%s() firmware mode = 0x%x, can change firmware mode = %d\n",
+ __func__, g_FirmwareInfo.nFirmwareMode,
+ g_FirmwareInfo.nIsCanChangeFirmwareMode);
+
+ return sprintf(pBuffer, "%x,%d", g_FirmwareInfo.nFirmwareMode,
+ g_FirmwareInfo.nIsCanChangeFirmwareMode);
+#endif
+}
+
+ssize_t DrvMainProcfsFirmwareModeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 nMode;
+ s32 err;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+ err = sscanf(pBuffer, "%x", &nMode);
+ if (0 == err)
+ return -EINVAL;
+
+ DBG("firmware mode = 0x%x\n", nMode);
+
+ g_IsSwitchModeByAPK = 0;
+
+ DrvPlatformLyrDisableFingerTouchReport();
+
+ if (nMode == FIRMWARE_MODE_DEMO_MODE) {
+ /* demo mode */
+ g_FirmwareMode = DrvIcFwLyrChangeFirmwareMode(
+ FIRMWARE_MODE_DEMO_MODE);
+ } else if (nMode == FIRMWARE_MODE_DEBUG_MODE) {
+ /* debug mode */
+ g_FirmwareMode = DrvIcFwLyrChangeFirmwareMode(
+ FIRMWARE_MODE_DEBUG_MODE);
+ g_IsSwitchModeByAPK = 1;
+#if defined(CONFIG_ENABLE_CHIP_MSG21XXA) || defined(CONFIG_ENABLE_CHIP_MSG22XX)
+ } else if (nMode == FIRMWARE_MODE_RAW_DATA_MODE) {
+ /* raw data mode */
+ g_FirmwareMode = DrvIcFwLyrChangeFirmwareMode(
+ FIRMWARE_MODE_RAW_DATA_MODE);
+ g_IsSwitchModeByAPK = 1;
+ }
+#endif /* CONFIG_ENABLE_CHIP_MSG21XXA || CONFIG_ENABLE_CHIP_MSG22XX */
+ } else
+ DBG("*** Undefined Firmware Mode ***\n");
+
+ DrvPlatformLyrEnableFingerTouchReport();
+ }
+
+ DBG("*** g_FirmwareMode = 0x%x ***\n", g_FirmwareMode);
+
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwareSensorRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ if (g_FirmwareInfo.nLogModePacketHeader == 0xA5 ||
+ g_FirmwareInfo.nLogModePacketHeader == 0xAB)
+ return sprintf(pBuffer, "%d,%d",
+ g_FirmwareInfo.nMx, g_FirmwareInfo.nMy);
+ else if (g_FirmwareInfo.nLogModePacketHeader == 0xA7)
+ return sprintf(pBuffer, "%d,%d,%d,%d",
+ g_FirmwareInfo.nMx,
+ g_FirmwareInfo.nMy,
+ g_FirmwareInfo.nSs,
+ g_FirmwareInfo.nSd);
+ else {
+ DBG("Undefined debug mode packet format : 0x%x\n",
+ g_FirmwareInfo.nLogModePacketHeader);
+ return 0;
+ }
+#elif defined(CONFIG_ENABLE_CHIP_MSG21XXA) || \
+ defined(CONFIG_ENABLE_CHIP_MSG22XX)
+ return sprintf(pBuffer, "%d", g_FirmwareInfo.nLogModePacketLength);
+#endif
+}
+
+ssize_t DrvMainProcfsFirmwareSensorWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+ return nCount;
+}
+
+ssize_t DrvMainProcfsFirmwarePacketHeaderRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return sprintf(pBuffer, "%d", g_FirmwareInfo.nLogModePacketHeader);
+}
+
+ssize_t DrvMainProcfsFirmwarePacketHeaderWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+ return nCount;
+}
+
+ssize_t DrvMainKObjectPacketShow(struct kobject *pKObj,
+ struct kobj_attribute *pAttr, char *pBuf)
+{
+ u32 i = 0;
+ u32 nLength = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (strcmp(pAttr->attr.name, "packet") == 0) {
+ if (g_LogModePacket != NULL) {
+ DBG("g_FirmwareMode=%x, g_LogModePacket[0]=%x, ",
+ "g_LogModePacket[1]=%x\n",
+ g_FirmwareMode,
+ g_LogModePacket[0],
+ g_LogModePacket[1]);
+ DBG("g_LogModePacket[2]=%x, g_LogModePacket[3]=%x\n",
+ g_LogModePacket[2],
+ g_LogModePacket[3]);
+ DBG("g_LogModePacket[4]=%x, g_LogModePacket[5]=%x\n",
+ g_LogModePacket[4],
+ g_LogModePacket[5]);
+
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ if ((g_FirmwareMode == FIRMWARE_MODE_DEBUG_MODE) &&
+ (g_LogModePacket[0] == 0xA5 ||
+ g_LogModePacket[0] == 0xAB ||
+ g_LogModePacket[0] == 0xA7)) {
+#elif defined(CONFIG_ENABLE_CHIP_MSG21XXA) || \
+ defined(CONFIG_ENABLE_CHIP_MSG22XX)
+ if ((g_FirmwareMode == FIRMWARE_MODE_DEBUG_MODE
+ || g_FirmwareMode ==
+ FIRMWARE_MODE_RAW_DATA_MODE) &&
+ (g_LogModePacket[0] == 0x62)) {
+#endif
+ for (i = 0;
+ i < g_FirmwareInfo.nLogModePacketLength;
+ i++)
+ pBuf[i] = g_LogModePacket[i];
+
+ nLength = g_FirmwareInfo.nLogModePacketLength;
+ DBG("nLength = %d\n", nLength);
+ } else
+ DBG("CURRENT MODE IS NOT DEBUG ",
+ "MODE/WRONG DEBUG MODE HEADER\n");
+ } else
+ DBG("g_LogModePacket is NULL\n");
+ } else {
+ DBG("pAttr->attr.name = %s\n", pAttr->attr.name);
+ }
+
+ return nLength;
+}
+
+ssize_t DrvMainKObjectPacketStore(struct kobject *pKObj,
+ struct kobj_attribute *pAttr, const char *pBuf, size_t nCount)
+{
+ DBG("*** %s() ***\n", __func__);
+ return nCount;
+}
+
+static struct kobj_attribute packet_attr = __ATTR(packet, 0666,
+ DrvMainKObjectPacketShow, DrvMainKObjectPacketStore);
+
+/*
+ * Create a group of attributes so that we can create and
+ * destroy them all at once.
+ */
+static struct attribute *attrs[] = {
+ &packet_attr.attr,
+ NULL, /* need to NULL terminate the list of attributes */
+};
+
+/*
+ * An unnamed attribute group will put all of the attributes directly in
+ * the kobject directory. If we specify a name, a subdirectory will be
+ * created for the attributes with the directory being the name of the
+ * attribute group.
+ */
+struct attribute_group attr_group = {
+ .attrs = attrs,
+};
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+
+ssize_t DrvMainProcfsGestureWakeupModeRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ DBG("*** %s() ***\n", __func__);
+
+#ifdef CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE
+ DBG("g_GestureWakeupMode = 0x%x, 0x%x\n",
+ g_GestureWakeupMode[0],
+ g_GestureWakeupMode[1]);
+
+ return sprintf(pBuffer, "%x,%x",
+ g_GestureWakeupMode[0],
+ g_GestureWakeupMode[1]);
+#else
+ DBG("g_GestureWakeupMode = 0x%x\n", g_GestureWakeupMode[0]);
+
+ return sprintf(pBuffer, "%x", g_GestureWakeupMode[0]);
+#endif /* CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE */
+}
+
+ssize_t DrvMainProcfsGestureWakeupModeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 nLength;
+ u32 nWakeupMode[2] = {0};
+ s32 err;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+#ifdef CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE
+ u32 i;
+ char *pCh;
+
+ i = 0;
+ while ((pCh = strsep((char **)&pBuffer, " ,")) && (i < 2)) {
+ DBG("pCh = %s\n", pCh);
+
+ nWakeupMode[i] = DrvCommonConvertCharToHexDigit(pCh,
+ strlen(pCh));
+ DBG("nWakeupMode[%d] = 0x%04X\n", i, nWakeupMode[i]);
+ i++;
+ }
+#else
+ err = sscanf(pBuffer, "%x", &nWakeupMode[0]);
+ if (0 == err)
+ return -EINVAL;
+
+ DBG("nWakeupMode = 0x%x\n", nWakeupMode[0]);
+#endif /* CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE */
+
+ nLength = nCount;
+ DBG("nLength = %d\n", nLength);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_DOUBLE_CLICK_FLAG) ==
+ GESTURE_WAKEUP_MODE_DOUBLE_CLICK_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_DOUBLE_CLICK_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_DOUBLE_CLICK_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_UP_DIRECT_FLAG) ==
+ GESTURE_WAKEUP_MODE_UP_DIRECT_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_UP_DIRECT_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_UP_DIRECT_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_DOWN_DIRECT_FLAG) ==
+ GESTURE_WAKEUP_MODE_DOWN_DIRECT_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_DOWN_DIRECT_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_DOWN_DIRECT_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_LEFT_DIRECT_FLAG) ==
+ GESTURE_WAKEUP_MODE_LEFT_DIRECT_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_LEFT_DIRECT_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_LEFT_DIRECT_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RIGHT_DIRECT_FLAG) ==
+ GESTURE_WAKEUP_MODE_RIGHT_DIRECT_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RIGHT_DIRECT_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RIGHT_DIRECT_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_m_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_m_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_m_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_m_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_W_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_W_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_W_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_W_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_C_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_C_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_C_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_C_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_e_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_e_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_e_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_e_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_V_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_V_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_V_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_V_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_O_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_O_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_O_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_O_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_S_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_S_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_S_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_S_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_Z_CHARACTER_FLAG) ==
+ GESTURE_WAKEUP_MODE_Z_CHARACTER_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_Z_CHARACTER_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_Z_CHARACTER_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE1_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE1_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE1_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE1_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE2_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE2_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE2_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE2_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE3_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE3_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE3_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE3_FLAG);
+
+#ifdef CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE4_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE4_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE4_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE4_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE5_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE5_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE5_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE5_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE6_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE6_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE6_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE6_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE7_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE7_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE7_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE7_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE8_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE8_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE8_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE8_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE9_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE9_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE9_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE9_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE10_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE10_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE10_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE10_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE11_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE11_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE11_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE11_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE12_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE12_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE12_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE12_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE13_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE13_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE13_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE13_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE14_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE14_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE14_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE14_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE15_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE15_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE15_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE15_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE16_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE16_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE16_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE16_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE17_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE17_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE17_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE17_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE18_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE18_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE18_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE18_FLAG);
+
+ if ((nWakeupMode[0] & GESTURE_WAKEUP_MODE_RESERVE19_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE19_FLAG)
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] |
+ GESTURE_WAKEUP_MODE_RESERVE19_FLAG;
+ else
+ g_GestureWakeupMode[0] = g_GestureWakeupMode[0] &
+ (~GESTURE_WAKEUP_MODE_RESERVE19_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE20_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE20_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE20_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE20_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE21_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE21_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE21_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE21_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE22_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE22_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE22_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE22_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE23_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE23_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE23_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE23_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE24_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE24_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE24_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE24_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE25_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE25_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE25_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE25_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE26_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE26_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE26_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE26_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE27_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE27_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE27_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE27_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE28_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE28_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE28_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE28_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE29_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE29_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE29_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE29_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE30_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE30_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE30_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE30_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE31_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE31_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE31_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE31_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE32_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE32_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE32_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE32_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE33_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE33_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE33_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE33_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE34_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE34_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE34_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE34_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE35_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE35_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE35_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE35_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE36_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE36_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE36_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE36_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE37_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE37_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE37_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE37_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE38_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE38_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE38_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE38_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE39_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE39_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE39_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE39_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE40_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE40_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE40_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE40_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE41_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE41_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE41_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE41_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE42_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE42_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE42_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE42_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE43_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE43_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE43_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE43_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE44_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE44_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE44_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE44_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE45_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE45_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE45_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE45_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE46_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE46_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE46_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE46_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE47_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE47_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE47_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE47_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE48_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE48_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE48_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE48_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE49_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE49_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE49_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE49_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE50_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE50_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE50_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE50_FLAG);
+
+ if ((nWakeupMode[1] & GESTURE_WAKEUP_MODE_RESERVE51_FLAG) ==
+ GESTURE_WAKEUP_MODE_RESERVE51_FLAG)
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] |
+ GESTURE_WAKEUP_MODE_RESERVE51_FLAG;
+ else
+ g_GestureWakeupMode[1] = g_GestureWakeupMode[1] &
+ (~GESTURE_WAKEUP_MODE_RESERVE51_FLAG);
+#endif /* CONFIG_SUPPORT_64_TYPES_GESTURE_WAKEUP_MODE */
+
+ DBG("g_GestureWakeupMode = 0x%x, 0x%x\n",
+ g_GestureWakeupMode[0], g_GestureWakeupMode[1]);
+ }
+
+ return nCount;
+}
+
+#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
+
+ssize_t DrvMainProcfsGestureDebugModeRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+
+{
+ DBG("*** %s() ***\n", __func__);
+
+ return sprintf(pBuffer, "%d", g_GestureDebugMode);
+}
+
+ssize_t DrvMainProcfsGestureDebugModeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u8 ucGestureMode[2];
+ u8 i;
+ char *pCh;
+
+ if (pBuffer != NULL) {
+ i = 0;
+ while ((pCh = strsep((char **)&pBuffer, " ,")) && (i < 2)) {
+ DBG("pCh = %s\n", pCh);
+
+ ucGestureMode[i] = DrvCommonConvertCharToHexDigit(pCh,
+ strlen(pCh));
+
+ DBG("ucGestureMode[%d] = 0x%04X\n",
+ i, ucGestureMode[i]);
+ i++;
+ }
+
+ g_GestureDebugMode = ucGestureMode[0];
+ g_GestureDebugFlag = ucGestureMode[1];
+
+ DBG("Gesture flag = 0x%x\n", g_GestureDebugFlag);
+
+ /* open gesture debug mode */
+ if (g_GestureDebugMode == 0x01) {
+ DrvIcFwLyrOpenGestureDebugMode(g_GestureDebugFlag);
+
+ input_report_key(g_InputDevice, KEY_POWER, 1);
+ input_sync(g_InputDevice);
+ input_report_key(g_InputDevice, KEY_POWER, 0);
+ input_sync(g_InputDevice);
+ /* close gesture debug mode */
+ } else if (g_GestureDebugMode == 0x00) {
+ DrvIcFwLyrCloseGestureDebugMode();
+ } else {
+ DBG("*** Undefined Gesture Debug Mode ***\n");
+ }
+ }
+
+ return nCount;
+}
+
+ssize_t DrvMainKObjectGestureDebugShow(struct kobject *pKObj,
+ struct kobj_attribute *pAttr, char *pBuf)
+{
+ u32 i = 0;
+ u32 nLength = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (strcmp(pAttr->attr.name, "gesture_debug") == 0) {
+ if (g_LogGestureDebug != NULL) {
+ for (i = 0; i < 6; i++) {
+ DBG("g_LogGestureDebug[%d]=%x\n",
+ i, g_LogGestureDebug[i]);
+
+ if (g_LogGestureDebug[0] == 0xA7 &&
+ g_LogGestureDebug[3] == 0x51) {
+ for (i = 0; i < 0x80; i++)
+ pBuf[i] = g_LogGestureDebug[i];
+
+ nLength = 0x80;
+ DBG("nLength = %d\n", nLength);
+ } else
+ DBG("CURRENT MODE IS NOT GESTURE DEBUG ",
+ "MODE/WRONG GESTURE DEBUG MODE HEADER\n");
+ } else
+ DBG("g_LogGestureDebug is NULL\n");
+ } else
+ DBG("pAttr->attr.name = %s\n", pAttr->attr.name);
+
+ return nLength;
+}
+
+ssize_t DrvMainKObjectGestureDebugStore(struct kobject *pKObj,
+ struct kobj_attribute *pAttr, const char *pBuf, size_t nCount)
+{
+ DBG("*** %s() ***\n", __func__);
+ return nCount;
+}
+
+static struct kobj_attribute gesture_attr = __ATTR(gesture_debug, 0666,
+ DrvMainKObjectGestureDebugShow,
+ DrvMainKObjectGestureDebugStore);
+
+/*
+ * Create a group of attributes so that we can
+ * create and destroy them all at once.
+ */
+static struct attribute *gestureattrs[] = {
+ &gesture_attr.attr,
+ NULL, /* need to NULL terminate the list of attributes */
+};
+
+/*
+ * An unnamed attribute group will put all of the attributes directly in
+ * the kobject directory. If we specify a name, a subdirectory will be
+ * created for the attributes with the directory being the name of the
+ * attribute group.
+ */
+struct attribute_group gestureattr_group = {
+ .attrs = gestureattrs,
+};
+#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */
+
+#ifdef CONFIG_ENABLE_GESTURE_INFORMATION_MODE
+
+ssize_t DrvMainProcfsGestureInforModeRead(struct file *pFile,
+ char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u8 szOut[GESTURE_WAKEUP_INFORMATION_PACKET_LENGTH*5] = {0},
+ szValue[10] = {0};
+ u32 szLogGestureInfo[GESTURE_WAKEUP_INFORMATION_PACKET_LENGTH] = {0};
+ u32 i = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ _gLogGestureCount = 0;
+
+ /* FIRMWARE_GESTURE_INFORMATION_MODE_A */
+ if (_gLogGestureInforType == FIRMWARE_GESTURE_INFORMATION_MODE_A) {
+ for (i = 0; i < 2; i++) {/* 0 EventFlag; 1 RecordNum */
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[4 + i];
+ _gLogGestureCount++;
+ }
+
+ /* 2~3 Xst Yst; 4~5 Xend Yend; 6~7 char_width char_height */
+ for (i = 2; i < 8; i++) {
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[4 + i];
+ _gLogGestureCount++;
+ }
+ /* FIRMWARE_GESTURE_INFORMATION_MODE_B */
+ } else if (_gLogGestureInforType ==
+ FIRMWARE_GESTURE_INFORMATION_MODE_B) {
+ for (i = 0; i < 2; i++) {/* 0 EventFlag; 1 RecordNum */
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[4 + i];
+ _gLogGestureCount++;
+ }
+
+ /* (X and Y)*RecordNum */
+ for (i = 0; i < g_LogGestureInfor[5]*2; i++) {
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[12 + i];
+ _gLogGestureCount++;
+ }
+ /* FIRMWARE_GESTURE_INFORMATION_MODE_C */
+ } else if (_gLogGestureInforType ==
+ FIRMWARE_GESTURE_INFORMATION_MODE_C) {
+ for (i = 0; i < 6; i++) {/* header */
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[i];
+ _gLogGestureCount++;
+ }
+
+ for (i = 6; i < 86; i++) {
+ szLogGestureInfo[_gLogGestureCount] =
+ g_LogGestureInfor[i];
+ _gLogGestureCount++;
+ }
+
+ /* dummy */
+ szLogGestureInfo[_gLogGestureCount] = g_LogGestureInfor[86];
+ _gLogGestureCount++;
+ /* checksum */
+ szLogGestureInfo[_gLogGestureCount] = g_LogGestureInfor[87];
+ _gLogGestureCount++;
+ } else
+ DBG("*** Undefined GESTURE INFORMATION MODE ***\n");
+
+ for (i = 0; i < _gLogGestureCount; i++) {
+ sprintf(szValue, "%d", szLogGestureInfo[i]);
+ strcat(szOut, szValue);
+ strcat(szOut, ",");
+ }
+
+ return sprintf(pBuffer, "%s\n", szOut);
+}
+
+ssize_t DrvMainProcfsGestureInforModeWrite(struct file *pFile,
+ const char __user *pBuffer, size_t nCount, loff_t *pPos)
+{
+ u32 nMode;
+ s32 err;
+
+ DBG("*** %s() ***\n", __func__);
+
+ if (pBuffer != NULL) {
+ err = sscanf(pBuffer, "%x", &nMode);
+ if (0 == err)
+ return -EINVAL;
+
+ _gLogGestureInforType = nMode;
+ }
+
+ DBG("*** _gLogGestureInforType type = 0x%x ***\n",
+ _gLogGestureInforType);
+
+ return nCount;
+}
+
+#endif /* CONFIG_ENABLE_GESTURE_INFORMATION_MODE */
+
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+/*--------------------------------------------------------------------------*/
+#ifdef TW_TEST
+static struct class *_twTestClass;
+static struct device *_twTestDev;
+
+ssize_t twTestShow(struct device *twDevice, struct device_attribute *twAttr,
+ char *twBuf)
+{
+ int ret;
+ ret = _DrvMpTestItoOpenTest();
+ DBG("*** %s() ret = %d***\n", __func__, ret);
+
+ return sprintf(twBuf, "%d\n", ret);
+}
+
+static DEVICE_ATTR(twTest, S_IRUGO, twTestShow, NULL);
+#endif
+
+s32 DrvMainTouchDeviceInitialize(void)
+{
+ s32 nRetVal = 0;
+
+ DBG("*** %s() ***\n", __func__);
+
+ _DrvMainCreateProcfsDirEntry(); /* Create procfs directory entry */
+
+#ifdef CONFIG_ENABLE_ITO_MP_TEST
+ DrvIcFwLyrCreateMpTestWorkQueue();
+#ifdef TW_TEST
+
+ _twTestClass = class_create(THIS_MODULE, "mstar-twTest");
+ if (IS_ERR(_twTestClass))
+ DBG("Failed to create class(firmware)!\n");
+
+ _twTestDev = device_create(_twTestClass, NULL, 0, NULL, "msg2238");
+ if (IS_ERR(_twTestDev))
+ DBG("Failed to create device(_twTestDev)!\n");
+
+ if (device_create_file(_twTestDev, &dev_attr_twTest) < 0)
+ DBG("Failed to create device file(%s)!\n",
+ dev_attr_twTest.attr.name);
+
+
+ dev_set_drvdata(_twTestDev, NULL);
+
+#endif
+#endif /* CONFIG_ENABLE_ITO_MP_TEST */
+
+ g_ChipType = CHIP_TYPE_MSG22XX;
+
+ if (g_ChipType != 0) {/* To make sure TP is attached on cell phone. */
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ /* get firmware mode for parsing packet judgement. */
+ g_FirmwareMode = DrvIcFwLyrGetFirmwareMode();
+#endif /* CONFIG_ENABLE_CHIP_MSG26XXM */
+
+ memset(&g_FirmwareInfo, 0x0, sizeof(FirmwareInfo_t));
+
+ DrvIcFwLyrGetFirmwareInfo(&g_FirmwareInfo);
+
+#if defined(CONFIG_ENABLE_CHIP_MSG21XXA) || defined(CONFIG_ENABLE_CHIP_MSG22XX)
+ g_FirmwareMode = g_FirmwareInfo.nFirmwareMode;
+#endif /* CONFIG_ENABLE_CHIP_MSG21XXA || CONFIG_ENABLE_CHIP_MSG22XX */
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+#ifdef CONFIG_ENABLE_SEGMENT_READ_FINGER_TOUCH_DATA
+#if defined(CONFIG_ENABLE_CHIP_MSG26XXM)
+ DrvIcFwLyrGetTouchPacketAddress(&g_FwPacketDataAddress,
+ &g_FwPacketFlagAddress);
+#endif /* CONFIG_ENABLE_CHIP_MSG26XXM */
+#endif /* CONFIG_ENABLE_SEGMENT_READ_FINGER_TOUCH_DATA */
+
+ } else
+ nRetVal = -ENODEV;
+
+ return nRetVal;
+}
+
+/*=============================================================*/
+/* LOCAL FUNCTION DEFINITION */
+/*=============================================================*/
+
+static s32 _DrvMainCreateProcfsDirEntry(void)
+{
+ s32 nRetVal = 0;
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+ u8 *pDevicePath = NULL;
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
+ u8 *pGesturePath = NULL;
+#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+ DBG("*** %s() ***\n", __func__);
+ _gProcClass = proc_mkdir(PROC_NODE_CLASS, NULL);
+
+ _gProcMsTouchScreenMsg20xx =
+ proc_mkdir(PROC_NODE_MS_TOUCHSCREEN_MSG20XX, _gProcClass);
+
+ _gProcDevice = proc_mkdir(PROC_NODE_DEVICE, _gProcMsTouchScreenMsg20xx);
+
+ if (NULL == proc_create(PROC_NODE_CHIP_TYPE, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcChipType))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_CHIP_TYPE);
+ else
+ DBG("Create procfs file node(%s) OK!\n", PROC_NODE_CHIP_TYPE);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_DATA, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcFirmwareData))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_DATA);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_DATA);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_UPDATE, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcApkFirmwareUpdate))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_UPDATE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_UPDATE);
+
+ if (NULL == proc_create(PROC_NODE_CUSTOMER_FIRMWARE_VERSION,
+ PROCFS_AUTHORITY, _gProcDevice,
+ &_gProcCustomerFirmwareVersion))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_CUSTOMER_FIRMWARE_VERSION);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_CUSTOMER_FIRMWARE_VERSION);
+
+ if (NULL == proc_create(PROC_NODE_PLATFORM_FIRMWARE_VERSION,
+ PROCFS_AUTHORITY, _gProcDevice,
+ &_gProcPlatformFirmwareVersion))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_PLATFORM_FIRMWARE_VERSION);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_PLATFORM_FIRMWARE_VERSION);
+
+ if (NULL == proc_create(PROC_NODE_DEVICE_DRIVER_VERSION,
+ PROCFS_AUTHORITY, _gProcDevice,
+ &_gProcDeviceDriverVersion))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_DEVICE_DRIVER_VERSION);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_DEVICE_DRIVER_VERSION);
+
+ if (NULL == proc_create(PROC_NODE_SDCARD_FIRMWARE_UPDATE,
+ PROCFS_AUTHORITY, _gProcDevice,
+ &_gProcSdCardFirmwareUpdate))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_SDCARD_FIRMWARE_UPDATE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_SDCARD_FIRMWARE_UPDATE);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_DEBUG, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcFirmwareDebug))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_DEBUG);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_DEBUG);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_SET_DEBUG_VALUE,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcFirmwareSetDebugValue))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_SET_DEBUG_VALUE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_SET_DEBUG_VALUE);
+
+#ifdef CONFIG_ENABLE_ITO_MP_TEST
+ if (NULL == proc_create(PROC_NODE_MP_TEST, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcMpTest))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_MP_TEST);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_MP_TEST);
+
+ if (NULL == proc_create(PROC_NODE_MP_TEST_LOG,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcMpTestLog))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_MP_TEST_LOG);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_MP_TEST_LOG);
+
+ if (NULL == proc_create(PROC_NODE_MP_TEST_FAIL_CHANNEL,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcMpTestFailChannel))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_MP_TEST_FAIL_CHANNEL);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_MP_TEST_FAIL_CHANNEL);
+
+ if (NULL == proc_create(PROC_NODE_MP_TEST_SCOPE, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcMpTestScope))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_MP_TEST_SCOPE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_MP_TEST_SCOPE);
+#endif /* CONFIG_ENABLE_ITO_MP_TEST */
+
+#ifdef CONFIG_ENABLE_FIRMWARE_DATA_LOG
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_MODE, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcFirmwareMode))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_MODE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_MODE);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_SENSOR, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcFirmwareSensor))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_SENSOR);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_SENSOR);
+
+ if (NULL == proc_create(PROC_NODE_FIRMWARE_PACKET_HEADER,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcFirmwarePacketHeader))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_FIRMWARE_PACKET_HEADER);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_FIRMWARE_PACKET_HEADER);
+
+ /*
+ * create a kset with the name of "kset_example" which
+ * is located under /sys/kernel/
+ */
+ g_TouchKSet = kset_create_and_add("kset_example", NULL, kernel_kobj);
+ if (!g_TouchKSet) {
+ DBG("*** kset_create_and_add() failed, nRetVal = %d ***\n",
+ nRetVal);
+ nRetVal = -ENOMEM;
+ }
+
+ g_TouchKObj = kobject_create();
+ if (!g_TouchKObj) {
+ DBG("*** kobject_create() failed, nRetVal = %d ***\n", nRetVal);
+
+ nRetVal = -ENOMEM;
+ kset_unregister(g_TouchKSet);
+ g_TouchKSet = NULL;
+ }
+
+ g_TouchKObj->kset = g_TouchKSet;
+
+ nRetVal = kobject_add(g_TouchKObj, NULL, "%s", "kobject_example");
+ if (nRetVal != 0) {
+ DBG("*** kobject_add() failed, nRetVal = %d ***\n", nRetVal);
+
+ kobject_put(g_TouchKObj);
+ g_TouchKObj = NULL;
+ kset_unregister(g_TouchKSet);
+ g_TouchKSet = NULL;
+ }
+
+ /* create the files associated with this kobject */
+ nRetVal = sysfs_create_group(g_TouchKObj, &attr_group);
+ if (nRetVal != 0) {
+ DBG("*** sysfs_create_file() failed, nRetVal = %d ***\n",
+ nRetVal);
+
+ kobject_put(g_TouchKObj);
+ g_TouchKObj = NULL;
+ kset_unregister(g_TouchKSet);
+ g_TouchKSet = NULL;
+ }
+
+ pDevicePath = kobject_get_path(g_TouchKObj, GFP_KERNEL);
+ DBG("DEVPATH = %s\n", pDevicePath);
+#endif /* CONFIG_ENABLE_FIRMWARE_DATA_LOG */
+
+#ifdef CONFIG_ENABLE_GESTURE_WAKEUP
+ if (NULL == proc_create(PROC_NODE_GESTURE_WAKEUP_MODE,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcGestureWakeupMode))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_GESTURE_WAKEUP_MODE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_GESTURE_WAKEUP_MODE);
+
+#ifdef CONFIG_ENABLE_GESTURE_DEBUG_MODE
+ if (NULL == proc_create(PROC_NODE_GESTURE_DEBUG_MODE, PROCFS_AUTHORITY,
+ _gProcDevice, &_gProcGestureDebugMode))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_GESTURE_DEBUG_MODE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_GESTURE_DEBUG_MODE);
+
+ /*
+ * create a kset with the name of "kset_gesture"
+ * which is located under /sys/kernel/
+ */
+ g_GestureKSet = kset_create_and_add("kset_gesture", NULL, kernel_kobj);
+ if (!g_GestureKSet) {
+ DBG("*** kset_create_and_add() failed, nRetVal = %d ***\n",
+ nRetVal);
+ nRetVal = -ENOMEM;
+ }
+
+ g_GestureKObj = kobject_create();
+ if (!g_GestureKObj) {
+ DBG("*** kobject_create() failed, nRetVal = %d ***\n", nRetVal);
+
+ nRetVal = -ENOMEM;
+ kset_unregister(g_GestureKSet);
+ g_GestureKSet = NULL;
+ }
+
+ g_GestureKObj->kset = g_GestureKSet;
+
+ nRetVal = kobject_add(g_GestureKObj, NULL, "%s", "kobject_gesture");
+ if (nRetVal != 0) {
+ DBG("*** kobject_add() failed, nRetVal = %d ***\n", nRetVal);
+
+ kobject_put(g_GestureKObj);
+ g_GestureKObj = NULL;
+ kset_unregister(g_GestureKSet);
+ g_GestureKSet = NULL;
+ }
+
+ /* create the files associated with this g_GestureKObj */
+ nRetVal = sysfs_create_group(g_GestureKObj, &gestureattr_group);
+ if (nRetVal != 0) {
+ DBG("*** sysfs_create_file() failed, nRetVal = %d ***\n",
+ nRetVal);
+
+ kobject_put(g_GestureKObj);
+ g_GestureKObj = NULL;
+ kset_unregister(g_GestureKSet);
+ g_GestureKSet = NULL;
+ }
+
+ pGesturePath = kobject_get_path(g_GestureKObj, GFP_KERNEL);
+ DBG("DEVPATH = %s\n", pGesturePath);
+#endif /* CONFIG_ENABLE_GESTURE_DEBUG_MODE */
+
+#ifdef CONFIG_ENABLE_GESTURE_INFORMATION_MODE
+ if (NULL == proc_create(PROC_NODE_GESTURE_INFORMATION_MODE,
+ PROCFS_AUTHORITY,
+ _gProcDevice,
+ &_gProcGestureInforMode))
+ DBG("Failed to create procfs file node(%s)!\n",
+ PROC_NODE_GESTURE_INFORMATION_MODE);
+ else
+ DBG("Create procfs file node(%s) OK!\n",
+ PROC_NODE_GESTURE_INFORMATION_MODE);
+#endif /* CONFIG_ENABLE_GESTURE_INFORMATION_MODE */
+#endif /* CONFIG_ENABLE_GESTURE_WAKEUP */
+
+ return nRetVal;
+}