summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Kaehlcke <mka@chromium.org>2020-06-05 20:46:09 +0200
committerMarcel Holtmann <marcel@holtmann.org>2020-06-08 10:10:52 +0200
commiteff981f6579d5797d68d27afc0eede529ac8778a (patch)
treecf0702a1a1c0519911e605203528e182948cb060
parentBluetooth: hci_qca: Simplify determination of serial clock on/off state from ... (diff)
downloadlinux-eff981f6579d5797d68d27afc0eede529ac8778a.tar.xz
linux-eff981f6579d5797d68d27afc0eede529ac8778a.zip
Bluetooth: hci_qca: Only remove TX clock vote after TX is completed
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@chromium.org> Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
-rw-r--r--drivers/bluetooth/hci_qca.c6
1 files 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;