From nobody Wed Dec 17 15:31:12 2025 Received: from mg.richtek.com (mg.richtek.com [220.130.44.152]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6F97D2356C1; Mon, 17 Mar 2025 10:18:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.130.44.152 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206687; cv=none; b=GAsykrMNsLe7ODYKI6Sqk9WMmGB1jBTWzK1O0rhzd3X9uNKOwGr9vhC7FQeYTiBTypBqUMqTrxqObYiepQ7XKREkDMlVfNWsEtdnGYIZJ2NhAWCt+y4CCRUPs+yypfABObW6Xtb6w/6OFrXgMa+//IdsC9/NuMwFBLisWy+fR/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206687; c=relaxed/simple; bh=KGqJ2mcmedj8OvxvYNV96mrPp8SFM5FTD/g72+2VlGA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nmgA4yYYGiWpnHIHw4Kjw/oLg9QOdJ1zkVjdDBTu6VLbWnN0Sf/kBgkzI30mokvy2YRPa8FO6Xrya7KuMahbSjX1PRDEmLTh4KknfrtnbdsxtMggWUkt4iJAJ+ctW7aXg+sy9K/hnvHcqoncevRBg0gGpUzQUkhRHlBsRI+e8ig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com; spf=pass smtp.mailfrom=richtek.com; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=C3fmwam9; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=MOpOnoMC; arc=none smtp.client-ip=220.130.44.152 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=richtek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="C3fmwam9"; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="MOpOnoMC" X-MailGates: (SIP:2,PASS,NONE)(compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206682; bh=GibFCFYN9j2dazAKWEfxe9cuNWB3nUe4wO2Cz38jMcQ=; l=4724; h=From:To:Subject:Date:Message-ID:MIME-Version; b=C3fmwam9aqtDGAaNYqEjGr4CBoybdiweI+VfU30QPNYwE9oYnmvcKaAAIIPZSL9bF 7S2WAVf5IyQF5/j2e02gYoLhnxUbKftJyYabL7PsaPHbB6k/RkFkSMIa1EEKUbMhR+ QUIzbG0Uxir57IuC0snRfkEO7NJ73MYjHXnSHcQn8XPTuTh9ogJjrFgeoatj2QR3ed t1mLgzFRdKTsLGi6m7oBbasOUAvKhCjnRoUaUIIjkmYYgIl4eAChzgb1I1i+RsbAG8 Jz/7BIAp4Wj/NsqPnDxdsY7mn5nQvvuoR1xphJLjhTt2g8pQR6eMwFnFKihVRJQom8 jVaKUZMmte/fQ== Received: from 192.168.8.21 by mg.richtek.com with MailGates ESMTP Server V3.0(1128080:0:AUTH_RELAY) (envelope-from ); Mon, 17 Mar 2025 18:17:55 +0800 (CST) X-MailGates: (compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206675; bh=GibFCFYN9j2dazAKWEfxe9cuNWB3nUe4wO2Cz38jMcQ=; l=4724; h=From:To:Subject:Date:Message-ID:MIME-Version; b=MOpOnoMCdHdyxQgBMmQHMow7oh1wtsyg5R8kYd88grBa7G+VxeRE8VEAPLq3ZCvG3 zueA83NUVcz3p5RgA5QF3KmU/vswdAxyngTd4zSXBu01ch0OCJKsOgjNYKG/vuYuE7 d0S0GzhYPshK64ch8i4xnqfoRwbiwWR8dWix6lra0WOFMELO+HeF98nnA79aYdKm1d 8JqnEiYBdFN/+20fmhiQ640pX+l0MZ8zGo0HD5Ji7t/4TuSmfGkbXXn/nAoY/aY+bm jjWR6BPRo0W5K1pk6K1leiAzLXdo+6t92zhKdwKF9xlrYIbIzwPhTQL/dMc+s2BVTq JdB4/WAeoZLqg== Received: from 192.168.10.46 by mg.richtek.com with MailGates ESMTPS Server V6.0(3810286:1:AUTH_RELAY) (envelope-from ) (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256/256); Mon, 17 Mar 2025 18:05:18 +0800 (CST) Received: from ex4.rt.l (192.168.10.47) by ex3.rt.l (192.168.10.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 17 Mar 2025 18:05:17 +0800 Received: from git-send.richtek.com (192.168.10.154) by ex4.rt.l (192.168.10.45) with Microsoft SMTP Server id 15.2.1544.11 via Frontend Transport; Mon, 17 Mar 2025 18:05:17 +0800 From: To: Mark Brown , Krzysztof Kozlowski , Conor Dooley CC: Liam Girdwood , Rob Herring , ChiYuan Huang , , Subject: [PATCH 1/3] regulator: rtq2208: Fix incorrect buck converter phase mapping Date: Mon, 17 Mar 2025 18:06:21 +0800 Message-ID: X-Mailer: git-send-email 2.43.5 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: ChiYuan Huang Use the hidden bank RG to get the correct buck converter phase mapping. Fixes: 85a11f55621a ("regulator: rtq2208: Add Richtek RTQ2208 SubPMIC") Signed-off-by: ChiYuan Huang --- drivers/regulator/rtq2208-regulator.c | 89 +++++++++++++++++++++------ 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/drivers/regulator/rtq2208-regulator.c b/drivers/regulator/rtq2= 208-regulator.c index 5925fa7a9a06..2a2f6a54de11 100644 --- a/drivers/regulator/rtq2208-regulator.c +++ b/drivers/regulator/rtq2208-regulator.c @@ -27,6 +27,9 @@ #define RTQ2208_REG_LDO1_CFG 0xB1 #define RTQ2208_REG_LDO2_CFG 0xC1 #define RTQ2208_REG_LDO_DVS_CTRL 0xD0 +#define RTQ2208_REG_HIDDEN_BUCKPH 0x55 +#define RTQ2208_REG_HIDDEN0 0xFE +#define RTQ2208_REG_HIDDEN1 0xFF =20 /* Mask */ #define RTQ2208_BUCK_NR_MTP_SEL_MASK GENMASK(7, 0) @@ -45,6 +48,8 @@ #define RTQ2208_LDO1_VOSEL_SD_MASK BIT(5) #define RTQ2208_LDO2_DISCHG_EN_MASK BIT(6) #define RTQ2208_LDO2_VOSEL_SD_MASK BIT(7) +#define RTQ2208_MASK_BUCKPH_GROUP1 GENMASK(6, 4) +#define RTQ2208_MASK_BUCKPH_GROUP2 GENMASK(2, 0) =20 /* Size */ #define RTQ2208_VOUT_MAXNUM 256 @@ -524,27 +529,75 @@ static int rtq2208_parse_regulator_dt_data(int n_regu= lator, const unsigned int * =20 } =20 -/** different slave address corresponds different used bucks - * slave address 0x10: BUCK[BCA FGE] - * slave address 0x20: BUCK[BC FGHE] - * slave address 0x40: BUCK[C G] - */ -static int rtq2208_regulator_check(int slave_addr, int *num, +static int rtq2208_regulator_check(struct device *dev, int *num, int *regulator_idx_table, unsigned int *buck_masks) { - static bool rtq2208_used_table[3][RTQ2208_LDO_MAX] =3D { - /* BUCK[BCA FGE], LDO[12] */ - {1, 1, 0, 1, 1, 1, 0, 1, 1, 1}, - /* BUCK[BC FGHE], LDO[12]*/ - {1, 1, 0, 0, 1, 1, 1, 1, 1, 1}, - /* BUCK[C G], LDO[12] */ - {0, 1, 0, 0, 0, 1, 0, 0, 1, 1}, - }; - int i, idx =3D ffs(slave_addr >> 4) - 1; + struct regmap *regmap =3D dev_get_regmap(dev, NULL); + bool rtq2208_used_table[RTQ2208_LDO_MAX] =3D {0}; + u8 entry_key[] =3D { 0x69, 0x01 }; + unsigned int buck_phase; + int i, ret; u8 mask; =20 + ret =3D regmap_raw_write(regmap, RTQ2208_REG_HIDDEN0, entry_key, ARRAY_SI= ZE(entry_key)); + if (ret) + return dev_err_probe(dev, ret, "Failed to enter hidden page\n"); + + ret =3D regmap_read(regmap, RTQ2208_REG_HIDDEN_BUCKPH, &buck_phase); + if (ret) + return dev_err_probe(dev, ret, "Failed to read buck phase configuration\= n"); + + ret =3D regmap_write(regmap, RTQ2208_REG_HIDDEN1, 0x00); + if (ret) + return dev_err_probe(dev, ret, "Failed to exit hidden page\n"); + + dev_info(dev, "BUCK Phase 0x%x\n", buck_phase); + /* + * Use buck phase configuration to assign used table mask + * GROUP1 GROUP2 + * 0 -> 2P + 2P BC FG + * 1 -> 2P + 1P + 1P BCA FGE + * 2 -> 1P + 1P + 1P + 1P BCDA FGHE + * 3 -> 3P + 1P BC FG + * others -> 4P C G + */ + switch (FIELD_GET(RTQ2208_MASK_BUCKPH_GROUP1, buck_phase)) { + case 2: + rtq2208_used_table[RTQ2208_BUCK_D] =3D true; + fallthrough; + case 1: + rtq2208_used_table[RTQ2208_BUCK_A] =3D true; + fallthrough; + case 0: + case 3: + rtq2208_used_table[RTQ2208_BUCK_B] =3D true; + fallthrough; + default: + rtq2208_used_table[RTQ2208_BUCK_C] =3D true; + break; + } + + switch (FIELD_GET(RTQ2208_MASK_BUCKPH_GROUP2, buck_phase)) { + case 2: + rtq2208_used_table[RTQ2208_BUCK_F] =3D true; + fallthrough; + case 1: + rtq2208_used_table[RTQ2208_BUCK_E] =3D true; + fallthrough; + case 0: + case 3: + rtq2208_used_table[RTQ2208_BUCK_H] =3D true; + fallthrough; + default: + rtq2208_used_table[RTQ2208_BUCK_G] =3D true; + break; + } + + /* By default, LDO1 & LDO2 are always used */ + rtq2208_used_table[RTQ2208_LDO1] =3D rtq2208_used_table[RTQ2208_LDO2] =3D= true; + for (i =3D 0; i < RTQ2208_LDO_MAX; i++) { - if (!rtq2208_used_table[idx][i]) + if (!rtq2208_used_table[i]) continue; =20 regulator_idx_table[(*num)++] =3D i; @@ -559,7 +612,7 @@ static int rtq2208_regulator_check(int slave_addr, int = *num, static const struct regmap_config rtq2208_regmap_config =3D { .reg_bits =3D 8, .val_bits =3D 8, - .max_register =3D 0xEF, + .max_register =3D 0xFF, }; =20 static int rtq2208_probe(struct i2c_client *i2c) @@ -583,7 +636,7 @@ static int rtq2208_probe(struct i2c_client *i2c) return dev_err_probe(dev, PTR_ERR(regmap), "Failed to allocate regmap\n"= ); =20 /* get needed regulator */ - ret =3D rtq2208_regulator_check(i2c->addr, &n_regulator, regulator_idx_ta= ble, buck_masks); + ret =3D rtq2208_regulator_check(dev, &n_regulator, regulator_idx_table, b= uck_masks); if (ret) return dev_err_probe(dev, ret, "Failed to check used regulators\n"); =20 --=20 2.34.1 From nobody Wed Dec 17 15:31:12 2025 Received: from mg.richtek.com (mg.richtek.com [220.130.44.152]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E652B23FC4B; Mon, 17 Mar 2025 10:18:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.130.44.152 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206688; cv=none; b=aJ3ny7c6RJ7WibVmpHt+7A9UuX7nykczqhwu2xE5l2OH1pNZOnqGxdh6wTigsfV+c6/x+IEegiFraWtE8aR6plvOzjZ+An2xnK9Jw4iha5TvjdLKtd+YbNOkez0QRYsfvYW6gPOCt8/DTnhQxf12GHoS+TKVFxjO4f8ywXYu2bU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206688; c=relaxed/simple; bh=FVZ64VaHCWLjK3snr2V8Wl9AqcuLIXwhgGw6zIXvcKU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=l5dApWjVjuakZtUButqvfEdrb8JvClZ8RDDEyuU6o/3k4FgU0agwYUJiXBgn2F/F6PzeQBfA2AU5n3gpjjXdANu0pH/vTfOkycAbn8Cva5Hbw+YonZKOEWYZ3pOwsurTsy/iquxBlD+TbXawoQ8eoHMIzHj8mULOzkmcHjDIn7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com; spf=pass smtp.mailfrom=richtek.com; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=kHFGfe8r; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=QnPyaVPS; arc=none smtp.client-ip=220.130.44.152 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=richtek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="kHFGfe8r"; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="QnPyaVPS" X-MailGates: (SIP:2,PASS,NONE)(compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206683; bh=/KwruWy8kFCC0Vy7w8yf1jkvdwlV4EhT5B+RzjYI5XM=; l=9570; h=From:To:Subject:Date:Message-ID:MIME-Version; b=kHFGfe8rbZE+Rb+w1JL8e7+5xPS9lYQMA1Bwnyvxq6vYLsoAIAlvTtWhcf2sszsSH a20+FQJOA01L4iKqPod8daFcq9NSbgQYWpZ7ocJ9FZiFqhsszXpeRmPGt68KrfoxlJ HacO1zPJHmlY73SYqnmRRboDcRYg6OGJIfYCXSYjpOq+dYVfCvZ0VifrNqv0uIfJJC PnIpISFTqK/38FDEol3QSmEjVM4aDCrSnOQONQThobqX2U4Pxzb5TIeUHSNxK3r5t9 nMrIdch8MEyCQpl2KC38v3T64SgUNgv7ZyVpIHgm4utFunlc9D+2GJ0FCb4mOP/SJl ci/2gNGun3TXQ== Received: from 192.168.8.21 by mg.richtek.com with MailGates ESMTP Server V3.0(1128085:0:AUTH_RELAY) (envelope-from ); Mon, 17 Mar 2025 18:17:55 +0800 (CST) X-MailGates: (compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206675; bh=/KwruWy8kFCC0Vy7w8yf1jkvdwlV4EhT5B+RzjYI5XM=; l=9570; h=From:To:Subject:Date:Message-ID:MIME-Version; b=QnPyaVPSe8VEwNYBvsqsuY/sj0CzQKruu0iJX6nDkzY/FEufBvmNlIk8DL7J3hHCt vM9TyEuCMeGJwp5k8bxtzlR4CgfuSSy8mb4USKKU6yW2SLZD0xuKQVFokXh/E7Vu9k qaEbplr8/sPFf1xDIh4ItZi0cendVJVFVsikeMojMTAChDHLqC4tenUb7/MBLs5d6I J4kbCsA04I8drbRa1f83cUw5tBjza+Ie9WkRN2ikFWnaNjkuNUtf9F7ntyrErl/6IT hUGJ3zY99CIPTz2ScyF3uBUmmdQ+VXd78yDxtWHOdqW+DokkHIvMtg0XG9xOZX0wOU /uz/tjXxpJ61Q== Received: from 192.168.10.46 by mg.richtek.com with MailGates ESMTPS Server V6.0(3810274:0:AUTH_RELAY) (envelope-from ) (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256/256); Mon, 17 Mar 2025 18:05:18 +0800 (CST) Received: from ex4.rt.l (192.168.10.47) by ex3.rt.l (192.168.10.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 17 Mar 2025 18:05:17 +0800 Received: from git-send.richtek.com (192.168.10.154) by ex4.rt.l (192.168.10.45) with Microsoft SMTP Server id 15.2.1544.11 via Frontend Transport; Mon, 17 Mar 2025 18:05:17 +0800 From: To: Mark Brown , Krzysztof Kozlowski , Conor Dooley CC: Liam Girdwood , Rob Herring , ChiYuan Huang , , Subject: [PATCH 2/3] regulator: rtq2208: Fix the LDO DVS capability Date: Mon, 17 Mar 2025 18:06:22 +0800 Message-ID: X-Mailer: git-send-email 2.43.5 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: ChiYuan Huang Use the hidden bank register to identify whether the LDO voltage is fixed or variable. Remove the read of 'richtek,fixed-microvolt' property. Fixes: af1296d15d89 ("regulator: rtq2208: Add fixed LDO VOUT property and c= heck that matches the constraints") Signed-off-by: ChiYuan Huang --- Hi, From the current design, if LDO node is not declared, this will cause driver probe fail (-22) for the check 'desc->ops' in regulator register This seems the buggy code. Instead of it, use the hidden RG to check whether LDO is fixed or not. Except this, for LDO part, it already used 'of_regulator_match', but the regulator_constraint seems allocated twice, one is in 'of_regulator_match', another is in 'regulator_register'. This is also tricky. --- drivers/regulator/rtq2208-regulator.c | 133 +++++++++++--------------- 1 file changed, 55 insertions(+), 78 deletions(-) diff --git a/drivers/regulator/rtq2208-regulator.c b/drivers/regulator/rtq2= 208-regulator.c index 2a2f6a54de11..9cde7181b0f0 100644 --- a/drivers/regulator/rtq2208-regulator.c +++ b/drivers/regulator/rtq2208-regulator.c @@ -28,6 +28,8 @@ #define RTQ2208_REG_LDO2_CFG 0xC1 #define RTQ2208_REG_LDO_DVS_CTRL 0xD0 #define RTQ2208_REG_HIDDEN_BUCKPH 0x55 +#define RTQ2208_REG_HIDDEN_LDOCFG0 0x8F +#define RTQ2208_REG_HIDDEN_LDOCFG1 0x96 #define RTQ2208_REG_HIDDEN0 0xFE #define RTQ2208_REG_HIDDEN1 0xFF =20 @@ -50,6 +52,9 @@ #define RTQ2208_LDO2_VOSEL_SD_MASK BIT(7) #define RTQ2208_MASK_BUCKPH_GROUP1 GENMASK(6, 4) #define RTQ2208_MASK_BUCKPH_GROUP2 GENMASK(2, 0) +#define RTQ2208_MASK_LDO2_OPT0 BIT(7) +#define RTQ2208_MASK_LDO2_OPT1 BIT(6) +#define RTQ2208_MASK_LDO1_FIXED BIT(6) =20 /* Size */ #define RTQ2208_VOUT_MAXNUM 256 @@ -250,11 +255,6 @@ static const unsigned int rtq2208_ldo_volt_table[] =3D= { 3300000, }; =20 -static struct of_regulator_match rtq2208_ldo_match[] =3D { - {.name =3D "ldo2", }, - {.name =3D "ldo1", }, -}; - static unsigned int rtq2208_of_map_mode(unsigned int mode) { switch (mode) { @@ -349,59 +349,6 @@ static irqreturn_t rtq2208_irq_handler(int irqno, void= *devid) return IRQ_HANDLED; } =20 -static int rtq2208_of_get_ldo_dvs_ability(struct device *dev) -{ - struct device_node *np; - struct of_regulator_match *match; - struct regulator_desc *desc; - struct regulator_init_data *init_data; - u32 fixed_uV; - int ret, i; - - if (!dev->of_node) - return -ENODEV; - - np =3D of_get_child_by_name(dev->of_node, "regulators"); - if (!np) - np =3D dev->of_node; - - ret =3D of_regulator_match(dev, np, rtq2208_ldo_match, ARRAY_SIZE(rtq2208= _ldo_match)); - - of_node_put(np); - - if (ret < 0) - return ret; - - for (i =3D 0; i < ARRAY_SIZE(rtq2208_ldo_match); i++) { - match =3D rtq2208_ldo_match + i; - init_data =3D match->init_data; - desc =3D (struct regulator_desc *)match->desc; - - if (!init_data || !desc) - continue; - - /* specify working fixed voltage if the propery exists */ - ret =3D of_property_read_u32(match->of_node, "richtek,fixed-microvolt", = &fixed_uV); - - if (!ret) { - if (fixed_uV !=3D init_data->constraints.min_uV || - fixed_uV !=3D init_data->constraints.max_uV) - return -EINVAL; - desc->n_voltages =3D 1; - desc->fixed_uV =3D fixed_uV; - desc->fixed_uV =3D init_data->constraints.min_uV; - desc->ops =3D &rtq2208_regulator_ldo_fix_ops; - } else { - desc->n_voltages =3D ARRAY_SIZE(rtq2208_ldo_volt_table); - desc->volt_table =3D rtq2208_ldo_volt_table; - desc->ops =3D &rtq2208_regulator_ldo_adj_ops; - } - } - - return 0; -} - - #define BUCK_INFO(_name, _id) \ { \ .name =3D _name, \ @@ -429,9 +376,11 @@ static const struct linear_range rtq2208_vout_range[] = =3D { REGULATOR_LINEAR_RANGE(1310000, 181, 255, 10000), }; =20 -static void rtq2208_init_regulator_desc(struct rtq2208_regulator_desc *rde= sc, int mtp_sel, int idx) +static void rtq2208_init_regulator_desc(struct rtq2208_regulator_desc *rde= sc, int mtp_sel, int idx, + unsigned int ldo1_fixed, unsigned int ldo2_fixed) { struct regulator_desc *desc; + unsigned int fixed_uV; static const struct { char *name; int base; @@ -467,7 +416,8 @@ static void rtq2208_init_regulator_desc(struct rtq2208_= regulator_desc *rdesc, in =20 rdesc->mode_mask =3D RTQ2208_BUCK_NRMODE_MASK; =20 - if (idx >=3D RTQ2208_BUCK_B && idx <=3D RTQ2208_BUCK_E) { + switch (idx) { + case RTQ2208_BUCK_B ... RTQ2208_BUCK_E: /* init buck desc */ desc->ops =3D &rtq2208_regulator_buck_ops; desc->vsel_reg =3D curr_info->base + VSEL_SHIFT(mtp_sel); @@ -485,7 +435,19 @@ static void rtq2208_init_regulator_desc(struct rtq2208= _regulator_desc *rdesc, in rdesc->suspend_config_reg =3D BUCK_RG_SHIFT(curr_info->base, 4); rdesc->suspend_enable_mask =3D RTQ2208_BUCK_EN_STR_MASK; rdesc->suspend_mode_mask =3D RTQ2208_BUCK_STRMODE_MASK; - } else { + break; + default: + fixed_uV =3D idx =3D=3D RTQ2208_LDO2 ? ldo2_fixed : ldo1_fixed; + if (fixed_uV) { + desc->n_voltages =3D 1; + desc->fixed_uV =3D fixed_uV; + desc->ops =3D &rtq2208_regulator_ldo_fix_ops; + } else { + desc->n_voltages =3D ARRAY_SIZE(rtq2208_ldo_volt_table); + desc->volt_table =3D rtq2208_ldo_volt_table; + desc->ops =3D &rtq2208_regulator_ldo_adj_ops; + } + /* init ldo desc */ desc->active_discharge_reg =3D RTQ2208_REG_LDO_DVS_CTRL; desc->active_discharge_on =3D curr_info->dis_on; @@ -495,13 +457,15 @@ static void rtq2208_init_regulator_desc(struct rtq220= 8_regulator_desc *rdesc, in =20 rdesc->suspend_config_reg =3D curr_info->base; rdesc->suspend_enable_mask =3D RTQ2208_LDO_EN_STR_MASK; + break; } } =20 static int rtq2208_parse_regulator_dt_data(int n_regulator, const unsigned= int *regulator_idx_table, - struct rtq2208_regulator_desc *rdesc[RTQ2208_LDO_MAX], struct device *de= v) + struct rtq2208_regulator_desc *rdesc[RTQ2208_LDO_MAX], struct device *de= v, + unsigned int ldo1_fixed, unsigned int ldo2_fixed) { - int mtp_sel, i, idx, ret; + int mtp_sel, i, idx; =20 /* get mtp_sel0 or mtp_sel1 */ mtp_sel =3D device_property_read_bool(dev, "richtek,mtp-sel-high"); @@ -513,29 +477,21 @@ static int rtq2208_parse_regulator_dt_data(int n_regu= lator, const unsigned int * if (!rdesc[i]) return -ENOMEM; =20 - rtq2208_init_regulator_desc(rdesc[i], mtp_sel, idx); - - /* init ldo dvs ability */ - if (idx >=3D RTQ2208_LDO2) - rtq2208_ldo_match[idx - RTQ2208_LDO2].desc =3D &rdesc[i]->desc; + rtq2208_init_regulator_desc(rdesc[i], mtp_sel, idx, ldo1_fixed, ldo2_fix= ed); } =20 - /* init ldo fixed_uV */ - ret =3D rtq2208_of_get_ldo_dvs_ability(dev); - if (ret) - return dev_err_probe(dev, ret, "Failed to get ldo fixed_uV\n"); - return 0; =20 } =20 -static int rtq2208_regulator_check(struct device *dev, int *num, - int *regulator_idx_table, unsigned int *buck_masks) +static int rtq2208_regulator_check(struct device *dev, int *num, int *regu= lator_idx_table, + unsigned int *buck_masks, unsigned int *ldo1_fixed_uV, + unsigned int *ldo2_fixed_uV) { struct regmap *regmap =3D dev_get_regmap(dev, NULL); bool rtq2208_used_table[RTQ2208_LDO_MAX] =3D {0}; u8 entry_key[] =3D { 0x69, 0x01 }; - unsigned int buck_phase; + unsigned int buck_phase, ldo_cfg0, ldo_cfg1; int i, ret; u8 mask; =20 @@ -547,6 +503,14 @@ static int rtq2208_regulator_check(struct device *dev,= int *num, if (ret) return dev_err_probe(dev, ret, "Failed to read buck phase configuration\= n"); =20 + ret =3D regmap_read(regmap, RTQ2208_REG_HIDDEN_LDOCFG0, &ldo_cfg0); + if (ret) + return dev_err_probe(dev, ret, "Failed to read ldo cfg0\n"); + + ret =3D regmap_read(regmap, RTQ2208_REG_HIDDEN_LDOCFG1, &ldo_cfg1); + if (ret) + return dev_err_probe(dev, ret, "Failed to read ldo cfg1\n"); + ret =3D regmap_write(regmap, RTQ2208_REG_HIDDEN1, 0x00); if (ret) return dev_err_probe(dev, ret, "Failed to exit hidden page\n"); @@ -593,6 +557,16 @@ static int rtq2208_regulator_check(struct device *dev,= int *num, break; } =20 + *ldo1_fixed_uV =3D FIELD_GET(RTQ2208_MASK_LDO1_FIXED, ldo_cfg1) ? 1200000= : 0; + + if (!FIELD_GET(RTQ2208_MASK_LDO2_OPT0, ldo_cfg0) && + !FIELD_GET(RTQ2208_MASK_LDO2_OPT1, ldo_cfg1)) + *ldo2_fixed_uV =3D 0; + else if (FIELD_GET(RTQ2208_MASK_LDO2_OPT1, ldo_cfg1)) + *ldo2_fixed_uV =3D 900000; + else + *ldo2_fixed_uV =3D 1200000; + /* By default, LDO1 & LDO2 are always used */ rtq2208_used_table[RTQ2208_LDO1] =3D rtq2208_used_table[RTQ2208_LDO2] =3D= true; =20 @@ -626,6 +600,7 @@ static int rtq2208_probe(struct i2c_client *i2c) int i, ret =3D 0, idx, n_regulator =3D 0; unsigned int regulator_idx_table[RTQ2208_LDO_MAX], buck_masks[RTQ2208_BUCK_NUM_IRQ_REGS] =3D {0x33, 0x33, 0x33, 0x33, = 0x33}; + unsigned int ldo1_fixed_uV, ldo2_fixed_uV; =20 rdev_map =3D devm_kzalloc(dev, sizeof(struct rtq2208_rdev_map), GFP_KERNE= L); if (!rdev_map) @@ -636,7 +611,8 @@ static int rtq2208_probe(struct i2c_client *i2c) return dev_err_probe(dev, PTR_ERR(regmap), "Failed to allocate regmap\n"= ); =20 /* get needed regulator */ - ret =3D rtq2208_regulator_check(dev, &n_regulator, regulator_idx_table, b= uck_masks); + ret =3D rtq2208_regulator_check(dev, &n_regulator, regulator_idx_table, b= uck_masks, + &ldo1_fixed_uV, &ldo2_fixed_uV); if (ret) return dev_err_probe(dev, ret, "Failed to check used regulators\n"); =20 @@ -646,7 +622,8 @@ static int rtq2208_probe(struct i2c_client *i2c) cfg.dev =3D dev; =20 /* init regulator desc */ - ret =3D rtq2208_parse_regulator_dt_data(n_regulator, regulator_idx_table,= rdesc, dev); + ret =3D rtq2208_parse_regulator_dt_data(n_regulator, regulator_idx_table,= rdesc, dev, + ldo1_fixed_uV, ldo2_fixed_uV); if (ret) return ret; =20 --=20 2.34.1 From nobody Wed Dec 17 15:31:12 2025 Received: from mg.richtek.com (mg.richtek.com [220.130.44.152]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6F90F22FF39; Mon, 17 Mar 2025 10:18:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.130.44.152 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206686; cv=none; b=YEXXH9CWSvHZZnT5nBssTp6aal0+7n4wtjwHL+8VS5PXRIskjIIWBXRuEIHx+w1ASb2KwmDEBzF58921swjYbc4mr4EVgMNyJDYQAnOIYkR9JyZQTpVJKPI49Y6HfpbsRN+VkrRB3gtCIWE6UJ0k+dPsrFDyAGRbbsAgOBfzxRc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742206686; c=relaxed/simple; bh=2VsTy8c8XLPO7On7Fj05WnP0izo3zONJErudj6K9Gnw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=roKBQ6F3jsnvHjLo/mK7wr7JiFLRKDWksonR7kG5BAw2BkWI0TOtGtSSiLCnvcxZjfU6+eIFKeudpqeCPvpnRjY71d+U8eCzezfLKMf8va0prOm4DhMZxsFIPxvKkxepPgFv8noxwP1YrqBVNz+pJdr3SPum3lrFTNJFrFnm80g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com; spf=pass smtp.mailfrom=richtek.com; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=UjlMnIZF; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b=XlHN6XJz; arc=none smtp.client-ip=220.130.44.152 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=richtek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=richtek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="UjlMnIZF"; dkim=pass (2048-bit key) header.d=richtek.com header.i=@richtek.com header.b="XlHN6XJz" X-MailGates: (SIP:2,PASS,NONE)(compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206682; bh=o0SUnxH7TH+uR9swaSzIuxKQA7MmHPp+RPHamZ6KPBI=; l=1215; h=From:To:Subject:Date:Message-ID:MIME-Version; b=UjlMnIZFrj/wTlTyUmwkxBunV22eu8eyrTFyjGWyOkWVg7IYE9063YJbvXZnUfcim xu4ki1lOLCPRA43IuNzxiUjhKvVvXtyBxS+Za75yE2Ae2dDp3o6tMpiyeCXNkOoJRB xg0UbYG2aOq0hyxiPDq4GqZfkc4ZixDZmX+EWpg6MisoCdudgfsDCzQ0ETBJ9IdmXG IDtfN7Ba3awlfO20/125zyZLdjQyUG8K4XHVk/LRgCidnudBLLqRBvIj1P4crO5rUF 8opqWAdrfTWsXmGXmMyUxdG5sqAFcX2AzapgPPZtceIpVM+jSOQT/w0FjOqtYb34I5 2n1cf1WGKbYmg== Received: from 192.168.8.21 by mg.richtek.com with MailGates ESMTP Server V3.0(1128079:0:AUTH_RELAY) (envelope-from ); Mon, 17 Mar 2025 18:17:55 +0800 (CST) X-MailGates: (compute_score:DELIVER,40,3) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=richtek.com; s=richtek; t=1742206675; bh=o0SUnxH7TH+uR9swaSzIuxKQA7MmHPp+RPHamZ6KPBI=; l=1215; h=From:To:Subject:Date:Message-ID:MIME-Version; b=XlHN6XJzDdttOAKWlXXogBovncnV+7cSWfoQsZVpBDq9MZGSNvHEeivTRacoKyS59 d7b1uveR0C6hvc1fgCS7UwhD7iVRq6ny/BccQu+ZbhCyJQue3D3Vn44wSNlmdh2PpJ CBONH3syXmwuL77Xa0h602yNwfSQkkY6aiDr7sYL3FiWZkIl7fOujQ/USULu0ox1NQ Vc/73BmEDdmR6Z2Lz4zHM5NX1jTmyAp0+IRahniIimf5fd/ANqzPhM/PbXTjKfYnux LBUGZJdhSaFxn7taMS4US5XDjPptx4j0QzXt5at36IJHBojiswCRsXMSmXbwTiSSw5 rqboTxlWeKF2Q== Received: from 192.168.10.46 by mg.richtek.com with MailGates ESMTPS Server V6.0(3810274:0:AUTH_RELAY) (envelope-from ) (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256/256); Mon, 17 Mar 2025 18:05:18 +0800 (CST) Received: from ex4.rt.l (192.168.10.47) by ex3.rt.l (192.168.10.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 17 Mar 2025 18:05:18 +0800 Received: from git-send.richtek.com (192.168.10.154) by ex4.rt.l (192.168.10.45) with Microsoft SMTP Server id 15.2.1544.11 via Frontend Transport; Mon, 17 Mar 2025 18:05:18 +0800 From: To: Mark Brown , Krzysztof Kozlowski , Conor Dooley CC: Liam Girdwood , Rob Herring , ChiYuan Huang , , Subject: [PATCH 3/3] regulator: dt-bindings: rtq2208: Remove unnecessary property of fixed LDO VOUT Date: Mon, 17 Mar 2025 18:06:23 +0800 Message-ID: X-Mailer: git-send-email 2.43.5 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: ChiYuan Huang The 'richtek,fixed-microvolt' is unnecessary. Remove it on the document. Signed-off-by: ChiYuan Huang --- Hi, The major change is to remove the property. The minor one is to remove one trailing whitespace that 'checkpatch' found. --- .../devicetree/bindings/regulator/richtek,rtq2208.yaml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/regulator/richtek,rtq2208.ya= ml b/Documentation/devicetree/bindings/regulator/richtek,rtq2208.yaml index 87accc6f13b8..6466406d9096 100644 --- a/Documentation/devicetree/bindings/regulator/richtek,rtq2208.yaml +++ b/Documentation/devicetree/bindings/regulator/richtek,rtq2208.yaml @@ -39,7 +39,7 @@ properties: =20 interrupts: maxItems: 1 - =20 + richtek,mtp-sel-high: type: boolean description: @@ -75,12 +75,6 @@ properties: description: regulator description for ldo[1-2]. =20 - properties: - richtek,fixed-microvolt: - description: | - This property can be used to set a fixed operating voltage t= hat lies outside - the range of the regulator's adjustable mode. - required: - compatible - reg --=20 2.34.1