[PATCH v2 13/14] regulator: bd96801: Support ROHM BD96806 PMIC

Matti Vaittinen posted 14 patches 8 months, 3 weeks ago
There is a newer version of this series
[PATCH v2 13/14] regulator: bd96801: Support ROHM BD96806 PMIC
Posted by Matti Vaittinen 8 months, 3 weeks ago
The ROHM BD96806 is from the software perspective almost identical to
the ROHM BD96802. The main difference is different voltage tuning
ranges.

Add support differentiating these PMICs and provide correct voltages
for both models.

Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>

---
Revision history:
v1 => :
 - No changes
---
 drivers/regulator/bd96801-regulator.c | 65 +++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/drivers/regulator/bd96801-regulator.c b/drivers/regulator/bd96801-regulator.c
index d829289942f9..fb9e7c3314a3 100644
--- a/drivers/regulator/bd96801-regulator.c
+++ b/drivers/regulator/bd96801-regulator.c
@@ -962,6 +962,70 @@ static const struct bd96801_pmic_data bd96805_data = {
 	.num_regulators = 7,
 };
 
+static const struct bd96801_pmic_data bd96806_data = {
+	.regulator_data = {
+	{
+		.desc = {
+			.name = "buck1",
+			.of_match = of_match_ptr("buck1"),
+			.regulators_node = of_match_ptr("regulators"),
+			.id = BD96801_BUCK1,
+			.ops = &bd96801_buck_ops,
+			.type = REGULATOR_VOLTAGE,
+			.linear_ranges = bd96805_tune_volts,
+			.n_linear_ranges = ARRAY_SIZE(bd96805_tune_volts),
+			.n_voltages = BD96805_BUCK_VOLTS,
+			.enable_reg = BD96801_REG_ENABLE,
+			.enable_mask = BD96801_BUCK1_EN_MASK,
+			.enable_is_inverted = true,
+			.vsel_reg = BD96801_BUCK1_VSEL_REG,
+			.vsel_mask = BD96805_BUCK_VSEL_MASK,
+			.ramp_reg = BD96801_BUCK1_VSEL_REG,
+			.ramp_mask = BD96801_MASK_RAMP_DELAY,
+			.ramp_delay_table = &buck_ramp_table[0],
+			.n_ramp_values = ARRAY_SIZE(buck_ramp_table),
+			.owner = THIS_MODULE,
+		},
+		.init_ranges = bd96801_buck_init_volts,
+		.num_ranges = ARRAY_SIZE(bd96801_buck_init_volts),
+		.irq_desc = {
+			.irqinfo = (struct bd96801_irqinfo *)&buck1_irqinfo[0],
+			.num_irqs = ARRAY_SIZE(buck1_irqinfo),
+		},
+	},
+	{
+		.desc = {
+			.name = "buck2",
+			.of_match = of_match_ptr("buck2"),
+			.regulators_node = of_match_ptr("regulators"),
+			.id = BD96801_BUCK2,
+			.ops = &bd96801_buck_ops,
+			.type = REGULATOR_VOLTAGE,
+			.linear_ranges = bd96805_tune_volts,
+			.n_linear_ranges = ARRAY_SIZE(bd96805_tune_volts),
+			.n_voltages = BD96805_BUCK_VOLTS,
+			.enable_reg = BD96801_REG_ENABLE,
+			.enable_mask = BD96801_BUCK2_EN_MASK,
+			.enable_is_inverted = true,
+			.vsel_reg = BD96801_BUCK2_VSEL_REG,
+			.vsel_mask = BD96805_BUCK_VSEL_MASK,
+			.ramp_reg = BD96801_BUCK2_VSEL_REG,
+			.ramp_mask = BD96801_MASK_RAMP_DELAY,
+			.ramp_delay_table = &buck_ramp_table[0],
+			.n_ramp_values = ARRAY_SIZE(buck_ramp_table),
+			.owner = THIS_MODULE,
+		},
+		.irq_desc = {
+			.irqinfo = (struct bd96801_irqinfo *)&buck2_irqinfo[0],
+			.num_irqs = ARRAY_SIZE(buck2_irqinfo),
+		},
+		.init_ranges = bd96801_buck_init_volts,
+		.num_ranges = ARRAY_SIZE(bd96801_buck_init_volts),
+	},
+	},
+	.num_regulators = 2,
+};
+
 static int initialize_pmic_data(struct platform_device *pdev,
 				struct bd96801_pmic_data *pdata)
 {
@@ -1260,6 +1324,7 @@ static const struct platform_device_id bd96801_pmic_id[] = {
 	{ "bd96801-regulator", (kernel_ulong_t)&bd96801_data },
 	{ "bd96802-regulator", (kernel_ulong_t)&bd96802_data },
 	{ "bd96805-regulator", (kernel_ulong_t)&bd96805_data },
+	{ "bd96806-regulator", (kernel_ulong_t)&bd96806_data },
 	{ },
 };
 MODULE_DEVICE_TABLE(platform, bd96801_pmic_id);
-- 
2.49.0

Re: [PATCH v2 13/14] regulator: bd96801: Support ROHM BD96806 PMIC
Posted by Matti Vaittinen 8 months, 2 weeks ago
On 24/03/2025 10:57, Matti Vaittinen wrote:
> The ROHM BD96806 is from the software perspective almost identical to
> the ROHM BD96802. The main difference is different voltage tuning
> ranges.
> 
> Add support differentiating these PMICs and provide correct voltages
> for both models.
> 
> Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
> 
> ---
> Revision history:
> v1 => :
>   - No changes
> ---
>   drivers/regulator/bd96801-regulator.c | 65 +++++++++++++++++++++++++++
>   1 file changed, 65 insertions(+)
> 
> diff --git a/drivers/regulator/bd96801-regulator.c b/drivers/regulator/bd96801-regulator.c
> index d829289942f9..fb9e7c3314a3 100644
> --- a/drivers/regulator/bd96801-regulator.c
> +++ b/drivers/regulator/bd96801-regulator.c
> @@ -962,6 +962,70 @@ static const struct bd96801_pmic_data bd96805_data = {
>   	.num_regulators = 7,
>   };
>   
> +static const struct bd96801_pmic_data bd96806_data = {
> +	.regulator_data = {
> +	{
> +		.desc = {
> +			.name = "buck1",
> +			.of_match = of_match_ptr("buck1"),
> +			.regulators_node = of_match_ptr("regulators"),
> +			.id = BD96801_BUCK1,
> +			.ops = &bd96801_buck_ops,
> +			.type = REGULATOR_VOLTAGE,
> +			.linear_ranges = bd96805_tune_volts,
> +			.n_linear_ranges = ARRAY_SIZE(bd96805_tune_volts),
> +			.n_voltages = BD96805_BUCK_VOLTS,
> +			.enable_reg = BD96801_REG_ENABLE,
> +			.enable_mask = BD96801_BUCK1_EN_MASK,
> +			.enable_is_inverted = true,
> +			.vsel_reg = BD96801_BUCK1_VSEL_REG,
> +			.vsel_mask = BD96805_BUCK_VSEL_MASK,
> +			.ramp_reg = BD96801_BUCK1_VSEL_REG,
> +			.ramp_mask = BD96801_MASK_RAMP_DELAY,
> +			.ramp_delay_table = &buck_ramp_table[0],
> +			.n_ramp_values = ARRAY_SIZE(buck_ramp_table),
> +			.owner = THIS_MODULE,
> +		},
> +		.init_ranges = bd96801_buck_init_volts,
> +		.num_ranges = ARRAY_SIZE(bd96801_buck_init_volts),

This is wrong. The BD96806 has similar voltage ranges as the BD96805, so 
we should use the

		.init_ranges = bd96805_buck_init_volts,
		.num_ranges = ARRAY_SIZE(bd96805_buck_init_volts),

Also for buck2.

I'll fix this in v3 but wait for a couple of days to see if the rest of 
the regulator patches gain comments :)

Yours,
   -- Matti
Re: [PATCH v2 13/14] regulator: bd96801: Support ROHM BD96806 PMIC
Posted by Mark Brown 8 months, 3 weeks ago
On Mon, Mar 24, 2025 at 10:57:12AM +0200, Matti Vaittinen wrote:
> The ROHM BD96806 is from the software perspective almost identical to
> the ROHM BD96802. The main difference is different voltage tuning
> ranges.

Reviewed-by: Mark Brown <broonie@kernel.org>