Commit fbd5e77e authored by Ferruh Yigit's avatar Ferruh Yigit Committed by Dmitry Torokhov

Input: cyttsp - add missing handshake

For the devices that has blocking with timeout communication, these
extra handshakes will prevent one timeout delay in startup sequence

Tested-by: Ferruh Yigit <fery@cypress.com> on TMA300-DVK
Signed-off-by: default avatarFerruh Yigit <fery@cypress.com>
Acked-by: default avatarJavier Martinez Canillas <javier@dowhile0.org>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent d2983cdb
...@@ -116,6 +116,15 @@ static int ttsp_send_command(struct cyttsp *ts, u8 cmd) ...@@ -116,6 +116,15 @@ static int ttsp_send_command(struct cyttsp *ts, u8 cmd)
return ttsp_write_block_data(ts, CY_REG_BASE, sizeof(cmd), &cmd); return ttsp_write_block_data(ts, CY_REG_BASE, sizeof(cmd), &cmd);
} }
static int cyttsp_handshake(struct cyttsp *ts)
{
if (ts->pdata->use_hndshk)
return ttsp_send_command(ts,
ts->xy_data.hst_mode ^ CY_HNDSHK_BIT);
return 0;
}
static int cyttsp_load_bl_regs(struct cyttsp *ts) static int cyttsp_load_bl_regs(struct cyttsp *ts)
{ {
memset(&ts->bl_data, 0, sizeof(ts->bl_data)); memset(&ts->bl_data, 0, sizeof(ts->bl_data));
...@@ -167,6 +176,10 @@ static int cyttsp_set_operational_mode(struct cyttsp *ts) ...@@ -167,6 +176,10 @@ static int cyttsp_set_operational_mode(struct cyttsp *ts)
if (error) if (error)
return error; return error;
error = cyttsp_handshake(ts);
if (error)
return error;
return ts->xy_data.act_dist == CY_ACT_DIST_DFLT ? -EIO : 0; return ts->xy_data.act_dist == CY_ACT_DIST_DFLT ? -EIO : 0;
} }
...@@ -188,6 +201,10 @@ static int cyttsp_set_sysinfo_mode(struct cyttsp *ts) ...@@ -188,6 +201,10 @@ static int cyttsp_set_sysinfo_mode(struct cyttsp *ts)
if (error) if (error)
return error; return error;
error = cyttsp_handshake(ts);
if (error)
return error;
if (!ts->sysinfo_data.tts_verh && !ts->sysinfo_data.tts_verl) if (!ts->sysinfo_data.tts_verh && !ts->sysinfo_data.tts_verl)
return -EIO; return -EIO;
...@@ -344,12 +361,9 @@ static irqreturn_t cyttsp_irq(int irq, void *handle) ...@@ -344,12 +361,9 @@ static irqreturn_t cyttsp_irq(int irq, void *handle)
goto out; goto out;
/* provide flow control handshake */ /* provide flow control handshake */
if (ts->pdata->use_hndshk) { error = cyttsp_handshake(ts);
error = ttsp_send_command(ts, if (error)
ts->xy_data.hst_mode ^ CY_HNDSHK_BIT); goto out;
if (error)
goto out;
}
if (unlikely(ts->state == CY_IDLE_STATE)) if (unlikely(ts->state == CY_IDLE_STATE))
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment