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:
@@ -88,6 +88,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"
|
||||
@@ -1110,6 +1112,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;
|
||||
|
||||
@@ -781,7 +781,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), \
|
||||
@@ -798,9 +808,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) {
|
||||
@@ -1841,7 +1851,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;
|
||||
|
||||
@@ -1932,6 +1942,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*/
|
||||
@@ -4362,7 +4376,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;
|
||||
|
||||
@@ -738,12 +738,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)
|
||||
@@ -769,57 +765,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 (0 == ts->gesture_enable && ts->is_suspended && ts->fp_grip_enable && ts->fp_grip_hold == true && ts->fp_grip_support) {
|
||||
TP_INFO(ts->tp_index, "%s: maybe prox near to disable gesture,nead send release touch to fp\n", __func__);
|
||||
touch_call_fp_grip(ts, 0);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -828,14 +780,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));
|
||||
|
||||
@@ -843,8 +795,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;
|
||||
|
||||
Reference in New Issue
Block a user