linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] HID: wacom: generic: add 5 tablet touch keys
@ 2016-12-16 23:24 Ping Cheng
       [not found] ` <CANRwn3Qtf-gEXrUmU3BeFkJRbqarcT=gJFt5P-pJdKk65U=PVw@mail.gmail.com>
  2016-12-19 10:30 ` Jiri Kosina
  0 siblings, 2 replies; 14+ messages in thread
From: Ping Cheng @ 2016-12-16 23:24 UTC (permalink / raw)
  To: linux-input
  Cc: jikos, jason.gerecke, dmitry.torokhov, benjamin.tissoires,
	Ping Cheng, Ping Cheng

Wacom Cintiq Pro [1] is a series of display tablets. They support
5 touch keys on the tablet. Those keys represent specific functions.
They turn display off; bring up OSD; bring up On Screen Keyboard;
bring up desktop control panel; and turn touch on/off.

The most left touch key, that turns display on/off, is controlled by
firmware. When the display is on, the mode is set. Otherwise, the
mode is off. So, it works like a switch. That's why we introduced a
new switch: SW_INDIRECT. The switch defauts to INDIRECT instead of DIRECT
was a request from useland, more specifically Gnome, developers.

Other four touch keys are true software keys. We use the existing
KEY_BUTTONCONFIG and KEY_CONTROLPANEL for OSD and control panel. But,
we have to request two new keys: KEY_ONSCREEN_KEYBOARD and KEY_MUTE_DEVICE
since none of the existing keys support those two actions.

[1] http://www.wacom.com/en-us/products/pen-displays/wacom-cintiq-pro

Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
---
v3: Since no one has followed up with v2, let's add some more comments for
SW_INDIRECT so we keep the offlist decision public ;).
---
 drivers/hid/wacom_wac.c                | 25 +++++++++++++++++++++++++
 drivers/hid/wacom_wac.h                |  5 +++++
 include/linux/mod_devicetable.h        |  2 +-
 include/uapi/linux/input-event-codes.h |  6 +++++-
 4 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index b1a9a3c..739c592 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1578,6 +1578,26 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
 		wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
 		features->device_type |= WACOM_DEVICETYPE_PAD;
 		break;
+	case WACOM_HID_WD_DIRECT:
+		wacom_map_usage(input, usage, field, EV_SW, SW_INDIRECT, 0);
+		features->device_type |= WACOM_DEVICETYPE_PAD;
+		break;
+	case WACOM_HID_WD_BUTTONCONFIG:
+		wacom_map_usage(input, usage, field, EV_KEY, KEY_BUTTONCONFIG, 0);
+		features->device_type |= WACOM_DEVICETYPE_PAD;
+		break;
+	case WACOM_HID_WD_ONSCREEN_KEYBOARD:
+		wacom_map_usage(input, usage, field, EV_KEY, KEY_ONSCREEN_KEYBOARD, 0);
+		features->device_type |= WACOM_DEVICETYPE_PAD;
+		break;
+	case WACOM_HID_WD_CONTROLPANEL:
+		wacom_map_usage(input, usage, field, EV_KEY, KEY_CONTROLPANEL, 0);
+		features->device_type |= WACOM_DEVICETYPE_PAD;
+		break;
+	case WACOM_HID_WD_MUTE_DEVICE:
+		wacom_map_usage(input, usage, field, EV_KEY, KEY_MUTE_DEVICE, 0);
+		features->device_type |= WACOM_DEVICETYPE_PAD;
+		break;
 	}
 
 	switch (equivalent_usage & 0xfffffff0) {
@@ -1629,6 +1649,11 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
 	case WACOM_HID_WD_TOUCHRINGSTATUS:
 		break;
 
+	case WACOM_HID_WD_DIRECT:
+		features->input_event_flag = true;
+		input_event(input, usage->type, usage->code, !value);
+		break;
+
 	default:
 		features->input_event_flag = true;
 		input_event(input, usage->type, usage->code, value);
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index fb0e50a..7a7b0f1 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -105,6 +105,11 @@
 #define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
 #define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
 #define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
+#define WACOM_HID_WD_DIRECT             (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
+#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
+#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
+#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
+#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
 #define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
 #define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
 #define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index ed84c07..342ddd6 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -291,7 +291,7 @@ struct pcmcia_device_id {
 #define INPUT_DEVICE_ID_LED_MAX		0x0f
 #define INPUT_DEVICE_ID_SND_MAX		0x07
 #define INPUT_DEVICE_ID_FF_MAX		0x7f
-#define INPUT_DEVICE_ID_SW_MAX		0x0f
+#define INPUT_DEVICE_ID_SW_MAX		0x1f
 
 #define INPUT_DEVICE_ID_MATCH_BUS	1
 #define INPUT_DEVICE_ID_MATCH_VENDOR	2
diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index d6d071f..32ef894 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -641,6 +641,9 @@
  * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
  */
 #define KEY_DATA			0x275
+/* same as SW_MUTE_DEVICE but triggered by a key */
+#define KEY_MUTE_DEVICE 		0x278
+#define KEY_ONSCREEN_KEYBOARD		0x279
 
 #define BTN_TRIGGER_HAPPY		0x2c0
 #define BTN_TRIGGER_HAPPY1		0x2c0
@@ -781,7 +784,8 @@
 #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
 #define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
 #define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
-#define SW_MAX			0x0f
+#define SW_INDIRECT		0x10  /* set = not a direct input device */
+#define SW_MAX			0x1f
 #define SW_CNT			(SW_MAX+1)
 
 /*
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2017-01-12  4:27 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-16 23:24 [PATCH v3] HID: wacom: generic: add 5 tablet touch keys Ping Cheng
     [not found] ` <CANRwn3Qtf-gEXrUmU3BeFkJRbqarcT=gJFt5P-pJdKk65U=PVw@mail.gmail.com>
2016-12-18 17:59   ` Jason Gerecke
2016-12-19 10:30 ` Jiri Kosina
2016-12-23  1:13   ` Dmitry Torokhov
2017-01-03  9:30     ` Benjamin Tissoires
2017-01-03 22:33       ` Ping Cheng
2017-01-03 23:02         ` Benjamin Tissoires
2017-01-04  0:20           ` Peter Hutterer
2017-01-03 23:29         ` Peter Hutterer
2017-01-04  9:27           ` Benjamin Tissoires
2017-01-06  4:23             ` Peter Hutterer
2017-01-10  8:47               ` Benjamin Tissoires
2017-01-12  4:25                 ` Peter Hutterer
2017-01-03  9:55     ` Peter Hutterer

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).