Skip to content

Commit b1f466a

Browse files
skomraJiri Kosina
authored andcommitted
HID: wacom: generic: add the "Report Valid" usage
Wacom Bluetooth reports contain multiple pen frames per report. Each frame contains a flag indicating if the frame is valid. Future Wacom devices with this type of report may contain HID descriptors, add support for this usage to the generic codepath of the Wacom driver. Signed-off-by: Aaron Armstrong Skomra <skomra@gmail.com> Reviewed-by: Ping Cheng <ping.cheng@wacom.com> Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
1 parent f8b6a74 commit b1f466a

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

drivers/hid/wacom_wac.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1715,7 +1715,8 @@ int wacom_equivalent_usage(int usage)
17151715
usage == WACOM_HID_WD_TOUCHSTRIP ||
17161716
usage == WACOM_HID_WD_TOUCHSTRIP2 ||
17171717
usage == WACOM_HID_WD_TOUCHRING ||
1718-
usage == WACOM_HID_WD_TOUCHRINGSTATUS) {
1718+
usage == WACOM_HID_WD_TOUCHRINGSTATUS ||
1719+
usage == WACOM_HID_WD_REPORT_VALID) {
17191720
return usage;
17201721
}
17211722

@@ -2199,6 +2200,9 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
21992200
struct input_dev *input = wacom_wac->pen_input;
22002201
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
22012202

2203+
if (wacom_wac->is_invalid_bt_frame)
2204+
return;
2205+
22022206
switch (equivalent_usage) {
22032207
case HID_GD_Z:
22042208
/*
@@ -2295,6 +2299,9 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
22952299
features->offset_bottom);
22962300
features->offset_bottom = value;
22972301
return;
2302+
case WACOM_HID_WD_REPORT_VALID:
2303+
wacom_wac->is_invalid_bt_frame = !value;
2304+
return;
22982305
}
22992306

23002307
/* send pen events only when touch is up or forced out
@@ -2313,6 +2320,10 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
23132320
static void wacom_wac_pen_pre_report(struct hid_device *hdev,
23142321
struct hid_report *report)
23152322
{
2323+
struct wacom *wacom = hid_get_drvdata(hdev);
2324+
struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2325+
2326+
wacom_wac->is_invalid_bt_frame = false;
23162327
return;
23172328
}
23182329

@@ -2325,6 +2336,9 @@ static void wacom_wac_pen_report(struct hid_device *hdev,
23252336
bool range = wacom_wac->hid_data.inrange_state;
23262337
bool sense = wacom_wac->hid_data.sense_state;
23272338

2339+
if (wacom_wac->is_invalid_bt_frame)
2340+
return;
2341+
23282342
if (!wacom_wac->tool[0] && range) { /* first in range */
23292343
/* Going into range select tool */
23302344
if (wacom_wac->hid_data.invert_state)

drivers/hid/wacom_wac.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
#define WACOM_HID_WD_TOUCHSTRIP2 (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
119119
#define WACOM_HID_WD_TOUCHRING (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
120120
#define WACOM_HID_WD_TOUCHRINGSTATUS (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
121+
#define WACOM_HID_WD_REPORT_VALID (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
121122
#define WACOM_HID_WD_ACCELEROMETER_X (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
122123
#define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
123124
#define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
@@ -353,7 +354,7 @@ struct wacom_wac {
353354
bool has_mute_touch_switch;
354355
bool has_mode_change;
355356
bool is_direct_mode;
356-
357+
bool is_invalid_bt_frame;
357358
};
358359

359360
#endif

0 commit comments

Comments
 (0)