* [PATCH] HID: wacom: generic: Send BTN_STYLUS3 when both barrel switches are set
@ 2017-11-07 16:25 Jason Gerecke
2017-11-09 12:34 ` Jiri Kosina
0 siblings, 1 reply; 2+ messages in thread
From: Jason Gerecke @ 2017-11-07 16:25 UTC (permalink / raw)
To: linux-input, Jiri Kosina
Cc: Dmitry Torokhov, Peter Hutterer, Benjamin Tissoires, Ping Cheng,
Jason Gerecke, Jason Gerecke
The Wacom Pro Pen 3D includes a third barrel switch which is intended to
be particularly useful in applications where one frequency uses pan, zoom,
and rotate to navigate around a scene or model. The pen is compatible with
the MobileStudio Pro, 2nd-gen Intuos Pro, and Cintiq Pro. When the third
button is pressed, these devices set both the HID_DG_BARRELSWITCH and
HID_DG_BARRELSWITCH2 usages since their HID descriptors do not include a
usage specific to the button.
Rather than send both BTN_STYLUS and BTN_STYLUS2 when the third button is
pressed, userspace (libinput) has requested that we detect this condition
and report a newly-defined BTN_STYLUS3 event instead. We could define a
quirk specific to devices compatible with the Pro Pen 3D, but the liklihood
of seeing both barrel switch bits set with other pens/devices is low enough
to not worry about (pens mechanically prevent accidental activation of
multiple switches).
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
---
drivers/hid/wacom_wac.c | 18 ++++++++++++++++--
drivers/hid/wacom_wac.h | 2 ++
include/uapi/linux/input-event-codes.h | 1 +
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index e3223b0c4f90..16af6886e828 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2140,6 +2140,12 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
case HID_DG_TIPSWITCH:
wacom_wac->hid_data.tipswitch |= value;
return;
+ case HID_DG_BARRELSWITCH:
+ wacom_wac->hid_data.barrelswitch = value;
+ return;
+ case HID_DG_BARRELSWITCH2:
+ wacom_wac->hid_data.barrelswitch2 = value;
+ return;
case HID_DG_TOOLSERIALNUMBER:
if (value) {
wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
@@ -2254,6 +2260,12 @@ static void wacom_wac_pen_report(struct hid_device *hdev,
if (!delay_pen_events(wacom_wac) && wacom_wac->tool[0]) {
int id = wacom_wac->id[0];
+ int sw_state = wacom_wac->hid_data.barrelswitch |
+ (wacom_wac->hid_data.barrelswitch2 << 1);
+
+ input_report_key(input, BTN_STYLUS, sw_state == 1);
+ input_report_key(input, BTN_STYLUS2, sw_state == 2);
+ input_report_key(input, BTN_STYLUS3, sw_state == 3);
/*
* Non-USI EMR tools should have their IDs mangled to
@@ -3300,9 +3312,11 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
else
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
- if (features->type == HID_GENERIC)
- /* setup has already been done */
+ if (features->type == HID_GENERIC) {
+ /* setup has already been done; apply otherwise-undetectible quirks */
+ input_set_capability(input_dev, EV_KEY, BTN_STYLUS3);
return 0;
+ }
__set_bit(BTN_TOUCH, input_dev->keybit);
__set_bit(ABS_MISC, input_dev->absbit);
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index 8a03654048bf..69dda27e8dde 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -291,6 +291,8 @@ struct hid_data {
bool inrange_state;
bool invert_state;
bool tipswitch;
+ bool barrelswitch;
+ bool barrelswitch2;
int x;
int y;
int pressure;
diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index 179891074b3c..9b3a522f50d1 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -406,6 +406,7 @@
#define BTN_TOOL_MOUSE 0x146
#define BTN_TOOL_LENS 0x147
#define BTN_TOOL_QUINTTAP 0x148 /* Five fingers on trackpad */
+#define BTN_STYLUS3 0x149
#define BTN_TOUCH 0x14a
#define BTN_STYLUS 0x14b
#define BTN_STYLUS2 0x14c
--
2.15.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] HID: wacom: generic: Send BTN_STYLUS3 when both barrel switches are set
2017-11-07 16:25 [PATCH] HID: wacom: generic: Send BTN_STYLUS3 when both barrel switches are set Jason Gerecke
@ 2017-11-09 12:34 ` Jiri Kosina
0 siblings, 0 replies; 2+ messages in thread
From: Jiri Kosina @ 2017-11-09 12:34 UTC (permalink / raw)
To: Jason Gerecke
Cc: linux-input, Dmitry Torokhov, Peter Hutterer, Benjamin Tissoires,
Ping Cheng, Jason Gerecke
On Tue, 7 Nov 2017, Jason Gerecke wrote:
> The Wacom Pro Pen 3D includes a third barrel switch which is intended to
> be particularly useful in applications where one frequency uses pan, zoom,
> and rotate to navigate around a scene or model. The pen is compatible with
> the MobileStudio Pro, 2nd-gen Intuos Pro, and Cintiq Pro. When the third
> button is pressed, these devices set both the HID_DG_BARRELSWITCH and
> HID_DG_BARRELSWITCH2 usages since their HID descriptors do not include a
> usage specific to the button.
>
> Rather than send both BTN_STYLUS and BTN_STYLUS2 when the third button is
> pressed, userspace (libinput) has requested that we detect this condition
> and report a newly-defined BTN_STYLUS3 event instead. We could define a
> quirk specific to devices compatible with the Pro Pen 3D, but the liklihood
> of seeing both barrel switch bits set with other pens/devices is low enough
> to not worry about (pens mechanically prevent accidental activation of
> multiple switches).
>
> Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
> Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Applied to for-4.15/wacom.
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-11-09 12:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-07 16:25 [PATCH] HID: wacom: generic: Send BTN_STYLUS3 when both barrel switches are set Jason Gerecke
2017-11-09 12:34 ` Jiri Kosina
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).