From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 A2BA437E310 for ; Thu, 16 Jul 2026 16:18:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784218729; cv=none; b=YeGp8iTAfA8FsDp9IDAFAd9y8EWBfd1azTJDtHth15+125wExxAd77yakCZcsAkTwXDUmMCNcO2OlSoDzUy2oF7zPyZRsTpNe20/DXqBPy8YYptKVKp75m49dlqyB7QH9beDuLYAhnC7tfC0mD4cSGdvisZI1yUc/2rW/AVg7Tk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784218729; c=relaxed/simple; bh=Xp5FK98F4aXVm1IaIUQg7a8ZJjOswS0wCMRvU+2daPg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dpmPcNoUpzj2biHO4WrHbdVuEGFHLHhPsfU9xjBLXBzF+T9z8+vobOjmpNszB1jTk4hKcYGTZ7x2FNOTCJf2arU505f/C071llnFXYpigmt0jg9apH2+W+XPz9b5ourZBvUs9B9TLbdRRP2xVDwDubKSKuB7B89nDCTn2+P4QC8= 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=Qt9HQI1v; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jHUgnpi4; arc=none smtp.client-ip=205.220.168.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="Qt9HQI1v"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jHUgnpi4" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66GDJd9p3988086 for ; Thu, 16 Jul 2026 16:18:40 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= KnNGLFZg8KBKoCKQkuNws9wP1R08Qecii+OaAbhSdTc=; b=Qt9HQI1vaCGtbfBA SyYNQAwcyr3yHQqJVYqzqZqd+cZhHgb/Jl6W8i0VtNlkGJY8npAPSaKcyuAigC9y LoVjcmqvwnqbrCy/wjM+VQ8JfFk4VDCHrF/1d9uXZzWvadgFMrZI3mrpwbpH+uLU YQMX/zShurTmpUekIIYcDH8a4byUacD7taKw7LTF+HdHSknXVTA2QGsYQYdJxvLa P3g+mKHbdufnTaHjARHtfkWhLBHCYXllDmyf7QC+y0D/L2AuOFz8DB+KfotvAhuy dAdMUBaCv2VvFCwCwRdlYGrJ4JOCvDSHWWcVMFr5w1Hh3qY7oUQT16vz/n+Igab0 VfSEgA== 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 4feq3pk72v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 16 Jul 2026 16:18:40 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-5174a23afcbso41357631cf.3 for ; Thu, 16 Jul 2026 09:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784218720; x=1784823520; 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=KnNGLFZg8KBKoCKQkuNws9wP1R08Qecii+OaAbhSdTc=; b=jHUgnpi4Ax1M1gjwGwOgYwezwl75AI+qTtCycIkTSJMTvAAVWT+LiL1gblTXTt4Mlv 5RzOL6Orp/F2xErGOpkpGqo6yG4xMkCgV206Q7d5qfUqGJz0AfZ5NL21GrrB71bCWHrj hfT/VIBhgOraWFpjpy0M67bYiMzCd0WWwTBSTGNX955J6HF/PFR9JI7CgAw1Gzt/vjAH 4ya3sNEtNytA7qcKLNhEt3ADEKs8MY80qgOyImf/fe+diyKFvosxmC/Mp74Ta9iKF2s4 BPJ+6+Yj/WEEIKCNchhXxWAk7WZLQrFL0e6ccDmJQd4c2lXe8mGFBPOLjhdP3/LPtPdd L4Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784218720; x=1784823520; 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=KnNGLFZg8KBKoCKQkuNws9wP1R08Qecii+OaAbhSdTc=; b=JsbVqMaJtm6jIM3EyUh2D0BKct3o8G3kH4DPTXzgInjd9pPegChKGeaD8kgLcVUK5a qcCWnXYQSGuhcdNNnBKvB3eOB8ibr4ejczo30O5YnHnUNbHhn9xhYMshBvMgk4rHAMN3 e6M6r0ZU1bnyxBt7/A92asa4Jd6K1Vh1znDlYppXakh/U6rJHwOx2LzQLt3+gYkNfsUI crHSSFYlQlN9130MQcd2fw3hiU04iTaGVhVcyuCSsG4Jec35lcxSKqcJlvlzNaTbzvD4 lbQ+ryaQV7T2KyV5XUS10994N+i9OLTLck5f2ESUYUZ2LOcGjss3AjrrUlhGcLS8/7Ww W0Ng== X-Forwarded-Encrypted: i=1; AHgh+RrJ6b6xFnHs4EK5n/VAxXAbPezp5NTxiNf+qfHpAjSApIiI2HADCuh+4xZ5FPwHTubMFJjJVRBXBok5C/8=@vger.kernel.org X-Gm-Message-State: AOJu0YyqhN00WGkAyqgpXgfmYJuj2MpiturqQp41QIHqBjacs6GLrFba nhlysylIYNqBX/dE/JuF9gK23rmr2aYR0zOa7h6LO0cmetqaSCYTasRmXaflOSNFkpm9nF73zKL cI/+E9KNQtNH1gCXcaLWgzHeXvGGah9YOsU8+vaRGHO5TXW9hxjA6jJidJgri7eqWvic= X-Gm-Gg: AfdE7cnpg7PLYD1mKs9Ir3sXKd03j/2f/YUQxk9BJGgK7b6gHnFuhBo0ZO0s5BQ3sZS 9x321FwmBwTYZSCxEhgpzHf/wo3HsDwoasSyxuv9VawQYMVu1cqBubq8MKNRqbgasyHpAqc+Kcd 3m7UPIRVBQhBbSjpO7MNAVEQoMw/xAyfe9UhXxfvcRfu2bem4oaDvMmwmaFxtUXzdFl4fYtijKE s2vp2MsRiEwBHJh5GQmhII3LjH/FLQyZ/EA+UX2hAmaCVLybZwzWXDjSJMdRwNGSidz+rPoTkMf wZwtiveY079nYwk56FGnGbYKJY9cw8K7cTa3crTO5ZReQmsF6TWVomfbEfSNAxmAl+c22kLBnSn 1wt4b4dPBJV7aOZJVohD298HJ7J9GXOWlzJrp6fGnB8kocScu/6GKA5zdAQo6aShvBkfd98ERJo 9832odS03YS+X+HLgstm5yGqzC5W/LeFnWnDF6OuPmkr/ak0wbv4g= X-Received: by 2002:a05:622a:130c:b0:51c:1b78:b044 with SMTP id d75a77b69052e-520be7934d6mr2443411cf.61.1784218718713; Thu, 16 Jul 2026 09:18:38 -0700 (PDT) X-Received: by 2002:a05:622a:130c:b0:51c:1b78:b044 with SMTP id d75a77b69052e-520be7934d6mr2442971cf.61.1784218718124; Thu, 16 Jul 2026 09:18:38 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:751c:d61c:c91:60dd]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c168744bdddsm257262866b.48.2026.07.16.09.18.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 09:18:37 -0700 (PDT) From: Loic Poulain Date: Thu, 16 Jul 2026 18:18:25 +0200 Subject: [PATCH v4 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: <20260716-monza-wireless-v4-8-9b02e6f549d7@oss.qualcomm.com> References: <20260716-monza-wireless-v4-0-9b02e6f549d7@oss.qualcomm.com> In-Reply-To: <20260716-monza-wireless-v4-0-9b02e6f549d7@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: CTMtuhpmOyaM3XTUlnEM5U2k31__WsGv X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE2MDE2NyBTYWx0ZWRfX+scbiRzJt0bf 3R0yLl2He/AHSVCx9qo8k6LaJUS/7lrfCE7mgwRnigMdAw/+S+5wjJWKnPs6hGJyFHZ9roAtHPl JHlMPX48pBueqA309+b7Rp6rUadLcL4= X-Proofpoint-GUID: CTMtuhpmOyaM3XTUlnEM5U2k31__WsGv X-Authority-Analysis: v=2.4 cv=PN8/P/qC c=1 sm=1 tr=0 ts=6a590460 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=CW3gqymaXyTMcD2nhgsA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE2MDE2NyBTYWx0ZWRfX1BJjaVLCzHRF Hhwm55Nx5ufhJmp8gRtJ6P5x9dnIEDBBLXc8i1oopq0goag0DEe/S0KErj16D753pMuBTlUEBLy aqAJmE6g25LZQnCITv4QNiGDyPOGDuU2bsSZdEOy194UjfRjfMZI19i1oJe6hc4WnSL/uC8wELX i9ZWfD06tPIrzKcYTiYowhf9BfVk8cTree/7KhnyY3nnK4pm2pY4aGtiwWX2pNK3tzjZ2KndDbP f/EKmq33K1AdxJ/QFKTizfb+gB2gTqSiPESxWAzzb5sxP9TZec9a55TWTiGlL9Hmd5zFcq5TaqG OuqO/XY9PtWEGA1HkuHSp63uulCt5xRHKOrjD5R7oMxR8rieQT38ztXh4XU8K48fyHYjmxF37C1 Xm836Ba/iua4THtxCfWWvkxEWH4ZpMZ6RScjkUDxdBoDUDJBN8XYiRr9fZBOhQqNv8QZFPY+ke2 sha1v8xeqRJcipJp3qw== 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-16_05,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 malwarescore=0 lowpriorityscore=0 phishscore=0 adultscore=0 priorityscore=1501 impostorscore=0 clxscore=1015 suspectscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607160167 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 | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 25c4387136245fca25e375951f960d7240116781..22f6185a946ef04c45e41b2b34126e3f58d603ca 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,28 @@ static int qca_init_regulators(struct qca_power *qca, return 0; } +static void qca_serdev_put_pwrseq(void *data) +{ + pwrseq_put(data); +} + +static int qca_serdev_get_m2_pwrseq(struct qca_serdev *qcadev) +{ + struct serdev_device *serdev = qcadev->serdev_hu.serdev; + struct pwrseq_desc *pwrseq; + + if (!of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) + return 0; + + pwrseq = pwrseq_get(&serdev->ctrl->dev, "uart"); + if (IS_ERR(pwrseq)) + return PTR_ERR(pwrseq); + + qcadev->bt_power.pwrseq = pwrseq; + + return devm_add_action_or_reset(&serdev->dev, qca_serdev_put_pwrseq, pwrseq); +} + static int qca_serdev_probe(struct serdev_device *serdev) { struct qca_serdev *qcadev; @@ -2417,6 +2442,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 +2455,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")) { /* -- 2.34.1