CC: [email protected] CC: [email protected] CC: [email protected] TO: "Daniel J. Ogorchock" <[email protected]> CC: Jiri Kosina <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 8ab774587903771821b59471cc723bba6d893942 commit: c4eae84feff3e68c2f385aa10faea4a96791e7ad HID: nintendo: add rumble support date: 3 weeks ago :::::: branch date: 2 days ago :::::: commit date: 3 weeks ago config: riscv-randconfig-c006-20211104 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 847a6807332b13f43704327c2d30103ec0347c77) 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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c4eae84feff3e68c2f385aa10faea4a96791e7ad git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout c4eae84feff3e68c2f385aa10faea4a96791e7ad # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ kernel/torture.c:342:2: note: Assuming 'cpu' is >= 'nr_cpu_ids' for_each_online_cpu(cpu) ^ include/linux/cpumask.h:789:36: note: expanded from macro 'for_each_online_cpu' #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/cpumask.h:243:3: note: expanded from macro 'for_each_cpu' (cpu) < nr_cpu_ids;) ^~~~~~~~~~~~~~~~~~ kernel/torture.c:342:2: note: Loop condition is false. Execution continues on line 344 for_each_online_cpu(cpu) ^ include/linux/cpumask.h:789:36: note: expanded from macro 'for_each_online_cpu' #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) ^ include/linux/cpumask.h:241:2: note: expanded from macro 'for_each_cpu' for ((cpu) = -1; \ ^ kernel/torture.c:344:2: note: Taking true branch WARN_ON(maxcpu < 0); ^ include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON' if (unlikely(__ret_warn_on)) \ ^ kernel/torture.c:344:2: note: Loop condition is false. Exiting loop WARN_ON(maxcpu < 0); ^ include/asm-generic/bug.h:123:3: note: expanded from macro 'WARN_ON' __WARN(); \ ^ include/asm-generic/bug.h:96:19: note: expanded from macro '__WARN' #define __WARN() __WARN_FLAGS(BUGFLAG_TAINT(TAINT_WARN)) ^ arch/riscv/include/asm/bug.h:79:29: note: expanded from macro '__WARN_FLAGS' #define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags)) ^ arch/riscv/include/asm/bug.h:53:32: note: expanded from macro '__BUG_FLAGS' #define __BUG_FLAGS(flags) \ ^ kernel/torture.c:346:6: note: 'maxcpu' is not equal to 0 if (maxcpu == 0) { ^~~~~~ kernel/torture.c:346:2: note: Taking false branch if (maxcpu == 0) { ^ kernel/torture.c:351:6: note: Assuming 'onoff_holdoff' is <= 0 if (onoff_holdoff > 0) { ^~~~~~~~~~~~~~~~~ kernel/torture.c:351:2: note: Taking false branch if (onoff_holdoff > 0) { ^ kernel/torture.c:356:10: note: Calling 'torture_must_stop' while (!torture_must_stop()) { ^~~~~~~~~~~~~~~~~~~ kernel/torture.c:889:9: note: Left side of '||' is false return torture_must_stop_irq() || kthread_should_stop(); ^ kernel/torture.c:889:36: note: Value assigned to 'disable_onoff_at_boot', which participates in a condition later return torture_must_stop_irq() || kthread_should_stop(); ^~~~~~~~~~~~~~~~~~~~~ kernel/torture.c:889:2: note: Returning value, which participates in a condition later return torture_must_stop_irq() || kthread_should_stop(); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/torture.c:356:10: note: Returning from 'torture_must_stop' while (!torture_must_stop()) { ^~~~~~~~~~~~~~~~~~~ kernel/torture.c:356:9: note: Assuming the condition is true while (!torture_must_stop()) { ^~~~~~~~~~~~~~~~~~~~ kernel/torture.c:356:2: note: Loop condition is true. Entering loop body while (!torture_must_stop()) { ^ kernel/torture.c:357:7: note: Assuming 'disable_onoff_at_boot' is false if (disable_onoff_at_boot && !rcu_inkernel_boot_has_ended()) { ^~~~~~~~~~~~~~~~~~~~~ kernel/torture.c:357:29: note: Left side of '&&' is false if (disable_onoff_at_boot && !rcu_inkernel_boot_has_ended()) { ^ kernel/torture.c:361:38: note: Division by zero cpu = (torture_random(&rand) >> 4) % (maxcpu + 1); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. Suppressed 10 warnings (10 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 46 warnings generated. >> drivers/hid/hid-nintendo.c:616:16: warning: Value stored to 'msecs' during >> its initialization is never read [clang-analyzer-deadcode.DeadStores] unsigned long msecs = jiffies_to_msecs(jiffies); ^~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hid/hid-nintendo.c:616:16: note: Value stored to 'msecs' during its initialization is never read unsigned long msecs = jiffies_to_msecs(jiffies); ^~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 45 warnings (7 in non-user code, 38 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. include/linux/hid.h:1007:9: warning: Access to field 'name' results in a dereference of a null pointer (loaded from variable 'input') [clang-analyzer-core.NullDereference] input->name, c, type); ^ drivers/hid/hid-petalynx.c:41:6: note: Assuming the condition is true if ((usage->hid & HID_USAGE_PAGE) == HID_UP_LOGIVENDOR) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hid/hid-petalynx.c:41:2: note: Taking true branch if ((usage->hid & HID_USAGE_PAGE) == HID_UP_LOGIVENDOR) { ^ drivers/hid/hid-petalynx.c:42:3: note: Control jumps to 'case 90:' at line 43 switch (usage->hid & HID_USAGE) { ^ drivers/hid/hid-petalynx.c:43:15: note: Calling 'hid_map_usage_clear' case 0x05a: pl_map_key_clear(KEY_TEXT); break; ^ drivers/hid/hid-petalynx.c:35:29: note: expanded from macro 'pl_map_key_clear' #define pl_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/hid.h:1035:2: note: Calling 'hid_map_usage' hid_map_usage(hidinput, usage, bit, max, type, c); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/hid.h:982:2: note: 'input' initialized here struct input_dev *input = hidinput->input; ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/hid.h:986:2: note: Control jumps to 'case 1:' at line 995 switch (type) { ^ include/linux/hid.h:998:3: note: Execution continues on line 1005 break; ^ include/linux/hid.h:1005:15: note: 'c' is <= 'limit' if (unlikely(c > limit || !bmap)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/hid.h:1005:15: note: Left side of '||' is false if (unlikely(c > limit || !bmap)) { ^ include/linux/hid.h:1005:28: note: Assuming 'bmap' is null if (unlikely(c > limit || !bmap)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/hid.h:1005:28: note: Assuming pointer value is null if (unlikely(c > limit || !bmap)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/hid.h:1005:2: note: Taking true branch if (unlikely(c > limit || !bmap)) { ^ include/linux/hid.h:1006:3: note: Assuming the condition is true pr_warn_ratelimited("%s: Invalid code %d type %d\n", ^ include/linux/printk.h:656:2: note: expanded from macro 'pr_warn_ratelimited' printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/printk.h:639:6: note: expanded from macro 'printk_ratelimited' if (__ratelimit(&_rs)) \ ^~~~~~~~~~~~~~~~~ include/linux/ratelimit_types.h:41:28: note: expanded from macro '__ratelimit' #define __ratelimit(state) ___ratelimit(state, __func__) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/hid.h:1006:3: note: Taking true branch pr_warn_ratelimited("%s: Invalid code %d type %d\n", ^ include/linux/printk.h:656:2: note: expanded from macro 'pr_warn_ratelimited' printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:639:2: note: expanded from macro 'printk_ratelimited' if (__ratelimit(&_rs)) \ ^ include/linux/hid.h:1006:3: note: Left side of '&&' is true pr_warn_ratelimited("%s: Invalid code %d type %d\n", ^ include/linux/printk.h:656:2: note: expanded from macro 'pr_warn_ratelimited' printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:640:3: note: expanded from macro 'printk_ratelimited' printk(fmt, ##__VA_ARGS__); \ ^ include/linux/printk.h:446:26: note: expanded from macro 'printk' #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) vim +/msecs +616 drivers/hid/hid-nintendo.c 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 607 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 608 static void joycon_parse_report(struct joycon_ctlr *ctlr, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 609 struct joycon_input_report *rep) 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 610 { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 611 struct input_dev *dev = ctlr->input; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 612 unsigned long flags; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 613 u8 tmp; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 614 u32 btns; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 615 u32 id = ctlr->hdev->product; c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 @616 unsigned long msecs = jiffies_to_msecs(jiffies); c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 617 c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 618 spin_lock_irqsave(&ctlr->lock, flags); c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 619 if (IS_ENABLED(CONFIG_NINTENDO_FF) && rep->vibrator_report && c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 620 (msecs - ctlr->rumble_msecs) >= JC_RUMBLE_PERIOD_MS) c4eae84feff3e6 Daniel J. Ogorchock 2021-09-11 621 queue_work(ctlr->rumble_queue, &ctlr->rumble_worker); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 622 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 623 /* Parse the battery status */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 624 tmp = rep->bat_con; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 625 ctlr->host_powered = tmp & BIT(0); 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 626 ctlr->battery_charging = tmp & BIT(4); 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 627 tmp = tmp >> 5; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 628 switch (tmp) { 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 629 case 0: /* empty */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 630 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 631 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 632 case 1: /* low */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 633 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_LOW; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 634 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 635 case 2: /* medium */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 636 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 637 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 638 case 3: /* high */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 639 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 640 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 641 case 4: /* full */ 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 642 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_FULL; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 643 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 644 default: 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 645 ctlr->battery_capacity = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 646 hid_warn(ctlr->hdev, "Invalid battery status\n"); 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 647 break; 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 648 } 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 649 spin_unlock_irqrestore(&ctlr->lock, flags); 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 650 08ebba5c270350 Daniel J. Ogorchock 2021-09-11 651 /* Parse the buttons and sticks */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 652 btns = hid_field_extract(ctlr->hdev, rep->button_status, 0, 24); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 653 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 654 if (id != USB_DEVICE_ID_NINTENDO_JOYCONR) { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 655 u16 raw_x; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 656 u16 raw_y; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 657 s32 x; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 658 s32 y; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 659 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 660 /* get raw stick values */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 661 raw_x = hid_field_extract(ctlr->hdev, rep->left_stick, 0, 12); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 662 raw_y = hid_field_extract(ctlr->hdev, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 663 rep->left_stick + 1, 4, 12); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 664 /* map the stick values */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 665 x = joycon_map_stick_val(&ctlr->left_stick_cal_x, raw_x); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 666 y = -joycon_map_stick_val(&ctlr->left_stick_cal_y, raw_y); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 667 /* report sticks */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 668 input_report_abs(dev, ABS_X, x); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 669 input_report_abs(dev, ABS_Y, y); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 670 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 671 /* report buttons */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 672 input_report_key(dev, BTN_TL, btns & JC_BTN_L); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 673 input_report_key(dev, BTN_TL2, btns & JC_BTN_ZL); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 674 input_report_key(dev, BTN_SELECT, btns & JC_BTN_MINUS); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 675 input_report_key(dev, BTN_THUMBL, btns & JC_BTN_LSTICK); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 676 input_report_key(dev, BTN_Z, btns & JC_BTN_CAP); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 677 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 678 if (id != USB_DEVICE_ID_NINTENDO_PROCON) { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 679 /* Report the S buttons as the non-existent triggers */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 680 input_report_key(dev, BTN_TR, btns & JC_BTN_SL_L); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 681 input_report_key(dev, BTN_TR2, btns & JC_BTN_SR_L); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 682 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 683 /* Report d-pad as digital buttons for the joy-cons */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 684 input_report_key(dev, BTN_DPAD_DOWN, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 685 btns & JC_BTN_DOWN); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 686 input_report_key(dev, BTN_DPAD_UP, btns & JC_BTN_UP); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 687 input_report_key(dev, BTN_DPAD_RIGHT, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 688 btns & JC_BTN_RIGHT); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 689 input_report_key(dev, BTN_DPAD_LEFT, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 690 btns & JC_BTN_LEFT); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 691 } else { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 692 int hatx = 0; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 693 int haty = 0; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 694 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 695 /* d-pad x */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 696 if (btns & JC_BTN_LEFT) 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 697 hatx = -1; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 698 else if (btns & JC_BTN_RIGHT) 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 699 hatx = 1; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 700 input_report_abs(dev, ABS_HAT0X, hatx); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 701 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 702 /* d-pad y */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 703 if (btns & JC_BTN_UP) 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 704 haty = -1; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 705 else if (btns & JC_BTN_DOWN) 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 706 haty = 1; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 707 input_report_abs(dev, ABS_HAT0Y, haty); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 708 } 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 709 } 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 710 if (id != USB_DEVICE_ID_NINTENDO_JOYCONL) { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 711 u16 raw_x; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 712 u16 raw_y; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 713 s32 x; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 714 s32 y; 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 715 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 716 /* get raw stick values */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 717 raw_x = hid_field_extract(ctlr->hdev, rep->right_stick, 0, 12); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 718 raw_y = hid_field_extract(ctlr->hdev, 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 719 rep->right_stick + 1, 4, 12); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 720 /* map stick values */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 721 x = joycon_map_stick_val(&ctlr->right_stick_cal_x, raw_x); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 722 y = -joycon_map_stick_val(&ctlr->right_stick_cal_y, raw_y); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 723 /* report sticks */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 724 input_report_abs(dev, ABS_RX, x); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 725 input_report_abs(dev, ABS_RY, y); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 726 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 727 /* report buttons */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 728 input_report_key(dev, BTN_TR, btns & JC_BTN_R); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 729 input_report_key(dev, BTN_TR2, btns & JC_BTN_ZR); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 730 if (id != USB_DEVICE_ID_NINTENDO_PROCON) { 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 731 /* Report the S buttons as the non-existent triggers */ 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 732 input_report_key(dev, BTN_TL, btns & JC_BTN_SL_R); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 733 input_report_key(dev, BTN_TL2, btns & JC_BTN_SR_R); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 734 } 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 735 input_report_key(dev, BTN_START, btns & JC_BTN_PLUS); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 736 input_report_key(dev, BTN_THUMBR, btns & JC_BTN_RSTICK); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 737 input_report_key(dev, BTN_MODE, btns & JC_BTN_HOME); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 738 input_report_key(dev, BTN_WEST, btns & JC_BTN_Y); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 739 input_report_key(dev, BTN_NORTH, btns & JC_BTN_X); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 740 input_report_key(dev, BTN_EAST, btns & JC_BTN_A); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 741 input_report_key(dev, BTN_SOUTH, btns & JC_BTN_B); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 742 } 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 743 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 744 input_sync(dev); 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 745 } 2af16c1f846bd6 Daniel J. Ogorchock 2021-09-11 746 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
