oplus: oplus_touchscreen_v2: Always enable gestures and assign unique keycodes

This is required for dt2w and ITouchscreenGesture on LineageOS.

Change-Id: I3fe73841276bb5d074536a9b7a292b305369b488
This commit is contained in:
LuK1337
2022-04-11 20:28:39 +02:00
committed by chandu078
parent 4e9c4cecd5
commit e34b72bbe9
3 changed files with 37 additions and 61 deletions

View File

@@ -82,6 +82,8 @@
#define TEST_RUNNING 1
#define TEST_NOSTART 3
#define KEY_GESTURE_START 246
#define HEALTH_REPORT_GRIP "grip_report"
#define HEALTH_REPORT_BASELINE_ERR "baseline_err"
#define HEALTH_REPORT_NOISE "noise_count"
@@ -1093,6 +1095,7 @@ struct touchpanel_data {
bool disable_gesture_ctrl; /*when lcd_trigger_load_tp_fw start no need to control gesture*/
int irq_need_dev_resume_time; /*control setting of wait resume time*/
int gesture_enable; /*control state of black gesture*/
bool double_tap_to_wake_enable; /*control state of dt2w*/
struct gesture_info gesture; /*gesture related info*/
int gesture_enable_indep; /*independent control state of black gesture*/
bool incell_aod_flag;

View File

@@ -758,7 +758,17 @@ static void tp_gesture_handle(struct touchpanel_data *ts)
#endif /* end of CONFIG_OPLUS_TP_APK*/
if (gesture_info_temp.gesture_type != UNKOWN_GESTURE
if (gesture_info_temp.gesture_type == DOU_TAP
&& CHK_BIT(ts->gesture_enable_indep, (1 << gesture_info_temp.gesture_type))) {
tp_memcpy(&ts->gesture, sizeof(ts->gesture), \
&gesture_info_temp, sizeof(struct gesture_info), \
sizeof(struct gesture_info));
input_report_key(ts->input_dev, KEY_WAKEUP, 1);
input_sync(ts->input_dev);
input_report_key(ts->input_dev, KEY_WAKEUP, 0);
input_sync(ts->input_dev);
} else if (gesture_info_temp.gesture_type != UNKOWN_GESTURE
&& gesture_info_temp.gesture_type != FINGER_PRINTDOWN
&& gesture_info_temp.gesture_type != FRINGER_PRINTUP) {
retval = tp_memcpy(&ts->gesture, sizeof(ts->gesture), \
@@ -775,9 +785,9 @@ static void tp_gesture_handle(struct touchpanel_data *ts)
}
}
input_report_key(ts->input_dev, KEY_F4, 1);
input_report_key(ts->input_dev, KEY_GESTURE_START + gesture_info_temp.gesture_type, 1);
input_sync(ts->input_dev);
input_report_key(ts->input_dev, KEY_F4, 0);
input_report_key(ts->input_dev, KEY_GESTURE_START + gesture_info_temp.gesture_type, 0);
input_sync(ts->input_dev);
} else if (gesture_info_temp.gesture_type == FINGER_PRINTDOWN) {
@@ -1784,7 +1794,7 @@ static struct attribute_group properties_attr_group = {
*/
static int init_input_device(struct touchpanel_data *ts)
{
int ret = 0;
int ret = 0, i = 0;
struct kobject *vk_properties_kobj;
static bool board_properties = false;
@@ -1875,6 +1885,10 @@ static int init_input_device(struct touchpanel_data *ts)
if (ts->black_gesture_support) {
set_bit(KEY_F4, ts->input_dev->keybit);
set_bit(KEY_WAKEUP, ts->input_dev->keybit);
for (i = UP_VEE; i <= S_GESTURE; i++) {
set_bit(KEY_GESTURE_START + i, ts->input_dev->keybit);
}
#ifdef CONFIG_OPLUS_TP_APK
set_bit(KEY_POWER, ts->input_dev->keybit);
#endif /*end of CONFIG_OPLUS_TP_APK*/
@@ -4279,7 +4293,7 @@ int register_common_touch_device(struct touchpanel_data *pdata)
ts->hall_status = false;
ts->is_suspended = 0;
ts->suspend_state = TP_SPEEDUP_RESUME_COMPLETE;
ts->gesture_enable = 0;
ts->gesture_enable = 1;
ts->fd_enable = 0;
ts->fp_enable = 0;
ts->aiunit_game_enable = 0;

View File

@@ -650,12 +650,8 @@ DECLARE_PROC_OPS(tp_communicate_test_ops, simple_open, tp_communicate_test_read,
/*double_tap_enable - For black screen gesture
* Input:
* gesture_enable = 0 : disable gesture
* gesture_enable = 1 : enable gesture when ps is far away
* gesture_enable = 2 : disable gesture when ps is near
* gesture_enable = 3 : enable single tap gesture when ps is far away
* value = 5 : hall status is far way
* value = 6 : hall status is near
* gesture_enable = 0 : disable dt2w
* gesture_enable = 1 : enable dt2w
*/
static ssize_t proc_gesture_control_write(struct file *file,
const char __user *buffer, size_t count, loff_t *ppos)
@@ -681,52 +677,13 @@ static ssize_t proc_gesture_control_write(struct file *file,
mutex_lock(&ts->mutex);
switch(value) {
case 0:
case 1:
case 2:
case 3:
if (ts->gesture_enable != value) {
ts->gesture_enable = value;
TP_INFO(ts->tp_index, "%s: gesture_enable = %d, is_suspended = %d\n", __func__,
ts->gesture_enable, ts->is_suspended);
if (value)
ts->gesture_enable_indep |= (1 << DOU_TAP);
else
ts->gesture_enable_indep &= ~(1 << DOU_TAP);
if (ts->is_incell_panel && (ts->suspend_state == TP_RESUME_EARLY_EVENT
|| ts->disable_gesture_ctrl) && (ts->tp_resume_order == LCD_TP_RESUME)) {
TS_TP_INFO("tp will resume, no need mode_switch in incell panel\n"); /*avoid i2c error or tp rst pulled down in lcd resume*/
} else if (ts->is_suspended) {
if (ts->bus_ready == false) {
if (ts->health_monitor_support) {
ts->monitor_data.bus_not_ready_gesture_write_count++;
}
}
if (ts->fingerprint_underscreen_support && ts->fp_enable
&& ts->ts_ops->enable_gesture_mask) {
ts->ts_ops->enable_gesture_mask(ts->chip_data,
(ts->gesture_enable & 0x01) == 1);
} else {
operate_mode_switch(ts);
}
}
}
break;
case 4:
break;
case 5:
ts->hall_status = false;
break;
case 6:
ts->hall_status = true;
if ((ts->gesture_enable & 0x01) && ts->is_suspended)
operate_mode_switch(ts);
break;
default:
TPD_DEBUG("invalid setting %d\n", value);
}
TPD_INFO("%s: gesture_enable = %d, value = %d, hall_status = %d\n", __func__, ts->gesture_enable, value, ts->hall_status);
if (ts->ts_ops->set_gesture_state)
ts->ts_ops->set_gesture_state(ts->chip_data, ts->gesture_enable_indep);
mutex_unlock(&ts->mutex);
@@ -735,14 +692,14 @@ static ssize_t proc_gesture_control_write(struct file *file,
/*double_tap_enable - For black screen gesture
* Output:
* gesture_enable = 0 : disable gesture
* gesture_enable = 1 : enable gesture when ps is far away
* gesture_enable = 2 : disable gesture when ps is near
* gesture_enable = 0 : disable dt2w
* gesture_enable = 1 : enable dt2w
*/
static ssize_t proc_gesture_control_read(struct file *file, char __user *buffer,
size_t count, loff_t *ppos)
{
int ret = 0;
int value = 0;
char page[PAGESIZE] = {0};
struct touchpanel_data *ts = PDE_DATA(file_inode(file));
@@ -750,8 +707,10 @@ static ssize_t proc_gesture_control_read(struct file *file, char __user *buffer,
return 0;
}
TP_DEBUG(ts->tp_index, "double tap enable is: %d\n", ts->gesture_enable);
ret = snprintf(page, PAGESIZE - 1, "%d\n", ts->gesture_enable);
value = !!(ts->gesture_enable_indep & (1 << DOU_TAP));
TP_DEBUG(ts->tp_index, "double tap enable is: %d\n", value);
ret = snprintf(page, PAGESIZE - 1, "%d\n", value);
ret = simple_read_from_buffer(buffer, count, ppos, page, strlen(page));
return ret;