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

Commit 28d5fd86 authored by Daniel Kurtz's avatar Daniel Kurtz Committed by Dmitry Torokhov
Browse files

Input: synaptics - process button bits in AGM packets



AGM packets contain valid button bits, too.
This patch refactors packet processing to parse button bits in AGM packets.
However, they aren't actually used or reported.

The point is to more completely process AGM packets,
and prepare for future patches that may actually use AGM packet button bits.

Signed-off-by: default avatarDaniel Kurtz <djkurtz@chromium.org>
Acked-by: default avatarChase Douglas <chase.douglas@canonical.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent bea9f0ff
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -406,26 +406,10 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
	memset(hw, 0, sizeof(struct synaptics_hw_state));

	if (SYN_MODEL_NEWABS(priv->model_id)) {
		hw->x = (((buf[3] & 0x10) << 8) |
			 ((buf[1] & 0x0f) << 8) |
			 buf[4]);
		hw->y = (((buf[3] & 0x20) << 7) |
			 ((buf[1] & 0xf0) << 4) |
			 buf[5]);

		hw->z = buf[2];
		hw->w = (((buf[0] & 0x30) >> 2) |
			 ((buf[0] & 0x04) >> 1) |
			 ((buf[3] & 0x04) >> 2));

		if (SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) && hw->w == 2) {
			/* Gesture packet: (x, y, z) at half resolution */
			priv->mt.x = (((buf[4] & 0x0f) << 8) | buf[1]) << 1;
			priv->mt.y = (((buf[4] & 0xf0) << 4) | buf[2]) << 1;
			priv->mt.z = ((buf[3] & 0x30) | (buf[5] & 0x0f)) << 1;
			return 1;
		}

		hw->left  = (buf[0] & 0x01) ? 1 : 0;
		hw->right = (buf[0] & 0x02) ? 1 : 0;

@@ -448,6 +432,22 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
			hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0;
		}

		if (SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) && hw->w == 2) {
			/* Gesture packet: (x, y, z) at half resolution */
			priv->mt.x = (((buf[4] & 0x0f) << 8) | buf[1]) << 1;
			priv->mt.y = (((buf[4] & 0xf0) << 4) | buf[2]) << 1;
			priv->mt.z = ((buf[3] & 0x30) | (buf[5] & 0x0f)) << 1;
			return 1;
		}

		hw->x = (((buf[3] & 0x10) << 8) |
			 ((buf[1] & 0x0f) << 8) |
			 buf[4]);
		hw->y = (((buf[3] & 0x20) << 7) |
			 ((buf[1] & 0xf0) << 4) |
			 buf[5]);
		hw->z = buf[2];

		if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) &&
		    ((buf[0] ^ buf[3]) & 0x02)) {
			switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) {