From nobody Tue Feb 10 06:25:16 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 4F0243126B8 for ; Tue, 6 Jan 2026 01:01:32 +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=1767661295; cv=none; b=RAvyu/4pLqurcHFSETT7NH1jf1bMFD5pBOo4UG7zGSLJG0BxPRWa/SVbUpxJOS5ttb/KA4zki30PFCpKPzqNphz540T0nTC6Ead2Iu6XGZEBvrP3qywE7vGKVO4u4BQBPwOEgEgSOwCid4wcME/Iqo2Ne9WQcsHdeJJRqz1pD6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767661295; c=relaxed/simple; bh=RE5x+iyzWkq+myL/UhBPksXnYELVIZK7yVIYkyV8M9U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dvF61XYj3VlBdboFlJAcqW2llyMHiCzxUDSokmkk2qTzbWRbozsAdDqMV1HlpT8SHVfUvMb7HRIcCDmmcbi3y9C0ZX5O+ZwS9es8qVs/C79rZMjo04xBqWKCyQxsseQvIJBWszrKmVh1wPvSMtQVcn273Ah1iQMg7jtaXpbB1mA= 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=IT10/NfK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VqFn2Hx8; 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="IT10/NfK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VqFn2Hx8" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6060nTW42528167 for ; Tue, 6 Jan 2026 01:01:31 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= 9OuOUyprpOAl+aN/Pwr6K2wJvLACCaUnkXSkdJN8k3E=; b=IT10/NfKS6xP5lck HZNGYuQd6GNJ0jAwS6vc39GoF0T4oGbupZrEQt7by6ctp8rH8dNLBp7f6/HCdDEX 4y8Z4U4m+qxOnY2xF44VAIE43W8/ZrMHZ4pny9ENVEpQomVIsnLMPXD+b7prC/K2 Dcc58m/fKYpR+UigE98Vn/DTjUB95yqNJxrpb5nrXsoC3WSpqcW+bZhSNp0YI732 Nu0AV+hovbzY+ZK09GAo+HZpMRb22Kjp2OTStLEEIqR2sUANpIRCrZRnEPrb/nbF er9L7HcQv+4r0wxlQbKQmqRb6r/j9cYYwQqZzUgZdoBR8w4GCQ7P+019Z+gA9k5r m0H04g== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bgaus2bdw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 06 Jan 2026 01:01:30 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-4ed74ab4172so9943591cf.1 for ; Mon, 05 Jan 2026 17:01:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767661290; x=1768266090; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9OuOUyprpOAl+aN/Pwr6K2wJvLACCaUnkXSkdJN8k3E=; b=VqFn2Hx8ZmZClYExxl7rrQJvZUdqFYOgw2Gs661qwIjJPw/xLM4UdZ02iOJnVFHVWo cadYn/JhmiopR374ZznHOtAXNxtCT11ZjSJWchCydJcrknt2n+4/BVzPyPak8+l9dcdG 5lx9U1KBSelyfnvgJbEYkHPug2eqxZA9rTAMXu9SCNxjKUG0CJZkrP9CcN3wYSDgwrq0 sSKJ5qxpXNLNOVezkLp24hU3Ki5krFm2zbEj5FiCpdn//F8Y58wtq+FqdplUxC9Rb0Dc udP+P1w80c69d6TgWGwyoCR5oRR0NjDjZR69YwmmSfaN9ULH3XzGjqDoOkk4wyBEPgmQ YnzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767661290; x=1768266090; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9OuOUyprpOAl+aN/Pwr6K2wJvLACCaUnkXSkdJN8k3E=; b=IFDTeOVsMozc1fvTaRSQNjMgpGqkEPjmDdE4rrR9emLXeUqT6JymgmBhLcIXvOJ2P/ LTOlFYX9WeyObm+KuZYZaLmyo6ACSV3KKplHqUnLnUS7CaG0BdrSePqHSJcMBUiiKdMI g+7mJyh3ODflX6qWBCxdqqNsc08yOlQC+I71IjhMiVyMz+t8GWvCSWG7owr4Sucdlqgc oUNxFlB8bcynS40nyunYJuxlPUMANMJX7SP7+C7bKcr3mnFXKMS+dhM3+Xios5C10Cir h3+E9O0jXvtSDqNtdwp0ZFL52QalKTpPG1JH0ABkCXLWLgv904ZXKtgvLNvwecXt0Xqi R1SA== X-Forwarded-Encrypted: i=1; AJvYcCUEGtilruqQvZWgix1bgFu50cZ5o4ArBEfbjVTqNFy9Qsi/fI5sUV31WdXNYZKS3PhDvVrBKQVqC/cDj2E=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4W1h1djxY0SApJIq0uFp3Hrx+9AIhgXwqgLkRTadSLOFOU9fs +pq5xhNEXqQlDrE8gTCPyXmqr3/91z673awLKqVF+GK2THLG8H1yq2OiwrWs0PvNxCc4W76sj4R sfV8Tr8JeUekq89Zk95vcJylMV3P2mnPIUy80Is5gMT0kGkk7dv6Y8kTw7G3md/m1cXs= X-Gm-Gg: AY/fxX6JZFr1EcH01Niwba0zEH12zUc64KAR1+EBCqJKfnsHSBba26Wta1HFY2vCCGA Ie3J1SeXEqm/cnR8eYZ68SAg8sdz78ZIrarc9nASUS1IHGZkOrl7LpQyJGS3hYcG3q0+woUAX17 b/OWc28HmE6WqO60WQtlbn8aExCDMyHpc/ZAbeQ14PR4pkE6tRutxQJL2nHfOeDqOHej4r28ROH fFW+VWgeEJqC9OUvS7Dh4oJjHHFWuaVqZ/1QjPQ2sP0FKFERvt/wa+gXd1hVH5seUVriWRYDhr2 y+Cdm3nD4PWOBGtJGhZEOroh17ZeUXiz4ADxhVssIEnyjfYSOpqX4BJFRQ4QQI+SD6YkXYRNNg/ j0kBQHJSVdEX8xWuSlul0UvAvP+RFbsoXgfN8AYnlY/CfnLbFxi0son8FWvZBMuRIKKbAzz01R+ tlKM6F5XGb1mIiwiR01mXcQMI= X-Received: by 2002:a05:622a:1a90:b0:4f1:83e4:7247 with SMTP id d75a77b69052e-4ffa77edba0mr20001871cf.60.1767661289776; Mon, 05 Jan 2026 17:01:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IE+5IzIJNwWT75Bh0S3llMlTTaHsdE2oxSePDzByPLYAXS5enj4ixoORoDpw3xOvmfFuqxWEw== X-Received: by 2002:a05:622a:1a90:b0:4f1:83e4:7247 with SMTP id d75a77b69052e-4ffa77edba0mr20001301cf.60.1767661289211; Mon, 05 Jan 2026 17:01:29 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59b65cea8b1sm181082e87.6.2026.01.05.17.01.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 17:01:28 -0800 (PST) From: Dmitry Baryshkov Date: Tue, 06 Jan 2026 03:01:15 +0200 Subject: [PATCH v2 05/14] power: sequencing: qcom-wcn: add support for WCN39xx 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: <20260106-wcn3990-pwrctl-v2-5-0386204328be@oss.qualcomm.com> References: <20260106-wcn3990-pwrctl-v2-0-0386204328be@oss.qualcomm.com> In-Reply-To: <20260106-wcn3990-pwrctl-v2-0-0386204328be@oss.qualcomm.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz , Jeff Johnson , Bjorn Andersson , Konrad Dybcio , Manivannan Sadhasivam , Vinod Koul , Balakrishna Godavarthi , Matthias Kaehlcke Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, linux-pm@vger.kernel.org, Krzysztof Kozlowski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8156; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=RE5x+iyzWkq+myL/UhBPksXnYELVIZK7yVIYkyV8M9U=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpXF7Z4PYSXJjreNhQo0g4VN4zQEJz72nOo1Bsl FTSkKEYZFGJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaVxe2QAKCRCLPIo+Aiko 1RmVB/4znVfiyGXJsJwane98IRGdlpZTj++hBTtO8qlpJ6T9RmVDgopL0fKjfWEaPcJEQ3iWAyR QXN4rhcttyl/0FA5p1JPIAtrvn9FSRUzBycGDMAsiOZ5HTB4jVGAyde5LsLxT1RSIs0lVKcTL7p +BQKu22ovgITvebJuSaEhuyheuBrTN1NA7VoNsuWNwA7fPcDI3Aabsr56NBTUlWBUBmPvTzJjr6 aYKOxo4FVqWv5N5EOsoHhFFDW021GdDSaedsiXdLpNELmzNtABGj/bIGew5Mn64H4fnurnp8pKN YNSDDu2HuDMtpgVg3zCw7RPhBeziSqABstLqS2QDKCKpjpe7 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: BDse3jwhMapRAN92sqpq4rnJvEnduoUj X-Authority-Analysis: v=2.4 cv=DP6CIiNb c=1 sm=1 tr=0 ts=695c5eea cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=I1O4o1mkfA9rNPu_QXcA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-GUID: BDse3jwhMapRAN92sqpq4rnJvEnduoUj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA2MDAwNyBTYWx0ZWRfX6tVRntC6aOtR E8a3mDQMFrsr2JZy2nYTN3jieHjzGvzVQbqzXSFtc7hzrNih9QMwD4EXsLFgR4ii6Sb643go065 47z5Uh4TWDOzkf1oiXoYfKJKjhHMG+1PYZzPR7Eo1wWzrXFcxoLGztM8DBZ1UHhao+DUJIAryNO 2sMOBMtyCg0Wip0mU1Gfw6zsghjhgoFodLg4y4zx/lWKuSGNE9bnN+r0SLLRu6tOxAGnT9A9VDC RbqEFpP9TIdNGpyl//I2PM71G9X9cBe8E1keCw5832jtuQ1ZcKDOziLC6QCKH8F64s8DLeGE/Aa KaIdoyocbvH2PKYNwC2HuDzz8bSqL3kuwK0zz64Ael5RgSNOs4D/YzJyAoJq3f15nyKfhC8j63t RRG108OD+jAFyC2ifyGwnLhooIh/N7I+uN5u4CRdgsdzGbfcQm5gA7Suw6mn0mm40OgCzktU9ZY hWjUX4D9/xP9fy1Af4g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_02,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 impostorscore=0 malwarescore=0 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601060007 The WCN39xx family of WiFi/BT chips incorporates a simple PMU, spreading voltages over internal rails. Implement power sequencing support for this generation of WCN chips. Unlike later devices, they don't have separate enable GPIO lines, letting the chip figure out the necessary parts on its own. Signed-off-by: Dmitry Baryshkov --- drivers/power/sequencing/pwrseq-qcom-wcn.c | 130 +++++++++++++++++++++++++= ++-- 1 file changed, 125 insertions(+), 5 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-qcom-wcn.c b/drivers/power/seq= uencing/pwrseq-qcom-wcn.c index 663d9a537065..c5071708e85e 100644 --- a/drivers/power/sequencing/pwrseq-qcom-wcn.c +++ b/drivers/power/sequencing/pwrseq-qcom-wcn.c @@ -23,6 +23,8 @@ struct pwrseq_qcom_wcn_pdata { unsigned int pwup_delay_ms; unsigned int gpio_enable_delay_ms; const struct pwrseq_target_data **targets; + bool has_vddio; /* separate VDD IO regulator */ + int (*match)(struct pwrseq_device *pwrseq, struct device *dev); }; =20 struct pwrseq_qcom_wcn_ctx { @@ -30,6 +32,7 @@ struct pwrseq_qcom_wcn_ctx { struct device_node *of_node; const struct pwrseq_qcom_wcn_pdata *pdata; struct regulator_bulk_data *regs; + struct regulator *vddio; struct gpio_desc *bt_gpio; struct gpio_desc *wlan_gpio; struct gpio_desc *xo_clk_gpio; @@ -52,6 +55,26 @@ static void pwrseq_qcom_wcn_ensure_gpio_delay(struct pwr= seq_qcom_wcn_ctx *ctx) msleep(ctx->pdata->gpio_enable_delay_ms - diff_msecs); } =20 +static int pwrseq_qcom_wcn_vddio_enable(struct pwrseq_device *pwrseq) +{ + struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + return regulator_enable(ctx->vddio); +} + +static int pwrseq_qcom_wcn_vddio_disable(struct pwrseq_device *pwrseq) +{ + struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + return regulator_disable(ctx->vddio); +} + +static const struct pwrseq_unit_data pwrseq_qcom_wcn_vddio_unit_data =3D { + .name =3D "vddio-enable", + .enable =3D pwrseq_qcom_wcn_vddio_enable, + .disable =3D pwrseq_qcom_wcn_vddio_disable, +}; + static int pwrseq_qcom_wcn_vregs_enable(struct pwrseq_device *pwrseq) { struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); @@ -94,6 +117,19 @@ static const struct pwrseq_unit_data pwrseq_qcom_wcn_cl= k_unit_data =3D { .disable =3D pwrseq_qcom_wcn_clk_disable, }; =20 +static const struct pwrseq_unit_data *pwrseq_qcom_wcn3990_unit_deps[] =3D { + &pwrseq_qcom_wcn_vddio_unit_data, + &pwrseq_qcom_wcn_vregs_unit_data, + NULL, +}; + +static const struct pwrseq_unit_data pwrseq_qcom_wcn3990_unit_data =3D { + .name =3D "clock-enable", + .deps =3D pwrseq_qcom_wcn3990_unit_deps, + .enable =3D pwrseq_qcom_wcn_clk_enable, + .disable =3D pwrseq_qcom_wcn_clk_disable, +}; + static const struct pwrseq_unit_data *pwrseq_qcom_wcn_unit_deps[] =3D { &pwrseq_qcom_wcn_vregs_unit_data, &pwrseq_qcom_wcn_clk_unit_data, @@ -229,6 +265,17 @@ static const struct pwrseq_target_data pwrseq_qcom_wcn= _wlan_target_data =3D { .post_enable =3D pwrseq_qcom_wcn_pwup_delay, }; =20 +/* There are no separate BT and WLAN enablement pins */ +static const struct pwrseq_target_data pwrseq_qcom_wcn3990_bt_target_data = =3D { + .name =3D "bluetooth", + .unit =3D &pwrseq_qcom_wcn3990_unit_data, +}; + +static const struct pwrseq_target_data pwrseq_qcom_wcn3990_wlan_target_dat= a =3D { + .name =3D "wlan", + .unit =3D &pwrseq_qcom_wcn3990_unit_data, +}; + static const struct pwrseq_target_data pwrseq_qcom_wcn6855_bt_target_data = =3D { .name =3D "bluetooth", .unit =3D &pwrseq_qcom_wcn6855_bt_unit_data, @@ -247,6 +294,12 @@ static const struct pwrseq_target_data *pwrseq_qcom_wc= n_targets[] =3D { NULL }; =20 +static const struct pwrseq_target_data *pwrseq_qcom_wcn3990_targets[] =3D { + &pwrseq_qcom_wcn3990_bt_target_data, + &pwrseq_qcom_wcn3990_wlan_target_data, + NULL +}; + static const struct pwrseq_target_data *pwrseq_qcom_wcn6855_targets[] =3D { &pwrseq_qcom_wcn6855_bt_target_data, &pwrseq_qcom_wcn6855_wlan_target_data, @@ -272,6 +325,26 @@ static const struct pwrseq_qcom_wcn_pdata pwrseq_qca63= 90_of_data =3D { .targets =3D pwrseq_qcom_wcn_targets, }; =20 +static const char *const pwrseq_wcn3990_vregs[] =3D { + /* vddio is handled separately */ + "vddxo", + "vddrf", + "vddch0", + "vddch1", +}; + +static int pwrseq_qcom_wcn3990_match(struct pwrseq_device *pwrseq, + struct device *dev); + +static const struct pwrseq_qcom_wcn_pdata pwrseq_wcn3990_of_data =3D { + .vregs =3D pwrseq_wcn3990_vregs, + .num_vregs =3D ARRAY_SIZE(pwrseq_wcn3990_vregs), + .pwup_delay_ms =3D 50, + .targets =3D pwrseq_qcom_wcn3990_targets, + .has_vddio =3D true, + .match =3D pwrseq_qcom_wcn3990_match, +}; + static const char *const pwrseq_wcn6750_vregs[] =3D { "vddaon", "vddasd", @@ -328,8 +401,9 @@ static const struct pwrseq_qcom_wcn_pdata pwrseq_wcn785= 0_of_data =3D { .targets =3D pwrseq_qcom_wcn_targets, }; =20 -static int pwrseq_qcom_wcn_match(struct pwrseq_device *pwrseq, - struct device *dev) +static int pwrseq_qcom_wcn_match_regulator(struct pwrseq_device *pwrseq, + struct device *dev, + const char *name) { struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); struct device_node *dev_node =3D dev->of_node; @@ -340,11 +414,11 @@ static int pwrseq_qcom_wcn_match(struct pwrseq_device= *pwrseq, * 'vddaon-supply' property and whether it leads us to the right * device. */ - if (!of_property_present(dev_node, "vddaon-supply")) + if (!of_property_present(dev_node, name)) return PWRSEQ_NO_MATCH; =20 struct device_node *reg_node __free(device_node) =3D - of_parse_phandle(dev_node, "vddaon-supply", 0); + of_parse_phandle(dev_node, name, 0); if (!reg_node) return PWRSEQ_NO_MATCH; =20 @@ -360,6 +434,26 @@ static int pwrseq_qcom_wcn_match(struct pwrseq_device = *pwrseq, return PWRSEQ_MATCH_OK; } =20 +static int pwrseq_qcom_wcn_match(struct pwrseq_device *pwrseq, + struct device *dev) +{ + return pwrseq_qcom_wcn_match_regulator(pwrseq, dev, "vddaon-supply"); +} + +static int pwrseq_qcom_wcn3990_match(struct pwrseq_device *pwrseq, + struct device *dev) +{ + int ret; + + /* BT device */ + ret =3D pwrseq_qcom_wcn_match_regulator(pwrseq, dev, "vddio-supply"); + if (ret =3D=3D PWRSEQ_MATCH_OK) + return ret; + + /* WiFi device match */ + return pwrseq_qcom_wcn_match_regulator(pwrseq, dev, "vdd-1.8-xo-supply"); +} + static int pwrseq_qcom_wcn_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -391,6 +485,12 @@ static int pwrseq_qcom_wcn_probe(struct platform_devic= e *pdev) return dev_err_probe(dev, ret, "Failed to get all regulators\n"); =20 + if (ctx->pdata->has_vddio) { + ctx->vddio =3D devm_regulator_get(dev, "vddio"); + if (IS_ERR(ctx->vddio)) + return dev_err_probe(dev, ret, "Failed to get VDDIO\n"); + } + ctx->bt_gpio =3D devm_gpiod_get_optional(dev, "bt-enable", GPIOD_OUT_LOW); if (IS_ERR(ctx->bt_gpio)) return dev_err_probe(dev, PTR_ERR(ctx->bt_gpio), @@ -432,7 +532,7 @@ static int pwrseq_qcom_wcn_probe(struct platform_device= *pdev) config.parent =3D dev; config.owner =3D THIS_MODULE; config.drvdata =3D ctx; - config.match =3D pwrseq_qcom_wcn_match; + config.match =3D ctx->pdata->match ? : pwrseq_qcom_wcn_match; config.targets =3D ctx->pdata->targets; =20 ctx->pwrseq =3D devm_pwrseq_device_register(dev, &config); @@ -444,6 +544,26 @@ static int pwrseq_qcom_wcn_probe(struct platform_devic= e *pdev) } =20 static const struct of_device_id pwrseq_qcom_wcn_of_match[] =3D { + { + .compatible =3D "qcom,wcn3950-pmu", + .data =3D &pwrseq_wcn3990_of_data, + }, + { + .compatible =3D "qcom,wcn3988-pmu", + .data =3D &pwrseq_wcn3990_of_data, + }, + { + .compatible =3D "qcom,wcn3990-pmu", + .data =3D &pwrseq_wcn3990_of_data, + }, + { + .compatible =3D "qcom,wcn3991-pmu", + .data =3D &pwrseq_wcn3990_of_data, + }, + { + .compatible =3D "qcom,wcn3998-pmu", + .data =3D &pwrseq_wcn3990_of_data, + }, { .compatible =3D "qcom,qca6390-pmu", .data =3D &pwrseq_qca6390_of_data, --=20 2.47.3