linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Balakrishna Godavarthi <quic_bgodavar@quicinc.com>
To: <agross@kernel.org>, <robh+dt@kernel.org>,
	<bjorn.andersson@linaro.org>, <linux-arm-msm@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<marcel@holtmann.org>, <johan.hedberg@gmail.com>
Cc: <mka@chromium.org>, <linux-bluetooth@vger.kernel.org>,
	<quic_hemantg@quicinc.com>, <quic_saluvala@quicinc.com>,
	<quic_rjliao@quicinc.com>, <mcchou@chromium.org>,
	Balakrishna Godavarthi <quic_bgodavar@quicinc.com>
Subject: [PATCH v1 3/3] Bluetooth: hci_qca: WAR to handle WCN6750 HW issue
Date: Fri, 29 Apr 2022 15:57:53 +0530	[thread overview]
Message-ID: <1651228073-1999-4-git-send-email-quic_bgodavar@quicinc.com> (raw)
In-Reply-To: <1651228073-1999-1-git-send-email-quic_bgodavar@quicinc.com>

The patch is workaround for hardware issue on WCN6750.
On WCN6750 sometimes observed AON power source takes 100ms
time to fully discharge voltage during OFF. As WCN6750 is
combo chip for WLAN and BT. If any of the tech area ON is
triggered during discharge phase, it fails to turn ON.
To overcome this hardware issue, During BT ON, driver check
for WLAN_EN pin status. If it high, it will pull BT_EN to high
immediately else it will wait for 100ms assuming WLAN was just
powered OFF and then BT_EN will be pulled to high.

Fixes: d8f97da1b92d2 ("Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6750")
Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Sai Teja Aluvala <quic_saluvala@quicinc.com>
Signed-off-by: Balakrishna Godavarthi <quic_bgodavar@quicinc.com>
---
 drivers/bluetooth/hci_qca.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index eab34e2..c3862d1 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -219,6 +219,7 @@ struct qca_serdev {
 	struct hci_uart	 serdev_hu;
 	struct gpio_desc *bt_en;
 	struct gpio_desc *sw_ctrl;
+	struct gpio_desc *wlan_en;
 	struct clk	 *susclk;
 	enum qca_btsoc_type btsoc_type;
 	struct qca_power *bt_power;
@@ -1627,12 +1628,25 @@ static int qca_regulator_init(struct hci_uart *hu)
 	if (qcadev->bt_en) {
 		gpiod_set_value_cansleep(qcadev->bt_en, 0);
 		msleep(50);
+	}
+
+	if (!qcadev->wlan_en || (qcadev->wlan_en && gpiod_get_value_cansleep(qcadev->wlan_en)))
+		gpiod_set_value_cansleep(qcadev->bt_en, 1);
+
+	if (qcadev->wlan_en && !gpiod_get_value_cansleep(qcadev->wlan_en)) {
+		gpiod_set_value_cansleep(qcadev->bt_en, 0);
+		msleep(100);
 		gpiod_set_value_cansleep(qcadev->bt_en, 1);
-		msleep(50);
-		if (qcadev->sw_ctrl) {
-			sw_ctrl_state = gpiod_get_value_cansleep(qcadev->sw_ctrl);
-			bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state);
-		}
+	}
+
+	if (!gpiod_get_value_cansleep(qcadev->bt_en))
+		gpiod_set_value_cansleep(qcadev->bt_en, 1);
+
+	msleep(50);
+
+	if (qcadev->sw_ctrl) {
+		sw_ctrl_state = gpiod_get_value_cansleep(qcadev->sw_ctrl);
+		bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state);
 	}
 
 	qca_set_speed(hu, QCA_INIT_SPEED);
@@ -1906,8 +1920,8 @@ static void qca_power_shutdown(struct hci_uart *hu)
 		qca_regulator_disable(qcadev);
 	} else if (soc_type == QCA_WCN6750) {
 		gpiod_set_value_cansleep(qcadev->bt_en, 0);
-		msleep(100);
 		qca_regulator_disable(qcadev);
+		msleep(100);
 		if (qcadev->sw_ctrl) {
 			sw_ctrl_state = gpiod_get_value_cansleep(qcadev->sw_ctrl);
 			bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state);
@@ -2057,6 +2071,10 @@ static int qca_serdev_probe(struct serdev_device *serdev)
 
 		qcadev->bt_power->vregs_on = false;
 
+		qcadev->wlan_en = devm_gpiod_get_optional(&serdev->dev, "wlan", GPIOD_ASIS);
+		if (!qcadev->wlan_en && data->soc_type == QCA_WCN6750)
+			dev_err(&serdev->dev, "failed to acquire WL_EN gpio");
+
 		qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable",
 					       GPIOD_OUT_LOW);
 		if (IS_ERR_OR_NULL(qcadev->bt_en) && data->soc_type == QCA_WCN6750) {
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


  parent reply	other threads:[~2022-04-29 11:30 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-29 10:27 [PATCH v1 0/3] WAR to handle WCN6750 hardware issue Balakrishna Godavarthi
2022-04-29 10:27 ` [PATCH v1 1/3] dt-bindings: net: bluetooth: Add wlan-gpio entry for wcn6750 Balakrishna Godavarthi
2022-04-29 14:50   ` Marcel Holtmann
2022-05-04 20:31   ` Rob Herring
2022-04-29 10:27 ` [PATCH v1 2/3] arm64: dts: qcom: sc7280: Add wlan enable gpio to bluetooth node Balakrishna Godavarthi
2022-04-29 10:27 ` Balakrishna Godavarthi [this message]
2022-04-29 14:54   ` [PATCH v1 3/3] Bluetooth: hci_qca: WAR to handle WCN6750 HW issue Marcel Holtmann
2022-04-30  3:09     ` Balakrishna Godavarthi (QUIC)
2022-05-10  3:17       ` Miao-chen Chou
2022-06-22  7:27         ` Balakrishna Godavarthi (QUIC)
2022-10-13 19:11           ` mka
2022-10-13 20:06             ` Luiz Augusto von Dentz
2022-10-13 20:12               ` mka
2022-04-29 22:59   ` [PATCH] Bluetooth: hci_qca: fix excluded_middle.cocci warnings kernel test robot
2022-04-29 23:05   ` [PATCH v1 3/3] Bluetooth: hci_qca: WAR to handle WCN6750 HW issue kernel test robot
2022-06-22  7:33 ` [PATCH v1 0/3] WAR to handle WCN6750 hardware issue Dmitry Baryshkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1651228073-1999-4-git-send-email-quic_bgodavar@quicinc.com \
    --to=quic_bgodavar@quicinc.com \
    --cc=agross@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcel@holtmann.org \
    --cc=mcchou@chromium.org \
    --cc=mka@chromium.org \
    --cc=quic_hemantg@quicinc.com \
    --cc=quic_rjliao@quicinc.com \
    --cc=quic_saluvala@quicinc.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).