summary refs log tree commit diff
diff options
context:
space:
mode:
authorRolando Roca <rolandor@valvesoftware.com>2023-09-20 14:36:38 -0700
committerChristian Marcheselli <christianm@valvesoftware.com>2023-11-09 10:47:59 -0800
commit69be18f81e69dfa29b0304c956c27a6ccb510e71 (patch)
tree6fea09fc1bfe95b811af940534c0737c39911ea0
parent58dc35e5b1636353d8be27c1a30eaf3c584bf917 (diff)
downloadlinux-69be18f81e69dfa29b0304c956c27a6ccb510e71.tar.gz
[Zhongjun.yu][BT]: Added host changes related to the BR/EDR/LE gamepad wake-up.
<Change Type>: FR(Feature Request)

<<< Test Notes >>>
<Test-Proposal>:
1)BT function(power on/restart/connect/disconnect/iop)
2)BT BR/EDR gamepad wakeup function
3)BT BLE gamepad wakeup function
<Stress-Test>: Y
-rw-r--r--drivers/bluetooth/hci_qca.c3
-rw-r--r--net/bluetooth/hci_sync.c8
2 files changed, 7 insertions, 4 deletions
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index a345cb5318ba..e7361dfe858a 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -1770,7 +1770,8 @@ retry:
 		qca_debugfs_init(hdev);
 		hu->hdev->hw_error = qca_hw_error;
 		hu->hdev->cmd_timeout = qca_cmd_timeout;
-		hu->hdev->wakeup = qca_wakeup;
+		if (device_can_wakeup(hu->serdev->ctrl->dev.parent))
+			hu->hdev->wakeup = qca_wakeup;
 	} else if (ret == -ENOENT) {
 		/* No patch/nvm-config found, run with original fw/config */
 		set_bit(QCA_ROM_FW, &qca->flags);
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index 2ae038dfc39f..ad1fd9ee4d88 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -3785,12 +3785,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
+		/* 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));