summaryrefslogtreecommitdiff
path: root/sec_ts_fn.c
diff options
context:
space:
mode:
authorKyungsuk Jang <ks119.jang@samsung.com>2019-10-14 15:14:02 +0900
committerSuper Liu <supercjliu@google.com>2019-10-18 01:30:21 +0000
commit726c10e72e6affecbe21a1d107199ad11c94f4c7 (patch)
treee6f3d182c3f8ac42d28822e301ac802cf763897b /sec_ts_fn.c
parent898e547ad8a7ddad5a864d5410bcab040430243d (diff)
downloadsec_touch-726c10e72e6affecbe21a1d107199ad11c94f4c7.tar.gz
input: touchscreen: sec_touch: add touch mode manual control
Bug: 136260549 Signed-off-by: Kyungsuk Jang <ks119.jang@samsung.com> Signed-off-by: Super Liu <supercjliu@google.com> Change-Id: I887c3d5d3e1bf3043941de4b13e8e947050af64a Merged-In: I887c3d5d3e1bf3043941de4b13e8e947050af64a (cherry picked from commit 3064ffaa8ace3c6c957efd99702315a1c93dce8e) (cherry picked from commit 5c1ecaa83bdc327d095104190780ae605cfa80e7)
Diffstat (limited to 'sec_ts_fn.c')
-rw-r--r--sec_ts_fn.c131
1 files changed, 129 insertions, 2 deletions
diff --git a/sec_ts_fn.c b/sec_ts_fn.c
index 8ec3aea..6cd4418 100644
--- a/sec_ts_fn.c
+++ b/sec_ts_fn.c
@@ -102,9 +102,9 @@ static void force_touch_active(void *device_data);
static void set_touchable_area(void *device_data);
static void set_log_level(void *device_data);
static void debug(void *device_data);
+static void set_touch_mode(void *device_data);
static void not_support_cmd(void *device_data);
-
static struct sec_cmd sec_cmds[] = {
{SEC_CMD("fw_update", fw_update),},
{SEC_CMD("get_fw_ver_bin", get_fw_ver_bin),},
@@ -196,6 +196,7 @@ static struct sec_cmd sec_cmds[] = {
{SEC_CMD("set_touchable_area", set_touchable_area),},
{SEC_CMD("set_log_level", set_log_level),},
{SEC_CMD("debug", debug),},
+ {SEC_CMD("set_touch_mode", set_touch_mode),},
{SEC_CMD("not_support_cmd", not_support_cmd),},
};
@@ -843,7 +844,8 @@ int sec_ts_fix_tmode(struct sec_ts_data *ts, u8 mode, u8 state)
u8 onoff[1] = {STATE_MANAGE_OFF};
u8 tBuff[2] = { mode, state };
- input_info(true, &ts->client->dev, "%s\n", __func__);
+ input_info(true, &ts->client->dev, "%s: mode %d state %d\n",
+ __func__, mode, state);
ret = ts->sec_ts_write(ts, SEC_TS_CMD_STATEMANAGE_ON, onoff, 1);
sec_ts_delay(20);
@@ -6629,6 +6631,131 @@ static void not_support_cmd(void *device_data)
sec_cmd_set_cmd_exit(sec);
}
+static void set_touch_mode(void *device_data)
+{
+ struct sec_cmd_data *sec = (struct sec_cmd_data *)device_data;
+ struct sec_ts_data *ts = container_of(sec, struct sec_ts_data, sec);
+ char buff[SEC_CMD_STR_LEN] = { 0 };
+ int ret = 0;
+ u8 para[4] = { 0 };
+
+ sec_cmd_set_default_result(sec);
+
+ if (ts->power_status == SEC_TS_STATE_POWER_OFF) {
+ input_err(true, &ts->client->dev, "%s: POWER off!\n", __func__);
+ goto err_out;
+ }
+
+ switch (sec->cmd_param[0]) {
+ case 1:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, set Normal ACTIVE mode\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts,
+ TOUCH_SYSTEM_MODE_TOUCH, TOUCH_MODE_STATE_TOUCH);
+ break;
+ case 2:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, set Normal IDLE mode\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts,
+ TOUCH_SYSTEM_MODE_TOUCH, TOUCH_MODE_STATE_IDLE);
+ break;
+ case 3:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, set Lowpower ACTIVE mode\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts,
+ TOUCH_SYSTEM_MODE_LOWPOWER, TOUCH_MODE_STATE_TOUCH);
+ break;
+ case 4:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, set Lowpower IDLE mode\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts,
+ TOUCH_SYSTEM_MODE_LOWPOWER, TOUCH_MODE_STATE_IDLE);
+ break;
+ case 5:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, Sense On\n",
+ __func__, sec->cmd_param[0]);
+ ret = ts->sec_ts_write(ts,
+ SEC_TS_CMD_SENSE_ON, NULL, 0);
+ if (ret < 0)
+ input_err(true, &ts->client->dev,
+ "%s: fail to write Sense_on\n", __func__);
+ sec_ts_delay(300);
+ break;
+ case 6:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, Sense Off\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts, 0x6, 0x1);
+ break;
+ case 7:
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, SW Reset\n",
+ __func__, sec->cmd_param[0]);
+ ret = ts->sec_ts_write(ts, SEC_TS_CMD_SW_RESET, NULL, 0);
+ if (ret < 0)
+ input_err(true, &ts->client->dev,
+ "%s: fail to write SW Reset\n", __func__);
+ sec_ts_delay(300);
+ break;
+ case 8:
+ input_info(true, &ts->client->dev,
+ "%s: Toggle Sense On/Off\n",
+ __func__, sec->cmd_param[0]);
+ ret = ts->sec_ts_read(ts, SEC_TS_READ_TS_STATUS, para, 4);
+ if (ret < 0) {
+ input_err(true, &ts->client->dev,
+ "%s: failed to read status(%d)\n", __func__,
+ ret);
+ goto err_out;
+ }
+
+ if (para[1] == 6) {// have to sense on
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, Sense On\n",
+ __func__, sec->cmd_param[0]);
+ ret = ts->sec_ts_write(ts,
+ SEC_TS_CMD_SENSE_ON, NULL, 0);
+ if (ret < 0)
+ input_err(true, &ts->client->dev,
+ "%s: fail to write Sense_on\n",
+ __func__);
+
+ sec_ts_delay(300);
+
+ input_dbg(false, &ts->client->dev,
+ "%s: SENSE ON\n", __func__);
+ } else {// have to sense off
+ input_info(true, &ts->client->dev,
+ "%s: param = %d, Sense Off\n",
+ __func__, sec->cmd_param[0]);
+ sec_ts_fix_tmode(ts, 0x6, 0x1);
+ }
+
+ break;
+ default:
+ input_info(true, &ts->client->dev,
+ "%s: param error! param = %d\n",
+ __func__, sec->cmd_param[0]);
+ goto err_out;
+ }
+
+ snprintf(buff, sizeof(buff), "%s", "OK");
+ sec->cmd_state = SEC_CMD_STATUS_OK;
+ sec_cmd_set_cmd_result(sec, buff, strnlen(buff, sizeof(buff)));
+
+ return;
+
+err_out:
+ snprintf(buff, sizeof(buff), "%s", "NG");
+ sec->cmd_state = SEC_CMD_STATUS_FAIL;
+ sec_cmd_set_cmd_result(sec, buff, strnlen(buff, sizeof(buff)));
+}
+
int sec_ts_fn_init(struct sec_ts_data *ts)
{
int retval;