From nobody Sat Sep 26 04:31:00 2026 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 8BE3F4CB8A4 for ; Fri, 4 Sep 2026 15:42:24 +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=1788536549; cv=none; b=URwvi9uXZRS9DX51ChTjYAtwXDWP7h7wOJLeZhRmjf9XxKRV/+tE/xXGrV9CvuLWom8HIogfRRgxDwns0ue6rs/79yZuQ4P5F1SWZPD9c6SzR72Yl6gWNjoD/Oz20OgCt9UPR0XHgXQyIMS5YbfP8tYriUxfdTG/HSBtk2FgQug= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536549; c=relaxed/simple; bh=eabw6YropvwFfJY2b+1eTw6YCvYiFIzBiSUIvBH6EIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OzYIA3sY/WqpXcc6TYk+8EyQF01kjLKI/IDURIwoR9k4tVAbxFmhs69JlkHYyZq9WNPj9PCPMFW7GLaoiTsGrkruuG4rQ+wqQmNFvWI6OBJ2l8huATw+/xsPMin+PzqZxCNFBEkWNt8p7FIrh9zqcbxceNolbQ+R42ahEz7nARE= 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=WOD0sO8G; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=BnnJ5S8V; 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="WOD0sO8G"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="BnnJ5S8V" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684DgklT3719482 for ; Fri, 4 Sep 2026 15:42:23 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= T9j9KM2LX+O0X8B9cuB6dNL2MqmnXu7obuRd+dtnPH8=; b=WOD0sO8Gfg4z0nx7 ses2bEkjW9xSgpstGlM/6aKKiyU5vO/8ImecVZGBw9oPsQaOs+Cw3qbZiQBWcXlE cIppwgsVgKQgiazaownlpayyzo42c6whucfZFbEq7uWiKs/YO5HMBEgDrNjrw6fI /ns+5bqUwUkKnDhgxtOvYU/DQTPUU2CSjMZ8P4F7otVt51ca2WEgj7w686v9Jwka jG1dNQXBmEyzotB5LkBFDGokBaBAz8EUlbP/XNTJ4itaIBBtB2i4Luyh2KD6b0FG I2I8K5kMKfq0d9TivCMUIuX99S7k7w/fuEiQkvQaUzUV9S20k891yCAnHFl91n20 zeTj0A== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfqqd2p0w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:22 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-92e82060977so191069185a.1 for ; Fri, 04 Sep 2026 08:42:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536542; x=1789141342; 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=T9j9KM2LX+O0X8B9cuB6dNL2MqmnXu7obuRd+dtnPH8=; b=BnnJ5S8VLYv0Nnr+GekGp22SvHN4AK73eAx5kBCFTz4yReFL04vujTGKdTJ8XJcfcE G2CXPVoYxa6KAozHCSlyobwM3k6s3G77VtCytxQcz9TF+UDaeu3C+5csnWeIKRXRaKxY dIC+eQiASY/WhHZu2znhCkQ0QHL0rBGPmcUM2VexKgTVeX0BXt4dL7nxAGB/wnOu3TEU 5sMJ9gdXZ5n/7fscIMiGFTb2bgfwIRq/zjIQH9j8alJt18oY1vkBeT7B1YudZRC3jFJc Ucz1hgozmEo5z0JlHovf283jpI/SgDxOtByFQdKZSRDuf5Rc2nHfUBwxizGBB2cVJmfE 48Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536542; x=1789141342; 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=T9j9KM2LX+O0X8B9cuB6dNL2MqmnXu7obuRd+dtnPH8=; b=Y+39/HWpymw/NKYS6MwuD2TbThJsjLAUpy5tj+64+D6RK1tv+v91rr5zsMVqh6++b3 VNwT1ErBSMrCACCUQn6xdC9Gt+qBTWF3Gb9C4tu02nVTVSO4z0MZ3dRBL8JmJyQDmgVg oxpJk03gsaJK0NQ5/D5wV91x85k7yh2IQoZ0QIWQJZWW8AQaM2ipdzoDZ3VCR2rxzBjg Dpp4HnZ9o+MKaXOz3wFSvWfe/bS4J2YlUJ0hXr46CRgEZoNWshQl9n5ar2Z1+MVGn9di 5bIvZZbwRvjgXrafOLWtzZcDOl+x35uPXw+Bxv8gMvrF7BOni/zgTxiO6V6fwPwnJO+p YhJA== X-Forwarded-Encrypted: i=1; AKwUvBzkhPmE17xdNqnE57DTDYWDGgOeLq0B5CzFVojPhjID0IrZ+M5E4IB4P2tOiiw9QUazpWL5mFowcdbwXJA=@vger.kernel.org X-Gm-Message-State: AFuF++l6/jbvtZhlV8zlSNwXsAFchBAMZOjSOmj5IoY/38IbOdmgMCnG mUzNv0RfOrgJX3G6A/rQ7SKXmgZCgzqpkZdb6I/nxLi3ryfcrCXF5tKx8jbeMdIiUsHTN9GFlqx UeQPwB061HBVSyz/KacwEzELgAQK5AnClmtXzsunWrEAKKpTsrsCwR39+0/UWOSuFtRE= X-Gm-Gg: AYBFou1hPfzwkTcs6oBZptL3C6ycmAeN29do1Zn8RkDF0eDtXiv5jQOPs/2s9j0yjfl +R6mHpY6Ut1mRxFobxrEaycOJY4LEM3IqbXrCtRdh7Xa+ns2giBvSMZ7eA/itGXZI1IIL9mG0Mt pDAYAbdB5+V1Vs6sHEupcx+ZdHLUmQpRR98zfxDCi8adQnrTPI+Yrkg5anoUXTkcYcRZU1KE1xl QIIJP9kKUvNU+zT9MWm09kQMr59zbLTdXuoZJIFHREGZx43spgibxzOeVTnlu1h7fKZ08V0fz1e 6ueOaZqrpKujhIS53gNDJli6+b85KwHCvqNbiMTe13C/xPlaDjp5+KrAbec9OQJHhPWXZidvXuT ZLxroeZG/Z8Bc4Jz/pjkBeKD8mIBYrU9dPQJ2AOsjVvAJlf8LzdvlAHwytgkS+PcCvJNX8JbOC4 YoZOWYYa4SBZMYZecm89KA8jSI2qyFz4w6M/cxxGHt13wH4EhfvXY= X-Received: by 2002:a05:620a:6494:b0:939:957:ed2a with SMTP id af79cd13be357-9396e00b139mr1257454385a.15.1788536542128; Fri, 04 Sep 2026 08:42:22 -0700 (PDT) X-Received: by 2002:a05:620a:6494:b0:939:957:ed2a with SMTP id af79cd13be357-9396e00b139mr1257449785a.15.1788536541696; Fri, 04 Sep 2026 08:42:21 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:20 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:16 +0200 Subject: [PATCH v6 01/11] Bluetooth: hci_qca: Add M.2 Bluetooth device support using 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-1-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Bartosz Golaszewski , Dmitry Baryshkov , Wei Deng X-Mailer: b4 0.14.2 X-Proofpoint-GUID: IXbLuN1yC7Q2LvhA522C2LGkZlKgL61L X-Proofpoint-ORIG-GUID: IXbLuN1yC7Q2LvhA522C2LGkZlKgL61L X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfXyLUGeMVAw9iF uopySqDZ2sqrRej+XtJMcgdvBUtdc9RlGip/qQjQ4cfOzCCUxe5HUFwzcqRfTz+rkucaVjsvtXl K2XDo9JMps4cgyH1qCF7bMpbrvpCtMA= X-Authority-Analysis: v=2.4 cv=XtnK/1F9 c=1 sm=1 tr=0 ts=6a9ae6df cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=14bN-6-z4zEjTU3E0XQA:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX8rLF6E69n7cN cJ1Lka08Xm5iNJIAhPr4dKpMN/0Dy0G8t4FUQ2QhoM5eEfksErAZuSgEWoUIA9FBcwC+vJELKGe AOzTN7getQVLSbKqdi2kKvx3iW/NU/V30XPqnUGg6lJrtgC/NG+WBV/PqFSg3LUN5qanCFAwToK czdSs4ObJOlZ0nDxwXVEAshntPYlrIq+MYn4HP5rBYZpsrv7PtHVTWoNEkPk9AQ2USRhpmZxkce nWoXOLjsHdh4YC1CTbmuYTBC9V4+XG39l0ku3Z0zI5UIt7NPieX4ed9/KOgXSEwmDOV7YfI7Fd7 2IdCDCx8suZWdmQhJKqzdgNU77sxYnG5deTYIO6Avuo59wfCDBv238b1Iot1JaZh96oJp5fan0b QlIA6QFVMkQ9FejYkLKCNnw6pxJ9i70UUQOycGZIbJUdR4CE7wGtxZXLbfiFri0mXZSetCWMwTJ DIHy+H+2/6goXeQsPeA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 From: Manivannan Sadhasivam Power supply to the M.2 Bluetooth device attached to the host using M.2 connector is controlled using the 'uart' pwrseq device. So add support for getting the pwrseq device if the OF graph link is present. Once obtained, the existing pwrseq APIs can be used to control the power supplies of the M.2 card. Reviewed-by: Bartosz Golaszewski Reviewed-by: Dmitry Baryshkov Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index faa964735adb17a05f2a8fac16f553b37b96020b..c8ea5507bdc2c83f214e3154b5a= d6d05f418a1d4 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -2448,6 +2449,18 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) 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 =3D devm_pwrseq_get(&serdev->ctrl->dev, + "uart"); + if (IS_ERR(qcadev->bt_power->pwrseq)) + return PTR_ERR(qcadev->bt_power->pwrseq); + break; + } + if (!device_property_present(&serdev->dev, "enable-gpios")) { /* * Backward compatibility with old DT sources. If the --=20 2.34.1 From nobody Sat Sep 26 04:31:00 2026 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 433D94F55C3 for ; Fri, 4 Sep 2026 15:42:27 +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=1788536552; cv=none; b=kVaBxTC/ZT4wYlEmrY8VsrtV2Yt0MBwTpbQQ9zZVMym2PGhahjjN5rucSHqg5QYd0QUMRoKEspXz4gQ+WfVj3HNiFqFRItIMuTnN5yQG7NfYNZx5ZpB2fdyiSrWNGzHdIEKu0YLcpjmYyHpkQXv6BzASzPqZb0gfTdGstQroqvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536552; c=relaxed/simple; bh=OAyBvAGn77FVJ1TEIXYkJmoJP05YhYEzxSuqREVqRmE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tDSvArSURRl9BUfPeYXJDd2+l9Te5PoM8QCuOOnED4wxP2ZBEUVVed7MGEQZlW/lzge7MGyWhD/U6oADEpTsDuOjlo4GZgCBWb1E7Y2SAJMv7bizrU1zlPO7FFX/1PuupoQ+XCqeSXEMCdiXOud3Xo3FtnjzQd17cNrL9xjxnlc= 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=iGBeXoFA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=R+l6nJ0w; 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="iGBeXoFA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="R+l6nJ0w" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684DgvZD3121431 for ; Fri, 4 Sep 2026 15:42:24 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= VylTNBJr2gT81asOG9g7+O/m6VUb/i0HgKb0Gfyh7go=; b=iGBeXoFAs1uNGu2s +Pc6BIlzA8meYia0mNjGynetdm2Cg/bNmAvjt1IWU4SLOw/6ifb65VazWT3UPRNT eUo9SOuuAsvxCXaVJMnFGFT7DaajvVSk26ezHGFQVJa0uqjH2jT6ZyVQ1KLNAgvu b/EOZdr2jC1OFSGDQdTHHliLXv/29B+MgJrYbKnnQcKIEjrbCCqzHEzFpo4e3J5e pDfGiVZqNuGFMf5tXcjeyHBGHB7lnTeLGHcSUS+i0V241D1MEHff038ovdOKk4FN 5kZOtk9Qu9ti1nkZiYrrUPxy//waHoPfT2B8tts2TbgUtdvFawNgk4xYQxwg2UB/ wEUTSw== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfp1fjn6c-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:24 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-97cb18cfa04so881349241.0 for ; Fri, 04 Sep 2026 08:42:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536544; x=1789141344; 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=VylTNBJr2gT81asOG9g7+O/m6VUb/i0HgKb0Gfyh7go=; b=R+l6nJ0wjzcybw7ETQay/f2YHnCmDQox7JRoghaIYOHXNGoiKzY8X1vWcm1+xkSrgM iWZKGDf8+MtNI5vLTT/om3IPdzhE3NTnkiyB0Dv0mggXZcGtHcKZuSaIa864mqKjMnuY bl+nj6yLEGd/JF/0dtezE0jXl8gv1BN5yw9c6Jrh7ZH12CruUQTI1u07WGBQ9Gg4NRy2 9Zj/oFwJL/h3jns1DzMoGwyZyWIFu6WUDKyFYABerqk4ubxt2CrL1vKwlpvtdZeprBSi izlnQRBkGlI1xa5e4jb6KERRc5ObUFiXFy9SzV8zsbyoUjeJmmqi/TImExsnzpdCzAky f+eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536544; x=1789141344; 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=VylTNBJr2gT81asOG9g7+O/m6VUb/i0HgKb0Gfyh7go=; b=sHC/B5OYfXklu/4e1VwuaXNsSyR6teMOZbbPYhs0ucoH30v8x1dR7i6HWpU2PxwXjl kV4TR50PjfbIUptYOPEFaXqA1bZ1KaM2cqs0Pkw4PCjM/gUd1nQntLpHd1BWbQVdDVM9 ie/PzqNfZ5ZBt5gRQGEvk9OxBd/mA3yvN1S0WGRKx3pMrOeb204z66Ldx5NoFib11Onm WsBH55qRRVpDXVmJ6gN1+fiu3B72x6r4VM/BWG0ks5I4Fi8On4ZBOEcPlPQvsBWwI83T p+HA8uwp5hvf8DAirN21LgWI4fNh1Yu/9ONLtUD70IJEShxMjZu1jLdT63STsYvAD3nk qJfg== X-Forwarded-Encrypted: i=1; AKwUvBxRMIQiefFG0Iw3v8nbDqKUfKS6CNnoeSro6va9m4Gxa95HbGgz/kI6R3BXCkZv2PB0hE9nC2FeE6Ierjs=@vger.kernel.org X-Gm-Message-State: AFuF++mNlKhSAO3gyKLDWsVdCGYDBgs4ojoB60ApfPGtb+O754urIF7p zB4jILuPjXYeUR71bjhkmTA5bbNgx1HCjEZPVkqrogiGheMpbCmucHG5wHl1O406v+o3LnrHl2C vtoqMiIxuxzGoK1iHqDM3Mpe78Sr0dboiFx9Jb8+bGIillRUNVKL0tPsddQHqHjOY1XM= X-Gm-Gg: AYBFou1duHjrNIZQ8azH2QbwntP2Xi7hcX6IcY9IpnORVdaGbj3rl1HQ/Rfi3KcRSIB 7RteU9w1W6g8i4SBZiYsSzjNosUiR/tLqsSRL1IpnlyujmeeBxM3OLRZ94NDk8TTistSDnxgQdr SYuDkNXk859DhzyUvXk3GWWKLHIeXgdjS/QQkDDXvfr4ZHN/+PcDzC15vxMgu7qOyBLzGFd11aD 2QDSMs84RMAr5NkuCBf7wVobdUtewtl3Jo4B1GvDxyXJ0MVqiNzg+yEffC+NH4n4Nv1z+RPhNf3 DxRMP9LVz0eALj6xWVvoqUIOeOL7lCEcIVZ38/QPrf8XT2snQ7zznqeZ66YhGHhvOOqUlJjo+Fh igjJkt+QBRkaghL8GzZJY9QvTfn3vrJpF6gJGevoUWz/h1h/0Y6DTIoMiBaynfDOuZTQCbbI76H jePZ3h0byFp2rcaUgW5oiO3QjJQQVlhNeqMBW2m4fjt46Mk1m7oOI= X-Received: by 2002:a05:6102:e0d:b0:778:636c:71cb with SMTP id ada2fe7eead31-78a4a9c40c1mr2809071137.10.1788536544026; Fri, 04 Sep 2026 08:42:24 -0700 (PDT) X-Received: by 2002:a05:6102:e0d:b0:778:636c:71cb with SMTP id ada2fe7eead31-78a4a9c40c1mr2809050137.10.1788536543607; Fri, 04 Sep 2026 08:42:23 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:22 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:17 +0200 Subject: [PATCH v6 02/11] Bluetooth: hci_qca: Rename 'power_ctrl_enabled' to 'bt_en_available' 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-2-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Dmitry Baryshkov , Bartosz Golaszewski , Wei Deng X-Mailer: b4 0.14.2 X-Authority-Analysis: v=2.4 cv=F+xnsKhN c=1 sm=1 tr=0 ts=6a9ae6e0 cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=wYtw_XDhO1ghKZOGarAA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-ORIG-GUID: S1sG3qnw-3NCY20m4S727lMGumw3UpF9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX8Eo9TZafi4Tp I3SyETYVZ9/W/kE/hdRbdkykCOEH4vavrEKrCKatb4TvpPxtGXX8dhkH961ph56uo1IpAx9Sl4P 14aze6tf2OhcS1UEyjjN3K/geIdgr0A= X-Proofpoint-GUID: S1sG3qnw-3NCY20m4S727lMGumw3UpF9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX+bNIetaqwCrv 87VpTopiAzuvscRT2R+VrHMPn1pa+m9xcotTf8Q4XKR3D+EJabCgLQRWJIYr/64tQOTVX0Gl72E rMkiMXYAT1gQql4Zzb/T7hwPwmOE6/EsLR8nznbrAdCaRjxvcbQ4RXb1AAp3sCf8UjnF7Pj1Qp7 jWttH/7LnFbbbt8LxsHAF6zKSuVx6F3xWDnSBc4q2PTIER5RT38dEG7I7viL2mqTG/MfvDrF88Z HSBCRQ8/5bJXng8e/qLj6p8eS3D9oKpyUL14Mb0+St6FmUM4pqF19F8imD8FH2qlYzoapn+1aaz uBSvWtrfP1nHuq1E0FYiYe07lO5U97W+rQXz/UHUIo9pRwJeuVW0UPkU0mNMnnmHWJRHr7zZCmL R2hOqu8qw/GVC9edgXRAZykftcvowiMUTzFFcuPvK2mpz50ANpkuJRE781y55jeYZvxyRqh8zrR usm0Uir4x3O17Bimwpg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 From: Manivannan Sadhasivam 'power_ctrl_enabled' flag is used to indicate the availability of the BT_EN GPIO in devicetree. But the naming causes confusion with the new pwrctrl framework. So rename it to 'bt_en_available' to make it clear and explicit. Reviewed-by: Dmitry Baryshkov Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index c8ea5507bdc2c83f214e3154b5ad6d05f418a1d4..f7a20138cb742e8f6ea51d565aa= 8da8751f21f37 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2396,7 +2396,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) struct hci_dev *hdev; const struct qca_device_data *data; int err; - bool power_ctrl_enabled =3D true; + bool bt_en_available =3D true; =20 qcadev =3D devm_kzalloc(&serdev->dev, sizeof(*qcadev), GFP_KERNEL); if (!qcadev) @@ -2504,7 +2504,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) (data->soc_type =3D=3D QCA_WCN6750 || data->soc_type =3D=3D QCA_WCN6855 || data->soc_type =3D=3D QCA_WCN7850)) - power_ctrl_enabled =3D false; + bt_en_available =3D false; =20 qcadev->sw_ctrl =3D devm_gpiod_get_optional(&serdev->dev, "swctrl", GPIOD_IN); @@ -2542,7 +2542,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) } =20 if (!qcadev->bt_en) - power_ctrl_enabled =3D false; + bt_en_available =3D false; =20 qcadev->susclk =3D devm_clk_get_optional_enabled_with_rate( &serdev->dev, NULL, SUSCLK_RATE_32KHZ); @@ -2560,7 +2560,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) =20 hdev =3D qcadev->serdev_hu.hdev; =20 - if (power_ctrl_enabled) { + if (bt_en_available) { hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP); hdev->shutdown =3D qca_hci_shutdown; } --=20 2.34.1 From nobody Sat Sep 26 04:31:00 2026 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 1908F4FB9C6 for ; Fri, 4 Sep 2026 15:42:30 +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=1788536557; cv=none; b=b4NJy48XnXmmkDfQX9UPBWFVRehFgxcxdmhEEy6IgXjLOeSLFDHSekfiWVJS1nUwT5jV04ik7YlA1meXZveZe0F06AnOo7p0X4doZTyz86MKLlK7jLyBlzyPHeJP1EWFp1JF+DwUIOb/iovnuGx7ZB0SuIrNvVEgfvQic7xAwJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536557; c=relaxed/simple; bh=EV1IQL++muBemnHDLd4zHB8KbYjgmJunDIYzAh6oWWU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EzKqi55dOsanWkRmVge36GTKbSS4mtZwKrrp8WFdmobupg+hgsGjPac7O0H+jXdMyFjgMuEdprRnQwkTd78j4PnTV+P7CUNzfGvCkQRqaqWqMy5mhi3tXkubK1NC2ueLTUTGoxTgEiU7oZlERxAFw8eK8vRSxrvyBjyLMfsAXd0= 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=lyPrPgco; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=WwzqHixX; 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="lyPrPgco"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="WwzqHixX" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684EiJUG468112 for ; Fri, 4 Sep 2026 15:42:27 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= UrNjtqPRiinyny6O8iHF+XsMQr2twrQF5BAL+YJEb04=; b=lyPrPgcoMx6wkJ6J 96FvB+YbEic6pHI+WXpBScG7OBlwSwg5gl+oE+glnYMaR8d/OH9HEtqgAgP96RS0 1eAz2CcKr+ua/ZxoNvO5wRVWTIy/8FF/BdSO4HXJR6c9GO03Hq7nWlf4n9DIbQSV 30T7pmJ7eczFgBKakAAHBdDXJJV6VWNOJfLJvbYGhLTiq1h2pVeHssn8C0CRR+mN rmzzDY3ZI9Or+tp5Ugp+wJQLxtG7KZ/uNOVia60BPu9pbuoDYComHudSoFZ9Vvsq jJXAKSV93XeBASePLJ8tJyMIzjs0G7ziceWU6pnFvJ3N7fO7T4fGJ92Y4ebtmpe0 i4NVJw== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg01089nc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:26 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-97e8be2221eso139126241.2 for ; Fri, 04 Sep 2026 08:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536546; x=1789141346; 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=UrNjtqPRiinyny6O8iHF+XsMQr2twrQF5BAL+YJEb04=; b=WwzqHixXR35YYDJqO5BwtcM/SmyGs3fZz6gtRHEzULi6XjwyHZ2eDkL7UskRNHbdYx z+50BVyuvsWwq0GdvlPxUf/RnVevpa3FjtBpB7zkN/aehiiyqk7+u+D8hErh5cEI+eM+ qffrxJmgWsCq8hIZXQgk+U2DHGrCs8YTB29d9rGzk0qyEEvOOEpRcu7UterEIcGLvv8t 7IPiWZRIkKen9wN95lZ42qjy5vVF2h6P0eZjmMTwy68RhTcBRMk2rb/64bUAwCzH8mog VbveKjHXD/g4ZKlMZx8PvrTzMzD+o//Ays85QshPW5uTXoBEK98GtvcsmlzavNNhWYMV GoPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536546; x=1789141346; 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=UrNjtqPRiinyny6O8iHF+XsMQr2twrQF5BAL+YJEb04=; b=M+sSBBAFCFmVX5E4/IWmXkgAf80YrTV1nokoe6k0ML1EeOXcrtjGqo2ZZKhbV8f6fw rP2N2a4RMsY9eeyQaNB3NZgCGI0nejnG8ghpf3B4lszosbbBhO+MUImSQdcxahK8Z25e L8OMMGUqFoqs+xrnDhDQ/VoOWTcwhwil+UTr0AQWt8HCAkRjW4qj0mgFPxevndb78u8Y UQ5QBFzh4JYfhGN47Cn8zVPntH7W0TjFdmItimOxgGUw39VcDA9YuUAU37p/vXZXTFR1 PRCGTl7bcpjdD4TmMfa2AcNsw1Ut1PmHJL7CvTJRTH3/bWAx7RslpB4tyej+QK1OIPmX b84w== X-Forwarded-Encrypted: i=1; AKwUvBy7iV3/xUibwJe7xu9Myqv92qqOOZovV+tLHz75trpc9sWSgpOVQOJG94de+/HZWJTLSCQZCEPX8cUVwac=@vger.kernel.org X-Gm-Message-State: AFuF++kv6PbvEUr+IhA1KmcNUJw9LDDLLR1ssTRdGEzqfWywjwJphxJo 3VgEy2ULgYByVLfk4ttdeM0sxRQOaHfAGwxOP09+QVBtP32A9NhfVXV+UGI52fyWvExylXYAYil NkFnZDr1hg5VhYxjbHhqChCGdxdhRi9nFXLaczEYRNc89JRLFVWQUizz/TPcT+/8T2iY= X-Gm-Gg: AYBFou1xJbVQ4xQVT/GFddr2k3tWEKVAH2LyE3ZgKiuhELe7IfFHmWbPyyAfAsWTsSY sc1B0vjm5/YdXPO3T/dWNjf5sq4lx7rQXYREZt5jYe3qJvxdS8nNc8vYQdnW0/MXRI0n0ocpKxr XvludvNCKomhQigogRgMCQLeVscQI2xFot/OxWtQW/3cM4gbAeXkid9DLhBWK5iSQT6685ae2ar QeEF/Nn6TTans7xo1H0kFJOWyw/F0X76LSaTXeXsLvuG51Hwj4HVw1lut9ttJm6QjnaMejZT6h4 3lR1qrObZhFp4AEysfw3PrTGyqmfChNrxacA/Ti/CwsoFTWArtCsbHvgrmxaV7qjT0IcNyZ9557 nAPQ8Bye63w9HDUGc5aJqidx/sPKIK3GMhvR0CP/AjFY3+BqP/jDOcNQ7PRZj76IscRifvKygVj szj+T8kFoDXzQGqUSuaud7TCzcooqNDhtHpyU2VLGae0WPqor6EoI= X-Received: by 2002:a05:6102:943:b0:782:de7b:eead with SMTP id ada2fe7eead31-78a4a68089bmr2121553137.1.1788536545776; Fri, 04 Sep 2026 08:42:25 -0700 (PDT) X-Received: by 2002:a05:6102:943:b0:782:de7b:eead with SMTP id ada2fe7eead31-78a4a68089bmr2121526137.1.1788536545349; Fri, 04 Sep 2026 08:42:25 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:24 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:18 +0200 Subject: [PATCH v6 03/11] power: sequencing: Add pwrseq_is_controllable() API 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-3-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: JARM_GRhSMeuE9BJIRKY2-7_gw8QgeH6 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX6z9+NKaeU/TA kTC5pjgTTy9yOx2Ga6rHWz+/zeIr+gKWo22VWPcXk2zdjrPJ9CJnnvhS0srcnnF2ZqaEp94odv4 QfcxdYLBaMATM/R1/om+wNuK1qSX3Bk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX78NEwNlxJsF0 Ps4dMXCbyB1+0Zi7wrOD9q0F9/UNANb/YLCs7/k0SpNlmCh6wv+vw2HJjDuUma2Qtz38tnzOk5c t26V1wBCfFJnv7LyMy+wG+V3R+XafyabSPZXYvmvjMiIIDRSHtDKs6yVYnorQrGXOBucw2vPyA2 qrKPA20Kbs587B8qPJIvwK/BXFBJ7FgjF1tgIkD7CF6mcfsgcIBkXbaxgRcSt1Cw2wnhAhz+g3y bwDXxGwJUr3Jp3nlyBHfp2qqvHmRNs+aFTLVMadrnCk3emYnLMlCuQeTGLb5OImiChGehuSUIOd VWLgQTp7u0TcxZISyTwW2FNzTqzfYb+ggyeCRw5buptNCA2WswSaY+fSvdH6bAzyhJSVb47FVOg 9hW9pB+95Ats+FPYoahu38gNU3KRIXfRRB3goBnz29RfRN77yXq58Jsgv+MeQQl17rUS0bz3vPw zrdkBgj4CKCX/qO/PnQ== X-Authority-Analysis: v=2.4 cv=Zp7d7d7G c=1 sm=1 tr=0 ts=6a9ae6e3 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=4a-8Ivk512-2hps7UIkA:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-GUID: JARM_GRhSMeuE9BJIRKY2-7_gw8QgeH6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 adultscore=0 spamscore=0 impostorscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 On some boards a power sequencing target has no host-controllable enable for its function, for instance when the enable line is not wired up to a GPIO and is hardwired to an always-on level. The pcie-m2 "uart" target is one such example: when the M.2 connector does not route the W_DISABLE2# signal to a host GPIO, its enable/disable are no-ops and the consumer cannot gate the Bluetooth function at all or exclusively. Add a generic pwrseq_is_controllable() helper. It reports whether the target's final unit provides a host-controllable dedicated power actuator. The target can implement a new optional is_controllable() callback, reporting whether that actuator is effective on this target (for example depending on GPIO presence). If the target does not provide the callback, it is assumed to be controllable. Note this only describes the target's own enable actuator. It does not imply that a power-off reaches an electrical OFF state, since a target may have multiple consumers. It also does not mean that power is uncontrolled for the target's dependencies: those may still be gated on their own. And it does not restrict consumers from calling pwrseq_power_off() either, which remains valid to drop this consumer's vote on the (possibly shared) resources and dependencies of the target. Reviewed-by: Manivannan Sadhasivam Acked-by: Bartosz Golaszewski Reviewed-by: Manivannan Sadhasivam Signed-off-by: Loic Poulain --- drivers/power/sequencing/core.c | 49 +++++++++++++++++++++++++++++++++++++= ++++ include/linux/pwrseq/consumer.h | 7 ++++++ include/linux/pwrseq/provider.h | 8 +++++++ 3 files changed, 64 insertions(+) diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/cor= e.c index 721e888b658d1f254513e126bb72f2d0487a8383..88a507deedda30c2d94ac1ce951= 51cc300e3a77e 100644 --- a/drivers/power/sequencing/core.c +++ b/drivers/power/sequencing/core.c @@ -182,12 +182,15 @@ static void pwrseq_unit_release(struct kref *ref) * the state lock has been released. It's useful for impleme= nting * boot-up delays without blocking other users from powering= up * using the same power sequencer. + * @is_controllable: Optional callback reporting whether enabling/disabling + * this target actually controls power. */ struct pwrseq_target { struct list_head list; const char *name; struct pwrseq_unit *unit; pwrseq_power_state_func post_enable; + pwrseq_is_controllable_func is_controllable; }; =20 static struct pwrseq_target * @@ -206,6 +209,7 @@ pwrseq_target_new(const struct pwrseq_target_data *data) } =20 target->post_enable =3D data->post_enable; + target->is_controllable =3D data->is_controllable; =20 return target; } @@ -991,6 +995,51 @@ struct device *pwrseq_to_device(struct pwrseq_desc *de= sc) } EXPORT_SYMBOL_GPL(pwrseq_to_device); =20 +/** + * pwrseq_is_controllable() - Check whether the target provides a + * host-controllable power actuator. + * @desc: Descriptor referencing the power sequencer. + * + * Some power sequencing targets provide no host-controllable enable for t= heir + * function on a given board, for instance when the enable line is not wir= ed up + * and is instead hardwired to an always-on level. For such targets a call= to + * pwrseq_power_off() is still allowed, so that the consumer can drop its = vote + * on the (possibly shared) resources, but the host cannot gate the functi= on + * on its own. + * + * Returns: + * True if the target provides a host-controllable power actuator, false + * otherwise. Also returns false if @desc is NULL. + */ +bool pwrseq_is_controllable(struct pwrseq_desc *desc) +{ + struct pwrseq_device *pwrseq; + struct pwrseq_target *target; + struct pwrseq_unit *unit; + + might_sleep(); + + if (!desc) + return false; + + pwrseq =3D desc->pwrseq; + target =3D desc->target; + unit =3D target->unit; + + guard(rwsem_read)(&pwrseq->rw_lock); + if (!device_is_registered(&pwrseq->dev)) + return false; + + if (!unit->enable && !unit->disable) + return false; + + if (!target->is_controllable) + return true; + + return target->is_controllable(pwrseq); +} +EXPORT_SYMBOL_GPL(pwrseq_is_controllable); + #if IS_ENABLED(CONFIG_DEBUG_FS) =20 struct pwrseq_debugfs_count_ctx { diff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consume= r.h index 16fad5f3e3ab563110598f733e4a6c10a7b13f2d..b69117ad3fa72aa46ea1f6adc0d= 4ea3bdd1cf695 100644 --- a/include/linux/pwrseq/consumer.h +++ b/include/linux/pwrseq/consumer.h @@ -25,6 +25,8 @@ int pwrseq_disable(struct pwrseq_desc *desc); =20 struct device *pwrseq_to_device(struct pwrseq_desc *desc); =20 +bool pwrseq_is_controllable(struct pwrseq_desc *desc); + #else /* CONFIG_POWER_SEQUENCING */ =20 static inline struct pwrseq_desc * __must_check @@ -58,6 +60,11 @@ static inline struct device *pwrseq_to_device(struct pwr= seq_desc *desc) return NULL; } =20 +static inline bool pwrseq_is_controllable(struct pwrseq_desc *desc) +{ + return false; +} + #endif /* CONFIG_POWER_SEQUENCING */ =20 #endif /* __POWER_SEQUENCING_CONSUMER_H__ */ diff --git a/include/linux/pwrseq/provider.h b/include/linux/pwrseq/provide= r.h index 33b3d2c2e39decafac6c6fca9254ad4329d90e94..7285ad94a2214070a1c27f25c78= 3f51105705b36 100644 --- a/include/linux/pwrseq/provider.h +++ b/include/linux/pwrseq/provider.h @@ -6,12 +6,15 @@ #ifndef __POWER_SEQUENCING_PROVIDER_H__ #define __POWER_SEQUENCING_PROVIDER_H__ =20 +#include + struct device; struct module; struct pwrseq_device; =20 typedef int (*pwrseq_power_state_func)(struct pwrseq_device *); typedef int (*pwrseq_match_func)(struct pwrseq_device *, struct device *); +typedef bool (*pwrseq_is_controllable_func)(struct pwrseq_device *); =20 #define PWRSEQ_NO_MATCH 0 #define PWRSEQ_MATCH_OK 1 @@ -43,11 +46,16 @@ struct pwrseq_unit_data { * the state lock has been released. It's useful for impleme= nting * boot-up delays without blocking other users from powering= up * using the same power sequencer. + * @is_controllable: Optional callback checking whether enabling/disabling= this + * target actually controls power (for example when the + * controlling GPIO is wired up). If not provided, the + * target's power is assumed to be always controllable. */ struct pwrseq_target_data { const char *name; const struct pwrseq_unit_data *unit; pwrseq_power_state_func post_enable; + pwrseq_is_controllable_func is_controllable; }; =20 /** --=20 2.34.1 From nobody Sat Sep 26 04:31:00 2026 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 576B14FDE4C for ; Fri, 4 Sep 2026 15:42:31 +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=1788536559; cv=none; b=YDYaNTbabWOcUr4Bp0OtNSbyzHuPQwGp9VnHx2/w+Eh2OgxeMvxibUuCQgitFWhoSQB7otMwW8lBEc2bbCVgG+ODh3s8tEsXBb3q9+2EptBfFXLac3QWHUI/cJxUQPkzckIICDap45FGZ0xvHUWgFkYHFOVAxabK+Ejkf//qhGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536559; c=relaxed/simple; bh=v+n+nmdFdnTVbNIb0TxN7WMBm2mqsLqLg3eHOpRK3EY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AXOhE7g4oEWOcwgqsQrlY3idEA0CIqHVIBYnH8JkPFmWHb7ENaNhJKkPH83c86c4mgtJwFziUyRxCKsDp5qUrrSjIDC4+5cf7QXpiDKwgAB0ZJ2846rGTBu+6CjKQDOKuxURJKzwqPFY5FcqJz4pGhlRiFArfiEupmY0oFo8mqY= 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=a2GDmqUb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=hl0ADRbb; 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="a2GDmqUb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="hl0ADRbb" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684EiLso3329488 for ; Fri, 4 Sep 2026 15:42:28 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= rJpihxR8z/RckkhTvBE3C58BSaU7qi/UDpmaSYSphAU=; b=a2GDmqUbUYlfiQ28 syEw97CMlDNJ4iCtBqfFLCVtd0PsCRa25LknCzyN3oQR8wZblfNI7ssPV+Nd9Ea8 fCNjAi1KufL8Yxx0I+MUfsA1LzkC/cT+1GA24CSCjB0tAzjy0PtWKH4b2QJqCZNW lW5Trmt90lG/Gb8BojHHcnjxd9H/wuF0B34kUI1BAjq3JkypTRTWQFLy1d+iWXn7 d/E4bU1sgyWQBkzl7e9HJlyfezxw0Dv3kqXgP0RA1hPPXwVl20uB63aaSRA3JVo2 OBgsU3ZAnlbxjRCkKx4QOXRFZn7xpIrZKAoCHNyNiiISW1xtllU8gzvCEjd3daBB odYoTA== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg00y88s1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:28 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-92e82060977so191086985a.1 for ; Fri, 04 Sep 2026 08:42:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536548; x=1789141348; 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=rJpihxR8z/RckkhTvBE3C58BSaU7qi/UDpmaSYSphAU=; b=hl0ADRbbvESClIk8f21MTRihuSDpZjncSZar1C4k3sunhYimt3QAVM3jkDbjtDD/1o ACtDQpuAGUKJdaPx3f9/t6KQPt0HpTCpXjWveZuV1Ka2QzE4dTXqOKQC97XgUp32IOvW C2GP1TYELMmBkttq9ANw6J1CjIt10ppgWR3jOk2unhH3lVpqnzX+mB0m5KBLnNOPYD2m q9u+tUpWdLljM2X2xuXfg3nHZ3z2GA01E9huSy+orpWn/KBvNeEFzIClyS9R669t7uR5 wojTOOXLIFZyxyEfTZa21n0XLpUVnRXRyLeMDQ+eZqEiaDoFIhBdVLElZ0CKXHvkH7x/ htvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536548; x=1789141348; 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=rJpihxR8z/RckkhTvBE3C58BSaU7qi/UDpmaSYSphAU=; b=k+wB/syUTGiU9RAkTBAZcFUqcCOPCL7eZJeNNYPOyAcmqeXcbEASlsH9vezzTxHLqD VX4XZKv12OYa7Zae2cg43NWCsiq0koMvelWRzif5VZM/8vgrHDFbJqfW+cfFsASNcFm7 P1DhVoVppq5XOGjjfEu4xN74aucpD9W5uv1vfqLl7aUmkNE7gcUt8aVrvsjaCbdeSGQ1 WBEQk1THxSbescsd50EvPz1PVCoz+HmKzr790LtUUaewZnvanpLv6HZAE5PAKZ2wcmc4 G60rl7EBWPjJZK0GDfhy0V+Rw9AOP71VoD4yvmXM3QIwN/7lVj7CqqGznHoaHajzR21X eEbg== X-Forwarded-Encrypted: i=1; AKwUvBx562rY3kVMvhQFIWq6m497LvlsN63mcnV3vnAkeN57F3DkV1To9GgwxCp0pXz9oPpbQ6CA+ktWrUYuyKY=@vger.kernel.org X-Gm-Message-State: AFuF++nsRmBIcF0rJ9o61rLnfN8w6mwLlqrzfGDTuj4n3jEvVMvkerDJ O7bk1pZ8h2YFgJrwCDngNFEK/WuTa0sCwTylFIIoZS6CwndeCUZEdqtm/J/dY3Bf1QrzIx2ZIa2 8VogWwXi9sFwErS/V6PWQTzaYquswltljZHswDxpLYYNjMtUpYiiQiFJ88WzTjxa5uaM= X-Gm-Gg: AYBFou3dUdPK1S7bLDHontRcFGx+gs7zXMwGYQkz+G5x5Xn1OZ0I4LMxSnA92slZZwv wKV9rVFhnr3i3S4MCAu8SvvR+WgwE77WvCjuyEgozT3g5kfp6UBuLOmqBSV4k9cqDUFbcOzViid 3KVM3ACPfZD0jD9ql5SUrTT9BbxtV0Mgpi8n7kXKkIffoiIkiX6nanwzA/Ca4YEW2mMKn7D9MzM 2UjFX8XZl7C0bNdFQjJsGHbcvOtceDfhDicWMWcJ5mRKFrkhKnumxmvbkJB3LMree7qk/RptNoC vydXPzZ0nG1M1Fd+2akfhjGGBXlwLk3PKtJnV7QpqZ9GICsG09aObNR6Tk/UQ1whllIqC0xTi9k qA96zTH4qDAYwahUyKLUYqePnqPjXxX0xSc/Gl0NWzbxtjREI2CIeqzmCEyeRRPUhycEcGwV1Ym QGASIEj893Zt4oXX9Z1YAKVAXAKJWHYyX5hFyCg/866u303RcAiEc= X-Received: by 2002:a05:620a:2713:b0:939:72cb:bae7 with SMTP id af79cd13be357-93972cbbeafmr868828285a.30.1788536547670; Fri, 04 Sep 2026 08:42:27 -0700 (PDT) X-Received: by 2002:a05:620a:2713:b0:939:72cb:bae7 with SMTP id af79cd13be357-93972cbbeafmr868822885a.30.1788536547161; Fri, 04 Sep 2026 08:42:27 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:26 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:19 +0200 Subject: [PATCH v6 04/11] power: sequencing: pcie-m2: Report power controllability 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-4-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: ICZe0b9gL_2tbEwVUV9pHPfptXkbSQOc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX1ZFvfRShWDES F8rD7EEQvTwCexLi7YU2vJ794weBZ3L+jrQEjCCIIcjUpmuE2MY5uFDk5jVTdnR7LMlw87EESxY OkdE1EV9NGxkqUPLEz9nkftWnThsifwPbn1C3FO4VM2bnq5RdipZup8qHoIqKPuxjFR5p5K6o2f GuoI1tREL2qL/FgSEEbotboNnkqJtmKIcYoyd7tvguSUVJZkCrtjLJPNQeGwXqs+n0Qf/Q97PnI xnSXt2LAm4JWiqt2vCCNJ2+hDD9Va1AC9g73kNCi67dWQc7IG9LaNuIAWV9GIjQjQNe7gdhfnzZ 5vKb7lBpydPD+xx3g5wmmyVar4mMh/pMlmuuTw2xlXZ5lwkT8T5Wt8PgCaD1QVRC2Km/pVxSxI8 0j3ESLs/v3sd8CPRc2ikejrb+vsMiU+W5+WhZP+nxAvjV4zm/eNIpg4R4zPb2YLrSJbgrEkedbc TZbo5kE5HCrUQRf6DMA== X-Authority-Analysis: v=2.4 cv=TsPWQjXh c=1 sm=1 tr=0 ts=6a9ae6e4 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=Wval_j7vKiRkorSqWqkA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfXzfWsWc4A/+Bp qpBvzb3ZLZEWz/I1yQMtHnl/rmxh17BLbVeKE09bOzBhJ90by1mS4dReuFoPCvK0fP2s8KPyxTl fJ7AOrZLI+xdMM91wIKAv0y9Oi2w1gc= X-Proofpoint-GUID: ICZe0b9gL_2tbEwVUV9pHPfptXkbSQOc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 The M.2 Key E connector gates/resets its functions through the W_DISABLE1# (PCIe/WiFi) and W_DISABLE2# (Bluetooth) signals. When a signal is not routed to a host GPIO, the corresponding enable/disable callbacks are no-ops, so the consumer cannot gate or reset that function on its own. Implement the .is_controllable() callback on the "uart" and "pcie" targets so that consumers can query this per instance (based on the runtime presence of the W_DISABLE2#/W_DISABLE1# GPIOs) via pwrseq_is_controllable(). Reviewed-by: Dmitry Baryshkov Reviewed-by: Manivannan Sadhasivam Reviewed-by: Manivannan Sadhasivam Signed-off-by: Loic Poulain --- drivers/power/sequencing/pwrseq-pcie-m2.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index de9848a9a9f19dba6d2e9d756c3d30f6648738ed..bee1aa0e077db139a52d3078900= 53492b4513db2 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -83,6 +83,18 @@ static int pwrseq_pci_m2_e_uart_disable(struct pwrseq_de= vice *pwrseq) return gpiod_set_value_cansleep(ctx->w_disable2_gpio, 1); } =20 +static bool pwrseq_pci_m2_e_uart_is_controllable(struct pwrseq_device *pwr= seq) +{ + struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + /* + * The UART enable is driven through the W_DISABLE2# line. When it is not + * wired up on this connector the enable/disable callbacks are no-ops, so + * the host cannot gate the Bluetooth function on its own. + */ + return !!ctx->w_disable2_gpio; +} + static const struct pwrseq_unit_data pwrseq_pcie_m2_e_uart_unit_data =3D { .name =3D "uart-enable", .deps =3D pwrseq_pcie_m2_unit_deps, @@ -104,6 +116,18 @@ static int pwrseq_pci_m2_e_pcie_disable(struct pwrseq_= device *pwrseq) return gpiod_set_value_cansleep(ctx->w_disable1_gpio, 1); } =20 +static bool pwrseq_pci_m2_e_pcie_is_controllable(struct pwrseq_device *pwr= seq) +{ + struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + /* + * The PCIe/WiFi enable is driven through the W_DISABLE1# line. When it + * is not wired up on this connector the enable/disable callbacks are + * no-ops, so the host cannot gate the PCIe/WiFi function on its own. + */ + return !!ctx->w_disable1_gpio; +} + static const struct pwrseq_unit_data pwrseq_pcie_m2_e_pcie_unit_data =3D { .name =3D "pcie-enable", .deps =3D pwrseq_pcie_m2_unit_deps, @@ -132,12 +156,14 @@ static const struct pwrseq_target_data pwrseq_pcie_m2= _e_uart_target_data =3D { .name =3D "uart", .unit =3D &pwrseq_pcie_m2_e_uart_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, + .is_controllable =3D pwrseq_pci_m2_e_uart_is_controllable, }; =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_pcie_target_data = =3D { .name =3D "pcie", .unit =3D &pwrseq_pcie_m2_e_pcie_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, + .is_controllable =3D pwrseq_pci_m2_e_pcie_is_controllable, }; =20 static const struct pwrseq_target_data pwrseq_pcie_m2_m_pcie_target_data = =3D { --=20 2.34.1 From nobody Sat Sep 26 04:31:00 2026 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 4C4B04FECCB for ; Fri, 4 Sep 2026 15:42:37 +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=1788536567; cv=none; b=AXdtCNDlTLEjhfXv6QoxX8FgVALYSg3UGYbXBhq/hSAzH9dYdSmCu7WG9ubRTY9jFNqgIDibKqLgld1frEttiMqdcqq73sfMHub8ThpK6a3/dZG4mswYYCc3zlP4CGneHqu9XY0eOHu4di7Xhvl1f3F/UoxRKeAzMSrHuMUd8bU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536567; c=relaxed/simple; bh=DketuHJTJ2AlfYdQleqI6+O28Z0Vk44wfCYCPKymfKU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ifvQRzajqvuB9TOlJl0Nclbj5m0rRa9blDb5U25BMppz850O9/hGe75nbbm5DwtAq1mlSCEkJ15h88qdBAxsBbyedB0kMqTV2FT6XUvjIPlAGHgHtPfXV2dJD6qbMXOVcnTMu3GsawdO2ZhGakSF4pwE9QQ+HdWgBc5vggXnmbc= 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=GbRXD4v9; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DvdcFb5f; 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="GbRXD4v9"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DvdcFb5f" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684EiRoF3190495 for ; Fri, 4 Sep 2026 15:42:34 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= yApsV8ek6sm1DDA8uG/ESAfoNPZgj9MCFK73tfFdH0A=; b=GbRXD4v9A27QZCV0 IePXKo7wnG3hRuINtPA+y7vQ4hAhufw1eSbZGR8ApfMIJOGvE/CNtQZjUAoQrikR esR+cBp2gROES1vue+m9bq2TVfENRNJFfeVniBzvdefPPjvXH+vhH9fMNkueKtfw /GqAELUGXHt0/FKBf59Um+ddN1swEdGT92yG3FPap9uw3kjmdNZA6NTgMktDKxCi 8uye4/AJfDuO0MX7ktD/bFQiqHMUiv9hDGPkpEiqm5zvS8zF29iLskzj96I00M9W mQntvqqOUAm9wQcltweDatgMRhJaB+0ZjsT6Mrxw7UI38ZHyWXJElG74sgTnSmJH CaPpzA== Received: from mail-ua1-f72.google.com (mail-ua1-f72.google.com [209.85.222.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg010g8sh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:34 +0000 (GMT) Received: by mail-ua1-f72.google.com with SMTP id a1e0cc1a2514c-97cb18cfa04so881468241.0 for ; Fri, 04 Sep 2026 08:42:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536553; x=1789141353; 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=yApsV8ek6sm1DDA8uG/ESAfoNPZgj9MCFK73tfFdH0A=; b=DvdcFb5fy8pPb9CsYTiTinr/+tgNjv3FcpY3TfU+zqQC6NvyCteUs210gRhG7OYu7F 7JKnEUMqlQtRosOx1fXfdlB9woE8fK2BjwHkVJR0NmgdWOeJhXYL0DJ5cGwi0UjanULl oUQdCzOd6579xrglwXoK/T96hXKSXzJQt5uJ6T3lAd5krnlKr5ScbMScNBgSC3VkqKxB FlJakyWai2S+8adr4cFf2yxLqZcss1R0BxgTes1l7+T4TXbw7fHNmeCeB1YgMMBu27El JwWdT2aJzCrR231d50HFLVs8GpvzG8jLnAJ3fYIVjQ3JE1PfuUq14wgR1YZaq1uTmzxH ACQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536553; x=1789141353; 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=yApsV8ek6sm1DDA8uG/ESAfoNPZgj9MCFK73tfFdH0A=; b=T8iyRhnbLyRj+IOQlvRnsZ06tUYd5ZmFxCjGbTWGiQFYi3QapHdxmLZJpHAvGqDX7H 3zRZi2c6Im95+iIGQXMIimSX74kozSjfhGE4ewyN+9QjN1OGxZTbHYnpZQf6UTIQrGkq ryngngKWwKrm0jK2WNDtadklsEPBHESe16Y6f0tEyh7SXk5L/spSouuc69GhihILczfD Y7Su5h/cr0sGK/gYQKtmpaK/rIEzsI4MrX9IUOWhWw6rGC08se5mEbI4S73Zynff1BjW THuCFbv5+c0TE0tImbf6gMc0nnjjF+seH1DXlmo8SxWOs4b/Q9Ul9Vy68O4FixWpjlvY 6Utw== X-Forwarded-Encrypted: i=1; AKwUvBy+q0iBhXlBwD0q3+gPbsJ9gOxebwMfSmA8mGyc6VmT0FCz6PIZYe83Po6J2esuBGm23zcvNFuYYHX77Hw=@vger.kernel.org X-Gm-Message-State: AFuF++n+9jS1Jd5USX+vw5UhySaPcxnGhK9AEzEz2Uvndtt1NCTLk/o0 20td/86gaSSC+oHKMDwYJ5sPlvnjgB0XSxoUK90i8/yaSWEyHK7zVuWUP0j6gcmTS+C0Sd9okat WC60Ayr//BMpwidndiiuAr/xE33tuuTv1c3bZTk/t+bslhV1ByhVdQ5eJkDZXVl9Bf0A= X-Gm-Gg: AYBFou1HeOLC5njb5lGJa34XL3WD4yqpqwI5g7rF0rYrEUpOlRvEOeA/GOkMEo7doh7 EN0zVwiUxgBfi2VluCQ46PSo/i8K/SNCVrn6KJOIdZkPVA5SCXaAewyuZyclqnpg8NO45PgO5ld LrzTE/vn8R1FLInaB8zEHUUdkoJJZ/22GN1DFqPYxjHYNDktg3kV37SipOcGNTGll/RwtI24LO+ wiTPzybKaNSMZfY5ldGKyMhB5Q7SLP5L7DVs4+yzU3wwLEylQ1F0BSjdm1KAEath2mY2CLtUJ/E ZU8mNyx8lzEGRQRD1yEUnOAD553XoShMkBj/zriDqt9oYrxc/ko/y4gbSE5MNHCPtKhJQtPS3wl lptbRTKayx7enTHtrGtrNsc8OezGJODLvM3Jpxbo1jVC6YpFrtt+UguCdNNp3aSQIrRSSqQlSMY meKcjV9YQicMwwojZy1Hc5B5Ar/FP2X+dgrP3QakjOAFWa5TyBNCs= X-Received: by 2002:a05:6102:80a3:b0:77d:9fe9:1716 with SMTP id ada2fe7eead31-78a4a6e83e9mr3371902137.2.1788536553353; Fri, 04 Sep 2026 08:42:33 -0700 (PDT) X-Received: by 2002:a05:6102:80a3:b0:77d:9fe9:1716 with SMTP id ada2fe7eead31-78a4a6e83e9mr3371628137.2.1788536548990; Fri, 04 Sep 2026 08:42:28 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:28 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:20 +0200 Subject: [PATCH v6 05/11] power: sequencing: qcom-wcn: Report power controllability 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-5-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX/uMBVw4e2UDz b7HaUaQbZiwbOH95kHH0KPvG0Km5tp8jG650bWZgiJLWHyWgecLekQDOpNdxWq+lhItd1ptLCxB sGMIbEtPI1q+/J36e8oTTyFuMyPZB3REcLcmqVmTYSl78VT4dj04AIwgvzp2epxxDD7K2lp31LH I0MKHIOMMYUVBif0Cl9mI9QuyQ703hGXs/a0lguo4ThMeUS8Ob5fKxqhf8DKW2EeLLgm7G5KEm4 RFgB3mm9e95G/R3rg3Xee6D48t406+LhAvfCQeb7e/sZSlp2JtdK7zIAE4yKWTFFo+EnebfaaJh lUSr5GKBKeVVx99+BXU0ztnGi+hHQQ+20fbwTqnpLbLYAQbL98LIqsYmGuCsiSx7g+XOEkwfoVE UXLBeJBCG0KGj8J8jJ3RYEP6Sb56KPjslYMOlsVo+PVBca8eH3wp0JeoWEjDJAHldfar+W4txRh eF7pHELlHa6bjBFVMBA== X-Authority-Analysis: v=2.4 cv=YNavDxGx c=1 sm=1 tr=0 ts=6a9ae6ea cx=c_pps a=ULNsgckmlI/WJG3HAyAuOQ==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=QWuo0IUDA92h_ITipQ8A:9 a=QEXdDO2ut3YA:10 a=1WsBpfsz9X-RYQiigVTh:22 X-Proofpoint-ORIG-GUID: n0RsK6qL5GsMCr0IURsc8RyBkmq6AyXU X-Proofpoint-GUID: n0RsK6qL5GsMCr0IURsc8RyBkmq6AyXU X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX81ZYbp5NkfTW K3p27zlx4ZnyYA6JRRPY4lUDLYAglKl1OHLghD9Hb9WPD/F0XCw+m5SaPynsviFRkal1O/n31Od RupfOzWIB6sdH+TLJnpplkQPLoViNd4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 spamscore=0 bulkscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 The "bluetooth" and "wlan" targets drive the BT_EN and WLAN_EN GPIOs to gate the respective functions. These GPIOs are optional, on some boards they are hardwired to an always-on pull-up and not routed to a host GPIO. In that case the corresponding enable/disable callbacks are no-ops, so the consumer cannot gate or reset that function on its own. Implement the .is_controllable() callback on the "bluetooth" and "wlan" targets so that consumers can query this via the pwrseq API. Reviewed-by: Manivannan Sadhasivam Reviewed-by: Dmitry Baryshkov Reviewed-by: Manivannan Sadhasivam Signed-off-by: Loic Poulain --- drivers/power/sequencing/pwrseq-qcom-wcn.c | 30 ++++++++++++++++++++++++++= ++++ 1 file changed, 30 insertions(+) diff --git a/drivers/power/sequencing/pwrseq-qcom-wcn.c b/drivers/power/seq= uencing/pwrseq-qcom-wcn.c index d41793e1fcd94e6d9073023498e111720af2c0ac..7f88a29b2c33bba5b1bc8e625f7= bad26321fb1a4 100644 --- a/drivers/power/sequencing/pwrseq-qcom-wcn.c +++ b/drivers/power/sequencing/pwrseq-qcom-wcn.c @@ -183,6 +183,19 @@ static int pwrseq_qcom_wcn_bt_disable(struct pwrseq_de= vice *pwrseq) return 0; } =20 +static bool pwrseq_qcom_wcn_bt_is_controllable(struct pwrseq_device *pwrse= q) +{ + struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + /* + * The Bluetooth enable is driven through the BT_EN GPIO. When it is not + * wired up (e.g. hardwired to an always-on pull-up), the enable/disable + * callbacks are no-ops, so the host cannot gate the Bluetooth function + * on its own. + */ + return !!ctx->bt_gpio; +} + static const struct pwrseq_unit_data pwrseq_qcom_wcn_bt_unit_data =3D { .name =3D "bluetooth-enable", .deps =3D pwrseq_qcom_wcn_unit_deps, @@ -217,6 +230,19 @@ static int pwrseq_qcom_wcn_wlan_disable(struct pwrseq_= device *pwrseq) return 0; } =20 +static bool pwrseq_qcom_wcn_wlan_is_controllable(struct pwrseq_device *pwr= seq) +{ + struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + /* + * The WLAN enable is driven through the WLAN_EN GPIO. When it is not + * wired up (e.g. hardwired to an always-on pull-up), the enable/disable + * callbacks are no-ops, so the host cannot gate the WLAN function on + * its own. + */ + return !!ctx->wlan_gpio; +} + static const struct pwrseq_unit_data pwrseq_qcom_wcn_wlan_unit_data =3D { .name =3D "wlan-enable", .deps =3D pwrseq_qcom_wcn_unit_deps, @@ -257,12 +283,14 @@ static const struct pwrseq_target_data pwrseq_qcom_wc= n_bt_target_data =3D { .name =3D "bluetooth", .unit =3D &pwrseq_qcom_wcn_bt_unit_data, .post_enable =3D pwrseq_qcom_wcn_pwup_delay, + .is_controllable =3D pwrseq_qcom_wcn_bt_is_controllable, }; =20 static const struct pwrseq_target_data pwrseq_qcom_wcn_wlan_target_data = =3D { .name =3D "wlan", .unit =3D &pwrseq_qcom_wcn_wlan_unit_data, .post_enable =3D pwrseq_qcom_wcn_pwup_delay, + .is_controllable =3D pwrseq_qcom_wcn_wlan_is_controllable, }; =20 /* There are no separate BT and WLAN enablement pins */ @@ -280,12 +308,14 @@ static const struct pwrseq_target_data pwrseq_qcom_wc= n6855_bt_target_data =3D { .name =3D "bluetooth", .unit =3D &pwrseq_qcom_wcn6855_bt_unit_data, .post_enable =3D pwrseq_qcom_wcn6855_xo_clk_deassert, + .is_controllable =3D pwrseq_qcom_wcn_bt_is_controllable, }; =20 static const struct pwrseq_target_data pwrseq_qcom_wcn6855_wlan_target_dat= a =3D { .name =3D "wlan", .unit =3D &pwrseq_qcom_wcn6855_wlan_unit_data, .post_enable =3D pwrseq_qcom_wcn6855_xo_clk_deassert, + .is_controllable =3D pwrseq_qcom_wcn_wlan_is_controllable, }; =20 static const struct pwrseq_target_data *pwrseq_qcom_wcn_targets[] =3D { --=20 2.34.1 From nobody Sat Sep 26 04:31:00 2026 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 257994FDE42 for ; Fri, 4 Sep 2026 15:42:35 +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=1788536566; cv=none; b=IlcsNc/3U6In76DcrJh8GW40u+1L8bqSRUuiXnptR1rPQqViIxJs16HJkd3IRpkIQqLqOLllvhqBsurUfOaN5Kmh9X9QjvXsfSCmxHXE8lIfgonaIyM0rQ8x4wDGTRYn3Xd8N47qd3XWTPzbDh2AiGbrAh3jpficRbk1s2fIRls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536566; c=relaxed/simple; bh=19QULZ5mc7UMmZUZ7tuvsXXvDMzyVLM7eK1cvidnb+w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ChTcqcrKS0ZL6ibqLoKb/bjaKokJr7ZfRWRrllGXh3MmCHzXK+EF44yK1giqKaTRs237CPJO9rioMjQ92AqC//Ihz1cjYllnqUF6dT0u8HwunbCN/9ZT5VyqfAnltGTJI9mTZbeY+hlTCk62yxxqshzpJUXkMZPq/U/rN2oCeZM= 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=Y6JoBLVM; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ceNn+G4d; 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="Y6JoBLVM"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ceNn+G4d" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684DgvZF3121431 for ; Fri, 4 Sep 2026 15:42:33 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= Wu4aU4+aLtX2c9UIKmkxVl2o/Ry3P2/k4p1oqgR901A=; b=Y6JoBLVMuh8timkm lujZVPaIYy2/KFW3tvZ1/aNQYBdB14v09wVVReNg58HyMcu7DOI8hnxdIvv1gU/c i7tkrFG9XvtohBsTMv/TfzZ/TV+h2NYeYa3pEovn2/HZJNiaSqQz9JQFYEpKfJIC aCKfEJPNDMoo//jECWQQbzkCi7adPwP9ukydwwpbLuNhHs0ikfT/wjAQZ6utwR06 iz6NzM+dF3yhUWqhGeVeDCTRLEj9bGN4tSIFRjea3OTY1cOXeRhP9G1SCAv3oSC8 F0GOI5H1Nzoat/82tfV7z+9IHZo5gt+PbZTqLSX4f1YXecTkwyeHIxyDczM+gnCJ aQBo2Q== Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfp1fjn6x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:33 +0000 (GMT) Received: by mail-vs1-f70.google.com with SMTP id ada2fe7eead31-785b66a7017so291070137.2 for ; Fri, 04 Sep 2026 08:42:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536553; x=1789141353; 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=Wu4aU4+aLtX2c9UIKmkxVl2o/Ry3P2/k4p1oqgR901A=; b=ceNn+G4diw6LKsjbtzrtswsFJnzqXZtS/LU454JaA+m1V9iJAMeXttVorowpPMuegB XkfM4jPeQN4V8cEfDIuwM7rsjmScHaC/Qe+vMkHwL0k7cCueaNS4XLP02kVPj5jBchwI rCfcdzFYcUbyqoswPcBSm6UQfCSq0EosJ8GPgAzyEvvUJhVtyjAtXMfmxcLN9TJZmXaR Aws0Q+SKmUbsCydj2N6euqj4tBIcPHaoUeo3Z/UeYcX6Vz3vJdsTqV0l2CbzXJsFaqaD KhP4/0iF5NxOvpsydrBiCNIIqBQXra5m56nxaByc1pNIicVe9wYY/DUeSGYJDvH0/7S7 ewWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536553; x=1789141353; 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=Wu4aU4+aLtX2c9UIKmkxVl2o/Ry3P2/k4p1oqgR901A=; b=c5jOP0sS+RzbzQuaguEAoPemtkBVhDUa08m1mzKH17HXXrzckjKyCq0TLqL0xGkZoQ IVoAO/DC7cYtOyKidPAPboks4cfiMGSMxL7s1qsW00Ms9k4ve/AI7+idWIxVph30QGQk d/jIuC2wHKd2M6EB+/aFN0g/xpqkZmB2EoW35YVIcwCAL9/jkGpSDPMuaxJ/0Gg7PAVp aGToJM96JbuOt7t5cfdmVwUO2yLdo0Aw7ORdqXUJXm/vWmfNOAnFEW+A8yghtC7UmFoA rsmlv/vPN4RQve4BOzsHEpNXuSxOrOTP02U7qHEZrC12NPErYqLLrFHWQLBi1IgZEIIQ ARBg== X-Forwarded-Encrypted: i=1; AKwUvBybO6dhUvfcxiP8lh1tIKq46xretNGVvT2Iah+0SB1JruyU4H9rYSzDYfCl+d4MJhpg1jzKIjvnUojFxmc=@vger.kernel.org X-Gm-Message-State: AFuF++nhv8Ay9QRAuYMYS1zGMJjkHlFliBZXNYSI+++E+HFDcrePCunk 0Ah/+0qN4K3fkzhSnW+A8dTXr95AIQjLT+u2IB22c+Jy4vVDfbA27DGF7hkRagKs8v4vNIIv4rc SO2EbAk7yVOra7APQnoq2AHlllgYNcomQjPMyj9e3e1wcre57Y3C3P92am9PZ0wVm7mE= X-Gm-Gg: AYBFou2SQnUZHl6WC/7xtsTzPLUMeVF9fY13iLh3fX+Yswe/2/4dPPSKfVa8GmAgSo4 tuCn0WIYTvdFWKPQAv0pZDgLmfmRvammTo+GnydQze2bA62Gef7MBAktVFfr7FiPHW9ChltpR6K 1UYq1VYI3j+sBa4ZJ7rIjL0G9aFkG9DngC2/Vp3Amhu3dBsOK0j3aLBP3Loi9MmVqRT2gYYIhTx CjLYot94D7Pu6dk3j3QgwzYfLrd37pWustvXL9A4gZW5TXQ133ex633MhWWfPYsuZfBYju7SLjx /gGdasWMRfy2NAtC0vKSjRUZKyM/QmfGMJufmY1v/UUPakwQ0EGVBpSsZj0q869hECqyF1+2gjQ C55QhnoYSyzTqw2J3GEf5aoeJc/gn97GTPFjm7X4zPBZXp/rad8G87n32khML8wM2qm3hgI+PAD BBYfinjuhJdFcZtmMw9KULZe54ionDtoFvsckQ35Fq0WJnaPIn634= X-Received: by 2002:a05:6102:1606:b0:778:9e3c:5760 with SMTP id ada2fe7eead31-78a4a9621d7mr2056914137.11.1788536552857; Fri, 04 Sep 2026 08:42:32 -0700 (PDT) X-Received: by 2002:a05:6102:1606:b0:778:9e3c:5760 with SMTP id ada2fe7eead31-78a4a9621d7mr2056895137.11.1788536552421; Fri, 04 Sep 2026 08:42:32 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:29 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:21 +0200 Subject: [PATCH v6 06/11] Bluetooth: hci_qca: Set 'bt_en_available' based on pwrseq power controllability 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-6-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Authority-Analysis: v=2.4 cv=F+xnsKhN c=1 sm=1 tr=0 ts=6a9ae6e9 cx=c_pps a=N1BjEkVkxJi3uNfLdpvX3g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=8YyhkPy0JF_pzLATneMA:9 a=QEXdDO2ut3YA:10 a=crWF4MFLhNY0qMRaF8an:22 X-Proofpoint-ORIG-GUID: cw7-SY6UXsv-CIdskbDHmBBVdLJlAfi9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX8hU2HYMkpmA2 y36dPIUF1lVVcHpAHtsWu07IkfpQXAcGoQ6LOkIdAcxHoJF7KILpRyg5eFhxTMKwqUDS3XwEsid e4G7dNrl5WMK2j+FoISetLEEypni6KE= X-Proofpoint-GUID: cw7-SY6UXsv-CIdskbDHmBBVdLJlAfi9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX6ZXt5XCgPPyq zS3ZtPojNdjEmLk0P1d/XiUNv8TMX96cyXdcpiHBpnjf60WKmPhbpugWgfykJGVChvTqnNSLNmw zXfQJYER9P770OJmR0FL2dtWOF7edl+Ktap8kpZ9ZXevhHtBNhDkcSM+VOSJ/lNQD9j9bUpps0n YdZrjWF1Mc1MMlhQa4SZBgmL3nARzFlKfRE5SlssmepLnFFfTqW2eyfB2RhXFOYACkWWfqaNlxF Jj3/Ygx1WUcZVHdVZhw3SJGQrOZ0Cx4gcMEpAQPl/FTl9yp7p912kyk2559pCq8lz+dW5tT5Rnl oQ3sc1zvDtiy9x7IM1F/IG+gwUU25QWbP18PvuXUzHEx50YAfB7qNDNpdbGYnlC6gf/irkUjL2L UKki+0OBOxhyj1+bkZdasSatISDdQSXEr2yfC0bS3+7o4ww6h/5oS+bUAfQMKcI3EwllOkfefLg eKtQwVQWRMT5aHSpq0w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 A Bluetooth device only needs the non-persistent setup if the host can gate its power, so that it is actually reset on the next power-on. When the power is controlled by a power sequencer, whether the host can gate it depends on the hardware wiring, e.g. the presence of the BT_EN or W_DISABLE2# line. Query the generic pwrseq_is_controllable() helper whenever the BT power comes from a sequencer, regardless of which provider it is (M2, WCN, ...). If the power is not controllable, clear 'bt_en_available' so that HCI_QUIRK_NON_PERSISTENT_SETUP is not set. This is based on Manivannan's original patch that keyed the decision off the W_DISABLE2# device tree property, it now uses the generic pwrseq helper and handles the always-on case. Reviewed-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski Reviewed-by: Manivannan Sadhasivam Signed-off-by: Loic Poulain --- drivers/bluetooth/hci_qca.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index f7a20138cb742e8f6ea51d565aa8da8751f21f37..9d27cd851b4a685ce42201b0d40= ca6ecbeec9cb1 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2551,7 +2551,20 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) return PTR_ERR(qcadev->susclk); } } -=09 + + if (qcadev->bt_power->pwrseq) { + bt_en_available =3D pwrseq_is_controllable(qcadev->bt_power->pwrseq); + if (!bt_en_available) { + /* The host cannot gate the BT power individually. + * Treat it as always-on and drop the pwrseq handle. + * The descriptor itself is still released by devres, + * so dropping the handle here is not a leak. + */ + pwrseq_power_on(qcadev->bt_power->pwrseq); + qcadev->bt_power->pwrseq =3D NULL; + } + } + err =3D hci_uart_register_device(&qcadev->serdev_hu, &qca_proto); if (err) { BT_ERR("serdev registration failed"); --=20 2.34.1 From nobody Sat Sep 26 04:31:01 2026 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 82718501F2F for ; Fri, 4 Sep 2026 15:42:39 +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=1788536566; cv=none; b=IjqIE0kzF82WaXhiuq0BZCqFjJ+DkPLw0M1LB8elpDxyizlHg6bGF5TUEdNP7Isbce1HsMyz5ij42ucZ+M/MZxE0Z7mZd7Um/6bm/ZnUIdu7MCGxjm1M+IydU8Gg/xNENShKEiUmgyiyfNm4ffl++fOxQ5FOIMvoN7HGVxqwU6U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536566; c=relaxed/simple; bh=b1TR2pqK8UJ/JlXul7C47szMhQ5AcfN48BdqST6LpvM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RUfsyjn/bcgFA1PQTxmgnJKsNf4n0iKLAiGKWmJV2ueGkRmrsgxiPz4nD/3tQuxlQ7tanaFdTO9wAO614Ulo6D9R+/EE9YuLQbWjKayesxItpT0ZEMJHJfVWg9WwP0ucnf1UAWZBR8YrkFhj3VHFZJaY6edjlbM2nKPJZtyfxkc= 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=bc8alp2R; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O4xOwVgZ; 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="bc8alp2R"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O4xOwVgZ" 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 684EiI9L819382 for ; Fri, 4 Sep 2026 15:42:36 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= YwfxVIyuLh7//i+KBksOTM7bUklANqq0Gb6i7boEe8A=; b=bc8alp2R6YmdF8iF ZF4BIBhMqoABQH7YNXRoat2VDZxoCj999D/qbMhnTPhlkt+j9+PRRtpJCoOdgB1h 9y49iyiyxyinnekmGEa3+kIWy5PtoaylxeyxeF1BQqzRnL3PtRgEvC3ur+BQPUUE 9HgdSbKTZ5ugfLs8D1Jtik6yPts9Eka6i8WvIehn2d3kDRpmiVjFJJKrRzUEeh1o +wVvM7MAL0fV3vhN1Tn1Wj0tn9s7W9Nk7PDhzcC2PGu/4f9rNYSSYS9sQVA1Dqfu 0mR3fl0aor6e4odoAhXdr3IHN0fmRiDoowvHPN14D37q4v/ztKJd6MforPkuJSn1 zob4Uw== Received: from mail-ua1-f72.google.com (mail-ua1-f72.google.com [209.85.222.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg00yr8s8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:36 +0000 (GMT) Received: by mail-ua1-f72.google.com with SMTP id a1e0cc1a2514c-9804eacbbefso104465241.1 for ; Fri, 04 Sep 2026 08:42:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536555; x=1789141355; 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=YwfxVIyuLh7//i+KBksOTM7bUklANqq0Gb6i7boEe8A=; b=O4xOwVgZC03JUjFAzBhwo1CJ6174LiGSI9Tw7U0cVYmNs2O6BgkKoZ/hds6znkdLWP JPGS3RBtwPEYI3byk5/sbv4UfQboIdEeZP1Sv7SnyY+tDbikMcnwvi8neO4gq9pp36Fe bthDLHllbioUc+Bb+a/6FvFMk0pY98vobNyjTY013JfoRqsn84MXbJaOevz7hE9N7Lel ossm5LmxUSVKNhpNY5Y4AgBXHORYVLdAGO5VaeouvVyADazyodx7HkYHcEHqEBc0GHIF cizAM4oYX/5P7eiA8eVg9MSuyI8ZVANgY9/TpIioLdsG7KGtErv15SgFSnD/nf+lhAxs 4rsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536555; x=1789141355; 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=YwfxVIyuLh7//i+KBksOTM7bUklANqq0Gb6i7boEe8A=; b=CxNqPLgTL8hSizb/oBQSAfo9VA7nejBsehHuf8d2YkTE0iiizyXtK18OuZDNsOskr8 Qg95F3EKqBjn44wTUtb4Az21/Rmm3nXt8/3PYuoJWa92pvqJqSYfFgvvalxoJqLxwB00 E8W/16xogMCpxMhaDwZpnP8In/Xwby8JO05yLhOgYcmioOgfkn9/8iCWo+s65IB4g767 vE38W5UGPNDgNRNgnKFmxz1C52MvNTEyAZI+pQjzpxWlrgnaoExT2Jgu5wBxcY/oqwot TiGtkfTQJpvRiFLai8Q8b43K+u/VpqJO0qZvO+UUYZeC9Zn0kXRrbvmBJXPoDtBT2q2K W5gA== X-Forwarded-Encrypted: i=1; AKwUvBxFYnhFr/OZMGkisEQAE1ijTTU3FFVtk4lazo+hAfQqMaE4GKHbri0QkCKnLWbdzfo8IE2fRgJ+KPKgevg=@vger.kernel.org X-Gm-Message-State: AFuF++nMXUO1Rn0ZgWyxC2RKG8xgGp2TtZul3D+iyelPRPbiEpNkBkh5 C8/8hPue/dDEO5WVEbdEwxI7TqOdDWxcAiiDXA/CPZyh6KrrWbgbz4RqmzIyhKehyswBSeD3fn8 aMjIa16FGudJPHZr3L/De538oAwQB9/yCc1Am3N7TPEMlotrqhiRs0MzPan0853RWenc= X-Gm-Gg: AYBFou1GkFvlFWmf+p/mmNolOApnFPQLah2txWYZX06Vbr4d9uryNn/25uv+ioDb3DU 93V7JNAJre6h2bZ3kZt5pqEn9VNNR+wh5LioNZvOR7yhr6PTz0pWCK8RED9vfQsnj7ZuFrXzKTh qbKSBKKMG/CfG7myKGSoqpIdN0a/wh7kOS8klobm8fJqi3A0OMFL/9qcFC1EfOiK6I2/wv+2otT hdaBhRz+E+um6TURPWPFiB6tR21SyJDzjaUiM4HZryINNR0rQAjFKf/Caxxp+vbLr9ZBw6kf+F1 mpfZUszcZ+Ubzppr5nzGXm272a5pz0uUydHFTLAuxHtIO562ZLXP+DcalD2BLLy2ixafg9mUmyB QGEXsOh2N24Hgb0LgXu8bomrpdkS+I4iWep4WD/CbKXtC0UkVGxjpV7ztBufLO7fdwisylHBy4V A5o2XLPTutLkcVmPM8AcOmBv9E4yWx2neL1rqxPw1/CfG9l3HdzEY= X-Received: by 2002:a05:6102:a1d8:10b0:785:e069:6c5 with SMTP id ada2fe7eead31-78a5675c4eemr812158137.8.1788536555491; Fri, 04 Sep 2026 08:42:35 -0700 (PDT) X-Received: by 2002:a05:6102:a1d8:10b0:785:e069:6c5 with SMTP id ada2fe7eead31-78a5675c4eemr812120137.8.1788536554895; Fri, 04 Sep 2026 08:42:34 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:33 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:22 +0200 Subject: [PATCH v6 07/11] Bluetooth: hci_qca: Embed bt_power in struct qca_serdev 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-7-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Authority-Analysis: v=2.4 cv=baFbluPB c=1 sm=1 tr=0 ts=6a9ae6ec cx=c_pps a=ULNsgckmlI/WJG3HAyAuOQ==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=-AHguRIk9tBBA_P1FkcA:9 a=QEXdDO2ut3YA:10 a=1WsBpfsz9X-RYQiigVTh:22 X-Proofpoint-ORIG-GUID: zwH4ubwkky4UJdzRixB968_6I8zw_GVg X-Proofpoint-GUID: zwH4ubwkky4UJdzRixB968_6I8zw_GVg X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX5zihpKWSI8lV I7DZz/rE2qnc6r54ocF3Sa1Or7vMp5keacYGKr7t1KLbRwgoC6vHAIvMEHBsfK89js4KLYqBlZ2 jNfWuhr3xlyg03MzC8ytDDCFz+bKkzLzqSBB3n/DOjW7Nb00DCUrlEduwhS42EVK7HoOtZinPZd N26YEHSPnw9LZTE+YqJafBwtRzIfdPBRl/W7qv1hiZhUjOoyX9MtgW3Ne1Epa3ynXTctNTXI9Ag 3vnopIP3QzjC0HOhpLpsHPBCeMnUZVG/+YbeduxhWNgWJ/qEG20ANw5msXJEstX6Xz//skAhSHJ vf4EqEOmqqRb4V9v9eoEIR7AnEYn8UG4AmbxwlHOOQ9ZCQ5yitGMUpwznJBLun5l0wnK3tJ9bHc AZI9Ba8vi3OpT4ZaFzQkJeu8RdSDxnifIMbwDSwth3mv/IKtahUWj+mi5zpzkVHqe7mzcF3veVX sEZLtQv+0vI4b/PBWuw== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfXzhNYXebyJ3iZ 66ZoZGsvCBmffe7i0vVbZHylEz4iRAoQHu5ZEbc6ayic61da3XVggNpnEsKJdd8dA20kZoFp6Gz bGm7v1lweT6ROCbjGZCfzgrxGayvmKs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 spamscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 impostorscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 'bt_power' is allocated dynamically only for a subset of SOC types, using a switch on the SOC type that mirrors the one that follows it. This is about to become pointless as the power sequencer path (used by M.2 modules) is independent of the SOC type and needs 'bt_power' populated for any type. Embed 'struct qca_power' directly in 'struct qca_serdev' instead of allocating it separately. This drops the extra allocation and its dedicated SOC-type switch, and removes the need for NULL checks on the pointer. No functional change intended. Reviewed-by: Bartosz Golaszewski Signed-off-by: Loic Poulain Reviewed-by: Manivannan Sadhasivam --- drivers/bluetooth/hci_qca.c | 72 ++++++++++++++++-------------------------= ---- 1 file changed, 26 insertions(+), 46 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 9d27cd851b4a685ce42201b0d40ca6ecbeec9cb1..30586120c4a73a50a29af235b51= 1c3ae97960e27 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -225,7 +225,7 @@ struct qca_serdev { struct gpio_desc *sw_ctrl; struct clk *susclk; enum qca_btsoc_type btsoc_type; - struct qca_power *bt_power; + struct qca_power bt_power; u32 init_speed; u32 oper_speed; bool bdaddr_property_broken; @@ -1779,7 +1779,7 @@ static int qca_regulator_init(struct hci_uart *hu) */ qcadev =3D serdev_device_get_drvdata(hu->serdev); =20 - if (!qcadev->bt_power->vregs_on) { + if (!qcadev->bt_power.vregs_on) { serdev_device_close(hu->serdev); ret =3D qca_regulator_enable(qcadev); if (ret) @@ -2245,7 +2245,7 @@ static void qca_power_off(struct hci_uart *hu) return; =20 qcadev =3D serdev_device_get_drvdata(hu->serdev); - power =3D qcadev->bt_power; + power =3D &qcadev->bt_power; =20 switch (soc_type) { case QCA_WCN3988: @@ -2259,7 +2259,7 @@ static void qca_power_off(struct hci_uart *hu) break; } =20 - if (power && power->pwrseq) { + if (power->pwrseq) { pwrseq_disable(power->pwrseq); set_bit(QCA_BT_OFF, &qca->flags); return; @@ -2316,7 +2316,7 @@ static int qca_hci_shutdown(struct hci_dev *hdev) =20 static int qca_regulator_enable(struct qca_serdev *qcadev) { - struct qca_power *power =3D qcadev->bt_power; + struct qca_power *power =3D &qcadev->bt_power; int ret; =20 if (power->pwrseq) @@ -2348,7 +2348,7 @@ static void qca_regulator_disable(struct qca_serdev *= qcadev) if (!qcadev) return; =20 - power =3D qcadev->bt_power; + power =3D &qcadev->bt_power; =20 /* Already disabled? */ if (!power->vregs_on) @@ -2420,26 +2420,6 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) else qcadev->btsoc_type =3D QCA_ROME; =20 - switch (qcadev->btsoc_type) { - case QCA_QCA6390: - case QCA_WCN3950: - case QCA_WCN3988: - case QCA_WCN3990: - case QCA_WCN3991: - case QCA_WCN3998: - case QCA_WCN6750: - case QCA_WCN6855: - case QCA_WCN7850: - qcadev->bt_power =3D devm_kzalloc(&serdev->dev, - sizeof(struct qca_power), - GFP_KERNEL); - if (!qcadev->bt_power) - return -ENOMEM; - break; - default: - break; - } - switch (qcadev->btsoc_type) { case QCA_WCN3950: case QCA_WCN3988: @@ -2454,10 +2434,10 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) * the M.2 Key E connector. */ if (of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) { - qcadev->bt_power->pwrseq =3D devm_pwrseq_get(&serdev->ctrl->dev, - "uart"); - if (IS_ERR(qcadev->bt_power->pwrseq)) - return PTR_ERR(qcadev->bt_power->pwrseq); + qcadev->bt_power.pwrseq =3D devm_pwrseq_get(&serdev->ctrl->dev, + "uart"); + if (IS_ERR(qcadev->bt_power.pwrseq)) + return PTR_ERR(qcadev->bt_power.pwrseq); break; } =20 @@ -2468,8 +2448,8 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) * let's use the power sequencer. Otherwise, let's * drive everything ourselves. */ - qcadev->bt_power->pwrseq =3D devm_pwrseq_get(&serdev->dev, - "bluetooth"); + qcadev->bt_power.pwrseq =3D devm_pwrseq_get(&serdev->dev, + "bluetooth"); =20 /* * Some modules have BT_EN enabled via a hardware pull-up, @@ -2477,21 +2457,21 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) * through the power sequence. In such cases, fall through * to follow the legacy flow. */ - if (IS_ERR(qcadev->bt_power->pwrseq)) - qcadev->bt_power->pwrseq =3D NULL; + if (IS_ERR(qcadev->bt_power.pwrseq)) + qcadev->bt_power.pwrseq =3D NULL; else break; } =20 - qcadev->bt_power->dev =3D &serdev->dev; - err =3D qca_init_regulators(qcadev->bt_power, data->vregs, + qcadev->bt_power.dev =3D &serdev->dev; + err =3D qca_init_regulators(&qcadev->bt_power, data->vregs, data->num_vregs); if (err) { BT_ERR("Failed to init regulators:%d", err); return err; } =20 - qcadev->bt_power->vregs_on =3D false; + qcadev->bt_power.vregs_on =3D false; =20 qcadev->bt_en =3D devm_gpiod_get_optional(&serdev->dev, "enable", GPIOD_OUT_LOW); @@ -2525,10 +2505,10 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) =20 case QCA_QCA6390: if (dev_of_node(&serdev->dev)) { - qcadev->bt_power->pwrseq =3D devm_pwrseq_get(&serdev->dev, - "bluetooth"); - if (IS_ERR(qcadev->bt_power->pwrseq)) - return PTR_ERR(qcadev->bt_power->pwrseq); + qcadev->bt_power.pwrseq =3D devm_pwrseq_get(&serdev->dev, + "bluetooth"); + if (IS_ERR(qcadev->bt_power.pwrseq)) + return PTR_ERR(qcadev->bt_power.pwrseq); break; } fallthrough; @@ -2552,16 +2532,16 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) } } =20 - if (qcadev->bt_power->pwrseq) { - bt_en_available =3D pwrseq_is_controllable(qcadev->bt_power->pwrseq); + if (qcadev->bt_power.pwrseq) { + bt_en_available =3D pwrseq_is_controllable(qcadev->bt_power.pwrseq); if (!bt_en_available) { /* The host cannot gate the BT power individually. * Treat it as always-on and drop the pwrseq handle. * The descriptor itself is still released by devres, * so dropping the handle here is not a leak. */ - pwrseq_power_on(qcadev->bt_power->pwrseq); - qcadev->bt_power->pwrseq =3D NULL; + pwrseq_enable(qcadev->bt_power.pwrseq); + qcadev->bt_power.pwrseq =3D NULL; } } =20 @@ -2599,7 +2579,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) static void qca_serdev_remove(struct serdev_device *serdev) { struct qca_serdev *qcadev =3D serdev_device_get_drvdata(serdev); - struct qca_power *power =3D qcadev->bt_power; + struct qca_power *power =3D &qcadev->bt_power; =20 switch (qcadev->btsoc_type) { case QCA_WCN3988: --=20 2.34.1 From nobody Sat Sep 26 04:31:01 2026 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 7DA4A4FDE4B for ; Fri, 4 Sep 2026 15:42:42 +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=1788536576; cv=none; b=txCMckhcnK3Kw4evRDNB4p1e7Gs0RT/7tBofeqi64ONgZm9HZmc4GoeA+iKChRwXf6SzVELOWuyWlAh/dQscMDzGP8/Odr91ZuXiUtvF9XlW7wWZSJK/QwW9WnE1gqgtHQLoQn9rF80/NJfNTISjkcO09Xj0x/JsIWVJA1LZ1Mk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536576; c=relaxed/simple; bh=ql+lzgCyBPEjEvO5d+fZjVYHAWX/V60lJU8VXvadKEE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EdsrqH1Gnf7pdsXcwFVdD2Xk0xhuUuN3gqs+giKaSTT+zSKomykVrm0QClWOZUvVmLU8JTKEor8iOHp4CUBIHWDMju9yepEIkauli+XZA9XYPOT5M2PjpCQ8F8DwnPel89woo5pq5UTw5ejQctFYeUjC/RRlZTlZ65amNiAiUsk= 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=G9rAaPex; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=WuqIieRd; 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="G9rAaPex"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="WuqIieRd" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684EiKIS3329469 for ; Fri, 4 Sep 2026 15:42:38 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= MINzBqJ4IAJHoJgZZ9M8ZzzajtUoGcKXgzz7x3DJbF4=; b=G9rAaPexNp2ooVdn uu2Vq/+Oz4C+BZX510p9D7XyPn4KqVMjoiW1jUVj/mbJoaUMqQdNg/QRJCYJ4O/C or6zcqwEhN9avQ8Rw0sZCTpg6y25VtPXxGo/T+41agBrJARpscxSVaGXzpHehtYe k+mjSsrOMzE3fO2myy4s87VM9bn+fNFfvmTu3bUCo1hEqLCjO6zonauA2K7ZFV0r hX8uBA1oxSnqb/AVTVg7dfL+7JdyFe9j24v9FhophxnS9SCQrDRUmJQsKjGEXFo1 bxua11PLWeR8U6DwjTp84mqdvpVzAfVG61XhFQx5ydLz5wP795qx0QPeJqCzO599 wibaoA== Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg00y88su-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:38 +0000 (GMT) Received: by mail-ua1-f69.google.com with SMTP id a1e0cc1a2514c-97e9e2deaa4so934782241.1 for ; Fri, 04 Sep 2026 08:42:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536557; x=1789141357; 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=MINzBqJ4IAJHoJgZZ9M8ZzzajtUoGcKXgzz7x3DJbF4=; b=WuqIieRdKkssahH/ozo2uv2t9E7LSU3P7JWyxsoQyQtCErR+yPzvsFJs7nO7Tzslro m+k2bBIPnSgvO+LVDaHry17GFRw+Dp+jt42IHTVtvVhytTjA0tcMRDE6lql/UZSQtSo5 mZwSZAYMYmxm7kCfdUc+rSh1pXSXxsgtOwrhuea49LGapC4yHmrwbsAxqvpSx/d1ZkSU UPnWf7v8Vsy9XDgetV/n/+UmqncQWIKJ8YLBfqEy2sUyqqNCNQ3enuPgqfxPOCTss1NB a0kcdoRh7ibftYrQcDyd3vI95tyZYfPETXfBprGDxJKYYS/D4zuUwEuUnqzhP+3il1co MFtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536557; x=1789141357; 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=MINzBqJ4IAJHoJgZZ9M8ZzzajtUoGcKXgzz7x3DJbF4=; b=KjjuE29xgbXFl2urvYtECLTf6JZbwkCfKO+OUvvAOBK3Ahh5Tm7rZBPuZQqk7eD5up 4FMy/9rPSjpIlsWNS5HtlVU1fEj8ttNTTTuyMyPRz1jSZM42z4uxjJSalRhZTiSh6JWK WgtRkfYp7/1U+mg62aUfpdKNOH9SGKXla6z218so+DGJKrsi/lyfCJtOEcLL8KH2Z0au sqVqR09t5GALpQJXbdTivcDm9NdZepQxIglgNFtGOMlJzGw2o9MQat7aSWJfnDQgpAjL +OM1m+hIFu2mkzIKg9gR81bLFYdWvTjRS17SHrwOn3l16Wnw0XxDBeP3JOAQbyxghIFi NwZg== X-Forwarded-Encrypted: i=1; AKwUvByurXuYE14CMRvN9cmUyCIjXMM5eClQ5yJhqCgzXZFs+054ADIMVK38VyxdsGudzhgky4DxEsgXWY7uLK4=@vger.kernel.org X-Gm-Message-State: AFuF++mz0155QBRoKkmtQXBW1kJO31U9TPEnnkBAhxVPaARxUmMV+hqW Bf4d8qrMxE5i0rWfEf3em3pSmemHMx7zz4COZLehQNM/JhigXUyXarQcqxm9+Ku1gXW8CiI81V9 DxARqu1o1n5s9Tk8Ho30G9sjcSnRjR48pgelPhwcbEpri1a4dY+8+VojwKTOAoFbPGHo= X-Gm-Gg: AYBFou3Bl9Y181Ul+jt0zsCYkilVlKDOCIB9DIanaXU0CPAg4zd/Ml71Ba3dlkCeWMp qgzbdbkhUhoL751AGvnBORAyz1nSokcGdOiubH1eKIQqSjBGgNbqboRaE30y9oNDP5Ddtmh5Zwa qQdD3yQUz144ClH7HN1KJ6qFmqwroDMpmgNYsXhujN1c87HPC4M25N2qjwt/s9TMuazK+lKmD+k 8ZLkD6+r9IrPrHX8mnCFQLF9KW8GFyktjRXr0QGJfwQ18EO63M3mWp/3Ex6Emr6FfoYiZNuM3UK s5WYSNQ2nzRf+QW2WTcyLa+AtFz1loA6Uk7ICpDTxentvw+hZVgFzhnuyYjaJQdQBYHI6Ir8sh4 jwV7Zlbdpbao+VqmrcM4ITy6hROAkYmU4XZvw0k48eISaxeKVJigdkCtqQHRuawJIiaYCw95WgH 3vj04zFdM4giMgLxwQwLZpx+v91/P7HkFoOALZ9PU/FKp7RLcOXLg= X-Received: by 2002:a05:6102:3e01:b0:785:c3dc:2f5d with SMTP id ada2fe7eead31-78a4aa13b57mr2612959137.9.1788536557179; Fri, 04 Sep 2026 08:42:37 -0700 (PDT) X-Received: by 2002:a05:6102:3e01:b0:785:c3dc:2f5d with SMTP id ada2fe7eead31-78a4aa13b57mr2612933137.9.1788536556685; Fri, 04 Sep 2026 08:42:36 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:35 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:23 +0200 Subject: [PATCH v6 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-8-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Dmitry Baryshkov , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: gg-8gXKOWU-TyX3o0obCxbjmn9kN1lMJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX3nzwI1Dr/+iR wIhSJU1xRTvpTjJBgj5eOzb1IT6gg41BajmAtTkyNe9xkGEgNW3EEUTGxwCyJkdwSGw/UHYCfgS xBKYWYiXrdXBlxDbxU8aiNyz4Cglv7srxRsYFati6qhO4gCKzVFtNWgoQjzTZ7FCZhOQbYFH2Gv NHNMX87vriNKhaZvjwSd0W6x9q9azaOpb6HiACdAlacYqovvXehWl3bqEtAQmcHNQmb6ki0WOLr 50Hof8rJKd3sOBazW+fFSNEaA5QSR8Nzgsrc7MOCuQdTtpXJZf7SSonebTqZZc13JM0uWsVSK48 v7e1Erm4DPTcRL3cAHEw0iU7BySs46OG10VQGQCP1Ie9+jyLqWpj2OXTpWxZDuFA7nyzf8M6Vj9 71tPvEIfBjXyEcSDEaTbsHZ3yVVzK2SThfzzZfZXACPbUIIvgTasVSqtDlTsd6fy1PA87rxYV+3 vH6Oz3XOXHGY/fDLNgw== X-Authority-Analysis: v=2.4 cv=TsPWQjXh c=1 sm=1 tr=0 ts=6a9ae6ee cx=c_pps a=UbhLPJ621ZpgOD2l3yZY1w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=reVw4oyKNVL6WbIJD7YA:9 a=QEXdDO2ut3YA:10 a=TOPH6uDL9cOC6tEoww4z:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX/GyLiUleIMbL iFFG3vpB645BrCxhpuK/HXQSzXWTs8qDLmd71ka9W6ZFU21iJKdxKQLOFsXheJNAC5OnSJz6C9+ h9NfPMlcOsRydGNFdOTY7dpwkIju7aM= X-Proofpoint-GUID: gg-8gXKOWU-TyX3o0obCxbjmn9kN1lMJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 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 Reviewed-by: Dmitry Baryshkov Reviewed-by: Bartosz Golaszewski Signed-off-by: Loic Poulain --- drivers/bluetooth/hci_qca.c | 47 +++++++++++++++++++++++++++++++++++------= ---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 30586120c4a73a50a29af235b511c3ae97960e27..db0a968dfb00fa6f1abb86a3f6d= 1be89dfe80c6a 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -1875,6 +1875,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); } =20 clear_bit(QCA_BT_OFF, &qca->flags); @@ -2390,6 +2393,34 @@ static int qca_init_regulators(struct qca_power *qca, return 0; } =20 +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 =3D qcadev->serdev_hu.serdev; + struct pwrseq_desc *pwrseq; + + if (!of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) + return 0; + + /* The pwrseq is looked up on the serdev controller (which holds the + * OF graph to the M.2 connector), but its lifetime must follow this + * serdev consumer device, not the controller. So acquire it with the + * non-devres pwrseq_get() and release it via a devres action bound to + * &serdev->dev instead of using devm_pwrseq_get(&serdev->ctrl->dev). + */ + pwrseq =3D pwrseq_get(&serdev->ctrl->dev, "uart"); + if (IS_ERR(pwrseq)) + return PTR_ERR(pwrseq); + + qcadev->bt_power.pwrseq =3D pwrseq; + + return devm_add_action_or_reset(&serdev->dev, qca_serdev_put_pwrseq, pwrs= eq); +} + static int qca_serdev_probe(struct serdev_device *serdev) { struct qca_serdev *qcadev; @@ -2420,6 +2451,10 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) else qcadev->btsoc_type =3D QCA_ROME; =20 + err =3D qca_serdev_get_m2_pwrseq(qcadev); + if (err) + return err; + switch (qcadev->btsoc_type) { case QCA_WCN3950: case QCA_WCN3988: @@ -2429,17 +2464,9 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) 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 =3D 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; - } =20 if (!device_property_present(&serdev->dev, "enable-gpios")) { /* --=20 2.34.1 From nobody Sat Sep 26 04:31:01 2026 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 8DE2D501F44 for ; Fri, 4 Sep 2026 15:42: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=1788536572; cv=none; b=MoRdWNo++M6XTFIRD9eMC0QC9PlOtND87JOUn0Xy+rcnwXO3VZwl3wCQemBpZ/oq78cXD8hcRexw1gEarYZGEbgR7932/rLOV9tlUtMlYaQD4jCR8eU+KSzBm+5kmszJY7yQfyyg0pMEAh9gzk5BPsZCbFXgeLy1/LzaLU820BA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536572; c=relaxed/simple; bh=YCIWSFqXvG0Htk2WgfzGGPg3a2awjtggrtVO72ie120=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NtlapnHFfL9ews+m3w51F8g0M+RhMztlkQglQv2DjiFcCw7VU5OLcu8iT+5g6HG49nMcjYjxp7uTUdo6UUs2n8keh2lgx1FfkWZazW1LUrVAi+gvpGjpOmRkXPvykrLRqFP/47o7DqqiFJvbU8oOoQKB+Vrn7LwYqLyeBgMBVtA= 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=f42znUV4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LEtMSiMz; 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="f42znUV4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LEtMSiMz" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684Eifqm3329787 for ; Fri, 4 Sep 2026 15:42: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= FJHtkuDgx65JWiN/Fuqm1kYGp2m2CoyBUOoby5Sv6h0=; b=f42znUV4QQA0d5k8 WuG+u4rU01UvJtnGEsJSnUCuMUS5aDPdoatKRX+CENaSzTbqsMMphFis293gZtTt fJNpi30bOLt8t+PHwky7Mm+nca4FKVAVQr80cRX7+McxLdjKEMCrccCV8o6CDFFL CO7jsP0n+fqfsYJS86CIr6+5hlP+W1KNVCud5w6m4mJoKROmvGZfRET1yg7s5HH6 qdMvy9MCSYV9qVJY0hMm1kkHSFiIKYfOmSv+VgrfSax51EC5tA2qb2SRtGi1O04k vmV7Nm06LwXtFei3o5etQf8+piRWox76Q3LfWzmtpfuUoqSeN2w9TqUHUpdBLVG8 9XEPLw== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg00y88t0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:39 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-7819910f8adso977731137.3 for ; Fri, 04 Sep 2026 08:42:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536559; x=1789141359; 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=FJHtkuDgx65JWiN/Fuqm1kYGp2m2CoyBUOoby5Sv6h0=; b=LEtMSiMzZWDnwribHA3nbZXWVrDeHEJxl2qbMWzHm1Oqu33L08+sCkzynI4gCHejrB o51BOxAFcxIhQ/4Pmn2g/z3YHGeRqY8Lic4Pe3fmRyY8XUW1GWwM5QcRW9Uj5XXdazF7 OAeGQApjyYU+U+crOmc3k+P26huDv2nnqP20TJ+fhPh+1ZWtl4lH140LlVCPRkMIAohq LP52vsRmCOm83PqXltOQ47XBYLAjjo7RUf8TGxn1dPsoMhcGsMiVxBnLH8b2EPw0+Xcb lkP53tXRmdwbd9y9aSWEs0S0hokRunw8VH0RoL+YId3f5TYRvLutq+nCirbL5tf27yBx iuJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536559; x=1789141359; 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=FJHtkuDgx65JWiN/Fuqm1kYGp2m2CoyBUOoby5Sv6h0=; b=HiPJJ39LTdOelaoZpceJ97ktbku2U8sJTeA9ig9PssXet2KVWF031FZOjG3Xcw65l8 G7RK7UBkb6ZIfgq4JFoP08FOUyRBA/MReAeHLzk6OjvBmgmW8IAmA1J16JxwIWXI5Nqo G8obGFwiod36txo0vr86gRSUIqMlqRsnSLhos2lYBwJeBQhm7haI04BBlG2HOdh2BSaI lViLXpls8RaHPbtzbSs/J66xQJx4Vf3d8YZG0yoVvbgqLwSbTWqs+SxJxC3018RWqXGM qzojI4veNgz9DJGnpbWDn/YTeIgTQJwCJAq9cBhgjSuNWrpRzRuiI6xmUG8+nfpPtHSm 5mkg== X-Forwarded-Encrypted: i=1; AKwUvBw8c4F2WEMXGei9VYBADwuVdFA206drC1GXnFxy9oJEZnDjnXTzNIDy9DlqfZDM8Csc+mZUZyiIa6V7B8g=@vger.kernel.org X-Gm-Message-State: AFuF++nubRu4g5pRHhpH5T24ty/W277A6KnuQ379msLDvpVW8qmaideA DJSftH07ibNQK3c/ZWK4SuLu8+xMQYrny37RLcURmg/0cgtwY+fLi1AUzQeU3aRiqSw5hEV+Dt7 h7Q/W8w2EVzCZnew42Sm+pEgc/9y3f86e9FBuDeePp66Fl4AmJ2r6p19+Tdrief5nAVA= X-Gm-Gg: AYBFou032vn9NevAcZHEz+xQsFRZA18t3r15G06ezL+Ob6jswBGEBjTvANnnPqZPNTG bwVQpc+blMmnBZgeFaBDz9CK0oAmy/bJT4dYyYQE/4kuzGj4ZiiarUf+fc6TyRBGKmndA+rqKHQ LinYj5I74+4KOZhf2g4JFdFFE3w1q/42qkaAjSeSCbRJIVeRaV08uXN7T/JLXXHc21detwCKJ5M oQgQGkbWxwkQ/EgXRSFwyuZxzP1i2pfwJJcwZUgyTIEIh5y+ZiyOHwlbld8G3W4QpaU2ONFmPBc QAE9hNRFscKo/++GbVEMNBhNOmsUx71RWGQZLfnJ7mQTMSxcSJCeJb/GAfyncEAv2KA6mqiRrUo DyuRAdgxqsre5mkVFDsKvOHOw06ieP4Tean3c3VTlKcgO+/SBofgvyKf/eiP1XJmMPNl8BLKCax /b0F0Lvg5pxDu2/9GvDah96OC+GJYTRRUTdHAhY+jVgksa/uNJzRc= X-Received: by 2002:a05:6102:91a:b0:784:ed9:1a1c with SMTP id ada2fe7eead31-78a4ab66791mr2919623137.12.1788536558831; Fri, 04 Sep 2026 08:42:38 -0700 (PDT) X-Received: by 2002:a05:6102:91a:b0:784:ed9:1a1c with SMTP id ada2fe7eead31-78a4ab66791mr2919586137.12.1788536558377; Fri, 04 Sep 2026 08:42:38 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:37 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:24 +0200 Subject: [PATCH v6 09/11] Bluetooth: hci_qca: Flatten struct qca_power into struct qca_serdev 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-9-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: A6jOQgtpL1CeF1DgQNs_lXFmL77KhM0J X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX/zk4l9AQ5tgy mGkdMzEnF3gqIj6XGLb7IbZzpEXgnEkbs2xNVlZxmxx2A+YrYWZwsHtVCdTvyei5fNgwKZHuH6w FVIIDSroV6/XPLo8Rv1Ig1/EObwbYVHvs1gUCIx3fWjf9fmJ4bSkKC87AEJL8JqSIaGsOsE8zia 4yh84PrmK6Ox5u9LJop/n2qnTHa6tTUzeY+XwLTFMKG1uC+FE24wKGJtWl2IrfnlhEs3cMgXGfD xwtnDh0JHsjj94XzoBvgcknRkcYJeMGYf0L09Y2yzz8y+7emH8xC2kUdXfFecQLYSU5qkHpc1/G humHcMLMKaocKygEmzlWEsmyeNvJBO3AJKm9YylpexMrPc3XhAYv9Kp2tb7/RfiZDniViooFruN EDljb+IQcanCXfSU7GDTzrXuan2wgOpWhvgrljeG1BDjF9EJvfbeFHiPtXVEiGMP0gdqsT8J/X2 XI4Zriw1RHdTHydqLEQ== X-Authority-Analysis: v=2.4 cv=TsPWQjXh c=1 sm=1 tr=0 ts=6a9ae6ef cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=IDBDRlgmZ80N7xYWSSYA:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX1TL9spRlQgBG VfnZF424L4B311xgg0ZyLmS4Jd6ipQJdOxNiVBekyVCc6gaBUOU9fLekC9g+cG1UmPXZLNwT1wQ gg8CNDllBpGCKWIMMLU5lo7cbf3OH4c= X-Proofpoint-GUID: A6jOQgtpL1CeF1DgQNs_lXFmL77KhM0J X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 struct qca_power currently only groups a handful of fields (vreg_bulk, num_vregs, vregs_on, pwrseq) that are exclusively used from struct qca_serdev, via its embedded bt_power member. The extra indirection level does not provide any isolation or reuse benefit, and just adds qcadev->bt_power. noise throughout the driver. Drop struct qca_power and move its fields directly into struct qca_serdev, updating qca_init_regulators() to take a struct qca_serdev pointer instead. No functional change intended. Suggested-by: Dmitry Baryshkov Signed-off-by: Loic Poulain --- drivers/bluetooth/hci_qca.c | 91 +++++++++++++++++++----------------------= ---- 1 file changed, 39 insertions(+), 52 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index db0a968dfb00fa6f1abb86a3f6d1be89dfe80c6a..cfefa8b72e2527639299811d1b4= f2fac697ee704 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -211,21 +211,16 @@ struct qca_device_data { /* * Platform data for the QCA Bluetooth power driver. */ -struct qca_power { - struct device *dev; - struct regulator_bulk_data *vreg_bulk; - int num_vregs; - bool vregs_on; - struct pwrseq_desc *pwrseq; -}; - struct qca_serdev { struct hci_uart serdev_hu; struct gpio_desc *bt_en; struct gpio_desc *sw_ctrl; struct clk *susclk; enum qca_btsoc_type btsoc_type; - struct qca_power bt_power; + struct regulator_bulk_data *vreg_bulk; + int num_vregs; + bool vregs_on; + struct pwrseq_desc *pwrseq; u32 init_speed; u32 oper_speed; bool bdaddr_property_broken; @@ -1779,7 +1774,7 @@ static int qca_regulator_init(struct hci_uart *hu) */ qcadev =3D serdev_device_get_drvdata(hu->serdev); =20 - if (!qcadev->bt_power.vregs_on) { + if (!qcadev->vregs_on) { serdev_device_close(hu->serdev); ret =3D qca_regulator_enable(qcadev); if (ret) @@ -1876,8 +1871,8 @@ static int qca_power_on(struct hci_dev *hdev) msleep(150); } =20 - if (qcadev->bt_power.pwrseq) - pwrseq_power_on(qcadev->bt_power.pwrseq); + if (qcadev->pwrseq) + pwrseq_enable(qcadev->pwrseq); } =20 clear_bit(QCA_BT_OFF, &qca->flags); @@ -2230,7 +2225,6 @@ static void qca_power_off(struct hci_uart *hu) unsigned long flags; enum qca_btsoc_type soc_type =3D qca_soc_type(hu); bool sw_ctrl_state; - struct qca_power *power; =20 /* From this point we go into power off state. But serial port is * still open, stop queueing the IBS data and flush all the buffered @@ -2248,7 +2242,6 @@ static void qca_power_off(struct hci_uart *hu) return; =20 qcadev =3D serdev_device_get_drvdata(hu->serdev); - power =3D &qcadev->bt_power; =20 switch (soc_type) { case QCA_WCN3988: @@ -2262,8 +2255,8 @@ static void qca_power_off(struct hci_uart *hu) break; } =20 - if (power->pwrseq) { - pwrseq_disable(power->pwrseq); + if (qcadev->pwrseq) { + pwrseq_disable(qcadev->pwrseq); set_bit(QCA_BT_OFF, &qca->flags); return; } @@ -2319,23 +2312,22 @@ static int qca_hci_shutdown(struct hci_dev *hdev) =20 static int qca_regulator_enable(struct qca_serdev *qcadev) { - struct qca_power *power =3D &qcadev->bt_power; int ret; =20 - if (power->pwrseq) - return pwrseq_enable(power->pwrseq); + if (qcadev->pwrseq) + return pwrseq_enable(qcadev->pwrseq); =20 /* Already enabled */ - if (power->vregs_on) + if (qcadev->vregs_on) return 0; =20 - BT_DBG("enabling %d regulators)", power->num_vregs); + BT_DBG("enabling %d regulators)", qcadev->num_vregs); =20 - ret =3D regulator_bulk_enable(power->num_vregs, power->vreg_bulk); + ret =3D regulator_bulk_enable(qcadev->num_vregs, qcadev->vreg_bulk); if (ret) return ret; =20 - power->vregs_on =3D true; + qcadev->vregs_on =3D true; =20 ret =3D clk_prepare_enable(qcadev->susclk); if (ret) @@ -2346,38 +2338,35 @@ static int qca_regulator_enable(struct qca_serdev *= qcadev) =20 static void qca_regulator_disable(struct qca_serdev *qcadev) { - struct qca_power *power; - if (!qcadev) return; =20 - power =3D &qcadev->bt_power; - /* Already disabled? */ - if (!power->vregs_on) + if (!qcadev->vregs_on) return; =20 - regulator_bulk_disable(power->num_vregs, power->vreg_bulk); - power->vregs_on =3D false; + regulator_bulk_disable(qcadev->num_vregs, qcadev->vreg_bulk); + qcadev->vregs_on =3D false; =20 clk_disable_unprepare(qcadev->susclk); } =20 -static int qca_init_regulators(struct qca_power *qca, +static int qca_init_regulators(struct qca_serdev *qcadev, const struct qca_vreg *vregs, size_t num_vregs) { + struct device *dev =3D &qcadev->serdev_hu.serdev->dev; struct regulator_bulk_data *bulk; int ret; int i; =20 - bulk =3D devm_kcalloc(qca->dev, num_vregs, sizeof(*bulk), GFP_KERNEL); + bulk =3D devm_kcalloc(dev, num_vregs, sizeof(*bulk), GFP_KERNEL); if (!bulk) return -ENOMEM; =20 for (i =3D 0; i < num_vregs; i++) bulk[i].supply =3D vregs[i].name; =20 - ret =3D devm_regulator_bulk_get(qca->dev, num_vregs, bulk); + ret =3D devm_regulator_bulk_get(dev, num_vregs, bulk); if (ret < 0) return ret; =20 @@ -2387,8 +2376,8 @@ static int qca_init_regulators(struct qca_power *qca, return ret; } =20 - qca->vreg_bulk =3D bulk; - qca->num_vregs =3D num_vregs; + qcadev->vreg_bulk =3D bulk; + qcadev->num_vregs =3D num_vregs; =20 return 0; } @@ -2416,7 +2405,7 @@ static int qca_serdev_get_m2_pwrseq(struct qca_serdev= *qcadev) if (IS_ERR(pwrseq)) return PTR_ERR(pwrseq); =20 - qcadev->bt_power.pwrseq =3D pwrseq; + qcadev->pwrseq =3D pwrseq; =20 return devm_add_action_or_reset(&serdev->dev, qca_serdev_put_pwrseq, pwrs= eq); } @@ -2465,7 +2454,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) case QCA_WCN6855: case QCA_WCN7850: /* M.2 connector modules are powered by the pwrseq acquired above. */ - if (qcadev->bt_power.pwrseq) + if (qcadev->pwrseq) break; =20 if (!device_property_present(&serdev->dev, "enable-gpios")) { @@ -2475,7 +2464,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) * let's use the power sequencer. Otherwise, let's * drive everything ourselves. */ - qcadev->bt_power.pwrseq =3D devm_pwrseq_get(&serdev->dev, + qcadev->pwrseq =3D devm_pwrseq_get(&serdev->dev, "bluetooth"); =20 /* @@ -2484,21 +2473,20 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) * through the power sequence. In such cases, fall through * to follow the legacy flow. */ - if (IS_ERR(qcadev->bt_power.pwrseq)) - qcadev->bt_power.pwrseq =3D NULL; + if (IS_ERR(qcadev->pwrseq)) + qcadev->pwrseq =3D NULL; else break; } =20 - qcadev->bt_power.dev =3D &serdev->dev; - err =3D qca_init_regulators(&qcadev->bt_power, data->vregs, + err =3D qca_init_regulators(qcadev, data->vregs, data->num_vregs); if (err) { BT_ERR("Failed to init regulators:%d", err); return err; } =20 - qcadev->bt_power.vregs_on =3D false; + qcadev->vregs_on =3D false; =20 qcadev->bt_en =3D devm_gpiod_get_optional(&serdev->dev, "enable", GPIOD_OUT_LOW); @@ -2532,10 +2520,10 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) =20 case QCA_QCA6390: if (dev_of_node(&serdev->dev)) { - qcadev->bt_power.pwrseq =3D devm_pwrseq_get(&serdev->dev, + qcadev->pwrseq =3D devm_pwrseq_get(&serdev->dev, "bluetooth"); - if (IS_ERR(qcadev->bt_power.pwrseq)) - return PTR_ERR(qcadev->bt_power.pwrseq); + if (IS_ERR(qcadev->pwrseq)) + return PTR_ERR(qcadev->pwrseq); break; } fallthrough; @@ -2559,16 +2547,16 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) } } =20 - if (qcadev->bt_power.pwrseq) { - bt_en_available =3D pwrseq_is_controllable(qcadev->bt_power.pwrseq); + if (qcadev->pwrseq) { + bt_en_available =3D pwrseq_is_controllable(qcadev->pwrseq); if (!bt_en_available) { /* The host cannot gate the BT power individually. * Treat it as always-on and drop the pwrseq handle. * The descriptor itself is still released by devres, * so dropping the handle here is not a leak. */ - pwrseq_enable(qcadev->bt_power.pwrseq); - qcadev->bt_power.pwrseq =3D NULL; + pwrseq_enable(qcadev->pwrseq); + qcadev->pwrseq =3D NULL; } } =20 @@ -2606,7 +2594,6 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) static void qca_serdev_remove(struct serdev_device *serdev) { struct qca_serdev *qcadev =3D serdev_device_get_drvdata(serdev); - struct qca_power *power =3D &qcadev->bt_power; =20 switch (qcadev->btsoc_type) { case QCA_WCN3988: @@ -2616,7 +2603,7 @@ static void qca_serdev_remove(struct serdev_device *s= erdev) case QCA_WCN6750: case QCA_WCN6855: case QCA_WCN7850: - if (power->vregs_on) + if (qcadev->vregs_on) qca_power_off(&qcadev->serdev_hu); break; default: --=20 2.34.1 From nobody Sat Sep 26 04:31:01 2026 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 3E200503BC6 for ; Fri, 4 Sep 2026 15:42:44 +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=1788536573; cv=none; b=qvdJFuWoWh/5jw5TEzLSudRcGX2AID+a2gfRyiAhflUM/xPmA1J8PHs/AJ48xmRp5N0yHrciLgjwce5BZVOjJ178BVY7AS+CQNnQTStYrsJMH8vRC2iILnmZmw8i025ZhTpNIG+Tw9tHshcvDZUnNoVcrjC3g0O+Fm3nqdqi9h4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536573; c=relaxed/simple; bh=xbR26F+2IK0SwAaQUmAO2+Xe1VwKVtt+NKXks4bobiI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r4GobrI/ZAijeaUiBgwP2RuiA8IYXpg+Tw5ZaaA5tLhMdjoHJy6DfAV7b/BvV/3cbHKBsNdkp/kzmPd4gLq4ojrpXvRlUBwZblL0rwaooievmTcDwmkdJHWEZZY4AyTF2kpKfIigSMBNMTgf0OZ6ZFXvJr3KmG76/MPsS5Zsw8g= 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=BmEHQOFp; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=C78XCQ05; 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="BmEHQOFp"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="C78XCQ05" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684DglS93719486 for ; Fri, 4 Sep 2026 15:42:42 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= fdPleMKS2IC93aynK6NEkJ3p446vokYhvbwvmK8b/Kk=; b=BmEHQOFpvXB48fJ4 P1WQHuWfNgNBcd48t263ya3ZJ3FjhhfBm4wN2SuGwdL1U261fXC64ttaIDYxEqmW 1oUwVFtMAx5KKiJ63MSHVAfIIC5dNLddFLwAAKvvd7/dM68VDCUGOYJvbrMoCPtQ VQvXNTvIcP+CALYLBm6YOhSrWbzs3krdf8wFvIfz5KzB+yKtvZVgwDLF6Lqqc6jB 7yPUDMc1gl7psTUCFJW1mOXNw9irpd9wH5OpCx7l5LMO1rWtb/G9mTnVB3ZdH3Ce +wqdtKMygx87w72zbuR2KGWYJ/2ngYaqJXH7WKzPcKQadp8lYbhcppfN+yytyocL s1D+og== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfqqd2p2q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:41 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-9806e283b0eso866786241.3 for ; Fri, 04 Sep 2026 08:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536561; x=1789141361; 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=fdPleMKS2IC93aynK6NEkJ3p446vokYhvbwvmK8b/Kk=; b=C78XCQ051C/5zkLm85zxYNCBpzTL6jT/I7Cfftz4GuGn6Uuudg/0AMGWPdXIhRgATv FDYluS66mNea4TfdCjsfxSejf2xE/nJ6nH14oIvTRmtiD93fAnA9TNKS1Hxh4O5UC3KB VDryFl1e1PuEGC4ZO1ATwQoU8tdMuDyRcCAT4FUcmHJCK2/Wm7sVmHMvPmnW7J9D/3F0 N4WRujgQ6q4fd+Du26J8oqxF3XRVTJtvhQ8gvgy/oivbfbe5HeAYX/+xejPFsxSb96ta Wcy1ZvCY5RRJg0p1I4QQPTLVzAPSmNwqQ9NyfNXW64h+vE+zlS50ztbTZqueXsu/EXUX QYCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536561; x=1789141361; 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=fdPleMKS2IC93aynK6NEkJ3p446vokYhvbwvmK8b/Kk=; b=npiZVqiVQGtOnqWqyWAyxrlkjXx+g2/QNtsNKhvZ+8oXCkUtiZTdrNxYdO1cQu1/Eu mlJWYeadDVJSji3GLjgjlZ+pDvMVqnyKfZzxOErB+HuaTo+PLgIz2FB1NkPHw82msWP6 t2UDDOnjI8XiW5qUmKVfxmM4rMowhISpzykg8yluLyM8JjhGSXmK5+Pfg7L7zFIHXncD J37QUqOozTvxu73AZuuh0hMwO/m56b8kPy5l4Zx4jh6fRv2SUfoAgUNwi4qUoOs29p3h 7eQSRL76t212doL94eDduoz3/Ae3gSxdkp8h1p7tAC/8qbZ3OUkTeJEizQugLIHTJ8jR 8rkA== X-Forwarded-Encrypted: i=1; AKwUvBzj250Tf6GPIDVoNNh2IyN9laGSCBNvNgv/Zpgls44hDLPQlqR1floi6mcA7wvf0RhpUqJM891BSp0sYZA=@vger.kernel.org X-Gm-Message-State: AFuF++mqVNi68/NYlYqi1jOQMCYioXuPA1TCfqXcoBCrcNzj9Gf6Ogva +gw6Hdzw8vVDEEOld0C8tM3W6GT/1cU12Yv25XxcTaIvGGbDsQBwKR/28Z1Dxfi5Cp67Bofq5Cz nrOTpwpW1Mudbf9P6HJcuS+jj0nADA2nzujjqvwbIXcN0POfJ5cdhEnFjmg1a74TGPw4= X-Gm-Gg: AYBFou3p8l2xIeWahkElDM8ezXlmeE8TYyDvxkI9aHghscrsPkqfF24FOmQqQ+5vP4a Nsj/bPJKLu+euOsuALzPUerDQKgPbVkCjH/dRc3h988tgdlhtDKLRfz+vJUOawf5jVwjoRHyLdr VRYzhAS7nhurqHK8ESbJ1NozbYZ5xiM3lGLuUXkWnouatBQkxC8F1HaiuZPyM6jAu702uQypij+ IqfV+rOdc5657oPpTQA1ksSZ0/dNAl0psZsOmGQqT/gYg0MalsHn8xrwpQ7s1S8gAMEsUvV5uMY 8h0mWjIchgJ+viOCl5PrJjS+QwyXPR52rnH+g3nP0qSs9nvEa92kFbb6DetQ6DHS2U1YOWKALsM jaAaAeOdIPEuWrwnU75TbH4+KlFkgMQkW4Bsd9RLOY5G3ACKqhTAjsgbFtY4rDfBMfxdrK/+O/B ey90nnzonFl6ejoi+ci0qhVeiHCM1Xa6frUnScON3qdM44W6KMGHQ= X-Received: by 2002:a05:6102:570f:b0:785:e444:15de with SMTP id ada2fe7eead31-78a4a8b86c6mr2764704137.6.1788536561261; Fri, 04 Sep 2026 08:42:41 -0700 (PDT) X-Received: by 2002:a05:6102:570f:b0:785:e444:15de with SMTP id ada2fe7eead31-78a4a8b86c6mr2764676137.6.1788536560793; Fri, 04 Sep 2026 08:42:40 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:39 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:25 +0200 Subject: [PATCH v6 10/11] dt-bindings: connector: pcie-m2-e: Add vendor LGA connector compatible 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-10-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Krzysztof Kozlowski , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Proofpoint-GUID: 4pxL-JU7YSG16bXPpzJl_qBcAYkTdWy9 X-Proofpoint-ORIG-GUID: 4pxL-JU7YSG16bXPpzJl_qBcAYkTdWy9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX+CTo1vZBYFbv bhn+dIUUQuc3XJMmFTD9a3sZ4WZBoldcCjWvORIfLXKXap2mRYCpOXEyYpweNTXgJhNefnj7PUv yeBgnnj+UJ/M83+mvkzDtvdh8wlnkEw= X-Authority-Analysis: v=2.4 cv=XtnK/1F9 c=1 sm=1 tr=0 ts=6a9ae6f2 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=M8sXMW5dAYDte-7YvdsA:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfX1PhP9DXJlAoS JQgjEmS0xDbjd4DizdI4qOWWcOhzVcF7qdYCK4ookkDQmPU1IsxLYXn2FFVdlnaX7btquiU0hBy 9c9QpJON5Zww/IBhFa621Q3iGE6zEqOLaLPReAUovz4wN83J8ckoJiyMGYPEKvAkqae7tvx9noQ rqAEmgVs4DsTLJGxy01XC9l5NVbhvhsNzKkk9W926JEW4m6hYGFxD9VJQ6e8l2OGbxsVHFuz+lz GJ6BP6AqSDdwvB2oDLHvtG4GKlm1E1DT9o06VF8MK6MKQzs1MAW4D4hqSF1rxJpAHs33vta0BeM fwae85a5BKT6bf10rBwmObE2aNQ4Ey/rWoUnZxOfiH/6xq2lr6ZkVEncbL9Ws7emTYZrHs2htVU pUCfhWLI++NlAl75LoQiNoNW8gxZhWG1e1XlCk2OBoAEAME6v1PoyN32raeigSxHKcvJ4L1hz2M FHf1g5McmSgpTm07FEg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 Some modules (e.g. the Qualcomm QCA2066/QCNFA765) expose the same M.2 Key E interface signals but are physically soldered as an LGA package rather than plugged into a real M.2 Key E connector socket. Such designs are not actual M.2 Key E connectors, so describe them with a dedicated vendor-specific compatible while keeping "pcie-m2-e-connector" as a fallback for the shared signal semantics. Add "qcom,pcie-m2-1418-lga-connector" for the M.2 LGA 1418 found on Arduino Ventuno Q (Monaco Monza). Add "qcom,pcie-m2-1620-lga-connector" for the M.2 LGA 1620 found on The Lenovo Thinkpad T14s. Reviewed-by: Krzysztof Kozlowski Reviewed-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski Signed-off-by: Loic Poulain --- .../devicetree/bindings/connector/pcie-m2-e-connector.yaml | 8 ++++= +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/connector/pcie-m2-e-connecto= r.yaml b/Documentation/devicetree/bindings/connector/pcie-m2-e-connector.ya= ml index f7859aa9b63469cb43919c0b5719c18694c5364d..ce6173a0ec41cfe8ab4a5780940= 999c18674ab7e 100644 --- a/Documentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml +++ b/Documentation/devicetree/bindings/connector/pcie-m2-e-connector.yaml @@ -17,7 +17,13 @@ description: =20 properties: compatible: - const: pcie-m2-e-connector + oneOf: + - const: pcie-m2-e-connector + - items: + - enum: + - qcom,pcie-m2-1418-lga-connector + - qcom,pcie-m2-1620-lga-connector + - const: pcie-m2-e-connector =20 vpcie3v3-supply: description: A phandle to the regulator for 3.3v supply. --=20 2.34.1 From nobody Sat Sep 26 04:31:01 2026 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 E89BD503BF4 for ; Fri, 4 Sep 2026 15:42:50 +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=1788536578; cv=none; b=Fser9d5knEV+IwED4pMr6GBgF54RO6Uok/MaQaScm57+rV0OIxzSkQXkop2GbG6mYZMpVzbZdFgY5e/zRMX28+31eDL5PMyBot3RQuFsJi6wpg2gZs5lc9X7YU/q7a93crsqqA2RR1hfm8xTTGs51+cWYnSQTSIhagIaCigfFkI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788536578; c=relaxed/simple; bh=i8r9ZnGm7UzMiQFW/7A3fSPuq52yoy955ncVpzmNaO0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mmhQWBl13DsqDV9fyK4zXoCkGUj9ONFxJ+IVWiQKGydc6gMvwdsKMTn2j/gXj+ZSRhxHkE/trhjhW/+wUOCL2B2wh/mw4aytuOwRbpqveQo+YNE95KOU1xAu0ln5a3H+gwv3XmqnxnZL2m5xblcmHyrC+C1ti+n9rQ3RBJoEyvM= 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=THofIXlb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Jt/JwmTS; 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="THofIXlb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Jt/JwmTS" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684EiIMS3329421 for ; Fri, 4 Sep 2026 15:42:45 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= KamRqdSZl64fR7Veb4ozRWlQeNymX8Nh+XyeNQ1IdNI=; b=THofIXlbr4V55jOn Mu2NH13rB70VlQkKRxl1826j5h61trEXAGB6wPHU/hXllqH6PNW4Ax8nu6bm9Xsg 4AM5SFFges3J2cn1vyvfJefGyVIIaKAZ55XJWr5OUnFPAbT/QBsGsyy9bZDNQ0YC 4BzTIDFkYGKcnElrzhw0IphkqqhpOx62c8a41QbTiHrRcBJTTulxOrv58nfpbndJ 6+pzBFiG56MNq2btKw7pDJooE8ocaUDwFO2v8nsWsi7rwZs0swY7WQ0VQMDHXJyn IhE88evhP2kJ+lOlNR17MH/ArzsFmNU/T3GFlGemtXs4J0Uvt5X8Ny4FyTv95/+x ISsuwA== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg00y88t9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 15:42:44 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-97c83bdfa6fso819227241.2 for ; Fri, 04 Sep 2026 08:42:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788536563; x=1789141363; 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=KamRqdSZl64fR7Veb4ozRWlQeNymX8Nh+XyeNQ1IdNI=; b=Jt/JwmTSGXmVl6wYqeLLxfW2ZD7oAyBx6BE7/143oCSTsrMS5p9VaW3b2OH5nOGqEp 6q46JPNMacL3hlU/264RFWz90ma7lPFYlTXLh58QowgVvYq8xNiVqYAIGE6trj0MDbBn tQlwAfNkQmoFLulL4UlgChcN2mnCcFGvomARQwPssYzox4zro4sQ1LFfkE/kAxVENsqk CkCsQZIHnHbeQLdUnc8MGE5ArYh6e5XEFfwYxH8gyZzIE7KvfDAQFeTlxBT4B6MUVKTL Hw1H4JgTo250YPH1XtUrFPN6aQgmAPho51/4HBB+KsAFEpx3b0yFjFOh0LwoTBeuZ2wo 5tMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788536563; x=1789141363; 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=KamRqdSZl64fR7Veb4ozRWlQeNymX8Nh+XyeNQ1IdNI=; b=N5QlQL42P0ixoHYAVL+gK8hq+XlGzhG9LfrVmfRf4NLDoQOSQ6ecE/I5rDgcubKgL5 tGiE24DkWvuh+AvwBrzPsMoo4iPTNtdQMDOuCJCyj/U0yD2nXmSekES6zmT8U8ZHYb0B yuEm40aVjrKMjco6+vt7j+JaQenxU9+9jQU2kI9RMZJ2YYK3FFbUsAJdVyLZq8Sgg5l6 I1mYpvGy5xdTAME7fVOgULlAOADdZREhgR0GC2owOK7D/AytHVCmPFy9DuurQtBD6UhA jMrmTr/BwnmVbf/FsGeVmIHsZvPyXp9Rd563HWT2AoMy9j+BpB/dwJpH65DrrsBuKkjR +vmQ== X-Forwarded-Encrypted: i=1; AKwUvBy58b9wvojqPxUq7C0iPz89afBd9ltmp3yN7YeHIBbgkJD3ikhBHRt+io7aOhjeLqHZ+Y2IeW5pEVCBPCs=@vger.kernel.org X-Gm-Message-State: AFuF++mza1Tg/zKF53GsTfIFrs5yWSIIzjlJLxMHhDbpMX8PnI1UfYcl jOnHDoi68fdHQcOkM3b+ryE94bGflmlEadIlFbLuyOvrdGJYK/5DVm1wW0smkH+Pl1Yo0+fplMK GX8yyPqNMmwZl/OUEZWeIGSE63Mf1Dk1mC1WfK50NpmOETaBiz1TKOWifGpndP0jQ7Ug= X-Gm-Gg: AYBFou1Zh1MwLNTS95uCC5SlqkzNgafZMKb7Y3C4VqDwFmzf8HfsSY1uxbnOgwYO9o6 yldemSsb4LSegNXjjp4mpMgg7ydMoC2rS0LPchNCWacoomHnsKHdjJpqxhpo4xNGE8RME/zScw2 RlO/iFXjwoChUA6GoeoR0oBUFqRMbvkw6PuszozhYE4Z3qzLkXHBYp/fcs/K4lsrtquTJFsSP3t saasnCUA8PlY7R3470ZYaK/pdUF2WzjPmhF/iRbesOt2YBmnZQuTQ91sBzc9pfEwr/SbquhHv/7 6VeDGv6PWp+6udgmjby68DjGLAB644xUNc8MPJZQ6uTNJt2AZSEGZUc13o7WtJ7wk5U7AMiXu9E 75aQLhxpQqbEm/CZ4Nm+3rAZyLCyMR2JGtN/aBn58T5jDNcWTrNAg5WrzgW6SrNumbsHRSyeeY4 Fuhz2zHt/NdILqEIG+HtV/iJRydED/dn5Jap0yLUcN+MBT7YUx3Oo= X-Received: by 2002:a05:6102:291e:b0:77a:7620:81b4 with SMTP id ada2fe7eead31-78a4a839bd7mr2523632137.4.1788536562889; Fri, 04 Sep 2026 08:42:42 -0700 (PDT) X-Received: by 2002:a05:6102:291e:b0:77a:7620:81b4 with SMTP id ada2fe7eead31-78a4a839bd7mr2523620137.4.1788536562532; Fri, 04 Sep 2026 08:42:42 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:e90a:787f:72ea:b218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ce5533ffbsm160668505e9.3.2026.09.04.08.42.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 08:42:41 -0700 (PDT) From: Loic Poulain Date: Fri, 04 Sep 2026 17:42:26 +0200 Subject: [PATCH v6 11/11] arm64: dts: qcom: monaco-arduino-monza: Add QCA2066 M.2 WiFi/BT support 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: quoted-printable Message-Id: <20260904-monza-wireless-v6-11-d8c5042b3efd@oss.qualcomm.com> References: <20260904-monza-wireless-v6-0-d8c5042b3efd@oss.qualcomm.com> In-Reply-To: <20260904-monza-wireless-v6-0-d8c5042b3efd@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 , Konrad Dybcio , Dmitry Baryshkov , Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Proofpoint-ORIG-GUID: 2TNTdF1800lJSeg6x7brV-SZBgbq_hem X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfXwNJbximuTc8E GAzxZlLUfkmOlxGxqduDjyNID4fq0cDIjB15XFhLYTDtbjvyppPkFAhGV3omyUujsyDajlhNCR8 Ju/yYIlrhb6ksoTi0XRs+ZV/5eEFzt6CsPJ+PNCURcHEX2elwWuuASgn9cnuhPO2v5pbLbQFBCj H+fiSaU+KIMqeepsxUQUeeMQZVTjIOmrNFkm3MidmOhFxZe1XaTkt4R3XvdLbbV6AyXi3rP909i OuEtTkkF2JMmxqInXH6P84QUNNN9UjMLc6i7n81n3/LXYnpTwz/R5Y5YeFJ6NkStSSkT8XRISZL 4OU22EeiqJdHvOvlgsNMxxke6J2f+av7PXMUGdYyEL0/jHZICqJin126JdVtFy9qpxZY0/Z8N/e UdOeP8tGcBue7zbnCg//kwdOu8qRDyLQC9Vo8RNJbcwOHoH2ThxQcbxHIuPHiUjcSscKPFuP5Jj BQulYiUgYOaCJSVqZ3A== X-Authority-Analysis: v=2.4 cv=TsPWQjXh c=1 sm=1 tr=0 ts=6a9ae6f4 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=EzCDy3pf2FPqfMyO2-oA:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE0MyBTYWx0ZWRfXyU0oHAEwAHBT KNNCNiFDaF/9aMe/AxYjG9uVVIAbm/BRnU/0VAaxjKLgOGwSq+prqVB6zC+Ldui+JxdmK+o/O+x B/+dF5tdlNuIwgqDki9eLtA9WLsorR8= X-Proofpoint-GUID: 2TNTdF1800lJSeg6x7brV-SZBgbq_hem X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_04,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040143 Add support for the QCA2066 (QCNFA765) WiFi/Bluetooth module on the Arduino VENTUNO Q board. The module is interfaced via LGA and is compatible with the M.2 Key E. Add wireless-lga-connector node using pcie-m2-e-connector binding, connecting PCIe port 0 to the WiFi interface and UART10 port 3 to the Bluetooth interface. Add pcie@1,0 downstream port node with pciclass,0604 compatible so the pci-pwrctrl driver can acquire the power sequencer and enable the M.2 slot before PCIe enumeration. Add nfa725b_default_state pinctrl for the W_DISABLE1/2 GPIOs (gpio56/gpio55) used by the power sequencer. Reviewed-by: Konrad Dybcio Reviewed-by: Dmitry Baryshkov Reviewed-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski Signed-off-by: Loic Poulain --- arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts | 64 +++++++++++++++++++= ++-- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts b/arch/arm64= /boot/dts/qcom/monaco-arduino-monza.dts index 299d0da15a1501a03e56025f928eb456e4e2a7f7..afa6f0ecbf60210055ae17d7560= 91523b91dc98c 100644 --- a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts +++ b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts @@ -169,6 +169,40 @@ vreg_nvme: regulator-3p3-m2 { enable-active-high; startup-delay-us =3D <20000>; }; + + wireless-lga-connector { + compatible =3D "qcom,pcie-m2-1418-lga-connector", + "pcie-m2-e-connector"; + vpcie3v3-supply =3D <&vdc_3v3>; + vpcie1v8-supply =3D <&vdc_1v8>; + w-disable1-gpios =3D <&tlmm 56 GPIO_ACTIVE_LOW>; + w-disable2-gpios =3D <&tlmm 55 GPIO_ACTIVE_LOW>; + pinctrl-0 =3D <&nfa725b_default_state>; + pinctrl-names =3D "default"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + /* WiFi/PCIe */ + port@0 { + reg =3D <0>; + + lga_pcie_ep: endpoint { + remote-endpoint =3D <&pcie_ep>; + }; + }; + + /* Bluetooth/UART */ + port@3 { + reg =3D <3>; + + lga_uart_ep: endpoint { + remote-endpoint =3D <&uart10_ep>; + }; + }; + }; + }; }; =20 &cci1 { @@ -429,6 +463,22 @@ pcie@0,0 { ranges; reg =3D <0x010000 0x00 0x00 0x00 0x00>; =20 + pcie@1,0 { + #address-cells =3D <3>; + #size-cells =3D <2>; + device_type =3D "pci"; + compatible =3D "pciclass,0604"; + bus-range =3D <0x00 0xff>; + ranges; + reg =3D <0x020800 0x00 0x00 0x00 0x00>; + + port { + pcie_ep: endpoint { + remote-endpoint =3D <&lga_pcie_ep>; + }; + }; + }; + pcie@2,0 { #address-cells =3D <3>; #size-cells =3D <2>; @@ -523,6 +573,12 @@ max98091_default: max98091-default-state { bias-pull-up; }; =20 + nfa725b_default_state: nfa725b-default-state { + pins =3D "gpio55", "gpio56"; + function =3D "gpio"; + bias-disable; + }; + pcie1_default_state: pcie1-default-state { wake-pins { pins =3D "gpio21"; @@ -566,10 +622,10 @@ &uart7 { &uart10 { status =3D "okay"; =20 - bluetooth: bluetooth { - compatible =3D "qcom,qca2066-bt"; - enable-gpios =3D <&tlmm 55 GPIO_ACTIVE_HIGH>; - clocks =3D <&sleep_clk>; + port { + uart10_ep: endpoint { + remote-endpoint =3D <&lga_uart_ep>; + }; }; }; =20 --=20 2.34.1