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:
parent
d50d08f1f6
commit
0f5e810baf
3 changed files with 63 additions and 5 deletions
|
@ -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");
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue