[PATCH] Bluetooth: hci_sync: fix BR/EDR wakeup bug

15013537245@163.com posted 1 patch 2 years ago
There is a newer version of this series
net/bluetooth/hci_sync.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
[PATCH] Bluetooth: hci_sync: fix BR/EDR wakeup bug
Posted by 15013537245@163.com 2 years ago
From: "clancy.shang" <clancy.shang@quectel.com>

Steam deck in suspending state, but bt controller send hci
mode change event to host. cause Steam Deck can't into sleep.

Signed-off-by: clancy.shang <clancy.shang@quectel.com>
---
 net/bluetooth/hci_sync.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index a15ab0b874a9..a26a58cb2c38 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -3800,12 +3800,14 @@ static int hci_set_event_mask_sync(struct hci_dev *hdev)
 	if (lmp_bredr_capable(hdev)) {
 		events[4] |= 0x01; /* Flow Specification Complete */
 
-		/* Don't set Disconnect Complete when suspended as that
-		 * would wakeup the host when disconnecting due to
-		 * suspend.
+		/* Don't set Disconnect Complete and mode change when
+		 * suspended as that would wakeup the host when disconnecting
+		 * due to suspend.
 		 */
-		if (hdev->suspended)
+		if (hdev->suspended) {
 			events[0] &= 0xef;
+			events[2] &= 0xf7;
+		}
 	} else {
 		/* Use a different default for LE-only devices */
 		memset(events, 0, sizeof(events));
-- 
2.25.1
Re: [PATCH] Bluetooth: hci_sync: fix BR/EDR wakeup bug
Posted by Paul Menzel 2 years ago
Dear Clancy,


Thank you for the patch.

Am 27.11.23 um 10:05 schrieb 15013537245@163.com:
> From: "clancy.shang" <clancy.shang@quectel.com>

It’d be great, if you spelled your name “Clancy Shang”.

     $ git config --global user.name "Clancy Shang"
     $ git commit -s --amend --author="Clancy Shang 
<clancy.shang@quectel.com>"

> Steam deck in suspending state, but bt controller send hci
> mode change event to host. cause Steam Deck can't into sleep.

Could you please elaborate on the fix little more, for example, mention 
the mode change (0xf7).

> Signed-off-by: clancy.shang <clancy.shang@quectel.com>
> ---
>   net/bluetooth/hci_sync.c | 10 ++++++----
>   1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index a15ab0b874a9..a26a58cb2c38 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -3800,12 +3800,14 @@ static int hci_set_event_mask_sync(struct hci_dev *hdev)
>   	if (lmp_bredr_capable(hdev)) {
>   		events[4] |= 0x01; /* Flow Specification Complete */
>   
> -		/* Don't set Disconnect Complete when suspended as that
> -		 * would wakeup the host when disconnecting due to
> -		 * suspend.
> +		/* Don't set Disconnect Complete and mode change when
> +		 * suspended as that would wakeup the host when disconnecting
> +		 * due to suspend.
>   		 */
> -		if (hdev->suspended)
> +		if (hdev->suspended) {
>   			events[0] &= 0xef;
> +			events[2] &= 0xf7;
> +		}
>   	} else {
>   		/* Use a different default for LE-only devices */
>   		memset(events, 0, sizeof(events));


Kind regards,

Paul Menzel
Re: [PATCH] Bluetooth: hci_sync: fix BR/EDR wakeup bug
Posted by Luiz Augusto von Dentz 2 years ago
Hi,

On Mon, Nov 27, 2023 at 4:06 AM <15013537245@163.com> wrote:
>
> From: "clancy.shang" <clancy.shang@quectel.com>
>
> Steam deck in suspending state, but bt controller send hci
> mode change event to host. cause Steam Deck can't into sleep.

It probably makes sense to add the btmon trace showing the issue.

> Signed-off-by: clancy.shang <clancy.shang@quectel.com>
> ---
>  net/bluetooth/hci_sync.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index a15ab0b874a9..a26a58cb2c38 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -3800,12 +3800,14 @@ static int hci_set_event_mask_sync(struct hci_dev *hdev)
>         if (lmp_bredr_capable(hdev)) {
>                 events[4] |= 0x01; /* Flow Specification Complete */
>
> -               /* Don't set Disconnect Complete when suspended as that
> -                * would wakeup the host when disconnecting due to
> -                * suspend.
> +               /* Don't set Disconnect Complete and mode change when
> +                * suspended as that would wakeup the host when disconnecting
> +                * due to suspend.
>                  */
> -               if (hdev->suspended)
> +               if (hdev->suspended) {
>                         events[0] &= 0xef;
> +                       events[2] &= 0xf7;
> +               }
>         } else {
>                 /* Use a different default for LE-only devices */
>                 memset(events, 0, sizeof(events));
> --
> 2.25.1
>


-- 
Luiz Augusto von Dentz