Skip to content

Commit

Permalink
Bluetooth: hci_qca: Wait for SSR completion during suspend
Browse files Browse the repository at this point in the history
[ Upstream commit ad3a9c0 ]

During SSR after memory dump collection,BT controller will be powered off,
powered on and then FW will be downloaded.During suspend if BT controller
is powered off due to SSR then we should wait until SSR is completed and
then suspend.

Fixes: 2be43ab ("Bluetooth: hci_qca: Wait for timeout during suspend")
Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Venkata Lakshmi Narayana Gubba authored and gregkh committed Mar 4, 2021
1 parent 27f8ad8 commit d157410
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions drivers/bluetooth/hci_qca.c
Expand Up @@ -50,7 +50,8 @@
#define IBS_HOST_TX_IDLE_TIMEOUT_MS 2000
#define CMD_TRANS_TIMEOUT_MS 100
#define MEMDUMP_TIMEOUT_MS 8000
#define IBS_DISABLE_SSR_TIMEOUT_MS (MEMDUMP_TIMEOUT_MS + 1000)
#define IBS_DISABLE_SSR_TIMEOUT_MS \
(MEMDUMP_TIMEOUT_MS + FW_DOWNLOAD_TIMEOUT_MS)
#define FW_DOWNLOAD_TIMEOUT_MS 3000

/* susclk rate */
Expand Down Expand Up @@ -2102,7 +2103,12 @@ static int __maybe_unused qca_suspend(struct device *dev)

set_bit(QCA_SUSPENDING, &qca->flags);

if (test_bit(QCA_BT_OFF, &qca->flags))
/* During SSR after memory dump collection, controller will be
* powered off and then powered on.If controller is powered off
* during SSR then we should wait until SSR is completed.
*/
if (test_bit(QCA_BT_OFF, &qca->flags) &&
!test_bit(QCA_SSR_TRIGGERED, &qca->flags))
return 0;

if (test_bit(QCA_IBS_DISABLED, &qca->flags)) {
Expand All @@ -2112,7 +2118,7 @@ static int __maybe_unused qca_suspend(struct device *dev)

/* QCA_IBS_DISABLED flag is set to true, During FW download
* and during memory dump collection. It is reset to false,
* After FW download complete and after memory dump collections.
* After FW download complete.
*/
wait_on_bit_timeout(&qca->flags, QCA_IBS_DISABLED,
TASK_UNINTERRUPTIBLE, msecs_to_jiffies(wait_timeout));
Expand All @@ -2124,10 +2130,6 @@ static int __maybe_unused qca_suspend(struct device *dev)
}
}

/* After memory dump collection, Controller is powered off.*/
if (test_bit(QCA_BT_OFF, &qca->flags))
return 0;

cancel_work_sync(&qca->ws_awake_device);
cancel_work_sync(&qca->ws_awake_rx);

Expand Down

0 comments on commit d157410

Please sign in to comment.