mirror of
				https://github.com/oplus-giulia-dev/android_kernel_oneplus_sm8650-modules
				synced 2025-11-04 06:11:41 +08:00 
			
		
		
		
	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:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user