From nobody Tue Feb 10 02:43:17 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 33CE42E6CD8 for ; Tue, 30 Dec 2025 23:36:16 +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=1767137780; cv=none; b=pB4iYLbBju+2k26N2oBhkDTfvwYSPKCIwIHTMX8zdT8AnQCG1hF+PFUgIt0OJUw3Nvbmwj08iYpw0nLVuO9TFYGM/CDy+a/wF0n7DYIRIxSpb7zUtueYopKT5/g24ygzPdCIaljLw+A5jrPAFtD3x2oGEic/ymyY3TkOsS1G4XI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767137780; c=relaxed/simple; bh=G5Z4yR6nEsG1t9E48mwIwJpb2fx2CuxEMAwYvVJCpKM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FE34zm4UnwKO3Lo4/nYVuq2gs+rJ4O8atI+IE3Pe9qSrpARxW5xqFYMZcK/lW1XkW35PFpmVEdXY8RsRgpr2v56RUZYTn1P1rxQJR2EMPdqK+enkDEQo+hDfCqr/7AZCmF5woibgG3E2K71X5qRSOU4wF1I8f+wJO3WDSSBVejg= 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=DgvFeT/L; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=U2vHYDDf; 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="DgvFeT/L"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="U2vHYDDf" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BU9QiJ32723263 for ; Tue, 30 Dec 2025 23:36:16 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= M+J6odUgaa8iwTvncGdMwjsDOYue6NOpQi6sZNGxf7o=; b=DgvFeT/LbKpAbaOJ 6pJL0julzqo9F5xShPc/sPjnNl6mQU+meQIux5oud1XPM38IrvDErvwTUBYOK97/ FOqpZal5hMHfcSYMc43GdFQ1BUVVW7ba1pDXwPfFRxidheChhL8IemJYRXQVz/E9 5SWom50wRnFtyn84TqATGvIj0zrQmz5b3gFgFZWGG+P+1KuXmfFmp7uJrD1qc9Nl rWJEn80lAYBpds9ZIVnJ1dLtP2WfrRzFEezT2Nrr9uNYJSZBLyeHMS18T0Shhe/x kLLWYkFW1Yf5aBmdB4Ba9QBVYOUHi0+rmFCbnWmkRMSz9UYTU3DxM8ww3nboD6k9 IIb7hQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bc0vdk2wf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 30 Dec 2025 23:36:15 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-4ee16731ceaso201806401cf.2 for ; Tue, 30 Dec 2025 15:36:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767137775; x=1767742575; 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=M+J6odUgaa8iwTvncGdMwjsDOYue6NOpQi6sZNGxf7o=; b=U2vHYDDfJY4aJptojucKW4QHVQcdEDFyKr9PynXa1KvuzV+HFn3HHzpg0v+pwINNEC nJILH7jYvYlHqujGD/CL40nfa8ArJ/CvDETnuN+qagx89b5eIwI4gEOSk/jN/y9zQJgL u8rfxCgok6bfqVl/CsK2P5ZzCz6uIEUvdyMBzrEncPONJgBsA79uuAS5T+cnNbomrFDb uzODcNcPsK2zrjHmkS48kzcm1gkm+qZmy+64TQ8PxzM3IwYHO1KGKgujRwe7J+jGhEla lvHdFVupktoy+9ouy4gTggvV3OI0Ef1Ms7tBcj27U9VdumeA+qH2/Hj0vJE6iteDeWnD TsqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767137775; x=1767742575; 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=M+J6odUgaa8iwTvncGdMwjsDOYue6NOpQi6sZNGxf7o=; b=c5XhHm/R0Iywcubpv6a3sWSaqi8XRMrZ8GDSD9aK/68ar68HSXVdCFPhWlOz9JSXf9 jceUD2L43ZqQ0DT6mLaXz7Y4pgCOKVV1WCgQ5Yyusxb3XDBySJhpnma+bKUhjUIkWlmA XMKpsn/ya2cF1/mjE6sa+XJpQvlKw7Zs/XPnfF5m59cq4GzutzunkndD74m5/GY17rXt FEkvCc9oYPgY6ucFRX+gHKM3UTlRDz9JpOe1YDzDswYA5Pek5iadVzpqYV2Y6Ah09vwn AXgJ1HWynxJTFksb4sTeENPelwmQyHv4+QrOKfwOmTaqg5mL4IFxvZ7ZMgWDV+uRLsy/ Scjg== X-Forwarded-Encrypted: i=1; AJvYcCXlqd8j/gg86UuPV9nFjqc5vvDqHdFujuxprKngDliP18nkVBM8Y9MC3+N8oAMYO//iP/FPr/gzXgXX5xk=@vger.kernel.org X-Gm-Message-State: AOJu0YyXgEcR2gP3ZMYnOh6Z4rmn7NnLd7xsqMGerz/dleDH3ANyhnfz ZfVLQd3jyUOtlWr7gcLk7c6FtpwF46T2Md/LZWTSojt8rI8If+8EA6KMRBWH7VIXgYBeqTmXKdk Sy/hkugRUGoN5E0ftNHu06wVh9uPNO8zf5dz50IB1i9dXXaVcol3/CSUMGHd/3b58Yxo= X-Gm-Gg: AY/fxX5TBvADk7ZX0PNpc+t6cb6D5G3kr/WbLAWNL29IslU29lr+Ro2GGwIIXNcHczL 4EuuQQRrxEShZ+MJBdbFsme+JfETXiuvrcNNnWMAbaCXuBQuI7tGCCoWtADMuYYR8MQpkB7wWDA c50GcRCb4I9xquER4bm7rhHMfQoi0GQdn9hpBP0gAopl3OsI7an9aGd2Wwfx4AByJwagty3h0fS X2/K30a+G3f/shVXFooCj38mBNqCHStVAW/PLdq18+3Y65oa3X17b8us/nWhaUp4TOKdzwced8M rHI9pBh5wKeXc6ubdgCuM6p4I+JZBS9KvgXQSnjsWZbNg6gNJ0A205PjBji9Gvb31ou2xbUSo7U WBzp3o68Lyu/m83g+McKwF0vHnafe2wqizoIjY4zeKUK55Zy0sZPMDS7x59t+QsGR7PaYGd5wTG kPPBiLmMx+e6IW2beVWyKMG0A= X-Received: by 2002:ac8:46c8:0:b0:4f4:c7c0:bd15 with SMTP id d75a77b69052e-4f4c7c0c07bmr350487711cf.12.1767137775145; Tue, 30 Dec 2025 15:36:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IHt+XoYSbSJNRXHtMXQNgN0f/XiydU8U/JTEU2GP7wJMRDcjK6UqRn6PIVza81M2IRsxDEozw== X-Received: by 2002:ac8:46c8:0:b0:4f4:c7c0:bd15 with SMTP id d75a77b69052e-4f4c7c0c07bmr350486631cf.12.1767137773096; Tue, 30 Dec 2025 15:36:13 -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-59a18620337sm10349574e87.86.2025.12.30.15.36.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Dec 2025 15:36:12 -0800 (PST) From: Dmitry Baryshkov Date: Wed, 31 Dec 2025 01:35:55 +0200 Subject: [PATCH 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: <20251231-wcn3990-pwrctl-v1-5-1ff4d6028ad5@oss.qualcomm.com> References: <20251231-wcn3990-pwrctl-v1-0-1ff4d6028ad5@oss.qualcomm.com> In-Reply-To: <20251231-wcn3990-pwrctl-v1-0-1ff4d6028ad5@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=8160; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=G5Z4yR6nEsG1t9E48mwIwJpb2fx2CuxEMAwYvVJCpKM=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ2ZI4pMOE1aXJRkm0xhOXLnBtuXhofJsj6deTGt0rvqou ynUW4p1MhqzMDByMciKKbL4FLRMjdmUHPZhx9R6mEGsTCBTGLg4BWAimjLs/7QvHi2x29XYuu7P xelC2x5FthbuFb3BkNgXkNkwNYTXZu2s0stSKRs0v01X2Tp9t8qfS3pdPs+2Hpv44f8fb78ob1+ uqF358VaiTPW++62ezZffIV+Y4C9QH7S0kMV1WdHbLPZHD0We7Ew8W/ia+c8UnyCp/tsXuG8qfk rcHB5sUtXZcOn13qPC/SkWQW1etl4MP8Xt23W/rmmPtFaqitsQc8e3Ye3JvX3Vdx5JyZx43njNv OvC+hsmIU++TSgUyU54O2eumYvmoUWPJ0Rnu71jXn1RReu3jc1v9antHLZZatwHgytffgs/vqtL /4vsv7/pLw4bx39K1zRa/U3N/KHUjWWWphH+NYUSTY0mAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=dfONHHXe c=1 sm=1 tr=0 ts=695461ef cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=I1O4o1mkfA9rNPu_QXcA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjMwMDIxMSBTYWx0ZWRfX3vVAhR4GmJ3E GZ+pMiqSW8crvecapVgT1AywnhpSqkt6nHeMyrc3KmaQOjeRUm0uyZb1Isxte3pmV7ZZWzUEjio yyx0OhjNE9NZdc/Zy6Va7b4ahE/FqedU5AGgk4FjbCmxtAHjXmpieMWlLWELWA6oMMahmFE656X cIKitdzviydUz0nNI13IHbNYFdnzsXgt5SBXBHe7QrtudkdW7EXmu41oSwsI5mnwCn0Yc325eQO azIDMxZL8kThDRfO2t8hVNLa2rfRr0SFkeB7ohw6+fzXAga7JEM4IQx113+xBV48a8PZLCBH/Ia mYneDq6F8PGOlJEVLBkZgsn+bbfm7KG/5IM9rOEKULnYhkIC2fKwhURPiEZYecgLfdO0yaenfdW YUJj7YivknzTBDWMtOb1ur8OMjZEYwRZEP83SIVFgXAMZ2fQC6N26nTwwZndvg9Ebw4RpmOKUmi n6IN3tIN+YMdNo1YRig== X-Proofpoint-GUID: AS8g2PR2WgvTacvVJC--kXq_PgzlTr7G X-Proofpoint-ORIG-GUID: AS8g2PR2WgvTacvVJC--kXq_PgzlTr7G 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=2025-12-30_04,2025-12-30_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 clxscore=1015 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512300211 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..ed81d0c90a2d 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", + "vddrfa1p3", + "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