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