From patchwork Sun Apr 17 16:15:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Rojtberg X-Patchwork-Id: 12815974 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9A6E8C433F5 for ; Sun, 17 Apr 2022 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234359AbiDQQSO (ORCPT ); Sun, 17 Apr 2022 12:18:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230246AbiDQQSN (ORCPT ); Sun, 17 Apr 2022 12:18:13 -0400 Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEEAFEBA for ; Sun, 17 Apr 2022 09:15:36 -0700 (PDT) Received: by mail-ed1-x529.google.com with SMTP id c6so15190061edn.8 for ; Sun, 17 Apr 2022 09:15:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+PTCIzUFXMvh4nX+sKRFV4lZmPtgkv+CbjqJ8j1j96Y=; b=C9j4GUdW4ulww20rG7zbDMCn2G0/89IuofZg4QQRoem10DgT36lhZFyQdYAZBGQLQW CiTB2uu1TZAjqbyzoYWx6MM+2KRzYdBxxupGetvFrCsVWNqdMu7ly39G3kp5Qk5aI3QW 3Ek89zOCojldtAykI+tfsSdX4+PvKMYYFbctfyFXt9mMw9T/AP9jcrnXm4t/Lfrqoi5/ wGEKkicluvewC0J5MPlewCdTAwp7XGlIeM1mah4uk4VK8srxMbeu0cwgukpps7YjzpHg 5M/geM4QfQ6NdG5raHsHzEHVlAJIv0TuVyC/EA7aeU6VkWUf9kdRwgXWez11yZQySG7T feeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+PTCIzUFXMvh4nX+sKRFV4lZmPtgkv+CbjqJ8j1j96Y=; b=Co/9vFEk27xFnOon63aUxOEOytrITkqITDAIMrffVbafjnl5qZBIwFzFB7IPXvEdQG tExkUEvnC95HI3lUY/eueTHwTg8djRHVYXYnZouvRqrznWQ+nQuSi7XFUvnnvX9qXIiJ S+1l3jb0bAIrdVuVugBFruG+Cd2nWrwOvr2X4JgOIanKyqKLHI9gDh05H/ksLpTnaxro FYRhymbUcvgM3IGB6je5ZVzKoqXlNK1Hx7K8NMkNaxK65AfvWd0oM3et1Sh1gQVeYfqR 04mYxyyyjElPhUwfjeKcQVbnO+1PWAzHxdc7y7vevo/evDGAo0q0Mgf2/GjbWGTZLGtW 7GKg== X-Gm-Message-State: AOAM533y2BovOrTm9KVzOkLR+VE9fKXfzBIMvY8a8iuD3XScofIifjnb /YDk3igVGDJYxB/bdc38MRe4MCaKl9m7og== X-Google-Smtp-Source: ABdhPJyNCR41GpBxI3CdCtpmwFFBIurTDbueh+KAJXQKFfVefcD+wEYiahMNa/dBfAsL+ZX8drLMeg== X-Received: by 2002:a05:6402:34c7:b0:423:d44a:4c6c with SMTP id w7-20020a05640234c700b00423d44a4c6cmr6266221edc.356.1650212135365; Sun, 17 Apr 2022 09:15:35 -0700 (PDT) Received: from deepwhite.fritz.box ([2001:9e8:2225:cd00:b8d9:eba8:6309:ac66]) by smtp.gmail.com with ESMTPSA id n16-20020a05640204d000b0042062f9f0e1sm5772130edw.15.2022.04.17.09.15.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Apr 2022 09:15:34 -0700 (PDT) From: Pavel Rojtberg X-Google-Original-From: Pavel Rojtberg < rojtberg@gmail.com > To: linux-input@vger.kernel.org, dmitry.torokhov@gmail.com, gregkh@linuxfoundation.org Cc: Pavel Rojtberg , Jasper Poppe , Jeremy Palmer , Ruineka Subject: [PATCH 1/3] Input: xpad - add supported devices as contributed on github Date: Sun, 17 Apr 2022 18:15:24 +0200 Message-Id: <20220417161526.138019-2-rojtberg@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220417161526.138019-1-rojtberg@gmail.com> References: <20220417161526.138019-1-rojtberg@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Pavel Rojtberg This is based on multiple commits at https://github.com/paroj/xpad Signed-off-by: Jasper Poppe Signed-off-by: Jeremy Palmer Signed-off-by: Ruineka Signed-off-by: Pavel Rojtberg --- drivers/input/joystick/xpad.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 53126d9..257fc2c 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -244,6 +244,7 @@ static const struct xpad_device { { 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE }, { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, + { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, @@ -260,6 +261,7 @@ static const struct xpad_device { { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 }, { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, + { 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 }, { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE }, @@ -325,6 +327,7 @@ static const struct xpad_device { { 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 }, + { 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 }, { 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE }, @@ -337,6 +340,8 @@ static const struct xpad_device { { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, + { 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 }, + { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } }; @@ -429,9 +434,11 @@ static const struct usb_device_id xpad_table[] = { { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */ XPAD_XBOXONE_VENDOR(0x0738), /* Mad Catz FightStick TE 2 */ XPAD_XBOX360_VENDOR(0x07ff), /* Mad Catz GamePad */ + XPAD_XBOX360_VENDOR(0x0c12), /* Zeroplus X-Box 360 controllers */ XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ XPAD_XBOXONE_VENDOR(0x0e6f), /* 0x0e6f X-Box One controllers */ XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ + XPAD_XBOX360_VENDOR(0x24c6), /* Hori Controllers */ XPAD_XBOXONE_VENDOR(0x0f0d), /* Hori Controllers */ XPAD_XBOX360_VENDOR(0x1038), /* SteelSeries Controllers */ XPAD_XBOX360_VENDOR(0x11c9), /* Nacon GC100XF */ @@ -453,6 +460,8 @@ static const struct usb_device_id xpad_table[] = { XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */ XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */ XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */ + XPAD_XBOX360_VENDOR(0x2563), /* OneXPlayer Gamepad */ + XPAD_XBOXONE_VENDOR(0x2dc8), /* 8BitDo Pro 2 Wired Controller for Xbox */ { } }; From patchwork Sun Apr 17 16:15:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Rojtberg X-Patchwork-Id: 12815973 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3750C433FE for ; Sun, 17 Apr 2022 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230246AbiDQQSP (ORCPT ); Sun, 17 Apr 2022 12:18:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234357AbiDQQSO (ORCPT ); Sun, 17 Apr 2022 12:18:14 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7D2AEB7 for ; Sun, 17 Apr 2022 09:15:37 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id c64so15173096edf.11 for ; Sun, 17 Apr 2022 09:15:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LHj3AparGalGgxR6slEGd9sJl1ngkHSvFio1a37GdzQ=; b=MaBtsSs6ZnNcGRFM1YUcwOTdcAkoE1JCXLilPyeGwACdBcbaQTfgrn/0qRIV0p0E9V 9cyM4IEqrZ/Z8e6eWQ9QT0bK5vu7EzEztZ3/YkBi8Hom96ieiLDOqTgxVHu+SwPXkcMZ 47I7C0knm5XNWpmiekaswkCmQnLtPbmt+0sHJBPp1zJcJu9uIUxWKupWuA2SiOrUkFOY 6kVa1XoSkZgu7y6aY/GksipWRhqgd+y18ZUPz6OJ0tEyDisWYMWmjgMH/k+sfEbrHuRb OKuJZkpaGze5lHlJkSnhv30P26M3ck61BrZIahVa3ixtAhLPX3oxWHheczbvQH8U7u1x g/tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LHj3AparGalGgxR6slEGd9sJl1ngkHSvFio1a37GdzQ=; b=oWodaCfx2PRP1ZFjBU61uij4bgAdV4lBueq0uMepRI7/ddEln8pL+ZemsqXKginwYd y6UV1lVfUBDbka0B7B8428YBA5Y0lrE7RniB5gGdCnSy2IbSDN37CE1iXeO2K5pK98lo uuoS+KOX02YVUskXVIOFM6i3P9Im4mylR6YzFNfJAi891qhEVlOTJ0RbMIcUabMaSPT3 h56E2fa1pEj0XPJcfE6Oi2EernqazmFxBIJ9f2j8Gjatkxj6npAtlNUln6PS2eePqfwr gAmmlV8aayPoiVOGdWXvxKgrt1YzXpKRuYOrY27GhoRDYiVIMp29//w/RYT/K9cHb638 seuQ== X-Gm-Message-State: AOAM533KHGuZJLs6KMdhnQZAZiA2gcqFSwyzhk2OpkhfTlFmFJBdS8XP LSrY9Eha/wGCyLW4Ds+4vg9h4ufLyJdqoA== X-Google-Smtp-Source: ABdhPJyO46igvgKExV59BVQU2HzCySeImPbJZZrqZ9peUD1kSWt99qGhYNGqS6CZ+6WkA45Ek8MLJA== X-Received: by 2002:a05:6402:845:b0:421:fcb5:55de with SMTP id b5-20020a056402084500b00421fcb555demr8468135edz.124.1650212136473; Sun, 17 Apr 2022 09:15:36 -0700 (PDT) Received: from deepwhite.fritz.box ([2001:9e8:2225:cd00:b8d9:eba8:6309:ac66]) by smtp.gmail.com with ESMTPSA id n16-20020a05640204d000b0042062f9f0e1sm5772130edw.15.2022.04.17.09.15.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Apr 2022 09:15:35 -0700 (PDT) From: Pavel Rojtberg X-Google-Original-From: Pavel Rojtberg < rojtberg@gmail.com > To: linux-input@vger.kernel.org, dmitry.torokhov@gmail.com, gregkh@linuxfoundation.org Cc: Cameron Gutman , Pavel Rojtberg Subject: [PATCH 2/3] Input: xpad - fix wireless 360 controller breaking after suspend Date: Sun, 17 Apr 2022 18:15:25 +0200 Message-Id: <20220417161526.138019-3-rojtberg@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220417161526.138019-1-rojtberg@gmail.com> References: <20220417161526.138019-1-rojtberg@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Cameron Gutman Suspending and resuming the system can sometimes cause the out URB to get hung after a reset_resume. This causes LED setting and force feedback to break on resume. To avoid this, just drop the reset_resume callback so the USB core rebinds xpad to the wireless pads on resume if a reset happened. A nice side effect of this change is the LED ring on wireless controllers is now set correctly on system resume. Signed-off-by: Cameron Gutman Signed-off-by: Pavel Rojtberg --- drivers/input/joystick/xpad.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 257fc2c..7640cbb 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -1981,7 +1981,6 @@ static struct usb_driver xpad_driver = { .disconnect = xpad_disconnect, .suspend = xpad_suspend, .resume = xpad_resume, - .reset_resume = xpad_resume, .id_table = xpad_table, }; From patchwork Sun Apr 17 16:15:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Rojtberg X-Patchwork-Id: 12815975 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00281C433EF for ; Sun, 17 Apr 2022 16:15:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234357AbiDQQSP (ORCPT ); Sun, 17 Apr 2022 12:18:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234358AbiDQQSO (ORCPT ); Sun, 17 Apr 2022 12:18:14 -0400 Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E63E6EBA for ; Sun, 17 Apr 2022 09:15:38 -0700 (PDT) Received: by mail-ed1-x536.google.com with SMTP id g20so15181486edw.6 for ; Sun, 17 Apr 2022 09:15:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/RjKZFEieINWzujg0f1awk2MpC556RjBQaeOJjIhsng=; b=eL0AiP3crR09i7K6jKY0Bw6G/+98O/cB8yCXK372sXfQJ+ZXAYngrqIDsFYzJLHQgp pEheGpHLWjmjoWKZUBu0PmocjLp5mAbI999/eRnWikMG7QbxOVFA6CZVx2sm8CH1/GG/ cT+FtCkW6tjF5GYd7eKDTetzkXewwssCc7F65lRBkG612/Ad4JBYbHuJtYzgyj+UtRdD 8QpHQlNPn6e1U634xmm9DbTranocCwS1hQs4/MUdjuefz3ObWQbrJmkeHuJJCzutEw6B 5JKxQ9eybLVKxVU3Ii9jW1mS3RHNpmcK2L4y1CLpThIUodO+rncbXNaADz9T9judKC2z 3mEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/RjKZFEieINWzujg0f1awk2MpC556RjBQaeOJjIhsng=; b=4RKNmbisw3qIJ0dqjSkVfXLdtZEwyCNmIPU608hwwnhMR/97wd4pe3/E3Vp3/M4MBm hQJ/MEvOdmh7bqyYr3nzZi58nITLTTpokbO2dRbYe6x2AdHNs8XegRg7RGvy/n+Zdn6x Mdrm9Qtc2EWGpjskMl+45XyfWsZGENXpNlb3H3MaFZl1F80aUJOVNLICJEFiok6w1lMM Gx/mfsiNXw/xm8uHmvgjVfAlFugknSYXR3ubgYbQPL7ngSsSX0A9UeaCf5Cq+VNpCQD3 NCEz5DuK9bZ7yAwZvSZf4IEO84N4SDyJfmMYawnaNx0o6XEn3F2nYI9nLGgQGyE9niax EJXA== X-Gm-Message-State: AOAM533RzbYBspXQnZBWKS3Iq+CWm6TPVa0u3rhH+uW/SBrZIpBnPNiD gakE7FX5XVq9bYeCXZj3cZNSoZzhmkpnEw== X-Google-Smtp-Source: ABdhPJzqsRpLRS2ZYkIsI7DS+RvyPI/78MvA7zfLFrDjUzeYbytAsBho1YjBpGgo6k8VF1/x5FXxZQ== X-Received: by 2002:a50:baa1:0:b0:418:849a:c66a with SMTP id x30-20020a50baa1000000b00418849ac66amr8520389ede.234.1650212137454; Sun, 17 Apr 2022 09:15:37 -0700 (PDT) Received: from deepwhite.fritz.box ([2001:9e8:2225:cd00:b8d9:eba8:6309:ac66]) by smtp.gmail.com with ESMTPSA id n16-20020a05640204d000b0042062f9f0e1sm5772130edw.15.2022.04.17.09.15.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Apr 2022 09:15:37 -0700 (PDT) From: Pavel Rojtberg X-Google-Original-From: Pavel Rojtberg < rojtberg@gmail.com > To: linux-input@vger.kernel.org, dmitry.torokhov@gmail.com, gregkh@linuxfoundation.org Cc: Pavel Rojtberg , lawl Subject: [PATCH 3/3] Input: xpad - Poweroff XBOX360W on mode button long press Date: Sun, 17 Apr 2022 18:15:26 +0200 Message-Id: <20220417161526.138019-4-rojtberg@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220417161526.138019-1-rojtberg@gmail.com> References: <20220417161526.138019-1-rojtberg@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Pavel Rojtberg Newer gamepads turn themselves off when the mode button is held down. For XBOX360W gamepads we must do this this in the driver. Signed-off-by: lawl Signed-off-by: Pavel Rojtberg --- drivers/input/joystick/xpad.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 7640cbb..a9894a6 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -620,11 +620,13 @@ struct usb_xpad { int pad_nr; /* the order x360 pads were attached */ const char *name; /* name of the device */ struct work_struct work; /* init/remove device from callback */ + time64_t mode_btn_down_ts; }; static int xpad_init_input(struct usb_xpad *xpad); static void xpad_deinit_input(struct usb_xpad *xpad); static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num); +static void xpad360w_poweroff_controller(struct usb_xpad *xpad); /* * xpad_process_packet @@ -776,6 +778,23 @@ static void xpad360_process_packet(struct usb_xpad *xpad, struct input_dev *dev, } input_sync(dev); + + /* XBOX360W controllers can't be turned off without driver assistance */ + if (xpad->xtype == XTYPE_XBOX360W) { + if (xpad->mode_btn_down_ts > 0 + && xpad->pad_present + && (ktime_get_seconds() - xpad->mode_btn_down_ts) >= 5) { + xpad360w_poweroff_controller(xpad); + xpad->mode_btn_down_ts = 0; + return; + } + + /* mode button down/up */ + if (data[3] & 0x04) + xpad->mode_btn_down_ts = ktime_get_seconds(); + else + xpad->mode_btn_down_ts = 0; + } } static void xpad_presence_work(struct work_struct *work)