From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6AD2E51AEF1 for ; Fri, 18 Sep 2026 16:43:44 +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=1789749826; cv=none; b=SVroX1Gc4Exby1r4g2x4ZwkZgutYm2UsoGmgdN48M9ITXjOBfwOb1RlPg1pBr80qvZ/EomqcCIf+oHiNMWbnuzSkOKwhtet1wMBVRUNwaWZ3oFuss/m9kgHxpMNLvAsA9CrzxwtY33zgD+zJR5wUugNKU0rJj8aQ8jTH3YubPiw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789749826; c=relaxed/simple; bh=FOW8Kiq98EhIhu/7tX2AAc+0Y+6AW1oGnc3unjB1isE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nOgz/il/zQbyzAkAQhq9/UVWZBos2dv+yI+cWKXmYkYN1tHbUkRs31mGNBV79Gc+H28A4vx0N4hw83sUoTDg5oE003f7DBpj+8sO1fC8MfoIgB0Bmda9oSMaSesq+AZWuuzQVB2W3Ts20nXu2ZtkbBpkX8hgdVJ+ztrlGjyZz1I= 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=BFRICBs7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QZMpKGti; 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="BFRICBs7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QZMpKGti" 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 68IEQwZu1020030 for ; Fri, 18 Sep 2026 16:43:43 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= wEDVrcahh51PBiKZ8KgTkpBndUo9irvZdAIZOd73FVg=; b=BFRICBs7H2Q1TSqJ rTCdJS64OpIRKjeO561FqY7Sb+fxzB0Y9dadE69fifQTyyvJ4hcIjJUMIAjIllOw Ty/tQQcPbKdQS64/5gaMcLPJwg9lTkGhGFUfxC+vFgDw7HZij/raQlcxg06H8Ap7 7BDJnSuDLgca19xjg1rM9TbOhiXFilIsYll4ZBxd8xEALU7BDVC0fMbTJzNpD/rO fPEf2xHVS1eKRPp63qh7Q8UMw63CEAEv7Hm9H6NCZyNckS3+v3Y6HjBxrwyrI5At YCSH18g89N9Ko1jzpZuLi0SpLGMGWAS/SXy+gwCcgrsoge31JTrJPdPjhwFbRLFk aIYPVQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gs72u0kpu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 18 Sep 2026 16:43:43 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-3968bb86fb7so1275067a91.2 for ; Fri, 18 Sep 2026 09:43:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789749823; x=1790354623; 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=wEDVrcahh51PBiKZ8KgTkpBndUo9irvZdAIZOd73FVg=; b=QZMpKGtiBF2zDrP/dld7FMt54KySzVkHHYqrNud9fs2dccL4jxUGNCrbkEBnVYpVK2 juAcomxvhtGlxeOeDzXa4x1wkOUzzfq/s+qtmPEVnhMY8txhfmScbNhgcXpgkukfiJgJ 4Ww0I2D4UxVrJeGhwpsPmR66bChe1YC61/S8g2scaDB4Fy3JoYRDC2zjMJ55IP8S+W7h hgvt2JoAJbkkrENZN0SeJv1TFfnqPu/W2Ea24xQxBCO9sdeaSl947UI034ECO6Gnd9Wp d2g6iNnOPXDt87hyCzvH71M08uKx2VpPu2mlKM9/TZNeFOWHw10CPrxqbQDXGChMsCQw 6lsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789749823; x=1790354623; 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=wEDVrcahh51PBiKZ8KgTkpBndUo9irvZdAIZOd73FVg=; b=HF+w0CwYxBZT59xTb6TBCmUG9Qd5RA+fhLi4YmeMmciRlzNx6PFmga3RqS1pfyqUaT YM1dMAYmqpeLUtP+oaHUg4d2j0xGH9Jz0s1WTTy4q063jj/+hcc9fNRLq5Tfadd4irZM sWbRap6JcCQqs7FX8v6KqqOPNHEhsIe/i/J7b9ikUkz17eXJd/m5thlSPwaVX3K0HJGM eYrUwOaBCozX0RJMWoXhSif+aacyBQkk7v6WSX6MlUwydwvMiKB/RLJ+gWBxSZf6dzUp nqrqcOnvZy3nRr2MVm3BBKNusDgn4a3yFN9hoQqNPNqH2QaOyAqd3jrgOVUM9elbxw39 q0aA== X-Forwarded-Encrypted: i=1; AKwUvByymIG4hROXldfad8oiJabEVDWqHMr7pSebNQ6TRndZ0++fYbEN1tpAJ4/42UyIyE+FIqj0qVnOcTSJ@vger.kernel.org X-Gm-Message-State: AFuF++kBDgO7QbwiJLyQKAJIljhU09EaVvSfXdweUixrI0wx6slHJXj0 1M4RpbbaVCZaXvnDqzYK+REuUdfhRfgyDvXD7PtRohQzwT7Z4xEr1VmMnwxGYinYuKgF8heOjkM W11UixT0kw5lfvuoVCmREU8YyGc8L12ucbazZYfpmwC0YLbpd4tR8W1+9CrSRzj8j X-Gm-Gg: AYBFou0B3XQSN5oEbUZzohxozr8A8D5CK3+HIpJ33C26UlU4XjV9exY4GrPbFBGxyWO c+62r5R1oLYDpj3KWHKXz4ZQEuvOo/8yvCpGr3K00NBMdKF8sf4WXaurqWM1MOfYr5XmI/G+EyF 1/mstY2xexZWnPKRf8wx4fHVVuLR0xDSBkW1oLG97UkhfdG6GJIEQtesxLpUULQQzGZPr1cj9n5 ACSHHVXFbdEIDeg2luY/Tvah6YMhG/tByKkRwkC0USXQFdtD1u2TYr/XNg+734Fml1DXFTtuU1R wDOW29rdQjZY2ZAHuDoRxWZd9r3PWpD6KPSKnzVVa1aVYzj9m0xLY/wafYT2qh2cyXHjmLYXIl6 FEhEUzoz0PlENyFxatQ== X-Received: by 2002:a17:903:4b0d:b0:2dd:c100:424c with SMTP id d9443c01a7336-2ddc100456amr2489495ad.48.1789749822465; Fri, 18 Sep 2026 09:43:42 -0700 (PDT) X-Received: by 2002:a17:903:4b0d:b0:2dd:c100:424c with SMTP id d9443c01a7336-2ddc100456amr2489015ad.48.1789749821987; Fri, 18 Sep 2026 09:43:41 -0700 (PDT) Received: from [10.213.109.130] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddb754e390sm11161895ad.32.2026.09.18.09.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2026 09:43:41 -0700 (PDT) From: Jishnu Prakash Date: Fri, 18 Sep 2026 22:12:47 +0530 Subject: [PATCH 3/6] regulator: qcom-pm8008: Add PM8010 mode support Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260918-pm8010_i2c_support-v1-3-de33d78fad9d@oss.qualcomm.com> References: <20260918-pm8010_i2c_support-v1-0-de33d78fad9d@oss.qualcomm.com> In-Reply-To: <20260918-pm8010_i2c_support-v1-0-de33d78fad9d@oss.qualcomm.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Guru Das Srinagesh , Liam Girdwood , Mark Brown Cc: linux-arm-msm@vger.kernel.org, mfd@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Konrad Dybcio , Dhruvin Rajpura , Nihal Kumar Gupta , Kamal Wadhwa , Oleg Keri , Jishnu Prakash X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1789749799; l=4607; i=jishnu.prakash@oss.qualcomm.com; s=20251014; h=from:subject:message-id; bh=i6ectjJil8esk9p4hU3NPt1eTg+wiGzPdvJNMouCs54=; b=SAwQrv8FslWXdd5QvnVMWyjRwqwDnresQ9lLZDNkBJQ370keYuY5l4iH5O9h8IC/wmZ2QfT6s EWV4NgY7QWtCjuF+i9nygstwOT8DZ0IB1L6li+DFqOMYnBY06apkxtB X-Developer-Key: i=jishnu.prakash@oss.qualcomm.com; a=ed25519; pk=g89pXdLVwRjdTeQ+uX1QzvBO346E3hQAc1N7fcTXgmk= X-Proofpoint-ORIG-GUID: JVKxmrx0lP5eFMbkt_2DLejBvp7LdL3S X-Proofpoint-Spam-Info: AW1haW4tMjYwOTE4MDIzOCBTYWx0ZWRfX9rQ2FCi2UFKf P8aRVPIIIA7hppu/uDR/abwOuUp6qr2hbTnHnv0OGT9mdOP/FmPxYi98PUTkYv7a9v71Ok/z2Pq f1z8abH+iA5MP4KWc9LpjZ803CNUZLI= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE4MDIzOCBTYWx0ZWRfX1PJAQkd6+c6X qUGVE8gdaNm22z8+j81rV1c4nvcjRcHS34lAH/Ij/GyZ0j34vlCKFtv3B88pdHfh5r4Svi357cE kSTfZjvgDo6KjHVE07hdHw6+www32gepLun8cGm7BitUsccBS8El5m04lA4b9WemmoeAZHTD69Z u3M8sz6HMuyHEr24Fbg/iNKNeM8KcEzSrIPW9EqogK84IXeuGjhcX7yE+0q/IL71AYmxETbSpID xzKqq+pk6ZOF35mzEaYAZ60DoZeFKhD2LuyzWHfMDbVMRQWL9XLmRp52TOJ8gny3Jyyo7DcisVH Mr+w7iRGIyqqw6N/gLO9H1fST9IV0zF2wMvVmRHi9KlMdaEVPjhq57t2AKGVOI2WFcsR/5dFGaq 5lSXKzUIgExboT0tu5Af0ezWy9L6TdudszJq3U8u6OLiGQicFeDGLSohusoE51wzPHZ4Hca7ogf h54UAbXGCcVSimf0ppA== X-Proofpoint-GUID: JVKxmrx0lP5eFMbkt_2DLejBvp7LdL3S X-Authority-Analysis: v=2.4 cv=DO8acCNb c=1 sm=1 tr=0 ts=6aad6a3f cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=azaBX0EM9DmJuHldzdsA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 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-18_04,2026-09-16_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 suspectscore=0 bulkscore=0 adultscore=0 spamscore=0 malwarescore=0 phishscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609180238 From: Dhruvin Rajpura Implement set_mode/get_mode support for PM8010 LDOs using the mode control and status registers to allow clients to vote for LDO modes. Mode voting is not supported in the PM8008 LDOs. Signed-off-by: Dhruvin Rajpura Signed-off-by: Jishnu Prakash --- drivers/regulator/qcom-pm8008-regulator.c | 75 ++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/qcom-pm8008-regulator.c b/drivers/regulator/qcom-pm8008-regulator.c index b484c0f73eea..9758809a6322 100644 --- a/drivers/regulator/qcom-pm8008-regulator.c +++ b/drivers/regulator/qcom-pm8008-regulator.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -24,9 +25,19 @@ #define LDO_VSET_LB_REG 0x40 +#define LDO_MODE_CTL1_REG 0x45 +#define MODE_PRIMARY_MASK GENMASK(2, 0) +#define LDO_MODE_NPM 7 +#define LDO_MODE_LPM 4 + #define LDO_ENABLE_REG 0x46 #define ENABLE_BIT BIT(7) +#define LDO_STATUS1_REG 0x08 +#define MODE_STATE_MASK GENMASK(1, 0) +#define MODE_STATE_NPM 3 +#define MODE_STATE_LPM 2 + struct pm8008_regulator { struct regmap *regmap; struct regulator_desc desc; @@ -134,6 +145,51 @@ static int pm8008_regulator_get_voltage_sel(struct regulator_dev *rdev) return regulator_map_voltage_linear_range(rdev, uV, INT_MAX); } +static int pm8010_regulator_set_mode(struct regulator_dev *rdev, unsigned int mode) +{ + struct pm8008_regulator *preg = rdev_get_drvdata(rdev); + unsigned int val; + + switch (mode) { + case REGULATOR_MODE_NORMAL: + val = LDO_MODE_NPM; + break; + case REGULATOR_MODE_IDLE: + val = LDO_MODE_LPM; + break; + default: + return -EINVAL; + } + + return regmap_update_bits(preg->regmap, preg->base + LDO_MODE_CTL1_REG, + MODE_PRIMARY_MASK, val); +} + +static unsigned int pm8010_regulator_get_mode(struct regulator_dev *rdev) +{ + struct pm8008_regulator *preg = rdev_get_drvdata(rdev); + unsigned int val; + int ret; + + ret = regmap_read(preg->regmap, preg->base + LDO_STATUS1_REG, &val); + if (ret < 0) + return REGULATOR_MODE_INVALID; + + return (val & MODE_STATE_MASK) == MODE_STATE_NPM ? + REGULATOR_MODE_NORMAL : REGULATOR_MODE_IDLE; +} + +static unsigned int pm8010_regulator_of_map_mode(unsigned int mode) +{ + switch (mode) { + case REGULATOR_MODE_NORMAL: + case REGULATOR_MODE_IDLE: + return mode; + default: + return REGULATOR_MODE_INVALID; + } +} + static const struct regulator_ops pm8008_regulator_ops = { .list_voltage = regulator_list_voltage_linear_range, .set_voltage_sel = pm8008_regulator_set_voltage_sel, @@ -143,6 +199,17 @@ static const struct regulator_ops pm8008_regulator_ops = { .is_enabled = regulator_is_enabled_regmap, }; +static const struct regulator_ops pm8010_regulator_ops = { + .list_voltage = regulator_list_voltage_linear_range, + .set_voltage_sel = pm8008_regulator_set_voltage_sel, + .get_voltage_sel = pm8008_regulator_get_voltage_sel, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, + .set_mode = pm8010_regulator_set_mode, + .get_mode = pm8010_regulator_get_mode, +}; + static int pm8008_regulator_probe(struct platform_device *pdev) { const struct pm8008_match_data *match_data; @@ -155,6 +222,7 @@ static int pm8008_regulator_probe(struct platform_device *pdev) struct regulator_dev *rdev; struct regmap *regmap; unsigned int val; + bool is_pm8010; int ret, i; id = platform_get_device_id(pdev); @@ -169,6 +237,9 @@ static int pm8008_regulator_probe(struct platform_device *pdev) if (!regmap) return -EINVAL; + is_pm8010 = of_device_is_compatible(to_i2c_client(dev->parent)->dev.of_node, + "qcom,pm8010-i2c"); + for (i = 0; i < match_data->num_regulators; i++) { data = &match_data->regulator_data[i]; @@ -185,7 +256,9 @@ static int pm8008_regulator_probe(struct platform_device *pdev) desc->supply_name = data->supply_name; desc->of_match = data->name; desc->regulators_node = of_match_ptr("regulators"); - desc->ops = &pm8008_regulator_ops; + desc->ops = is_pm8010 ? &pm8010_regulator_ops : &pm8008_regulator_ops; + if (is_pm8010) + desc->of_map_mode = pm8010_regulator_of_map_mode; desc->type = REGULATOR_VOLTAGE; desc->owner = THIS_MODULE; -- 2.43.0