2019-08-08 09:26:50

by Harish Bandi

[permalink] [raw]
Subject: [PATCH v1] Bluetooth: hci_qca: wait for Pre shutdown to command complete event before sending the Power off pulse

When SoC receives pre shut down command, it share the same
with other COEX shared clients. So SoC needs a short
time after sending VS pre shutdown command before
turning off the regulators and sending the power off pulse.

Signed-off-by: Harish Bandi <[email protected]>
---
drivers/bluetooth/btqca.c | 5 +++--
drivers/bluetooth/hci_qca.c | 2 ++
2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 2221935..f20991e 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -106,8 +106,9 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)

bt_dev_dbg(hdev, "QCA pre shutdown cmd");

- skb = __hci_cmd_sync(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
- NULL, HCI_INIT_TIMEOUT);
+ skb = __hci_cmd_sync_ev(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
+ NULL, HCI_EV_CMD_COMPLETE, HCI_INIT_TIMEOUT);
+
if (IS_ERR(skb)) {
err = PTR_ERR(skb);
bt_dev_err(hdev, "QCA preshutdown_cmd failed (%d)", err);
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 16db6c0..566aa28 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -1386,6 +1386,8 @@ static int qca_power_off(struct hci_dev *hdev)
/* Perform pre shutdown command */
qca_send_pre_shutdown_cmd(hdev);

+ usleep_range(8000, 10000);
+
qca_power_shutdown(hu);
return 0;
}
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


2019-08-08 11:00:05

by Balakrishna Godavarthi

[permalink] [raw]
Subject: Re: [PATCH v1] Bluetooth: hci_qca: wait for Pre shutdown to command complete event before sending the Power off pulse

Hi Harish,

On 2019-08-08 14:55, Harish Bandi wrote:
> When SoC receives pre shut down command, it share the same
> with other COEX shared clients. So SoC needs a short
> time after sending VS pre shutdown command before
> turning off the regulators and sending the power off pulse.
>
> Signed-off-by: Harish Bandi <[email protected]>
> ---
> drivers/bluetooth/btqca.c | 5 +++--
> drivers/bluetooth/hci_qca.c | 2 ++
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
> index 2221935..f20991e 100644
> --- a/drivers/bluetooth/btqca.c
> +++ b/drivers/bluetooth/btqca.c
> @@ -106,8 +106,9 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
>
> bt_dev_dbg(hdev, "QCA pre shutdown cmd");
>
> - skb = __hci_cmd_sync(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
> - NULL, HCI_INIT_TIMEOUT);
> + skb = __hci_cmd_sync_ev(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
> + NULL, HCI_EV_CMD_COMPLETE, HCI_INIT_TIMEOUT);

[Bala]: nit: can you also add reason in commit text for adding
HCI_EV_CMD_COMPLETE

> +
> if (IS_ERR(skb)) {
> err = PTR_ERR(skb);
> bt_dev_err(hdev, "QCA preshutdown_cmd failed (%d)", err);
> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
> index 16db6c0..566aa28 100644
> --- a/drivers/bluetooth/hci_qca.c
> +++ b/drivers/bluetooth/hci_qca.c
> @@ -1386,6 +1386,8 @@ static int qca_power_off(struct hci_dev *hdev)
> /* Perform pre shutdown command */
> qca_send_pre_shutdown_cmd(hdev);
>
> + usleep_range(8000, 10000);
> +
> qca_power_shutdown(hu);
> return 0;
> }

Reviewed-by: Balakrishna Godavarthi <[email protected]>

--
Regards
Balakrishna.

2019-08-08 15:02:20

by Matthias Kaehlcke

[permalink] [raw]
Subject: Re: [PATCH v1] Bluetooth: hci_qca: wait for Pre shutdown to command complete event before sending the Power off pulse

On Thu, Aug 08, 2019 at 02:55:53PM +0530, Harish Bandi wrote:
> When SoC receives pre shut down command, it share the same
> with other COEX shared clients. So SoC needs a short
> time after sending VS pre shutdown command before
> turning off the regulators and sending the power off pulse.
>
> Signed-off-by: Harish Bandi <[email protected]>
> ---
> drivers/bluetooth/btqca.c | 5 +++--
> drivers/bluetooth/hci_qca.c | 2 ++
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
> index 2221935..f20991e 100644
> --- a/drivers/bluetooth/btqca.c
> +++ b/drivers/bluetooth/btqca.c
> @@ -106,8 +106,9 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
>
> bt_dev_dbg(hdev, "QCA pre shutdown cmd");
>
> - skb = __hci_cmd_sync(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
> - NULL, HCI_INIT_TIMEOUT);
> + skb = __hci_cmd_sync_ev(hdev, QCA_PRE_SHUTDOWN_CMD, 0,
> + NULL, HCI_EV_CMD_COMPLETE, HCI_INIT_TIMEOUT);
> +

The commit message does not mention this change, it only talks about
adding a delay.

> if (IS_ERR(skb)) {
> err = PTR_ERR(skb);
> bt_dev_err(hdev, "QCA preshutdown_cmd failed (%d)", err);
> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
> index 16db6c0..566aa28 100644
> --- a/drivers/bluetooth/hci_qca.c
> +++ b/drivers/bluetooth/hci_qca.c
> @@ -1386,6 +1386,8 @@ static int qca_power_off(struct hci_dev *hdev)
> /* Perform pre shutdown command */
> qca_send_pre_shutdown_cmd(hdev);
>
> + usleep_range(8000, 10000);
> +
> qca_power_shutdown(hu);
> return 0;
> }