Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3586d2f authored by Ping Cheng's avatar Ping Cheng Committed by Jiri Kosina
Browse files

HID: wacom: remove hardcoded WACOM_QUIRK_MULTI_INPUT



The quirk was added for devices that support both pen and touch.  It decides if
a device supports multiple inputs by hardcoded feature type. However, for some
devices, we do not know if they support both before accessing their HID
descriptors.

This patch relies on dynamically assigned device_type to make the decision.
Also, we make it certain that wacom_wac->shared is always created. That is, the
driver will not be loaded if it fails to create wacom_wac->shared.

Signed-off-by: default avatarPing Cheng <pingc@wacom.com>
Reviewed-by: default avatarJason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 1fd29be5
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -1521,7 +1521,6 @@ static int wacom_probe(struct hid_device *hdev,
	snprintf(wacom_wac->pad_name, sizeof(wacom_wac->pad_name),
		"%s Pad", features->name);

	if (features->quirks & WACOM_QUIRK_MULTI_INPUT) {
	/* Append the device type to the name */
	if (features->device_type != BTN_TOOL_FINGER)
		strlcat(wacom_wac->name, " Pen", WACOM_NAME_MAX);
@@ -1533,7 +1532,6 @@ static int wacom_probe(struct hid_device *hdev,
	error = wacom_add_shared_data(hdev);
	if (error)
		goto fail_shared_data;
	}

	if (!(features->quirks & WACOM_QUIRK_MONITOR) &&
	     (features->quirks & WACOM_QUIRK_BATTERY)) {
+4 −14
Original line number Diff line number Diff line
@@ -581,12 +581,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
	   (features->type == CINTIQ && !(data[1] & 0x40)))
		return 1;

	if (wacom->shared) {
	wacom->shared->stylus_in_proximity = true;

	if (wacom->shared->touch_down)
		return 1;
	}

	/* in Range while exiting */
	if (((data[1] & 0xfe) == 0x20) && wacom->reporting_data) {
@@ -598,7 +595,6 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)

	/* Exit report */
	if ((data[1] & 0xfe) == 0x80) {
		if (features->quirks & WACOM_QUIRK_MULTI_INPUT)
		wacom->shared->stylus_in_proximity = false;
		wacom->reporting_data = false;

@@ -2197,12 +2193,6 @@ void wacom_setup_device_quirks(struct wacom_features *features)
		features->y_max = 1023;
	}

	/* these device have multiple inputs */
	if (features->type >= WIRELESS ||
	    (features->type >= INTUOS5S && features->type <= INTUOSHT) ||
	    (features->oVid && features->oPid))
		features->quirks |= WACOM_QUIRK_MULTI_INPUT;

	/* quirk for bamboo touch with 2 low res touches */
	if (features->type == BAMBOO_PT &&
	    features->pktlen == WACOM_PKGLEN_BBTOUCH) {
+4 −5
Original line number Diff line number Diff line
@@ -73,11 +73,10 @@
#define WACOM_REPORT_BPAD_TOUCH		16

/* device quirks */
#define WACOM_QUIRK_MULTI_INPUT		0x0001
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0002
#define WACOM_QUIRK_NO_INPUT		0x0004
#define WACOM_QUIRK_MONITOR		0x0008
#define WACOM_QUIRK_BATTERY		0x0010
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
#define WACOM_QUIRK_NO_INPUT		0x0002
#define WACOM_QUIRK_MONITOR		0x0004
#define WACOM_QUIRK_BATTERY		0x0008

#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \