Commit fde44ac5 authored by Nikolai Kondrashov's avatar Nikolai Kondrashov Committed by Benjamin Tissoires
Browse files

HID: uclogic: Support faking Wacom pad device ID



Add support for inserting a Wacom pad device ID into hid-uclogic
reports. This allows reporting dial inputs in a way compatible with the
Wacom driver. Needed for Ugee G5 support in particular.

Signed-off-by: default avatarNikolai Kondrashov <spbnick@gmail.com>
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
parent 08367be1
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -300,6 +300,16 @@ static int uclogic_raw_event(struct hid_device *hdev,
		}
	}

	/* Tweak frame control reports, if necessary */
	if ((report->type == HID_INPUT_REPORT) &&
	    (report->id == params->frame.id)) {
		/* If need to, and can, set pad device ID for Wacom drivers */
		if (params->frame.dev_id_byte > 0 &&
		    params->frame.dev_id_byte < size) {
			data[params->frame.dev_id_byte] = 0xf;
		}
	}

	return 0;
}

+9 −0
Original line number Diff line number Diff line
@@ -87,6 +87,13 @@ struct uclogic_params_frame {
	 * Report ID, if reports should be tweaked, zero if not.
	 */
	unsigned int id;
	/*
	 * Offset of the Wacom-style device ID byte in the report, to be set
	 * to pad device ID (0xf), for compatibility with Wacom drivers. Zero
	 * if no changes to the report should be made. Only valid if "id" is
	 * not zero.
	 */
	unsigned int dev_id_byte;
};

/*
@@ -161,6 +168,7 @@ extern int uclogic_params_init(struct uclogic_params *params,
		".frame.desc_ptr = %p\n"            \
		".frame.desc_size = %u\n"           \
		".frame.id = %u\n"                  \
		".frame.dev_id_byte = %u\n"         \
		".pen_frame_flag = 0x%02x\n"

/* Tablet interface parameters *printf format arguments */
@@ -177,6 +185,7 @@ extern int uclogic_params_init(struct uclogic_params *params,
		(_params)->frame.desc_ptr,                                  \
		(_params)->frame.desc_size,                                 \
		(_params)->frame.id,                                        \
		(_params)->frame.dev_id_byte,                               \
		(_params)->pen_frame_flag

/* Get a replacement report descriptor for a tablet's interface. */