Hi John, Thank you for the patch! Yet something to improve: [auto build test ERROR on hid/for-next] [also build test ERROR on linux/master linus/master jikos-hid/for-next jikos-trivial/for-next v5.12-rc4 next-20210326] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/John-Chen/HID-add-Apple-Magic-Mouse-2-support/20210327-211004 base: https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git for-next config: x86_64-randconfig-a012-20210327 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d50fe9f0d6b9ee61df8830a67ea0a33c27a637e7) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://github.com/0day-ci/linux/commit/00e05cc61c9d267c5857d61fd40638d560460f89 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review John-Chen/HID-add-Apple-Magic-Mouse-2-support/20210327-211004 git checkout 00e05cc61c9d267c5857d61fd40638d560460f89 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): >> drivers/hid/hid-input.c:1082:12: error: no member named 'battery_min' in 'struct hid_device' device->battery_min = 0; ~~~~~~ ^ >> drivers/hid/hid-input.c:1083:12: error: no member named 'battery_max' in 'struct hid_device' device->battery_max = 100; ~~~~~~ ^ 2 errors generated. vim +1082 drivers/hid/hid-input.c 568 569 static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field, 570 struct hid_usage *usage) 571 { 572 struct input_dev *input = hidinput->input; 573 struct hid_device *device = input_get_drvdata(input); 574 int max = 0, code; 575 unsigned long *bit = NULL; 576 577 field->hidinput = hidinput; 578 579 if (field->flags & HID_MAIN_ITEM_CONSTANT) 580 goto ignore; 581 582 /* Ignore if report count is out of bounds. */ 583 if (field->report_count < 1) 584 goto ignore; 585 586 /* only LED usages are supported in output fields */ 587 if (field->report_type == HID_OUTPUT_REPORT && 588 (usage->hid & HID_USAGE_PAGE) != HID_UP_LED) { 589 goto ignore; 590 } 591 592 if (device->driver->input_mapping) { 593 int ret = device->driver->input_mapping(device, hidinput, field, 594 usage, &bit, &max); 595 if (ret > 0) 596 goto mapped; 597 if (ret < 0) 598 goto ignore; 599 } 600 601 switch (usage->hid & HID_USAGE_PAGE) { 602 case HID_UP_UNDEFINED: 603 goto ignore; 604 605 case HID_UP_KEYBOARD: 606 set_bit(EV_REP, input->evbit); 607 608 if ((usage->hid & HID_USAGE) < 256) { 609 if (!hid_keyboard[usage->hid & HID_USAGE]) goto ignore; 610 map_key_clear(hid_keyboard[usage->hid & HID_USAGE]); 611 } else 612 map_key(KEY_UNKNOWN); 613 614 break; 615 616 case HID_UP_BUTTON: 617 code = ((usage->hid - 1) & HID_USAGE); 618 619 switch (field->application) { 620 case HID_GD_MOUSE: 621 case HID_GD_POINTER: code += BTN_MOUSE; break; 622 case HID_GD_JOYSTICK: 623 if (code <= 0xf) 624 code += BTN_JOYSTICK; 625 else 626 code += BTN_TRIGGER_HAPPY - 0x10; 627 break; 628 case HID_GD_GAMEPAD: 629 if (code <= 0xf) 630 code += BTN_GAMEPAD; 631 else 632 code += BTN_TRIGGER_HAPPY - 0x10; 633 break; 634 default: 635 switch (field->physical) { 636 case HID_GD_MOUSE: 637 case HID_GD_POINTER: code += BTN_MOUSE; break; 638 case HID_GD_JOYSTICK: code += BTN_JOYSTICK; break; 639 case HID_GD_GAMEPAD: code += BTN_GAMEPAD; break; 640 default: code += BTN_MISC; 641 } 642 } 643 644 map_key(code); 645 break; 646 647 case HID_UP_SIMULATION: 648 switch (usage->hid & 0xffff) { 649 case 0xba: map_abs(ABS_RUDDER); break; 650 case 0xbb: map_abs(ABS_THROTTLE); break; 651 case 0xc4: map_abs(ABS_GAS); break; 652 case 0xc5: map_abs(ABS_BRAKE); break; 653 case 0xc8: map_abs(ABS_WHEEL); break; 654 default: goto ignore; 655 } 656 break; 657 658 case HID_UP_GENDESK: 659 if ((usage->hid & 0xf0) == 0x80) { /* SystemControl */ 660 switch (usage->hid & 0xf) { 661 case 0x1: map_key_clear(KEY_POWER); break; 662 case 0x2: map_key_clear(KEY_SLEEP); break; 663 case 0x3: map_key_clear(KEY_WAKEUP); break; 664 case 0x4: map_key_clear(KEY_CONTEXT_MENU); break; 665 case 0x5: map_key_clear(KEY_MENU); break; 666 case 0x6: map_key_clear(KEY_PROG1); break; 667 case 0x7: map_key_clear(KEY_HELP); break; 668 case 0x8: map_key_clear(KEY_EXIT); break; 669 case 0x9: map_key_clear(KEY_SELECT); break; 670 case 0xa: map_key_clear(KEY_RIGHT); break; 671 case 0xb: map_key_clear(KEY_LEFT); break; 672 case 0xc: map_key_clear(KEY_UP); break; 673 case 0xd: map_key_clear(KEY_DOWN); break; 674 case 0xe: map_key_clear(KEY_POWER2); break; 675 case 0xf: map_key_clear(KEY_RESTART); break; 676 default: goto unknown; 677 } 678 break; 679 } 680 681 if ((usage->hid & 0xf0) == 0xb0) { /* SC - Display */ 682 switch (usage->hid & 0xf) { 683 case 0x05: map_key_clear(KEY_SWITCHVIDEOMODE); break; 684 default: goto ignore; 685 } 686 break; 687 } 688 689 /* 690 * Some lazy vendors declare 255 usages for System Control, 691 * leading to the creation of ABS_X|Y axis and too many others. 692 * It wouldn't be a problem if joydev doesn't consider the 693 * device as a joystick then. 694 */ 695 if (field->application == HID_GD_SYSTEM_CONTROL) 696 goto ignore; 697 698 if ((usage->hid & 0xf0) == 0x90) { /* D-pad */ 699 switch (usage->hid) { 700 case HID_GD_UP: usage->hat_dir = 1; break; 701 case HID_GD_DOWN: usage->hat_dir = 5; break; 702 case HID_GD_RIGHT: usage->hat_dir = 3; break; 703 case HID_GD_LEFT: usage->hat_dir = 7; break; 704 default: goto unknown; 705 } 706 if (field->dpad) { 707 map_abs(field->dpad); 708 goto ignore; 709 } 710 map_abs(ABS_HAT0X); 711 break; 712 } 713 714 switch (usage->hid) { 715 /* These usage IDs map directly to the usage codes. */ 716 case HID_GD_X: case HID_GD_Y: case HID_GD_Z: 717 case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ: 718 if (field->flags & HID_MAIN_ITEM_RELATIVE) 719 map_rel(usage->hid & 0xf); 720 else 721 map_abs_clear(usage->hid & 0xf); 722 break; 723 724 case HID_GD_WHEEL: 725 if (field->flags & HID_MAIN_ITEM_RELATIVE) { 726 set_bit(REL_WHEEL, input->relbit); 727 map_rel(REL_WHEEL_HI_RES); 728 } else { 729 map_abs(usage->hid & 0xf); 730 } 731 break; 732 case HID_GD_SLIDER: case HID_GD_DIAL: 733 if (field->flags & HID_MAIN_ITEM_RELATIVE) 734 map_rel(usage->hid & 0xf); 735 else 736 map_abs(usage->hid & 0xf); 737 break; 738 739 case HID_GD_HATSWITCH: 740 usage->hat_min = field->logical_minimum; 741 usage->hat_max = field->logical_maximum; 742 map_abs(ABS_HAT0X); 743 break; 744 745 case HID_GD_START: map_key_clear(BTN_START); break; 746 case HID_GD_SELECT: map_key_clear(BTN_SELECT); break; 747 748 case HID_GD_RFKILL_BTN: 749 /* MS wireless radio ctl extension, also check CA */ 750 if (field->application == HID_GD_WIRELESS_RADIO_CTLS) { 751 map_key_clear(KEY_RFKILL); 752 /* We need to simulate the btn release */ 753 field->flags |= HID_MAIN_ITEM_RELATIVE; 754 break; 755 } 756 goto unknown; 757 758 default: goto unknown; 759 } 760 761 break; 762 763 case HID_UP_LED: 764 switch (usage->hid & 0xffff) { /* HID-Value: */ 765 case 0x01: map_led (LED_NUML); break; /* "Num Lock" */ 766 case 0x02: map_led (LED_CAPSL); break; /* "Caps Lock" */ 767 case 0x03: map_led (LED_SCROLLL); break; /* "Scroll Lock" */ 768 case 0x04: map_led (LED_COMPOSE); break; /* "Compose" */ 769 case 0x05: map_led (LED_KANA); break; /* "Kana" */ 770 case 0x27: map_led (LED_SLEEP); break; /* "Stand-By" */ 771 case 0x4c: map_led (LED_SUSPEND); break; /* "System Suspend" */ 772 case 0x09: map_led (LED_MUTE); break; /* "Mute" */ 773 case 0x4b: map_led (LED_MISC); break; /* "Generic Indicator" */ 774 case 0x19: map_led (LED_MAIL); break; /* "Message Waiting" */ 775 case 0x4d: map_led (LED_CHARGING); break; /* "External Power Connected" */ 776 777 default: goto ignore; 778 } 779 break; 780 781 case HID_UP_DIGITIZER: 782 if ((field->application & 0xff) == 0x01) /* Digitizer */ 783 __set_bit(INPUT_PROP_POINTER, input->propbit); 784 else if ((field->application & 0xff) == 0x02) /* Pen */ 785 __set_bit(INPUT_PROP_DIRECT, input->propbit); 786 787 switch (usage->hid & 0xff) { 788 case 0x00: /* Undefined */ 789 goto ignore; 790 791 case 0x30: /* TipPressure */ 792 if (!test_bit(BTN_TOUCH, input->keybit)) { 793 device->quirks |= HID_QUIRK_NOTOUCH; 794 set_bit(EV_KEY, input->evbit); 795 set_bit(BTN_TOUCH, input->keybit); 796 } 797 map_abs_clear(ABS_PRESSURE); 798 break; 799 800 case 0x32: /* InRange */ 801 switch (field->physical & 0xff) { 802 case 0x21: map_key(BTN_TOOL_MOUSE); break; 803 case 0x22: map_key(BTN_TOOL_FINGER); break; 804 default: map_key(BTN_TOOL_PEN); break; 805 } 806 break; 807 808 case 0x3b: /* Battery Strength */ 809 hidinput_setup_battery(device, HID_INPUT_REPORT, field); 810 usage->type = EV_PWR; 811 return; 812 813 case 0x3c: /* Invert */ 814 map_key_clear(BTN_TOOL_RUBBER); 815 break; 816 817 case 0x3d: /* X Tilt */ 818 map_abs_clear(ABS_TILT_X); 819 break; 820 821 case 0x3e: /* Y Tilt */ 822 map_abs_clear(ABS_TILT_Y); 823 break; 824 825 case 0x33: /* Touch */ 826 case 0x42: /* TipSwitch */ 827 case 0x43: /* TipSwitch2 */ 828 device->quirks &= ~HID_QUIRK_NOTOUCH; 829 map_key_clear(BTN_TOUCH); 830 break; 831 832 case 0x44: /* BarrelSwitch */ 833 map_key_clear(BTN_STYLUS); 834 break; 835 836 case 0x45: /* ERASER */ 837 /* 838 * This event is reported when eraser tip touches the surface. 839 * Actual eraser (BTN_TOOL_RUBBER) is set by Invert usage when 840 * tool gets in proximity. 841 */ 842 map_key_clear(BTN_TOUCH); 843 break; 844 845 case 0x46: /* TabletPick */ 846 case 0x5a: /* SecondaryBarrelSwitch */ 847 map_key_clear(BTN_STYLUS2); 848 break; 849 850 case 0x5b: /* TransducerSerialNumber */ 851 usage->type = EV_MSC; 852 usage->code = MSC_SERIAL; 853 bit = input->mscbit; 854 max = MSC_MAX; 855 break; 856 857 default: goto unknown; 858 } 859 break; 860 861 case HID_UP_TELEPHONY: 862 switch (usage->hid & HID_USAGE) { 863 case 0x2f: map_key_clear(KEY_MICMUTE); break; 864 case 0xb0: map_key_clear(KEY_NUMERIC_0); break; 865 case 0xb1: map_key_clear(KEY_NUMERIC_1); break; 866 case 0xb2: map_key_clear(KEY_NUMERIC_2); break; 867 case 0xb3: map_key_clear(KEY_NUMERIC_3); break; 868 case 0xb4: map_key_clear(KEY_NUMERIC_4); break; 869 case 0xb5: map_key_clear(KEY_NUMERIC_5); break; 870 case 0xb6: map_key_clear(KEY_NUMERIC_6); break; 871 case 0xb7: map_key_clear(KEY_NUMERIC_7); break; 872 case 0xb8: map_key_clear(KEY_NUMERIC_8); break; 873 case 0xb9: map_key_clear(KEY_NUMERIC_9); break; 874 case 0xba: map_key_clear(KEY_NUMERIC_STAR); break; 875 case 0xbb: map_key_clear(KEY_NUMERIC_POUND); break; 876 case 0xbc: map_key_clear(KEY_NUMERIC_A); break; 877 case 0xbd: map_key_clear(KEY_NUMERIC_B); break; 878 case 0xbe: map_key_clear(KEY_NUMERIC_C); break; 879 case 0xbf: map_key_clear(KEY_NUMERIC_D); break; 880 default: goto ignore; 881 } 882 break; 883 884 case HID_UP_CONSUMER: /* USB HUT v1.12, pages 75-84 */ 885 switch (usage->hid & HID_USAGE) { 886 case 0x000: goto ignore; 887 case 0x030: map_key_clear(KEY_POWER); break; 888 case 0x031: map_key_clear(KEY_RESTART); break; 889 case 0x032: map_key_clear(KEY_SLEEP); break; 890 case 0x034: map_key_clear(KEY_SLEEP); break; 891 case 0x035: map_key_clear(KEY_KBDILLUMTOGGLE); break; 892 case 0x036: map_key_clear(BTN_MISC); break; 893 894 case 0x040: map_key_clear(KEY_MENU); break; /* Menu */ 895 case 0x041: map_key_clear(KEY_SELECT); break; /* Menu Pick */ 896 case 0x042: map_key_clear(KEY_UP); break; /* Menu Up */ 897 case 0x043: map_key_clear(KEY_DOWN); break; /* Menu Down */ 898 case 0x044: map_key_clear(KEY_LEFT); break; /* Menu Left */ 899 case 0x045: map_key_clear(KEY_RIGHT); break; /* Menu Right */ 900 case 0x046: map_key_clear(KEY_ESC); break; /* Menu Escape */ 901 case 0x047: map_key_clear(KEY_KPPLUS); break; /* Menu Value Increase */ 902 case 0x048: map_key_clear(KEY_KPMINUS); break; /* Menu Value Decrease */ 903 904 case 0x060: map_key_clear(KEY_INFO); break; /* Data On Screen */ 905 case 0x061: map_key_clear(KEY_SUBTITLE); break; /* Closed Caption */ 906 case 0x063: map_key_clear(KEY_VCR); break; /* VCR/TV */ 907 case 0x065: map_key_clear(KEY_CAMERA); break; /* Snapshot */ 908 case 0x069: map_key_clear(KEY_RED); break; 909 case 0x06a: map_key_clear(KEY_GREEN); break; 910 case 0x06b: map_key_clear(KEY_BLUE); break; 911 case 0x06c: map_key_clear(KEY_YELLOW); break; 912 case 0x06d: map_key_clear(KEY_ASPECT_RATIO); break; 913 914 case 0x06f: map_key_clear(KEY_BRIGHTNESSUP); break; 915 case 0x070: map_key_clear(KEY_BRIGHTNESSDOWN); break; 916 case 0x072: map_key_clear(KEY_BRIGHTNESS_TOGGLE); break; 917 case 0x073: map_key_clear(KEY_BRIGHTNESS_MIN); break; 918 case 0x074: map_key_clear(KEY_BRIGHTNESS_MAX); break; 919 case 0x075: map_key_clear(KEY_BRIGHTNESS_AUTO); break; 920 921 case 0x079: map_key_clear(KEY_KBDILLUMUP); break; 922 case 0x07a: map_key_clear(KEY_KBDILLUMDOWN); break; 923 case 0x07c: map_key_clear(KEY_KBDILLUMTOGGLE); break; 924 925 case 0x082: map_key_clear(KEY_VIDEO_NEXT); break; 926 case 0x083: map_key_clear(KEY_LAST); break; 927 case 0x084: map_key_clear(KEY_ENTER); break; 928 case 0x088: map_key_clear(KEY_PC); break; 929 case 0x089: map_key_clear(KEY_TV); break; 930 case 0x08a: map_key_clear(KEY_WWW); break; 931 case 0x08b: map_key_clear(KEY_DVD); break; 932 case 0x08c: map_key_clear(KEY_PHONE); break; 933 case 0x08d: map_key_clear(KEY_PROGRAM); break; 934 case 0x08e: map_key_clear(KEY_VIDEOPHONE); break; 935 case 0x08f: map_key_clear(KEY_GAMES); break; 936 case 0x090: map_key_clear(KEY_MEMO); break; 937 case 0x091: map_key_clear(KEY_CD); break; 938 case 0x092: map_key_clear(KEY_VCR); break; 939 case 0x093: map_key_clear(KEY_TUNER); break; 940 case 0x094: map_key_clear(KEY_EXIT); break; 941 case 0x095: map_key_clear(KEY_HELP); break; 942 case 0x096: map_key_clear(KEY_TAPE); break; 943 case 0x097: map_key_clear(KEY_TV2); break; 944 case 0x098: map_key_clear(KEY_SAT); break; 945 case 0x09a: map_key_clear(KEY_PVR); break; 946 947 case 0x09c: map_key_clear(KEY_CHANNELUP); break; 948 case 0x09d: map_key_clear(KEY_CHANNELDOWN); break; 949 case 0x0a0: map_key_clear(KEY_VCR2); break; 950 951 case 0x0b0: map_key_clear(KEY_PLAY); break; 952 case 0x0b1: map_key_clear(KEY_PAUSE); break; 953 case 0x0b2: map_key_clear(KEY_RECORD); break; 954 case 0x0b3: map_key_clear(KEY_FASTFORWARD); break; 955 case 0x0b4: map_key_clear(KEY_REWIND); break; 956 case 0x0b5: map_key_clear(KEY_NEXTSONG); break; 957 case 0x0b6: map_key_clear(KEY_PREVIOUSSONG); break; 958 case 0x0b7: map_key_clear(KEY_STOPCD); break; 959 case 0x0b8: map_key_clear(KEY_EJECTCD); break; 960 case 0x0bc: map_key_clear(KEY_MEDIA_REPEAT); break; 961 case 0x0b9: map_key_clear(KEY_SHUFFLE); break; 962 case 0x0bf: map_key_clear(KEY_SLOW); break; 963 964 case 0x0cd: map_key_clear(KEY_PLAYPAUSE); break; 965 case 0x0cf: map_key_clear(KEY_VOICECOMMAND); break; 966 case 0x0e0: map_abs_clear(ABS_VOLUME); break; 967 case 0x0e2: map_key_clear(KEY_MUTE); break; 968 case 0x0e5: map_key_clear(KEY_BASSBOOST); break; 969 case 0x0e9: map_key_clear(KEY_VOLUMEUP); break; 970 case 0x0ea: map_key_clear(KEY_VOLUMEDOWN); break; 971 case 0x0f5: map_key_clear(KEY_SLOW); break; 972 973 case 0x181: map_key_clear(KEY_BUTTONCONFIG); break; 974 case 0x182: map_key_clear(KEY_BOOKMARKS); break; 975 case 0x183: map_key_clear(KEY_CONFIG); break; 976 case 0x184: map_key_clear(KEY_WORDPROCESSOR); break; 977 case 0x185: map_key_clear(KEY_EDITOR); break; 978 case 0x186: map_key_clear(KEY_SPREADSHEET); break; 979 case 0x187: map_key_clear(KEY_GRAPHICSEDITOR); break; 980 case 0x188: map_key_clear(KEY_PRESENTATION); break; 981 case 0x189: map_key_clear(KEY_DATABASE); break; 982 case 0x18a: map_key_clear(KEY_MAIL); break; 983 case 0x18b: map_key_clear(KEY_NEWS); break; 984 case 0x18c: map_key_clear(KEY_VOICEMAIL); break; 985 case 0x18d: map_key_clear(KEY_ADDRESSBOOK); break; 986 case 0x18e: map_key_clear(KEY_CALENDAR); break; 987 case 0x18f: map_key_clear(KEY_TASKMANAGER); break; 988 case 0x190: map_key_clear(KEY_JOURNAL); break; 989 case 0x191: map_key_clear(KEY_FINANCE); break; 990 case 0x192: map_key_clear(KEY_CALC); break; 991 case 0x193: map_key_clear(KEY_PLAYER); break; 992 case 0x194: map_key_clear(KEY_FILE); break; 993 case 0x196: map_key_clear(KEY_WWW); break; 994 case 0x199: map_key_clear(KEY_CHAT); break; 995 case 0x19c: map_key_clear(KEY_LOGOFF); break; 996 case 0x19e: map_key_clear(KEY_COFFEE); break; 997 case 0x19f: map_key_clear(KEY_CONTROLPANEL); break; 998 case 0x1a2: map_key_clear(KEY_APPSELECT); break; 999 case 0x1a3: map_key_clear(KEY_NEXT); break; 1000 case 0x1a4: map_key_clear(KEY_PREVIOUS); break; 1001 case 0x1a6: map_key_clear(KEY_HELP); break; 1002 case 0x1a7: map_key_clear(KEY_DOCUMENTS); break; 1003 case 0x1ab: map_key_clear(KEY_SPELLCHECK); break; 1004 case 0x1ae: map_key_clear(KEY_KEYBOARD); break; 1005 case 0x1b1: map_key_clear(KEY_SCREENSAVER); break; 1006 case 0x1b4: map_key_clear(KEY_FILE); break; 1007 case 0x1b6: map_key_clear(KEY_IMAGES); break; 1008 case 0x1b7: map_key_clear(KEY_AUDIO); break; 1009 case 0x1b8: map_key_clear(KEY_VIDEO); break; 1010 case 0x1bc: map_key_clear(KEY_MESSENGER); break; 1011 case 0x1bd: map_key_clear(KEY_INFO); break; 1012 case 0x1cb: map_key_clear(KEY_ASSISTANT); break; 1013 case 0x201: map_key_clear(KEY_NEW); break; 1014 case 0x202: map_key_clear(KEY_OPEN); break; 1015 case 0x203: map_key_clear(KEY_CLOSE); break; 1016 case 0x204: map_key_clear(KEY_EXIT); break; 1017 case 0x207: map_key_clear(KEY_SAVE); break; 1018 case 0x208: map_key_clear(KEY_PRINT); break; 1019 case 0x209: map_key_clear(KEY_PROPS); break; 1020 case 0x21a: map_key_clear(KEY_UNDO); break; 1021 case 0x21b: map_key_clear(KEY_COPY); break; 1022 case 0x21c: map_key_clear(KEY_CUT); break; 1023 case 0x21d: map_key_clear(KEY_PASTE); break; 1024 case 0x21f: map_key_clear(KEY_FIND); break; 1025 case 0x221: map_key_clear(KEY_SEARCH); break; 1026 case 0x222: map_key_clear(KEY_GOTO); break; 1027 case 0x223: map_key_clear(KEY_HOMEPAGE); break; 1028 case 0x224: map_key_clear(KEY_BACK); break; 1029 case 0x225: map_key_clear(KEY_FORWARD); break; 1030 case 0x226: map_key_clear(KEY_STOP); break; 1031 case 0x227: map_key_clear(KEY_REFRESH); break; 1032 case 0x22a: map_key_clear(KEY_BOOKMARKS); break; 1033 case 0x22d: map_key_clear(KEY_ZOOMIN); break; 1034 case 0x22e: map_key_clear(KEY_ZOOMOUT); break; 1035 case 0x22f: map_key_clear(KEY_ZOOMRESET); break; 1036 case 0x232: map_key_clear(KEY_FULL_SCREEN); break; 1037 case 0x233: map_key_clear(KEY_SCROLLUP); break; 1038 case 0x234: map_key_clear(KEY_SCROLLDOWN); break; 1039 case 0x238: /* AC Pan */ 1040 set_bit(REL_HWHEEL, input->relbit); 1041 map_rel(REL_HWHEEL_HI_RES); 1042 break; 1043 case 0x23d: map_key_clear(KEY_EDIT); break; 1044 case 0x25f: map_key_clear(KEY_CANCEL); break; 1045 case 0x269: map_key_clear(KEY_INSERT); break; 1046 case 0x26a: map_key_clear(KEY_DELETE); break; 1047 case 0x279: map_key_clear(KEY_REDO); break; 1048 1049 case 0x289: map_key_clear(KEY_REPLY); break; 1050 case 0x28b: map_key_clear(KEY_FORWARDMAIL); break; 1051 case 0x28c: map_key_clear(KEY_SEND); break; 1052 1053 case 0x29d: map_key_clear(KEY_KBD_LAYOUT_NEXT); break; 1054 1055 case 0x2c7: map_key_clear(KEY_KBDINPUTASSIST_PREV); break; 1056 case 0x2c8: map_key_clear(KEY_KBDINPUTASSIST_NEXT); break; 1057 case 0x2c9: map_key_clear(KEY_KBDINPUTASSIST_PREVGROUP); break; 1058 case 0x2ca: map_key_clear(KEY_KBDINPUTASSIST_NEXTGROUP); break; 1059 case 0x2cb: map_key_clear(KEY_KBDINPUTASSIST_ACCEPT); break; 1060 case 0x2cc: map_key_clear(KEY_KBDINPUTASSIST_CANCEL); break; 1061 1062 case 0x29f: map_key_clear(KEY_SCALE); break; 1063 1064 default: map_key_clear(KEY_UNKNOWN); 1065 } 1066 break; 1067 1068 case HID_UP_GENDEVCTRLS: 1069 switch (usage->hid) { 1070 case HID_DC_BATTERYSTRENGTH: 1071 hidinput_setup_battery(device, HID_INPUT_REPORT, field); 1072 usage->type = EV_PWR; 1073 return; 1074 } 1075 goto unknown; 1076 1077 case HID_UP_BATTERY: 1078 switch (usage->hid) { 1079 case HID_BAT_ABSOLUTESTATEOFCHARGE: 1080 hidinput_setup_battery(device, HID_INPUT_REPORT, field); 1081 usage->type = EV_PWR; > 1082 device->battery_min = 0; > 1083 device->battery_max = 100; 1084 return; 1085 } 1086 goto unknown; 1087 1088 case HID_UP_HPVENDOR: /* Reported on a Dutch layout HP5308 */ 1089 set_bit(EV_REP, input->evbit); 1090 switch (usage->hid & HID_USAGE) { 1091 case 0x021: map_key_clear(KEY_PRINT); break; 1092 case 0x070: map_key_clear(KEY_HP); break; 1093 case 0x071: map_key_clear(KEY_CAMERA); break; 1094 case 0x072: map_key_clear(KEY_SOUND); break; 1095 case 0x073: map_key_clear(KEY_QUESTION); break; 1096 case 0x080: map_key_clear(KEY_EMAIL); break; 1097 case 0x081: map_key_clear(KEY_CHAT); break; 1098 case 0x082: map_key_clear(KEY_SEARCH); break; 1099 case 0x083: map_key_clear(KEY_CONNECT); break; 1100 case 0x084: map_key_clear(KEY_FINANCE); break; 1101 case 0x085: map_key_clear(KEY_SPORT); break; 1102 case 0x086: map_key_clear(KEY_SHOP); break; 1103 default: goto ignore; 1104 } 1105 break; 1106 1107 case HID_UP_HPVENDOR2: 1108 set_bit(EV_REP, input->evbit); 1109 switch (usage->hid & HID_USAGE) { 1110 case 0x001: map_key_clear(KEY_MICMUTE); break; 1111 case 0x003: map_key_clear(KEY_BRIGHTNESSDOWN); break; 1112 case 0x004: map_key_clear(KEY_BRIGHTNESSUP); break; 1113 default: goto ignore; 1114 } 1115 break; 1116 1117 case HID_UP_MSVENDOR: 1118 goto ignore; 1119 1120 case HID_UP_CUSTOM: /* Reported on Logitech and Apple USB keyboards */ 1121 set_bit(EV_REP, input->evbit); 1122 goto ignore; 1123 1124 case HID_UP_LOGIVENDOR: 1125 /* intentional fallback */ 1126 case HID_UP_LOGIVENDOR2: 1127 /* intentional fallback */ 1128 case HID_UP_LOGIVENDOR3: 1129 goto ignore; 1130 1131 case HID_UP_PID: 1132 switch (usage->hid & HID_USAGE) { 1133 case 0xa4: map_key_clear(BTN_DEAD); break; 1134 default: goto ignore; 1135 } 1136 break; 1137 1138 default: 1139 unknown: 1140 if (field->report_size == 1) { 1141 if (field->report->type == HID_OUTPUT_REPORT) { 1142 map_led(LED_MISC); 1143 break; 1144 } 1145 map_key(BTN_MISC); 1146 break; 1147 } 1148 if (field->flags & HID_MAIN_ITEM_RELATIVE) { 1149 map_rel(REL_MISC); 1150 break; 1151 } 1152 map_abs(ABS_MISC); 1153 break; 1154 } 1155 1156 mapped: 1157 /* Mapping failed, bail out */ 1158 if (!bit) 1159 return; 1160 1161 if (device->driver->input_mapped && 1162 device->driver->input_mapped(device, hidinput, field, usage, 1163 &bit, &max) < 0) { 1164 /* 1165 * The driver indicated that no further generic handling 1166 * of the usage is desired. 1167 */ 1168 return; 1169 } 1170 1171 set_bit(usage->type, input->evbit); 1172 1173 /* 1174 * This part is *really* controversial: 1175 * - HID aims at being generic so we should do our best to export 1176 * all incoming events 1177 * - HID describes what events are, so there is no reason for ABS_X 1178 * to be mapped to ABS_Y 1179 * - HID is using *_MISC+N as a default value, but nothing prevents 1180 * *_MISC+N to overwrite a legitimate even, which confuses userspace 1181 * (for instance ABS_MISC + 7 is ABS_MT_SLOT, which has a different 1182 * processing) 1183 * 1184 * If devices still want to use this (at their own risk), they will 1185 * have to use the quirk HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE, but 1186 * the default should be a reliable mapping. 1187 */ 1188 while (usage->code <= max && test_and_set_bit(usage->code, bit)) { 1189 if (device->quirks & HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE) { 1190 usage->code = find_next_zero_bit(bit, 1191 max + 1, 1192 usage->code); 1193 } else { 1194 device->status |= HID_STAT_DUP_DETECTED; 1195 goto ignore; 1196 } 1197 } 1198 1199 if (usage->code > max) 1200 goto ignore; 1201 1202 if (usage->type == EV_ABS) { 1203 1204 int a = field->logical_minimum; 1205 int b = field->logical_maximum; 1206 1207 if ((device->quirks & HID_QUIRK_BADPAD) && (usage->code == ABS_X || usage->code == ABS_Y)) { 1208 a = field->logical_minimum = 0; 1209 b = field->logical_maximum = 255; 1210 } 1211 1212 if (field->application == HID_GD_GAMEPAD || field->application == HID_GD_JOYSTICK) 1213 input_set_abs_params(input, usage->code, a, b, (b - a) >> 8, (b - a) >> 4); 1214 else input_set_abs_params(input, usage->code, a, b, 0, 0); 1215 1216 input_abs_set_res(input, usage->code, 1217 hidinput_calc_abs_res(field, usage->code)); 1218 1219 /* use a larger default input buffer for MT devices */ 1220 if (usage->code == ABS_MT_POSITION_X && input->hint_events_per_packet == 0) 1221 input_set_events_per_packet(input, 60); 1222 } 1223 1224 if (usage->type == EV_ABS && 1225 (usage->hat_min < usage->hat_max || usage->hat_dir)) { 1226 int i; 1227 for (i = usage->code; i < usage->code + 2 && i <= max; i++) { 1228 input_set_abs_params(input, i, -1, 1, 0, 0); 1229 set_bit(i, input->absbit); 1230 } 1231 if (usage->hat_dir && !field->dpad) 1232 field->dpad = usage->code; 1233 } 1234 1235 /* for those devices which produce Consumer volume usage as relative, 1236 * we emulate pressing volumeup/volumedown appropriate number of times 1237 * in hidinput_hid_event() 1238 */ 1239 if ((usage->type == EV_ABS) && (field->flags & HID_MAIN_ITEM_RELATIVE) && 1240 (usage->code == ABS_VOLUME)) { 1241 set_bit(KEY_VOLUMEUP, input->keybit); 1242 set_bit(KEY_VOLUMEDOWN, input->keybit); 1243 } 1244 1245 if (usage->type == EV_KEY) { 1246 set_bit(EV_MSC, input->evbit); 1247 set_bit(MSC_SCAN, input->mscbit); 1248 } 1249 1250 return; 1251 1252 ignore: 1253 usage->type = 0; 1254 usage->code = 0; 1255 } 1256 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org