From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62001400E0A for ; Fri, 10 Jul 2026 09:57:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783677473; cv=none; b=HUmVwRcoqGh4JUt123/98TXpKk4Hdfh+hX/a4/UYYMwmB2J4geQWO0nFBfM87v6+H0sXZY5fOAQDSvY3VbaHxdantfgBmlX/rOGRM391y127cNGh6YZrLj5C4JtCwGt7ik60ckrjDtCXXX2Wfxcaz8botrqldI0gfu+loPbPT3A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783677473; c=relaxed/simple; bh=3pbAc12Jj3zIRz8oWGZPCYd6KNJWtOhdSqNPzVF1EiE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DRuQNVqdDsBgkNBU7h3ba6djXKwNlh+A0vAUum0jQ1x0LSBy+DvVhWE/AF13IN5uCnxxEOweIYMWh8XKXF4xz+plUBMQiNhTMYbOeR/4oyyj8rBZFnLYma3vS5AFk+AICzcDa8ND9sDy761vjsln0FDz2LM+ZNdYWguFHQBhGY4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Pg88vCAz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=A/5cUMev; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Pg88vCAz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="A/5cUMev" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66A7eI2R141535 for ; Fri, 10 Jul 2026 09:57:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= n7NkL9sW/e578DxWIXV/0BLe24fAF1y1jIyxSoVkA6c=; b=Pg88vCAzPx8z+khj GxO7gSx9tGdtK6F29YnF2D1jkJygeRL/iIsIzLLBUvhYINZrs41F4kun2GPF+qyn 4zE/9vUBLssjPdV1sY7jCNf0Y/xOuwXC6lEZHi+LnuNExDBb41GCAUyWWX83ZtIC dvzwfz7B7LSW/kXpFTmSH0OwAnwW7iYemmVy5+gbWzWOy0Nw/V8rhHshg7IIRdnm 1kpa6+BjIkBu+9YaePq5+xeqmtkteXAzLw7vw/zx04Hv5XU+xhGzSNpYJtpKtG/w HcIMPenZLSg4CCPzHuECGJlBCvbIp7RLlz1ZW9HdcPmzYvgLW9QKKLVkBVXt/07g 9KxdYQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4faf5munqd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 10 Jul 2026 09:57:46 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c21c01cf3so13990011cf.2 for ; Fri, 10 Jul 2026 02:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783677466; x=1784282266; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=n7NkL9sW/e578DxWIXV/0BLe24fAF1y1jIyxSoVkA6c=; b=A/5cUMevjc2JZp06iCboiLZzNvcgT69m0pTsN3poes1nzooGTe73MN/tnZMAXTjYas JG8H7t/K40/AYLnQoTmOj3KGXnCWZIEwpZ6KPCSF6Dk0f0viS+Co8JUlHa2AP8YLEbdK l61Yh4gfNmYoyyPAmvyWIwqs7P4CXnhAs2382c8NLS27UdInTKLu1QENJWU68BAliUPK a2aJ5Z2KYlYYHZ9mSk0mMx6o5fRjiFyXstSkIhmcreNZ1SzcV3p+uwZKRfz90T18NYBq pD1Px4l650Yc/rcOFdLaf/xrt/R+xWydd9oKLTBBo0aruAfU0OCaLDBJyMqBOsmAapcS JSVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783677466; x=1784282266; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=n7NkL9sW/e578DxWIXV/0BLe24fAF1y1jIyxSoVkA6c=; b=Q9sYobvMsbMXk+jqcgi9yJUMTB/C1ysty6HXXTJwns+1XxB2Z/TuiUxVDsPXV/jlW/ QCenMd8gq3HlCiJGhiB9ADYnVdZQAIkQtCcMjrAcYLDbVKOS8Tsit0H0OUaSWCmG4Ko7 gW+LGVKd9Ff/DpkFFBtIC3NWhz8Vsdg7HZ96qhDGBO3T+4OKWKPXEmPc0IO51frXdNxk ov2jrRAQrIjk9Tthfw8dK+GFEcFusgSqawUXintJG+IMPGo0OZ/KMq2XTV26ZBK0Kzlr xP+nBgQCG4mK2vovY19rhdkzBlEsIW240xn5Rj09dC0YPfK9fnBALbrT2W1Z4arJm96V 6+5Q== X-Forwarded-Encrypted: i=1; AHgh+RrUL9njRU1tXBR0woY0eswqLn+XuxgXO1OD/QXYVgjq/5PyyCE3SfmvpDA2A6Bh07dZqPH48TDHt+sBcqM=@vger.kernel.org X-Gm-Message-State: AOJu0Yyc+hvGI7E3tsnT4EQXWJ/u83JQ7Y0HGHjIdS5f16CxtxXjD5gu xPH6TDhNoJurMT79VKHqgRTBSvod0N2tp3XVp+YGxFf6vosfR7BIxh7vogOUmUumDqWy+h87DIk z0Tee8vSafB1CXDmUunuxAA+UOBbEBgMsoLsk0pfUMv2LcTQPrn4A2qgHolvcaZ9eyW0= X-Gm-Gg: AfdE7ckwGvSnQPFM3JP8rrjZdO2Pr014ci2IV0NLF+UN9XIYTKuii42Z64GZOtivWvO dpDfXnUCi903WDOlSh83o4NfwrdIdOSOhWhE2TTHhLzmQh+xjCRPfeRo6gy/Ja7p/7TU2cWYE8F +xivSN8b5mDafMe9Q9atkMkTf+2WBZlTwu09feX4P4XoKK+SgA+9xg2B/PLC0D9hdzCTvK+5x8P FlQRoyVOG8ij+n9aAfCu0W+d3F9l9YKbbDH7mrcd7bwhwmggS1CMuQWnGuo2Qihx2H8XlCrZTlB 0GyuaTHawiAYgTl0UbGPJRueCAjyOiE1ArNMMqnT4K4IVYFEHIr4Ivv5SHfmzwjhsQPbtJ1HVRp ob/2sQ9IkkJUIFTNSqkuMFdX26ygSuvn/VeQ294Zvr0lf4bBzNzkj4qKN7R42PBS+0TGnQ7fAqD wunvQ6jmnr1qbb9EJy7cEOUJaqaRLBLql5YANzAnuZFDXFdy5+S6PC7/3md1VrJ1Rr64ueJd+75 jbuEmB7beAcxTKkyz/9 X-Received: by 2002:ac8:5fcd:0:b0:51c:1568:3a53 with SMTP id d75a77b69052e-51c8b39902fmr117003061cf.16.1783677466352; Fri, 10 Jul 2026 02:57:46 -0700 (PDT) X-Received: by 2002:ac8:5fcd:0:b0:51c:1568:3a53 with SMTP id d75a77b69052e-51c8b39902fmr117002821cf.16.1783677465981; Fri, 10 Jul 2026 02:57:45 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com (82-64-236-198.subs.proxad.net. [82.64.236.198]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c15dfda815dsm265357966b.36.2026.07.10.02.57.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 02:57:45 -0700 (PDT) From: Loic Poulain Date: Fri, 10 Jul 2026 11:57:34 +0200 Subject: [PATCH v3 08/11] Bluetooth: hci_qca: Support QCA2066 on M.2 connector via pwrseq Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260710-monza-wireless-v3-8-46253587af64@oss.qualcomm.com> References: <20260710-monza-wireless-v3-0-46253587af64@oss.qualcomm.com> In-Reply-To: <20260710-monza-wireless-v3-0-46253587af64@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, devicetree@vger.kernel.org, Manivannan Sadhasivam , Loic Poulain X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: vRXn70WhZhuMvHhrTcLkOKUcSnQ6niHI X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEwMDA5NyBTYWx0ZWRfXyOmCmtHCAxsP kwyo8Mu8R5mXGaFs7v+MUh1VasC5GswwOjEN/7P6/Q8RBKn8Mh+s2SG6I0yhWQ65x51XWP8B4S+ 7Re1vJbW1Z3vVnsVN3eueNoW5RA1JfI= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEwMDA5NyBTYWx0ZWRfX3vm+BrwEVeLH OM40HzKeiEZqgvXfkmpJTGd2ts5ps96w6J3vBSjweFoHJqiWoQRZlI9ifeWwfojT5NBeC42vkP9 BR7NpVSTvAHflt5f6g2UoxbHWiDXIx6jL3+TYoDsdYpzCu/SkWBy2Hq0LgDqNft8ZK4Gfm9l6+C jxygmuBDCmaBNWh9Eyz1ZY9DnAZoATIvNIm68vaeA4o1+qxbK2ZJMmIe7kn5aH9j5P1H+dJeYNP b+9OGsyoSoC1LSeOigL9PNYCNwml09NVZWLE6ouEf7NZi/0ov8y1VDQjq1WFucYqnJY/WPie3ZV Qdq+YEZjQ9Bkd2o7wapRiv0DN8Hnx3ytRMEHKExeuA+9jEQy5Y3jFZK9pt1Cpot+lQ0ohsIKQrx vHXbEzfHfmvbIrmeO6jtmHMfw7SUhEQe86fWtnswQyeUEBtZUy35SDeqQ6ScNmT1Xo/lLHJEDiI ghQE/r7NjoJzN/4ZbAw== X-Proofpoint-GUID: vRXn70WhZhuMvHhrTcLkOKUcSnQ6niHI X-Authority-Analysis: v=2.4 cv=N+QZ0W9B c=1 sm=1 tr=0 ts=6a50c21a cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=MDeckJw97qnk8wCBExTehA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=CW3gqymaXyTMcD2nhgsA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-10_02,2026-07-09_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 malwarescore=0 priorityscore=1501 phishscore=0 adultscore=0 suspectscore=0 impostorscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607100097 For QCA2066 (and other QCA chips) on M.2 connectors, the UART enable is controlled by the W_DISABLE2# signal managed by the pcie-m2 power sequencer rather than a dedicated BT enable GPIO. When the serdev controller has an OF graph (indicating it is connected to an M.2 connector), acquire the 'uart' pwrseq target from the connector's power sequencer and use it to control BT power instead of the bt-enable GPIO. This is factored out into qca_serdev_get_m2_pwrseq(). Reviewed-by: Manivannan Sadhasivam Signed-off-by: Loic Poulain --- drivers/bluetooth/hci_qca.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 24dc5bf6d192be7e1d500df6bdf36e6184f9eaf7..f6529d359ffbd97f8a3c4c0593680ab200215b36 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -1872,6 +1872,9 @@ static int qca_power_on(struct hci_dev *hdev) /* Controller needs time to bootup. */ msleep(150); } + + if (qcadev->bt_power.pwrseq) + pwrseq_power_on(qcadev->bt_power.pwrseq); } clear_bit(QCA_BT_OFF, &qca->flags); @@ -2387,6 +2390,20 @@ static int qca_init_regulators(struct qca_power *qca, return 0; } +static int qca_serdev_get_m2_pwrseq(struct qca_serdev *qcadev) +{ + struct serdev_device *serdev = qcadev->serdev_hu.serdev; + + if (!of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) + return 0; + + qcadev->bt_power.pwrseq = devm_pwrseq_get(&serdev->ctrl->dev, "uart"); + if (IS_ERR(qcadev->bt_power.pwrseq)) + return PTR_ERR(qcadev->bt_power.pwrseq); + + return 0; +} + static int qca_serdev_probe(struct serdev_device *serdev) { struct qca_serdev *qcadev; @@ -2417,6 +2434,10 @@ static int qca_serdev_probe(struct serdev_device *serdev) else qcadev->btsoc_type = QCA_ROME; + err = qca_serdev_get_m2_pwrseq(qcadev); + if (err) + return err; + switch (qcadev->btsoc_type) { case QCA_WCN3950: case QCA_WCN3988: @@ -2426,17 +2447,9 @@ static int qca_serdev_probe(struct serdev_device *serdev) case QCA_WCN6750: case QCA_WCN6855: case QCA_WCN7850: - /* - * OF graph link is only present for BT devices attached through - * the M.2 Key E connector. - */ - if (of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) { - qcadev->bt_power.pwrseq = devm_pwrseq_get(&serdev->ctrl->dev, - "uart"); - if (IS_ERR(qcadev->bt_power.pwrseq)) - return PTR_ERR(qcadev->bt_power.pwrseq); + /* M.2 connector modules are powered by the pwrseq acquired above. */ + if (qcadev->bt_power.pwrseq) break; - } if (!device_property_present(&serdev->dev, "enable-gpios")) { /* @@ -2528,7 +2541,7 @@ static int qca_serdev_probe(struct serdev_device *serdev) return PTR_ERR(qcadev->susclk); } } - + if (qcadev->bt_power.pwrseq) { bt_en_available = pwrseq_power_is_controllable(qcadev->bt_power.pwrseq); if (!bt_en_available) { -- 2.34.1