diff mbox series

HID: wacom: Report 2nd-gen Intuos Pro S center button status over BT

Message ID 20200424210400.220712-1-jason.gerecke@wacom.com (mailing list archive)
State Mainlined
Commit dcce8ef8f70a8e38e6c47c1bae8b312376c04420
Delegated to: Jiri Kosina
Headers show
Series HID: wacom: Report 2nd-gen Intuos Pro S center button status over BT | expand

Commit Message

Gerecke, Jason April 24, 2020, 9:04 p.m. UTC
The state of the center button was not reported to userspace for the
2nd-gen Intuos Pro S when used over Bluetooth due to the pad handling
code not being updated to support its reduced number of buttons. This
patch uses the actual number of buttons present on the tablet to
assemble a button state bitmap.

Link: https://github.com/linuxwacom/xf86-input-wacom/issues/112
Fixes: cd47de45b855 ("HID: wacom: Add 2nd gen Intuos Pro Small support")
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Cc: stable@vger.kernel.org # v5.3+
---
 drivers/hid/wacom_wac.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Jiri Kosina April 29, 2020, 7:43 p.m. UTC | #1
On Fri, 24 Apr 2020, Jason Gerecke wrote:

> The state of the center button was not reported to userspace for the
> 2nd-gen Intuos Pro S when used over Bluetooth due to the pad handling
> code not being updated to support its reduced number of buttons. This
> patch uses the actual number of buttons present on the tablet to
> assemble a button state bitmap.
> 
> Link: https://github.com/linuxwacom/xf86-input-wacom/issues/112
> Fixes: cd47de45b855 ("HID: wacom: Add 2nd gen Intuos Pro Small support")
> Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
> Cc: stable@vger.kernel.org # v5.3+

Applied, thanks Jason.
diff mbox series

Patch

diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 96d00eba99c0..1c96809b51c9 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1427,11 +1427,13 @@  static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
 {
 	struct input_dev *pad_input = wacom->pad_input;
 	unsigned char *data = wacom->data;
+	int nbuttons = wacom->features.numbered_buttons;
 
-	int buttons = data[282] | ((data[281] & 0x40) << 2);
+	int expresskeys = data[282];
+	int center = (data[281] & 0x40) >> 6;
 	int ring = data[285] & 0x7F;
 	bool ringstatus = data[285] & 0x80;
-	bool prox = buttons || ringstatus;
+	bool prox = expresskeys || center || ringstatus;
 
 	/* Fix touchring data: userspace expects 0 at left and increasing clockwise */
 	ring = 71 - ring;
@@ -1439,7 +1441,8 @@  static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
 	if (ring > 71)
 		ring -= 72;
 
-	wacom_report_numbered_buttons(pad_input, 9, buttons);
+	wacom_report_numbered_buttons(pad_input, nbuttons,
+                                      expresskeys | (center << (nbuttons - 1)));
 
 	input_report_abs(pad_input, ABS_WHEEL, ringstatus ? ring : 0);