dlkm: bo: Improve touch driver for novatek

- After the firmware is reset due to some exceptions, restore
the state of charger, stylus, palm, edge rejection.
- Filtering repeated commands of edge rejection.

Change-Id: Ie7076e1908ef528787d20dfe8970d9568636f114
Signed-off-by: wengjun1 <wengjun1@motorola.com>
Reviewed-on: https://gerrit.mot.com/1886971
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Wei Deng <dengwei1@motorola.com>
Reviewed-by: Yeqing Wang <wangyq13@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
wengjun1 2021-02-25 17:56:46 +08:00 committed by Jun Weng
parent d50d08f1f6
commit 0f5e810baf
3 changed files with 63 additions and 5 deletions

View file

@ -1581,7 +1581,25 @@ static irqreturn_t nvt_ts_work_func(int irq, void *data)
nvt_update_firmware(nvt_boot_firmware_name);
else
nvt_update_firmware(BOOT_UPDATE_FIRMWARE_NAME);
goto XFER_ERROR;
mutex_unlock(&ts->lock);
if (ts->charger_detection) {
queue_work(ts->charger_detection->nvt_charger_notify_wq, &ts->charger_detection->charger_notify_work);
}
#ifdef NOVATECH_PEN_NOTIFIER
if(!ts->fw_ready_flag)
ts->fw_ready_flag = true;
nvt_mcu_pen_detect_set(ts->nvt_pen_detect_flag);
#endif
#ifdef PALM_GESTURE
nvt_palm_set(ts->palm_enabled);
#endif
#ifdef EDGE_SUPPRESSION
nvt_edge_reject_set(ts->edge_reject_state);
#endif
return IRQ_HANDLED;
}
#endif /* #if NVT_TOUCH_WDT_RECOVERY */
@ -2027,7 +2045,10 @@ static ssize_t nvt_edge_reject_store(struct device *dev,
ts->edge_reject_state = state;
NVT_LOG("edge_reject_state %d!\n", state);
nvt_edge_reject_set(ts->edge_reject_state);
if(nvt_edge_reject_read() != state) {
nvt_edge_reject_set(ts->edge_reject_state);
}
return count;
}
@ -2035,11 +2056,15 @@ static ssize_t nvt_edge_reject_store(struct device *dev,
static ssize_t nvt_edge_reject_show(struct device *dev,
struct device_attribute *attr, char *buf) {
if(ts->edge_reject_state == VERTICAL)
uint8_t ret;
ret = nvt_edge_reject_read();
if(ret == VERTICAL)
return scnprintf(buf, PAGE_SIZE, "VERTICAL\n");
else if(ts->edge_reject_state == LEFT_UP)
else if(ret == LEFT_UP)
return scnprintf(buf, PAGE_SIZE, "LEFT_UP\n");
else if(ts->edge_reject_state == RIGHT_UP)
else if(ret == RIGHT_UP)
return scnprintf(buf, PAGE_SIZE, "RIGHT_UP\n");
else
return scnprintf(buf, PAGE_SIZE, "Not Support!\n");

View file

@ -271,6 +271,7 @@ typedef enum {
typedef enum {
EVENT_MAP_HOST_CMD = 0x50,
EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE = 0x51,
EVENT_MAP_HOST_CMD_CHECK = 0x5C,
EVENT_MAP_RESET_COMPLETE = 0x60,
EVENT_MAP_FWINFO = 0x78,
EVENT_MAP_PROJECTID = 0x9A,
@ -340,5 +341,6 @@ extern int nvt_palm_set(bool enabled);
#endif
#ifdef EDGE_SUPPRESSION
extern int32_t nvt_edge_reject_set(uint32_t status);
extern uint8_t nvt_edge_reject_read(void);
#endif
#endif /* _LINUX_NVT_TOUCH_H */

View file

@ -607,6 +607,33 @@ static const struct file_operations nvt_fwupdate_fops = {
.read = nvt_fwupdate_read,
};
#ifdef EDGE_SUPPRESSION
typedef enum{
EDGE_REJECT=5,
}CMD_OFFSET;
static uint8_t nvt_cmd_show(int offset)
{
uint8_t buf[3] = {0};
int32_t ret = 0;
//---set xdata index to EVENT BUF ADDR---
ret = nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
if (ret < 0) {
NVT_ERR("Set event buffer index fail!\n");
mutex_unlock(&ts->lock);
return ret;
}
//---read cmd status---
buf[0] = EVENT_MAP_HOST_CMD_CHECK;
buf[1] = 0xFF;
CTP_SPI_READ(ts->client, buf, 2);
return ((buf[1]>> offset) & 0x03);
}
#endif
int32_t nvt_cmd_store(uint8_t u8Cmd)
{
@ -698,6 +725,10 @@ int32_t nvt_edge_reject_set(uint32_t status) {
return ret;
}
uint8_t nvt_edge_reject_read(void) {
return nvt_cmd_show(EDGE_REJECT);
}
#endif
static int nvt_monitor_control_show(struct seq_file *sfile, void *v)