Commit 5fc70e35 authored by Jiada Wang's avatar Jiada Wang Committed by Dmitry Torokhov
Browse files

Input: introduce input_mt_report_slot_inactive()



input_mt_report_slot_state() ignores "tool" argument when the slot is
closed, which has caused a bit of confusion. Let's introduce
input_mt_report_slot_inactive() to report inactive slot state.

Suggested-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarJiada Wang <jiada_wang@mentor.com>
Link: https://lore.kernel.org/r/20200508055656.96389-2-jiada_wang@mentor.com


Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent c9c45702
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -387,8 +387,7 @@ static int u1_raw_event(struct alps_dev *hdata, u8 *data, int size)
				input_report_abs(hdata->input,
					ABS_MT_PRESSURE, z);
			} else {
				input_mt_report_slot_state(hdata->input,
					MT_TOOL_FINGER, 0);
				input_mt_report_slot_inactive(hdata->input);
			}
		}

+2 −4
Original line number Diff line number Diff line
@@ -896,7 +896,7 @@ static void mt_release_pending_palms(struct mt_device *td,
		clear_bit(slotnum, app->pending_palm_slots);

		input_mt_slot(input, slotnum);
		input_mt_report_slot_state(input, MT_TOOL_PALM, false);
		input_mt_report_slot_inactive(input);

		need_sync = true;
	}
@@ -1640,9 +1640,7 @@ static void mt_release_contacts(struct hid_device *hid)
		if (mt) {
			for (i = 0; i < mt->num_slots; i++) {
				input_mt_slot(input_dev, i);
				input_mt_report_slot_state(input_dev,
							   MT_TOOL_FINGER,
							   false);
				input_mt_report_slot_inactive(input_dev);
			}
			input_mt_sync_frame(input_dev);
			input_sync(input_dev);
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ static void xenkbd_handle_mt_event(struct xenkbd_info *info,
		break;

	case XENKBD_MT_EV_UP:
		input_mt_report_slot_state(info->mtouch, MT_TOOL_FINGER, false);
		input_mt_report_slot_inactive(info->mtouch);
		break;

	case XENKBD_MT_EV_SYN:
+1 −1
Original line number Diff line number Diff line
@@ -938,7 +938,7 @@ static void elan_report_contact(struct elan_tp_data *data,
		input_report_abs(input, ABS_MT_TOUCH_MINOR, minor);
	} else {
		input_mt_slot(input, contact_num);
		input_mt_report_slot_state(input, MT_TOOL_FINGER, false);
		input_mt_report_slot_inactive(input);
	}
}

+3 −4
Original line number Diff line number Diff line
@@ -822,8 +822,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
		 * have happened.
		 */
		if (status & MXT_T9_RELEASE) {
			input_mt_report_slot_state(input_dev,
						   MT_TOOL_FINGER, 0);
			input_mt_report_slot_inactive(input_dev);
			mxt_input_sync(data);
		}

@@ -839,7 +838,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
		input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
	} else {
		/* Touch no longer active, close out slot */
		input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
		input_mt_report_slot_inactive(input_dev);
	}

	data->update_input = true;
@@ -947,7 +946,7 @@ static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
		dev_dbg(dev, "[%u] release\n", id);

		/* close out slot */
		input_mt_report_slot_state(input_dev, 0, 0);
		input_mt_report_slot_inactive(input_dev);
	}

	data->update_input = true;
Loading