Commit eff981f6 authored by Matthias Kaehlcke's avatar Matthias Kaehlcke Committed by Marcel Holtmann

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: 41d5b25f ("Bluetooth: hci_qca: add PM support")
Signed-off-by: default avatarMatthias Kaehlcke <mka@chromium.org>
Reviewed-by: default avatarAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 7310dd3f
...@@ -2081,8 +2081,6 @@ static int __maybe_unused qca_suspend(struct device *dev) ...@@ -2081,8 +2081,6 @@ static int __maybe_unused qca_suspend(struct device *dev)
qca->tx_ibs_state = HCI_IBS_TX_ASLEEP; qca->tx_ibs_state = HCI_IBS_TX_ASLEEP;
qca->ibs_sent_slps++; qca->ibs_sent_slps++;
qca_wq_serial_tx_clock_vote_off(&qca->ws_tx_vote_off);
break; break;
case HCI_IBS_TX_ASLEEP: case HCI_IBS_TX_ASLEEP:
...@@ -2110,8 +2108,10 @@ static int __maybe_unused qca_suspend(struct device *dev) ...@@ -2110,8 +2108,10 @@ static int __maybe_unused qca_suspend(struct device *dev)
qca->rx_ibs_state == HCI_IBS_RX_ASLEEP, qca->rx_ibs_state == HCI_IBS_RX_ASLEEP,
msecs_to_jiffies(IBS_BTSOC_TX_IDLE_TIMEOUT_MS)); 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; return 0;
}
if (ret == 0) if (ret == 0)
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment