Add support for Universal Stylus Interface (USI) style events to the HID core and input layers. Signed-off-by: Tero Kristo <tero.kristo@xxxxxxxxxxxxxxx> --- drivers/hid/hid-debug.c | 9 +++++- drivers/hid/hid-input.c | 40 ++++++++++++++++++++++++++ include/linux/mod_devicetable.h | 2 +- include/uapi/linux/input-event-codes.h | 26 +++++++++++------ 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c index 26c31d759914..18035c63c358 100644 --- a/drivers/hid/hid-debug.c +++ b/drivers/hid/hid-debug.c @@ -1025,7 +1025,14 @@ static const char *absolutes[ABS_CNT] = { static const char *misc[MSC_MAX + 1] = { [MSC_SERIAL] = "Serial", [MSC_PULSELED] = "Pulseled", - [MSC_GESTURE] = "Gesture", [MSC_RAW] = "RawData" + [MSC_GESTURE] = "Gesture", [MSC_RAW] = "RawData", + [MSC_PEN_ID] = "PenID", [MSC_PEN_COLOR] "PenColor", + [MSC_PEN_LINE_STYLE_INK] = "PenLineStyleInk", + [MSC_PEN_LINE_STYLE_PENCIL] = "PenLineStylePencil", + [MSC_PEN_LINE_STYLE_HIGHLIGHTER] = "PenLineStyleHighlighter", + [MSC_PEN_LINE_STYLE_CHISEL_MARKER] = "PenLineStyleChiselMarker", + [MSC_PEN_LINE_STYLE_BRUSH] = "PenLineStyleBrush", + [MSC_PEN_LINE_STYLE_NO_PREFERENCE] = "PenLineStyleNoPreference", }; static const char *leds[LED_MAX + 1] = { diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 1ce75e8b49d5..52c581324491 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -833,6 +833,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel } break; + case 0x38: /* Transducer Index */ + map_msc(MSC_PEN_ID); + goto ignore; + case 0x3b: /* Battery Strength */ hidinput_setup_battery(device, HID_INPUT_REPORT, field, false); usage->type = EV_PWR; @@ -880,6 +884,42 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel map_msc(MSC_SERIAL); break; + case 0x5c: /* Digitizer Preferred Color */ + map_msc(MSC_PEN_COLOR); + break; + + case 0x5e: /* Digitizer Preferred Line Width */ + map_abs_clear(ABS_TOOL_WIDTH); + break; + + case 0x70: /* Preferred Line Style -> not an input usage */ + case 0x71: /* Preferred Line Style is Locked */ + goto ignore; + + case 0x72: /* Ink */ + map_msc(MSC_PEN_LINE_STYLE_INK); + break; + + case 0x73: /* Pencil */ + map_msc(MSC_PEN_LINE_STYLE_PENCIL); + break; + + case 0x74: /* Highlighter */ + map_msc(MSC_PEN_LINE_STYLE_HIGHLIGHTER); + break; + + case 0x75: /* Chisel Marker */ + map_msc(MSC_PEN_LINE_STYLE_CHISEL_MARKER); + break; + + case 0x76: /* Brush */ + map_msc(MSC_PEN_LINE_STYLE_BRUSH); + break; + + case 0x77: /* No Preference */ + map_msc(MSC_PEN_LINE_STYLE_NO_PREFERENCE); + break; + default: goto unknown; } break; diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 4bb71979a8fd..bf2b76a6e7e8 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -322,7 +322,7 @@ struct pcmcia_device_id { #define INPUT_DEVICE_ID_KEY_MAX 0x2ff #define INPUT_DEVICE_ID_REL_MAX 0x0f #define INPUT_DEVICE_ID_ABS_MAX 0x3f -#define INPUT_DEVICE_ID_MSC_MAX 0x07 +#define INPUT_DEVICE_ID_MSC_MAX 0x0d #define INPUT_DEVICE_ID_LED_MAX 0x0f #define INPUT_DEVICE_ID_SND_MAX 0x07 #define INPUT_DEVICE_ID_FF_MAX 0x7f diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h index 225ec87d4f22..0ebfc92dacf5 100644 --- a/include/uapi/linux/input-event-codes.h +++ b/include/uapi/linux/input-event-codes.h @@ -901,14 +901,24 @@ * Misc events */ -#define MSC_SERIAL 0x00 -#define MSC_PULSELED 0x01 -#define MSC_GESTURE 0x02 -#define MSC_RAW 0x03 -#define MSC_SCAN 0x04 -#define MSC_TIMESTAMP 0x05 -#define MSC_MAX 0x07 -#define MSC_CNT (MSC_MAX+1) +#define MSC_SERIAL 0x00 +#define MSC_PULSELED 0x01 +#define MSC_GESTURE 0x02 +#define MSC_RAW 0x03 +#define MSC_SCAN 0x04 +#define MSC_TIMESTAMP 0x05 +/* USI Pen events */ +#define MSC_PEN_ID 0x06 +#define MSC_PEN_COLOR 0x07 +#define MSC_PEN_LINE_STYLE_INK 0x08 +#define MSC_PEN_LINE_STYLE_PENCIL 0x09 +#define MSC_PEN_LINE_STYLE_HIGHLIGHTER 0x0a +#define MSC_PEN_LINE_STYLE_CHISEL_MARKER 0x0b +#define MSC_PEN_LINE_STYLE_BRUSH 0x0c +#define MSC_PEN_LINE_STYLE_NO_PREFERENCE 0x0d +/* TODO: Add USI diagnostic & battery events too */ +#define MSC_MAX 0x0d +#define MSC_CNT (MSC_MAX + 1) /* * LEDs -- 2.25.1