Skip to content

Commit af7ecad

Browse files
jigpugregkh
authored andcommitted
HID: wacom: Correct button numbering 2nd-gen Intuos Pro over Bluetooth
commit 6441fc7 upstream. The button numbering of the 2nd-gen Intuos Pro is not consistent between the USB and Bluetooth interfaces. Over USB, the HID_GENERIC codepath enumerates the eight ExpressKeys first (BTN_0 - BTN_7) followed by the center modeswitch button (BTN_8). The Bluetooth codepath, however, has the center modeswitch button as BTN_0 and the the eight ExpressKeys as BTN_1 - BTN_8. To ensure userspace button mappings do not change depending on how the tablet is connected, modify the Bluetooth codepath to report buttons in the same order as USB. To ensure the mode switch LED continues to toggle in response to the mode switch button, the `wacom_is_led_toggled` function also requires a small update. Link: linuxwacom/input-wacom#79 Fixes: 4922cd2 ("HID: wacom: Support 2nd-gen Intuos Pro's Bluetooth classic interface") Cc: <stable@vger.kernel.org> # 4.11+ Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com> Reviewed-by: Aaron Skomra <aaron.skomra@wacom.com> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 99ed939 commit af7ecad

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

drivers/hid/wacom_wac.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -1381,7 +1381,7 @@ static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom)
13811381
struct input_dev *pad_input = wacom->pad_input;
13821382
unsigned char *data = wacom->data;
13831383

1384-
int buttons = (data[282] << 1) | ((data[281] >> 6) & 0x01);
1384+
int buttons = data[282] | ((data[281] & 0x40) << 2);
13851385
int ring = data[285] & 0x7F;
13861386
bool ringstatus = data[285] & 0x80;
13871387
bool prox = buttons || ringstatus;
@@ -3850,7 +3850,7 @@ static void wacom_24hd_update_leds(struct wacom *wacom, int mask, int group)
38503850
static bool wacom_is_led_toggled(struct wacom *wacom, int button_count,
38513851
int mask, int group)
38523852
{
3853-
int button_per_group;
3853+
int group_button;
38543854

38553855
/*
38563856
* 21UX2 has LED group 1 to the left and LED group 0
@@ -3860,9 +3860,12 @@ static bool wacom_is_led_toggled(struct wacom *wacom, int button_count,
38603860
if (wacom->wacom_wac.features.type == WACOM_21UX2)
38613861
group = 1 - group;
38623862

3863-
button_per_group = button_count/wacom->led.count;
3863+
group_button = group * (button_count/wacom->led.count);
38643864

3865-
return mask & (1 << (group * button_per_group));
3865+
if (wacom->wacom_wac.features.type == INTUOSP2_BT)
3866+
group_button = 8;
3867+
3868+
return mask & (1 << group_button);
38663869
}
38673870

38683871
static void wacom_update_led(struct wacom *wacom, int button_count, int mask,

0 commit comments

Comments
 (0)