mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 14:52:05 +00:00
HID: uclogic: Add support for UGEE v2 dial frames
Add the required HID descriptors and the initialization function for UGEE v2 frames with a bitmap dial. Tested-by: Jouke Witteveen <j.witteveen@gmail.com> Signed-off-by: José Expósito <jose.exposito89@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
a092986fc0
commit
b67439d7cd
@ -1150,6 +1150,45 @@ static int uclogic_params_ugee_v2_init_frame_buttons(struct uclogic_params *p,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* uclogic_params_ugee_v2_init_frame_dial() - initialize a UGEE v2 frame with a
|
||||
* bitmap dial.
|
||||
* @p: Parameters to fill in, cannot be NULL.
|
||||
* @desc_params: Device description params list.
|
||||
* @desc_params_size: Size of the description params list.
|
||||
*
|
||||
* Returns:
|
||||
* Zero, if successful. A negative errno code on error.
|
||||
*/
|
||||
static int uclogic_params_ugee_v2_init_frame_dial(struct uclogic_params *p,
|
||||
const s32 *desc_params,
|
||||
size_t desc_params_size)
|
||||
{
|
||||
__u8 *rdesc_frame = NULL;
|
||||
int rc = 0;
|
||||
|
||||
if (!p || desc_params_size != UCLOGIC_RDESC_PH_ID_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
rdesc_frame = uclogic_rdesc_template_apply(
|
||||
uclogic_rdesc_ugee_v2_frame_dial_template_arr,
|
||||
uclogic_rdesc_ugee_v2_frame_dial_template_size,
|
||||
desc_params, UCLOGIC_RDESC_PH_ID_NUM);
|
||||
if (!rdesc_frame)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = uclogic_params_frame_init_with_desc(&p->frame_list[0],
|
||||
rdesc_frame,
|
||||
uclogic_rdesc_ugee_v2_frame_dial_template_size,
|
||||
UCLOGIC_RDESC_V1_FRAME_ID);
|
||||
kfree(rdesc_frame);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
p->frame_list[0].bitmap_dial_byte = 7;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* uclogic_params_ugee_v2_init() - initialize a UGEE graphics tablets by
|
||||
* discovering their parameters.
|
||||
@ -1249,6 +1288,11 @@ static int uclogic_params_ugee_v2_init(struct uclogic_params *params,
|
||||
|
||||
/* Initialize the frame interface */
|
||||
switch (frame_type) {
|
||||
case UCLOGIC_PARAMS_FRAME_DIAL:
|
||||
case UCLOGIC_PARAMS_FRAME_MOUSE:
|
||||
rc = uclogic_params_ugee_v2_init_frame_dial(&p, desc_params,
|
||||
ARRAY_SIZE(desc_params));
|
||||
break;
|
||||
case UCLOGIC_PARAMS_FRAME_BUTTONS:
|
||||
default:
|
||||
rc = uclogic_params_ugee_v2_init_frame_buttons(&p, desc_params,
|
||||
|
@ -961,6 +961,46 @@ const __u8 uclogic_rdesc_ugee_v2_frame_btn_template_arr[] = {
|
||||
const size_t uclogic_rdesc_ugee_v2_frame_btn_template_size =
|
||||
sizeof(uclogic_rdesc_ugee_v2_frame_btn_template_arr);
|
||||
|
||||
/* Fixed report descriptor template for UGEE v2 frame reports (dial) */
|
||||
const __u8 uclogic_rdesc_ugee_v2_frame_dial_template_arr[] = {
|
||||
0x05, 0x01, /* Usage Page (Desktop), */
|
||||
0x09, 0x07, /* Usage (Keypad), */
|
||||
0xA1, 0x01, /* Collection (Application), */
|
||||
0x85, UCLOGIC_RDESC_V1_FRAME_ID,
|
||||
/* Report ID, */
|
||||
0x05, 0x0D, /* Usage Page (Digitizer), */
|
||||
0x09, 0x39, /* Usage (Tablet Function Keys), */
|
||||
0xA0, /* Collection (Physical), */
|
||||
0x75, 0x01, /* Report Size (1), */
|
||||
0x95, 0x08, /* Report Count (8), */
|
||||
0x81, 0x01, /* Input (Constant), */
|
||||
0x05, 0x09, /* Usage Page (Button), */
|
||||
0x19, 0x01, /* Usage Minimum (01h), */
|
||||
UCLOGIC_RDESC_FRAME_PH_BTN,
|
||||
/* Usage Maximum (PLACEHOLDER), */
|
||||
0x95, 0x0A, /* Report Count (10), */
|
||||
0x14, /* Logical Minimum (0), */
|
||||
0x25, 0x01, /* Logical Maximum (1), */
|
||||
0x81, 0x02, /* Input (Variable), */
|
||||
0x95, 0x06, /* Report Count (6), */
|
||||
0x81, 0x01, /* Input (Constant), */
|
||||
0x75, 0x08, /* Report Size (8), */
|
||||
0x95, 0x03, /* Report Count (3), */
|
||||
0x81, 0x01, /* Input (Constant), */
|
||||
0x05, 0x01, /* Usage Page (Desktop), */
|
||||
0x09, 0x38, /* Usage (Wheel), */
|
||||
0x95, 0x01, /* Report Count (1), */
|
||||
0x15, 0xFF, /* Logical Minimum (-1), */
|
||||
0x25, 0x01, /* Logical Maximum (1), */
|
||||
0x81, 0x06, /* Input (Variable, Relative), */
|
||||
0x95, 0x02, /* Report Count (2), */
|
||||
0x81, 0x01, /* Input (Constant), */
|
||||
0xC0, /* End Collection, */
|
||||
0xC0 /* End Collection */
|
||||
};
|
||||
const size_t uclogic_rdesc_ugee_v2_frame_dial_template_size =
|
||||
sizeof(uclogic_rdesc_ugee_v2_frame_dial_template_arr);
|
||||
|
||||
/* Fixed report descriptor for Ugee EX07 frame */
|
||||
const __u8 uclogic_rdesc_ugee_ex07_frame_arr[] = {
|
||||
0x05, 0x01, /* Usage Page (Desktop), */
|
||||
|
@ -169,6 +169,10 @@ extern const size_t uclogic_rdesc_ugee_v2_pen_template_size;
|
||||
extern const __u8 uclogic_rdesc_ugee_v2_frame_btn_template_arr[];
|
||||
extern const size_t uclogic_rdesc_ugee_v2_frame_btn_template_size;
|
||||
|
||||
/* Fixed report descriptor template for UGEE v2 frame reports (dial) */
|
||||
extern const __u8 uclogic_rdesc_ugee_v2_frame_dial_template_arr[];
|
||||
extern const size_t uclogic_rdesc_ugee_v2_frame_dial_template_size;
|
||||
|
||||
/* Fixed report descriptor for Ugee EX07 frame */
|
||||
extern const __u8 uclogic_rdesc_ugee_ex07_frame_arr[];
|
||||
extern const size_t uclogic_rdesc_ugee_ex07_frame_size;
|
||||
|
Loading…
Reference in New Issue
Block a user