/* Report descriptor template placeholder */
#define UCLOGIC_PH(_ID) UCLOGIC_PH_HEAD, UCLOGIC_PH_ID_##_ID
+#define UCLOGIC_PEN_REPORT_ID 0x07
/* Fixed report descriptor template */
static const __u8 uclogic_tablet_rdesc_template[] = {
struct uclogic_drvdata {
__u8 *rdesc;
unsigned int rsize;
+ bool invert_pen_inrange;
};
static __u8 *uclogic_report_fixup(struct hid_device *hdev, __u8 *rdesc,
hid_err(hdev, "tablet enabling failed\n");
return rc;
}
+ drvdata->invert_pen_inrange = true;
}
break;
}
static int uclogic_raw_event(struct hid_device *hdev, struct hid_report *report,
u8 *data, int size)
{
- struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+ struct uclogic_drvdata *drvdata = hid_get_drvdata(hdev);
- /* If this is a pen input report */
- if (intf->cur_altsetting->desc.bInterfaceNumber == 0 &&
- report->type == HID_INPUT_REPORT &&
- report->id == 0x07 && size >= 2)
+ if ((drvdata->invert_pen_inrange) &&
+ (report->type == HID_INPUT_REPORT) &&
+ (report->id == UCLOGIC_PEN_REPORT_ID) &&
+ (size >= 2))
/* Invert the in-range bit */
data[1] ^= 0x40;