From nobody Fri Sep 25 02:02:18 2026 Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0531349EC4D for ; Thu, 17 Sep 2026 21:19:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789680001; cv=none; b=fITuT/38dGeo3Kpgzg+Oh6sNdZwBgRDNO8LoiqeG2PaTDCdczl7Ssr7rEOlUoivv6E8eKcyVni97UzwcNBwCCMsIYYBw7scsvwqdWipHFWWAn6Io/IPP6sZm0b0jrgmSg2ZLEdzxM63vvicpxv0ekimjWa024tGq2ivrpKeN0fA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789680001; c=relaxed/simple; bh=0yG5Mzjj5RRPDhIbFihrV0EOzpaeq5JgcYZ/sNLs0LQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XJHnYNUoyiQaC/h2pr4O72Mhfe9kOBf03ejFLLm+NHPZrVutEvTZyJoH/slUezdCQK85POqShqKO1HT2PGhDlQx0VEdjgJV5DoF0qJKs/ZEOCTAbJQ0njCVj1SdOZhy1W6qLxZz3LnI8ZBL5IxJy5jDxM0a6XoauSm1XCF4BaLE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20251104.gappssmtp.com header.i=@starlabs-systems.20251104.gappssmtp.com header.b=QANsuZGs; arc=none smtp.client-ip=74.125.225.76 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20251104.gappssmtp.com header.i=@starlabs-systems.20251104.gappssmtp.com header.b="QANsuZGs" Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-4843378fb37so7208f8f.3 for ; Thu, 17 Sep 2026 14:19:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20251104.gappssmtp.com; s=20251104; t=1789679996; x=1790284796; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=91ImVwNngQnn0ksChHIZQSGgHwJR1v4uR7PjsKwQ3bY=; b=QANsuZGsVAr/g35glxaH3WidlAiIflSYiJQWA4JDfXAu89gXaEXWQABlxDfPuaZjjG Ax+9lC68i/1CPaeBnMhSmUuMJ7EewLNnoD3lAIDUKHVBYcNdyThKUo1f8g8uUbybDA5A 217wO4FIjVDdGJQd5LhjnTC6EJ2WGOsozBrOL+fEPslMsBOOc2KwtFJ595x1ghF9Yjnq Ou+d4+FIvaifiXwd57a2Sw22SvDf0xRiS6i0/71P/wmdvhlGO2kXSfvT1bOW2Up8PUy3 f1ocDJ7aY7xQFy1rhL11b70ZBUXZTZPmm46fITkxZX5QsYucGIvZaEbUxvl3AmPrm++I mUrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789679996; x=1790284796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=91ImVwNngQnn0ksChHIZQSGgHwJR1v4uR7PjsKwQ3bY=; b=IUzK273h1cbAAqMg6yVUdMVzUAu/6dem8dAjZlBbpATl8TxossaukeA+zTOUrJOhDY oAwj5aYdIN1IWvOa9jcH21czYBVQ2qC3ShHOQIs58DAkTgkYNtR/3uWqxkdIZi8Cv5pb bJ1C3PGXFKDXlKpKGtbcJH3uR36qM1IhIIgKK+I21uxvOlr4cQo5ASGBqVwL+Ink7/u+ 5lQAEWLnL2dF911St2oMJ2IvkrDG9OMbvBdv7CtILX8A5/pD2WKL6JxpJRh5QLR4UzjI y1IIvxFLgObO0HiM9Ljs0zKVtkmnUn9Lpa5M28F7kPARMjKutLpjQlnxyyZkGeLKabuN HLnA== X-Forwarded-Encrypted: i=1; AKwUvByAg25EgZtMFbWmDC/SrNQ9gU5Mo1XYsO8NA4FqxvSkK6/yQNFu7VygHa2THK5EmIT8leZlSh7ZdPASCFU=@vger.kernel.org X-Gm-Message-State: AFuF++kYFn+upB5xzpPMxtDudxkWGZtTEA3WWqEFuqyrRlq8OXTV+fNy NXzHvBv0B9jS7lPDWyw9glPnmCp4sCpg1yMnGPaG/zgSoUGe8MmHWyFUM/gjZ1R9Bw== X-Gm-Gg: AYBFou1GX30epoEaC/2uGQHvLw8Vdr5MSPCtILOxP6mQNV9BEn1UitWIeJQv48gxlZi hPaM1iVum7Ot4yhMZLD94DVlFFLEkmBVuGT2HTKIgCYqrfsg2qfB04D0mxq9Oa6P7WUwdIgFs6K iUWoT2n6MT65QI1CNvKSnVO1WGxv6f6TNy7arZhG2IraliCYNMFVQvR6dXnGJXsvGX0txNNBZpF WXW6Jb67uAYE/U8DPAttchTYgLGcFTapSzJ7iB5U8tJ+Ruv/JcQrqdLf2HW20B9Z8OR/LuSn+86 2/R61KB58UU59Zlr4D7NZwMJuMQPwBijKkxW4v1xWj2X0KrN1JA1xD/y7fRL6u7nngER5tSgpjM ikvlZ/ZQm1ZaImJftV/Gl0McEE+TM+ULI9NZUF8Uz/X97+u5mtvtqvRSUZwnv6ufFXqlowmF8Gy ASOZOQJ+IPdrRVk2ZzEZKdDGXtAPutXjH/saWNg++JJej5H3FfZ0wGv9qHOcQuM1psZcuaQRikQ XxVUwgMimOEQ1DSbjL3GF31Nw== X-Received: by 2002:adf:e19a:0:b0:486:fba3:b95d with SMTP id ffacd0b85a97d-4871e2161fbmr249670f8f.7.1789679995473; Thu, 17 Sep 2026 14:19:55 -0700 (PDT) Received: from fighter ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4870bf1f6cfsm19086828f8f.13.2026.09.17.14.19.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 14:19:54 -0700 (PDT) From: Sean Rhodes To: linux-bluetooth@vger.kernel.org Cc: Greg Kroah-Hartman , Sean Rhodes , Heikki Krogerus , "Chia-Lin Kao (AceLan)" , Xu Yang , Kees Cook , linux-usb@vger.kernel.org, Marcel Holtmann , Luiz Augusto von Dentz , linux-kernel@vger.kernel.org, Paul Menzel Subject: [PATCH v2 1/2] usb: core: check ACPI port power during registration Date: Thu, 17 Sep 2026 22:19:51 +0100 Message-ID: <332acbc859506a0c313a21c14d177a5cde07fb74.1789679981.git.sean@starlabs.systems> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" usb_hub_create_port_device() checks whether a port is power manageable before hdev->maxchild is set. usb_acpi_power_manageable() looks up the hub through usb_hub_to_struct_hub(), which rejects hubs while maxchild is zero. The port device has already been registered and its ACPI companion bound at this point. Check that companion directly. Fixes: 8020c41b39f5 ("usb: core: allow ACPI-managed hard-wired ports to pow= er off") Signed-off-by: Sean Rhodes --- drivers/usb/core/port.c | 7 +++---- drivers/usb/core/usb-acpi.c | 7 +++++++ drivers/usb/core/usb.h | 6 ++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index b4452b665f59..59c3ab31f030 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c @@ -21,8 +21,7 @@ static int usb_port_block_power_off; =20 static const struct attribute_group *port_dev_group[]; =20 -static bool usb_port_allow_power_off(struct usb_device *hdev, - struct usb_hub *hub, +static bool usb_port_allow_power_off(struct usb_hub *hub, struct usb_port *port_dev) { if (hub_is_port_power_switchable(hub)) @@ -32,7 +31,7 @@ static bool usb_port_allow_power_off(struct usb_device *h= dev, return false; =20 return port_dev->connect_type =3D=3D USB_PORT_CONNECT_TYPE_HARD_WIRED && - usb_acpi_power_manageable(hdev, port_dev->portnum - 1); + usb_acpi_port_power_manageable(port_dev); } =20 static ssize_t early_stop_show(struct device *dev, @@ -825,7 +824,7 @@ int usb_hub_create_port_device(struct usb_hub *hub, int= port1) * Keep hidden the ability to enable port-poweroff if neither the * USB hub nor platform firmware can manage downstream port power. */ - if (!usb_port_allow_power_off(hdev, hub, port_dev)) + if (!usb_port_allow_power_off(hub, port_dev)) return 0; =20 /* Attempt to let userspace take over the policy. */ diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c index 489dbdc96f94..5163ef363eef 100644 --- a/drivers/usb/core/usb-acpi.c +++ b/drivers/usb/core/usb-acpi.c @@ -37,6 +37,13 @@ bool usb_acpi_power_manageable(struct usb_device *hdev, = int index) } EXPORT_SYMBOL_GPL(usb_acpi_power_manageable); =20 +bool usb_acpi_port_power_manageable(struct usb_port *port_dev) +{ + struct acpi_device *adev =3D ACPI_COMPANION(&port_dev->dev); + + return adev && acpi_device_power_manageable(adev); +} + #define UUID_USB_CONTROLLER_DSM "ce2ee385-00e6-48cb-9f05-2edb927c4899" #define USB_DSM_DISABLE_U1_U2_FOR_PORT 5 =20 diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h index a9b37aeb515b..356d36ccbdd3 100644 --- a/drivers/usb/core/usb.h +++ b/drivers/usb/core/usb.h @@ -8,6 +8,7 @@ =20 struct usb_hub_descriptor; struct usb_dev_state; +struct usb_port; =20 /* Functions local to drivers/usb/core/ */ =20 @@ -211,7 +212,12 @@ extern int usb_acpi_register(void); extern void usb_acpi_unregister(void); extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, int port1); +bool usb_acpi_port_power_manageable(struct usb_port *port_dev); #else static inline int usb_acpi_register(void) { return 0; }; static inline void usb_acpi_unregister(void) { }; +static inline bool usb_acpi_port_power_manageable(struct usb_port *port_de= v) +{ + return false; +} #endif From nobody Fri Sep 25 02:02:18 2026 Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 886594CA796 for ; Thu, 17 Sep 2026 21:19:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789680001; cv=none; b=pNYYnTAB/s4f0BLwWu3ejjQPsoPQU6ND0xJqnb5OzA0LRw2p+t9C1EqlM+aKe32lFLLPMDV/SpdKbZsc2XtHryAbONXNDxmLIESfvDhV6Me1CTCY7oDny4e048YiNjbbd2nLerwdU0bydcAbMOjRj8LDrRrR8ck60RBOzM0485U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789680001; c=relaxed/simple; bh=LZSYtjDL6rm8OvTl3dPnZdBgXJ4Krf0C8RDMVYvhpEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LFEHcskYAuF4rBlyMTG8rx2QMLYlyZQUeJT95F22bQ67P8ti1FLxpXYzyiamx02sbj4obrcJgX7djo6nbnLk/LeHG6PxtVYzpEikoc60B3IaVdj2sccafG6k3Uk696877lLpW+IH08TFOLtY7xXRyyEdyvPp0cM0V8AXqRJ94ao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20251104.gappssmtp.com header.i=@starlabs-systems.20251104.gappssmtp.com header.b=VYxTMxcp; arc=none smtp.client-ip=74.125.225.76 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20251104.gappssmtp.com header.i=@starlabs-systems.20251104.gappssmtp.com header.b="VYxTMxcp" Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-482f633cd80so8304f8f.2 for ; Thu, 17 Sep 2026 14:19:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20251104.gappssmtp.com; s=20251104; t=1789679996; x=1790284796; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WP+SvTWO/ZPwSJKpdGUFyW4Q/3Pnzr6Y0d7TgXRZl/o=; b=VYxTMxcp7tA5lGA4BEqF26q+tfaT3B6fbUay846gOumc6aJL3f3brTI9W3v4wK+Z5P SktgngZIwTrRcoYepxIwqLd52f7nqW+vWU2CMaV0BwiackXY+aalE+1k847zWBWA/wQe CiMKNT0C/cJ4r7Sx4FGa3tIzX6YWlRPRUulfibfSsxrV2B15Gsc6VCNdzg0Rb0pGVoyy ZyF/lnDp1IETrYQW0mKyVswEFOVswD9b3kXDb0cVDcClBQ32e0uGYFD6UNxRCnOa+dpj tbqF7SXnT3SdeREuKX4Q8EKwCr6NcxghWmCRKgs9AyahdTaTp4p9+d50HHPWFBmV+BEr JaTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789679996; x=1790284796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=WP+SvTWO/ZPwSJKpdGUFyW4Q/3Pnzr6Y0d7TgXRZl/o=; b=LOaXiXA+H9U4P+e4wwHqZJEEQd+ki8ZoIAhx4PmCLZyWA11mc5xfNyqiu6Q5myzTrp WYoNUsPMucSkHAJZwegEoM6nEUAqjljHNY86UdtLgI7O6giqjlKEemlWSNyeE80yz7x6 MajrhUQQZfA9iLGmL0lefbXU/8VBCtMoxl4qPwbHsnjsJvlaVuTkN6x/rakiP0ngUopn qsZGsWfiQWIjI5lh0wFu0wuuBNCykh1hGCYvInKW7zCMaKQI8Ys/QMFAHA/ACYqBDYLT 0dunDo/285nyGLQx2nsfrlxWeO/VoJfXoQv8qNfO92wgO6+eBzT29l+uCpLFQ9CEpyIz RYDg== X-Forwarded-Encrypted: i=1; AKwUvBwnLDwLhn+Fynw7XsSoLWSwzSCrVQapgiRL5kdNIGOaF5vCJw9SGJaHnyIH9QsvWBSBEyf6pP7iGIZpyD8=@vger.kernel.org X-Gm-Message-State: AFuF++lmLSsYinT5SnvjfW7VX3SHOt4TJfTlMMcn6bg9fr+B1Vm+2Qh/ Mj3PxRf+70kDWvC0RW5+KtwOQOfQz3YHo5UCLAKvlTPl5Zd90b5XXELc5WeTcTgVNg== X-Gm-Gg: AYBFou3ip6anNY8NNiIV13JMaqIyT5Ey2g1JHU55D0wWp4ay5JtqnmeNt/YMk+KEUrU qBBoTJF7qIEatmwtJ56bKFM97mqhv9cOzAW9PHOegJBkeMUVm4V/M37Ykz3190+6InoIsRUGnhU GzGOmM9MZR/QoU7FXmRpe5unC9nuijEYocsxIJ1p1i/KQpbiqg4REwtjiYk+bVpZtjKg2NI6rvO QkkgZaAeoBewd9hLPMhIEHCSrovGyjTkXcl/2wjdJInWnCjBwBaQ/YbQRbLceBHO8fc93cb4Mx9 ehVpGZRMRhDVcMD+p1WQDkmrd2migFtnQ6GDh9MRyXM7G5e3FDfjeT2tNue73dQ9Y9fMP29Jk6T bjR5Xfs5olM+Af+oJ3SWgP1+0frZxsSjizmMVYnefmsjZXa6zG6t3HugA05L5PekT+EFwTvvWdr 1glaKZzuwIpTK/VP3QbHT7F/LwCBd5QCgzRDt0vzIigVaHJipB0l1yv0CDNPqAWK1Oief/pQ1Cv 58QWdQTOiYQ3N7Vv4gP0GTjDw== X-Received: by 2002:a05:6000:220f:b0:487:34c:81e with SMTP id ffacd0b85a97d-4871e226b3bmr226024f8f.20.1789679996270; Thu, 17 Sep 2026 14:19:56 -0700 (PDT) Received: from fighter ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4870bf1f6cfsm19086828f8f.13.2026.09.17.14.19.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 14:19:55 -0700 (PDT) From: Sean Rhodes To: linux-bluetooth@vger.kernel.org Cc: Greg Kroah-Hartman , Sean Rhodes , Heikki Krogerus , "Chia-Lin Kao (AceLan)" , Xu Yang , Kees Cook , linux-usb@vger.kernel.org, Marcel Holtmann , Luiz Augusto von Dentz , linux-kernel@vger.kernel.org, Paul Menzel Subject: [PATCH v2 2/2] Bluetooth: btusb: restore powered-off Intel adapters Date: Thu, 17 Sep 2026 22:19:52 +0100 Message-ID: <479fdb2638f34ccb02f35a40a34fcdc7cc41ccdf.1789679981.git.sean@starlabs.systems> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ACPI-managed internal USB ports can lose power while the Bluetooth adapter is closed. The USB core then reset-resumes the device and, because btusb has no reset-resume callback, rebinds its interfaces. For a closed, fixed Intel combined adapter on an ACPI-power-manageable port, preserve the binding and run the Intel setup again when the adapter is next opened. Keep the existing rebind behavior while HCI is running and keep runtime autosuspend blocked for other reset-resume-quirked adapters. Tested on a Star Labs Lite Mk IV with Intel 8087:0aaa. Three Bluetooth off/on cycles reached ACPI D3cold, restored the same hci0 without a USB disconnect, and discovery found nearby devices after resume. Signed-off-by: Sean Rhodes --- drivers/bluetooth/btusb_main.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/bluetooth/btusb_main.c b/drivers/bluetooth/btusb_main.c index be47ac894b6c..4b6ac67f182f 100644 --- a/drivers/bluetooth/btusb_main.c +++ b/drivers/bluetooth/btusb_main.c @@ -2190,6 +2190,16 @@ static void btusb_prepare_reset(struct hci_dev *hdev) usb_kill_anchored_urbs(&data->tx_anchor); } =20 +static bool btusb_intel_acpi_power_manageable(struct btusb_data *data) +{ + return IS_ENABLED(CONFIG_ACPI) && + data->match_id->driver_info & BTUSB_INTEL_COMBINED && + data->udev->dev.removable =3D=3D DEVICE_FIXED && + data->udev->parent && data->udev->portnum && + usb_acpi_power_manageable(data->udev->parent, + data->udev->portnum - 1); +} + static int btusb_close(struct hci_dev *hdev) { struct btusb_data *data =3D hci_get_drvdata(hdev); @@ -4595,6 +4605,9 @@ static int btusb_probe(struct usb_interface *intf, hdev->send =3D btusb_send_frame_intel; hdev->reset =3D btusb_intel_reset; =20 + if (btusb_intel_acpi_power_manageable(data)) + hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP); + if (id->driver_info & BTUSB_INTEL_NO_WBS_SUPPORT) btintel_set_flag(hdev, INTEL_ROM_LEGACY_NO_WBS_SUPPORT); =20 @@ -4912,6 +4925,12 @@ static int btusb_suspend(struct usb_interface *intf,= pm_message_t message) =20 BT_DBG("intf %p", intf); =20 + /* reset_resume is only safe for the Intel ACPI path below. */ + if (PMSG_IS_AUTO(message) && + (data->udev->quirks & USB_QUIRK_RESET_RESUME) && + !btusb_intel_acpi_power_manageable(data)) + return -EBUSY; + /* * It is reported that remote wakeup events could sometimes cause some * adapters completely unresponsive. Resetting the xHCI root hub doesn't @@ -5076,6 +5095,19 @@ static int btusb_resume(struct usb_interface *intf) return err; } =20 +static int btusb_reset_resume(struct usb_interface *intf) +{ + struct btusb_data *data =3D usb_get_intfdata(intf); + + if (!btusb_intel_acpi_power_manageable(data) || + test_bit(HCI_RUNNING, &data->hdev->flags)) { + intf->needs_binding =3D 1; + return 0; + } + + return btusb_resume(intf); +} + #ifdef CONFIG_DEV_COREDUMP static void btusb_coredump(struct device *dev) { @@ -5093,6 +5125,7 @@ static struct usb_driver btusb_driver =3D { .disconnect =3D btusb_disconnect, .suspend =3D pm_ptr(btusb_suspend), .resume =3D pm_ptr(btusb_resume), + .reset_resume =3D pm_ptr(btusb_reset_resume), .id_table =3D btusb_table, .supports_autosuspend =3D 1, .disable_hub_initiated_lpm =3D 1,