summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sec_ts.c70
-rw-r--r--sec_ts_fw.c2
2 files changed, 42 insertions, 30 deletions
diff --git a/sec_ts.c b/sec_ts.c
index f3a0918..768f71e 100644
--- a/sec_ts.c
+++ b/sec_ts.c
@@ -41,7 +41,39 @@ static void sec_ts_input_close(struct input_dev *dev);
int sec_ts_read_information(struct sec_ts_data *ts);
#ifndef I2C_INTERFACE
-int sec_ts_spi_delay(u8 reg);
+int sec_ts_spi_delay(u8 reg)
+{
+ switch (reg) {
+ case SEC_TS_READ_TOUCH_RAWDATA:
+ return 400;
+ case SEC_TS_CMD_HEATMAP_READ:
+ return 500;
+ case SEC_TS_READ_ALL_EVENT:
+ return 500;
+ case SEC_TS_READ_CSRAM_RTDP_DATA:
+ return 500;
+ case SEC_TS_CAAT_READ_STORED_DATA:
+ return 500;
+ case SEC_TS_CMD_FLASH_READ_DATA:
+ return 1800;
+ case SEC_TS_READ_FIRMWARE_INTEGRITY:
+ return 20*1000;
+ case SEC_TS_READ_SELFTEST_RESULT:
+ return 3500;
+ default: return 100;
+ }
+}
+
+int sec_ts_spi_post_delay(u8 reg)
+{
+ switch (reg) {
+ case SEC_TS_READ_TOUCH_RAWDATA:
+ case SEC_TS_CMD_FLASH_READ_DATA:
+ case SEC_TS_READ_SELFTEST_RESULT:
+ return 500;
+ default: return 0;
+ }
+}
#endif
int sec_ts_write(struct sec_ts_data *ts, u8 reg, u8 *data, int len)
@@ -333,7 +365,7 @@ static int sec_ts_read_internal(struct sec_ts_data *ts, u8 reg,
}
usleep_range(sec_ts_spi_delay(reg),
- sec_ts_spi_delay(reg));
+ sec_ts_spi_delay(reg) + 1);
// read sequence start
spi_message_init(&msg);
@@ -392,6 +424,10 @@ static int sec_ts_read_internal(struct sec_ts_data *ts, u8 reg,
if (ret == 0)
memcpy(data, ts->io_read_buf +
SEC_TS_SPI_READ_HEADER_SIZE, len);
+
+ usleep_range(sec_ts_spi_post_delay(reg),
+ sec_ts_spi_post_delay(reg) + 1);
+
#endif //I2C_INTERFACE
} else {
/*
@@ -500,7 +536,7 @@ static int sec_ts_read_internal(struct sec_ts_data *ts, u8 reg,
}
usleep_range(sec_ts_spi_delay(reg),
- sec_ts_spi_delay(reg));
+ sec_ts_spi_delay(reg) + 1);
copy_size = 0;
remain = spi_read_len;
@@ -602,6 +638,9 @@ static int sec_ts_read_internal(struct sec_ts_data *ts, u8 reg,
if (ret == 0)
memcpy(data, ts->io_read_buf +
SEC_TS_SPI_READ_HEADER_SIZE, len);
+
+ usleep_range(sec_ts_spi_post_delay(reg),
+ sec_ts_spi_post_delay(reg) + 1);
#endif
}
skip_spi_read:
@@ -911,31 +950,6 @@ int sec_ts_read_bulk_heap(struct sec_ts_data *ts, u8 *data, int len)
return sec_ts_read_bulk_internal(ts, data, len, true);
}
-#ifndef I2C_INTERFACE
-int sec_ts_spi_delay(u8 reg)
-{
- switch (reg) {
- case SEC_TS_READ_TOUCH_RAWDATA:
- return 400;
- case SEC_TS_CMD_HEATMAP_READ:
- return 500;
- case SEC_TS_READ_ALL_EVENT:
- return 500;
- case SEC_TS_READ_CSRAM_RTDP_DATA:
- return 500;
- case SEC_TS_CAAT_READ_STORED_DATA:
- return 500;
- case SEC_TS_CMD_FLASH_READ_DATA:
- return 1800;
- case SEC_TS_READ_FIRMWARE_INTEGRITY:
- return 20*1000;
- case SEC_TS_READ_SELFTEST_RESULT:
- return 3500;
- default: return 100;
- }
-}
-#endif
-
static int sec_ts_read_from_customlib(struct sec_ts_data *ts, u8 *data, int len)
{
int ret;
diff --git a/sec_ts_fw.c b/sec_ts_fw.c
index fa1ae58..8db5b58 100644
--- a/sec_ts_fw.c
+++ b/sec_ts_fw.c
@@ -662,8 +662,6 @@ static int sec_ts_memoryblockread(struct sec_ts_data *ts, u32 mem_addr,
ret = ts->sec_ts_read_heap(ts, cmd[0], data, mem_size);
- /* need to wait 500us for reading next flash area */
- udelay(500);
if (ret < 0) {
input_err(true, &ts->client->dev, "%s: memory read failed\n",
__func__);