On Sun, Feb 10, 2019 at 11:15 AM Nikolai Kondrashov <spbnick@xxxxxxxxx> wrote: > > 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. I guess the Xorg wacom driver. I don't think we need that for libinput. Peter? Cheers, Benjamin > > Signed-off-by: Nikolai Kondrashov <spbnick@xxxxxxxxx> > --- > drivers/hid/hid-uclogic-core.c | 10 ++++++++++ > drivers/hid/hid-uclogic-params.h | 9 +++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c > index e4324ad86e58..f5fb612daa1e 100644 > --- a/drivers/hid/hid-uclogic-core.c > +++ b/drivers/hid/hid-uclogic-core.c > @@ -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; > } > > diff --git a/drivers/hid/hid-uclogic-params.h b/drivers/hid/hid-uclogic-params.h > index 1060f70d647d..4ba6ecc2b8b8 100644 > --- a/drivers/hid/hid-uclogic-params.h > +++ b/drivers/hid/hid-uclogic-params.h > @@ -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. */ > -- > 2.20.1 >