[PATCH 146/379][SRU][OEM-5.6] Bluetooth: hci_qca: Only remove TX clock vote after TX is completed
You-Sheng Yang
vicamo.yang at canonical.com
Wed Dec 23 08:47:59 UTC 2020
From: Matthias Kaehlcke <mka at chromium.org>
BugLink: https://bugs.launchpad.net/bugs/1879633
qca_suspend() removes the vote for the UART TX clock after
writing an IBS sleep request to the serial buffer. This is
not a good idea since there is no guarantee that the request
has been sent at this point. Instead remove the vote after
successfully entering IBS sleep. This also fixes the issue
of the vote being removed in case of an aborted suspend due
to a failure of entering IBS sleep.
Fixes: 41d5b25fed0a0 ("Bluetooth: hci_qca: add PM support")
Signed-off-by: Matthias Kaehlcke <mka at chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit at chromium.org>
Signed-off-by: Marcel Holtmann <marcel at holtmann.org>
(cherry picked from commit eff981f6579d5797d68d27afc0eede529ac8778a)
Signed-off-by: You-Sheng Yang <vicamo.yang at canonical.com>
---
drivers/bluetooth/hci_qca.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 997ddab26a33..bce290bbf22d 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -2081,8 +2081,6 @@ static int __maybe_unused qca_suspend(struct device *dev)
qca->tx_ibs_state = HCI_IBS_TX_ASLEEP;
qca->ibs_sent_slps++;
-
- qca_wq_serial_tx_clock_vote_off(&qca->ws_tx_vote_off);
break;
case HCI_IBS_TX_ASLEEP:
@@ -2110,8 +2108,10 @@ static int __maybe_unused qca_suspend(struct device *dev)
qca->rx_ibs_state == HCI_IBS_RX_ASLEEP,
msecs_to_jiffies(IBS_BTSOC_TX_IDLE_TIMEOUT_MS));
- if (ret > 0)
+ if (ret > 0) {
+ qca_wq_serial_tx_clock_vote_off(&qca->ws_tx_vote_off);
return 0;
+ }
if (ret == 0)
ret = -ETIMEDOUT;
--
2.29.2
More information about the kernel-team
mailing list