Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b7d97ab authored by LuK1337's avatar LuK1337 Committed by MajorP93
Browse files

oplus_touchscreen: Always enable gestures and assign unique keycodes

This is required for dt2w and ITouchscreenGesture on LineageOS.

Change-Id: I3fe73841276bb5d074536a9b7a292b305369b488
parent 3fbc2c21
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@
#define Heart               17
#define PENDETECT           18
#define Sgestrue            18  // S
#define KEY_GESTURE_START 246
#define HEALTH_REPORT_GRIP          "grip_report"
#define HEALTH_REPORT_BASELINE_ERR  "baseline_err"
#define HEALTH_REPORT_NOISE         "noise_count"
@@ -794,6 +795,7 @@ struct touchpanel_data {
	uint32_t irq_flags_cover;                           /*cover irq setting flag*/

	int gesture_enable;                                 /*control state of black gesture*/
	bool double_tap_to_wake_enable;                     /*control state of dt2w*/
#if GESTURE_RATE_MODE
	int geature_ignore;
#endif
+30 −63
Original line number Diff line number Diff line
@@ -613,10 +613,14 @@ static void tp_gesture_handle(struct touchpanel_data *ts)

#endif // end of CONFIG_OPLUS_TP_APK

	if (gesture_info_temp.gesture_type != UnkownGesture
			&& gesture_info_temp.gesture_type != FingerprintDown
			&& gesture_info_temp.gesture_type != FingerprintUp
			&& CHK_BIT(ts->gesture_enable_indep, (1 << gesture_info_temp.gesture_type))) {
	if (gesture_info_temp.gesture_type == DouTap && CHK_BIT(ts->gesture_enable_indep, (1 << gesture_info_temp.gesture_type))) {
		memcpy(&ts->gesture, &gesture_info_temp, 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 != UnkownGesture && gesture_info_temp.gesture_type != FingerprintDown && gesture_info_temp.gesture_type != FingerprintUp && CHK_BIT(ts->gesture_enable_indep, (1 << gesture_info_temp.gesture_type))) {
		memcpy(&ts->gesture, &gesture_info_temp, sizeof(struct gesture_info));
#if GESTURE_RATE_MODE

@@ -625,9 +629,9 @@ static void tp_gesture_handle(struct touchpanel_data *ts)
		}

#endif
		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 == FingerprintDown) {
@@ -1808,12 +1812,8 @@ bool tp_boot_mode_normal(void)
EXPORT_SYMBOL(tp_boot_mode_normal);

/*
 *    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)
@@ -1842,55 +1842,15 @@ static ssize_t proc_gesture_control_write(struct file *file,
	sscanf(buf, "%d", &value);

	mutex_lock(&ts->mutex);

	switch (value) {
	case 0:
	case 1:
	case 2:
	case 3:
		if (ts->gesture_enable != value) {
			ts->gesture_enable = value;

			if (ts->is_incell_panel && (ts->suspend_state == TP_RESUME_EARLY_EVENT
						    || ts->disable_gesture_ctrl) && (ts->tp_resume_order == LCD_TP_RESUME)) {
				TPD_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->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);

	if (value) {
		ts->gesture_enable_indep |= (1 << DouTap);
	} 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);
		ts->gesture_enable_indep &= ~(1 << DouTap);
	}

		break;

	default:
		TPD_DEBUG("invalid setting %d\n", value);
	if (ts->ts_ops->set_gesture_state) {
		ts->ts_ops->set_gesture_state(ts->chip_data, ts->gesture_enable_indep);
	}

	TPD_INFO("%s: gesture_enable = %d, value = %d\n", __func__, ts->gesture_enable,
		 value);
	mutex_unlock(&ts->mutex);

	return count;
@@ -1900,6 +1860,7 @@ static ssize_t proc_gesture_control_read(struct file *file,
		char __user *user_buf, 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));

@@ -1907,8 +1868,10 @@ static ssize_t proc_gesture_control_read(struct file *file,
		return 0;
	}

	TPD_DEBUG("double tap enable is: %d\n", ts->gesture_enable);
	ret = snprintf(page, PAGESIZE - 1, "%d", ts->gesture_enable);
	value = !!(ts->gesture_enable_indep & (1 << DouTap));

	TPD_DEBUG("double tap enable is: %d\n", value);
	ret = snprintf(page, PAGESIZE - 1, "%d", value);
	ret = simple_read_from_buffer(user_buf, count, ppos, page, strlen(page));

	return ret;
@@ -6962,7 +6925,7 @@ static int init_debug_info_proc(struct touchpanel_data *ts)
 */
static int init_input_device(struct touchpanel_data *ts)
{
	int ret = 0;
	int ret = 0, i = 0;
	struct kobject *vk_properties_kobj;

	TPD_INFO("%s is called\n", __func__);
@@ -7033,6 +6996,10 @@ static int init_input_device(struct touchpanel_data *ts)
#ifdef CONFIG_OPLUS_TP_APK
		set_bit(KEY_POWER, ts->input_dev->keybit);
#endif //end of CONFIG_OPLUS_TP_APK
		set_bit(KEY_WAKEUP, ts->input_dev->keybit);
		for (i = UpVee; i <= Sgestrue; i++) {
			set_bit(KEY_GESTURE_START + i, ts->input_dev->keybit);
		}
	}

	ts->kpd_input_dev->name = TPD_DEVICE"_kpd";
@@ -8845,7 +8812,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->es_enable = 0;
	ts->fd_enable = 0;
	ts->fp_enable = 0;