@@ -483,6 +483,80 @@ static __u8 pensketch_m912_rdesc_fixed[] = {
483
483
0xC0 /* End Collection */
484
484
};
485
485
486
+ /* Original EasyPen M406XE report descriptor size */
487
+ #define EASYPEN_M406XE_RDESC_ORIG_SIZE 476
488
+
489
+ /* Fixed EasyPen M406XE report descriptor */
490
+ static __u8 easypen_m406xe_rdesc_fixed [] = {
491
+ 0x05 , 0x01 , /* Usage Page (Desktop), */
492
+ 0x09 , 0x01 , /* Usage (01h), */
493
+ 0xA1 , 0x01 , /* Collection (Application), */
494
+ 0x85 , 0x05 , /* Report ID (5), */
495
+ 0x09 , 0x01 , /* Usage (01h), */
496
+ 0x15 , 0x80 , /* Logical Minimum (-128), */
497
+ 0x25 , 0x7F , /* Logical Maximum (127), */
498
+ 0x75 , 0x08 , /* Report Size (8), */
499
+ 0x95 , 0x07 , /* Report Count (7), */
500
+ 0xB1 , 0x02 , /* Feature (Variable), */
501
+ 0xC0 , /* End Collection, */
502
+ 0x05 , 0x0D , /* Usage Page (Digitizer), */
503
+ 0x09 , 0x02 , /* Usage (Pen), */
504
+ 0xA1 , 0x01 , /* Collection (Application), */
505
+ 0x85 , 0x10 , /* Report ID (16), */
506
+ 0x09 , 0x20 , /* Usage (Stylus), */
507
+ 0xA0 , /* Collection (Physical), */
508
+ 0x14 , /* Logical Minimum (0), */
509
+ 0x25 , 0x01 , /* Logical Maximum (1), */
510
+ 0x75 , 0x01 , /* Report Size (1), */
511
+ 0x09 , 0x42 , /* Usage (Tip Switch), */
512
+ 0x09 , 0x44 , /* Usage (Barrel Switch), */
513
+ 0x09 , 0x46 , /* Usage (Tablet Pick), */
514
+ 0x95 , 0x03 , /* Report Count (3), */
515
+ 0x81 , 0x02 , /* Input (Variable), */
516
+ 0x95 , 0x04 , /* Report Count (4), */
517
+ 0x81 , 0x03 , /* Input (Constant, Variable), */
518
+ 0x09 , 0x32 , /* Usage (In Range), */
519
+ 0x95 , 0x01 , /* Report Count (1), */
520
+ 0x81 , 0x02 , /* Input (Variable), */
521
+ 0x75 , 0x10 , /* Report Size (16), */
522
+ 0x95 , 0x01 , /* Report Count (1), */
523
+ 0xA4 , /* Push, */
524
+ 0x05 , 0x01 , /* Usage Page (Desktop), */
525
+ 0x55 , 0xFD , /* Unit Exponent (-3), */
526
+ 0x65 , 0x13 , /* Unit (Inch), */
527
+ 0x34 , /* Physical Minimum (0), */
528
+ 0x09 , 0x30 , /* Usage (X), */
529
+ 0x46 , 0x70 , 0x17 , /* Physical Maximum (6000), */
530
+ 0x26 , 0x00 , 0x3C , /* Logical Maximum (15360), */
531
+ 0x81 , 0x02 , /* Input (Variable), */
532
+ 0x09 , 0x31 , /* Usage (Y), */
533
+ 0x46 , 0xA0 , 0x0F , /* Physical Maximum (4000), */
534
+ 0x26 , 0x00 , 0x28 , /* Logical Maximum (10240), */
535
+ 0x81 , 0x02 , /* Input (Variable), */
536
+ 0xB4 , /* Pop, */
537
+ 0x09 , 0x30 , /* Usage (Tip Pressure), */
538
+ 0x26 , 0xFF , 0x03 , /* Logical Maximum (1023), */
539
+ 0x81 , 0x02 , /* Input (Variable), */
540
+ 0xC0 , /* End Collection, */
541
+ 0xC0 , /* End Collection */
542
+ 0x05 , 0x0C , /* Usage Page (Consumer), */
543
+ 0x09 , 0x01 , /* Usage (Consumer Control), */
544
+ 0xA1 , 0x01 , /* Collection (Application), */
545
+ 0x85 , 0x12 , /* Report ID (18), */
546
+ 0x14 , /* Logical Minimum (0), */
547
+ 0x25 , 0x01 , /* Logical Maximum (1), */
548
+ 0x75 , 0x01 , /* Report Size (1), */
549
+ 0x95 , 0x04 , /* Report Count (4), */
550
+ 0x0A , 0x79 , 0x02 , /* Usage (AC Redo Or Repeat), */
551
+ 0x0A , 0x1A , 0x02 , /* Usage (AC Undo), */
552
+ 0x0A , 0x2D , 0x02 , /* Usage (AC Zoom In), */
553
+ 0x0A , 0x2E , 0x02 , /* Usage (AC Zoom Out), */
554
+ 0x81 , 0x02 , /* Input (Variable), */
555
+ 0x95 , 0x34 , /* Report Count (52), */
556
+ 0x81 , 0x03 , /* Input (Constant, Variable), */
557
+ 0xC0 /* End Collection */
558
+ };
559
+
486
560
static __u8 * kye_consumer_control_fixup (struct hid_device * hdev , __u8 * rdesc ,
487
561
unsigned int * rsize , int offset , const char * device_name ) {
488
562
/*
@@ -555,6 +629,12 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
555
629
* rsize = sizeof (easypen_m610x_rdesc_fixed );
556
630
}
557
631
break ;
632
+ case USB_DEVICE_ID_KYE_EASYPEN_M406XE :
633
+ if (* rsize == EASYPEN_M406XE_RDESC_ORIG_SIZE ) {
634
+ rdesc = easypen_m406xe_rdesc_fixed ;
635
+ * rsize = sizeof (easypen_m406xe_rdesc_fixed );
636
+ }
637
+ break ;
558
638
case USB_DEVICE_ID_KYE_PENSKETCH_M912 :
559
639
if (* rsize == PENSKETCH_M912_RDESC_ORIG_SIZE ) {
560
640
rdesc = pensketch_m912_rdesc_fixed ;
@@ -644,6 +724,7 @@ static int kye_probe(struct hid_device *hdev, const struct hid_device_id *id)
644
724
case USB_DEVICE_ID_KYE_MOUSEPEN_I608X :
645
725
case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2 :
646
726
case USB_DEVICE_ID_KYE_EASYPEN_M610X :
727
+ case USB_DEVICE_ID_KYE_EASYPEN_M406XE :
647
728
case USB_DEVICE_ID_KYE_PENSKETCH_M912 :
648
729
ret = kye_tablet_enable (hdev );
649
730
if (ret ) {
@@ -678,6 +759,8 @@ static const struct hid_device_id kye_devices[] = {
678
759
USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2 ) },
679
760
{ HID_USB_DEVICE (USB_VENDOR_ID_KYE ,
680
761
USB_DEVICE_ID_KYE_EASYPEN_M610X ) },
762
+ { HID_USB_DEVICE (USB_VENDOR_ID_KYE ,
763
+ USB_DEVICE_ID_KYE_EASYPEN_M406XE ) },
681
764
{ HID_USB_DEVICE (USB_VENDOR_ID_KYE ,
682
765
USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE ) },
683
766
{ HID_USB_DEVICE (USB_VENDOR_ID_KYE ,
0 commit comments