swift: touch: to avoid enabling/disabling touch more than once

Change-Id: I83b5aaf5c6cda98294a5907c1eb64b3bfcd45386
Reviewed-on: http://mcrd1-22-pc.corpnet.asus/code-review/master/254989
Reviewed-by: Nina_Han <nina_han@asus.com>
Tested-by: Nina_Han <nina_han@asus.com>
Reviewed-by: Eric1 Lin <Eric1_Lin@asus.com>
diff --git a/drivers/input/touchscreen/hx852xes/himax_852xES.c b/drivers/input/touchscreen/hx852xes/himax_852xES.c
index f7ec611..c88a9ea 100755
--- a/drivers/input/touchscreen/hx852xes/himax_852xES.c
+++ b/drivers/input/touchscreen/hx852xes/himax_852xES.c
@@ -3744,9 +3744,11 @@
 {
     uint8_t buf[2] = {0};
     int ret;
+
     switch (supplymode) {
         case TOUCH_ACTIVE:
             //Himax 852xes IC enter active mode
+            private_ts->resumed = true;
             i2c_himax_write_command(private_ts->client, HX_CMD_TSSON, DEFAULT_RETRY_CNT);
             msleep(30);
             i2c_himax_write_command(private_ts->client, HX_CMD_TSSLPOUT, DEFAULT_RETRY_CNT);
@@ -3815,7 +3817,11 @@
         //0:off, 1:on
         //I("Time-telling mode = %d\n", supplymode);
         private_ts->timetellmode = supplymode;
-        queue_work(private_ts->himax_sleepmode_wq, &private_ts->sleepmode_work);
+        I("supplymode: %d, DisableTouch_flag: %d", supplymode, DisableTouch_flag);
+        if (DisableTouch_flag!=supplymode) {
+            DisableTouch_flag = private_ts->timetellmode;
+            queue_work(private_ts->himax_sleepmode_wq, &private_ts->sleepmode_work);
+        }
     }
 }
 EXPORT_SYMBOL(himax_timetelling_detection);
@@ -4751,56 +4757,53 @@
             input_sync(ts->input_dev);
             haspoint = false;
         }
-        if (!ts->sleepmode) {
 #ifdef HX_SMART_WAKEUP
-            if (ts->SMWP_enable && touch_mode == TOUCH_ACTIVE) {
-                atomic_set(&ts->suspend_mode, 1);
-                ts->pre_finger_mask = 0;
-                FAKE_POWER_KEY_SEND = false;
-                buf[0] = 0x8F;
-                buf[1] = 0x20;
-                ret = i2c_himax_master_write(ts->client, buf, 2, DEFAULT_RETRY_CNT);
-                if (ret < 0) {
-                    E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
-                }
-                touch_mode = TOUCH_IDLE;
-                ts->resumed = false;
-                I("%s: Enable IDLE mode\n", __func__);
-                return 0;
-            }
-#endif
-        } else {
-            himax_int_enable(ts->client->irq, 0, true);
-#ifdef HX_CHIP_STATUS_MONITOR
-            HX_CHIP_POLLING_COUNT = 0;
-            cancel_delayed_work_sync(&ts->himax_chip_monitor);
-#endif
-            //Himax 852xes IC enter sleep mode
-            buf[0] = HX_CMD_TSSOFF;
-            ret = i2c_himax_master_write(ts->client, buf, 1, DEFAULT_RETRY_CNT);
-            if (ret < 0) {
-                E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
-            }
-            msleep(40);
-            buf[0] = HX_CMD_TSSLPIN;
-            ret = i2c_himax_master_write(ts->client, buf, 1, DEFAULT_RETRY_CNT);
-            if (ret < 0) {
-                E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
-            }
-            touch_mode = TOUCH_SLEEP;
-            I("%s: Enable SLEEP mode\n", __func__);
-            if (!ts->use_irq) {
-                ret = cancel_work_sync(&ts->work);
-                if (ret)
-                    himax_int_enable(ts->client->irq, 1, true);
-            }
-            //ts->first_pressed = 0;
+        if (ts->SMWP_enable && touch_mode == TOUCH_ACTIVE) {
             atomic_set(&ts->suspend_mode, 1);
             ts->pre_finger_mask = 0;
-            if (ts->pdata->powerOff3V3 && ts->pdata->power)
-                ts->pdata->power(0);
+            FAKE_POWER_KEY_SEND = false;
+            buf[0] = 0x8F;
+            buf[1] = 0x20;
+            ret = i2c_himax_master_write(ts->client, buf, 2, DEFAULT_RETRY_CNT);
+            if (ret < 0) {
+                E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
+            }
+            touch_mode = TOUCH_IDLE;
             ts->resumed = false;
+            I("%s: Enable IDLE mode\n", __func__);
+            return 0;
         }
+#endif
+        himax_int_enable(ts->client->irq, 0, true);
+#ifdef HX_CHIP_STATUS_MONITOR
+        HX_CHIP_POLLING_COUNT = 0;
+        cancel_delayed_work_sync(&ts->himax_chip_monitor);
+#endif
+        //Himax 852xes IC enter sleep mode
+        buf[0] = HX_CMD_TSSOFF;
+        ret = i2c_himax_master_write(ts->client, buf, 1, DEFAULT_RETRY_CNT);
+        if (ret < 0) {
+            E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
+        }
+        msleep(40);
+        buf[0] = HX_CMD_TSSLPIN;
+        ret = i2c_himax_master_write(ts->client, buf, 1, DEFAULT_RETRY_CNT);
+        if (ret < 0) {
+            E("[himax] %s: I2C access failed addr = 0x%x\n", __func__, ts->client->addr);
+        }
+        touch_mode = TOUCH_SLEEP;
+        I("%s: Enable SLEEP mode\n", __func__);
+        if (!ts->use_irq) {
+            ret = cancel_work_sync(&ts->work);
+            if (ret)
+                himax_int_enable(ts->client->irq, 1, true);
+        }
+        //ts->first_pressed = 0;
+        atomic_set(&ts->suspend_mode, 1);
+        ts->pre_finger_mask = 0;
+        if (ts->pdata->powerOff3V3 && ts->pdata->power)
+            ts->pdata->power(0);
+        ts->resumed = false;
         return 0;
     }
 }
@@ -4849,7 +4852,7 @@
             }
         }
 #endif
-        if (touch_mode != TOUCH_ACTIVE) {
+        if (!ts->sleepmode && touch_mode != TOUCH_ACTIVE) {
 #ifdef HX_SMART_WAKEUP
             if (ts->SMWP_enable && touch_mode == TOUCH_IDLE) {
                 //Sense Off
@@ -4883,7 +4886,7 @@
             I("%s: Enable ACTIVE mode\n", __func__);
             return 0;
         } else {
-            I("Already in Active mode, skip resume\n");
+            I("In Time-telling mode or already in Active mode, skip resume\n");
             return 0;
         }
     }
diff --git a/drivers/input/touchscreen/hx852xes/himax_852xES.h b/drivers/input/touchscreen/hx852xes/himax_852xES.h
index 0954b5b..1093f6c 100755
--- a/drivers/input/touchscreen/hx852xes/himax_852xES.h
+++ b/drivers/input/touchscreen/hx852xes/himax_852xES.h
@@ -499,6 +499,7 @@
 #define TOUCH_ACTIVE    0
 #define TOUCH_SLEEP     1
 #define TOUCH_IDLE      2
+static int DisableTouch_flag = 0;
 static int touch_mode;
 void himax_timetelling_detection(int supplymode);
 #endif