From: Andre Przywara <andre.przywara@arm.com>
To: Martin Botka <martin.botka@somainline.org>
Cc: martin.botka1@gmail.com,
"Konrad Dybcio" <konrad.dybcio@somainline.org>,
"AngeloGioacchino Del Regno"
<angelogioacchino.delregno@somainline.org>,
"Marijn Suijten" <marijn.suijten@somainline.org>,
"Jami Kettunen" <jamipkettunen@somainline.org>,
"Paul Bouchara" <paul.bouchara@somainline.org>,
"Jan Trmal" <jtrmal@gmail.com>, "Lee Jones" <lee@kernel.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
"Chen-Yu Tsai" <wens@csie.org>,
"Liam Girdwood" <lgirdwood@gmail.com>,
"Mark Brown" <broonie@kernel.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
"Samuel Holland" <samuel@sholland.org>,
"Jernej Škrabec" <jernej.skrabec@gmail.com>,
linux-sunxi <linux-sunxi@lists.linux.dev>
Subject: Re: [PATCH v5 3/3] regulator: axp20x: Add support for AXP1530 variant
Date: Thu, 15 Dec 2022 23:16:15 +0000 [thread overview]
Message-ID: <20221215231615.6a4fa710@slackpad.lan> (raw)
In-Reply-To: <20221214190305.3354669-4-martin.botka@somainline.org>
On Wed, 14 Dec 2022 20:03:05 +0100
Martin Botka <martin.botka@somainline.org> wrote:
Hi Martin,
> AXP1530 has a few regulators that are controlled via I2C Bus.
>
> Add support for them.
thanks for putting this together!
After coming up with a very similar patch based on the AXP313A313
datasheet, I realised that those two must indeed be *somewhat*
compatible, so I am going to compare my patch with yours ;-)
>
> Signed-off-by: Martin Botka <martin.botka@somainline.org>
> ---
> drivers/regulator/axp20x-regulator.c | 44 ++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
> index d260c442b788..9420839ff4f9 100644
> --- a/drivers/regulator/axp20x-regulator.c
> +++ b/drivers/regulator/axp20x-regulator.c
> @@ -1001,6 +1001,40 @@ static const struct regulator_desc axp813_regulators[] = {
> AXP22X_PWR_OUT_CTRL2, AXP22X_PWR_OUT_DC1SW_MASK),
> };
>
> +static const struct linear_range axp1530_dcdc1_ranges[] = {
> + REGULATOR_LINEAR_RANGE(500000, 0x0, 0x46, 10000),
The AXP313A manual mentions "steps", in decimal
(0.5~1.2V,10mV/step,71steps), so I wonder if we should follow suit
here and describe the min_sel and max_sel members in decimal?
> + REGULATOR_LINEAR_RANGE(1220000, 0x47, 0x57, 20000),
> + REGULATOR_LINEAR_RANGE(1600000, 0x58, 0x6A, 100000),
> +};
> +
> +static const struct linear_range axp1530_dcdc2_ranges[] = {
> + REGULATOR_LINEAR_RANGE(500000, 0x0, 0x46, 10000),
> + REGULATOR_LINEAR_RANGE(1220000, 0x47, 0x57, 20000),
> +};
The values up till here match exactly what I extracted from the AXP313A
manual.
> +
> +static const struct linear_range axp1530_dcdc3_ranges[] = {
> + REGULATOR_LINEAR_RANGE(500000, 0x0, 0x46, 10000),
> + REGULATOR_LINEAR_RANGE(1220000, 0x47, 0x66, 20000),
> +};
Can you double check that those are the values for DCDC3?
The AXP313A manual uses different ranges, essentially:
REGULATOR_LINEAR_RANGE(800000, 0, 32, 10000),
REGULATOR_LINEAR_RANGE(1140000, 33, 68, 20000),
So starting from 800mV, and using a slightly different split point.
I would just hope that's this doesn't turn out to be an incompatible register.
> +
> +static const struct regulator_desc axp1530_regulators[] = {
> + AXP_DESC_RANGES(AXP1530, DCDC1, "dcdc1", "vin1", axp1530_dcdc1_ranges,
> + 0x6B, AXP1530_DCDC1_CONRTOL, 0x7f, AXP1530_OUTPUT_CONTROL,
Again I would code the steps in decimal. The other regulators use a
preprocessor constant, which helps the reader to get its meaning.
And please use at least GENMASK(6, 0) instead of 0x7f, or #define this
(can be shared for all DCDCs and the LDOs).
> + BIT(0)),
> + AXP_DESC_RANGES(AXP1530, DCDC2, "dcdc2", "vin2", axp1530_dcdc2_ranges,
> + 0x58, AXP1530_DCDC2_CONRTOL, 0x7f, AXP1530_OUTPUT_CONTROL,
> + BIT(1)),
> + AXP_DESC_RANGES(AXP1530, DCDC3, "dcdc3", "vin3", axp1530_dcdc3_ranges,
> + 0x58, AXP1530_DCDC3_CONRTOL, 0x7f, AXP1530_OUTPUT_CONTROL,
> + BIT(2)),
> + AXP_DESC(AXP1530, LDO1, "ldo1", "ldo1in", 500, 3500, 100,
> + AXP1530_ALDO1_CONRTOL, 0x1f, AXP1530_OUTPUT_CONTROL,
> + BIT(3)),
> + AXP_DESC(AXP1530, LDO2, "ldo2", "ldo2in", 500, 3500, 100,
> + AXP1530_DLDO1_CONRTOL, 0x1f, AXP1530_OUTPUT_CONTROL,
> + BIT(4)),
Does this miss the fixed RTC-LDO? Or does the AXP1530 not have that?
AXP_DESC_FIXED(AXP313, RTC_LDO, "rtc-ldo", "ips", 1800),
The AXP313A manual mentions that the voltage is customisable, either
1.8V or 3.3V. I don't know how to model that, exactly. Should this be a
DT property, then? Or do we fix it to one voltage, covering the value
that's used out there?
> +};
> +
> static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
> {
> struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
> @@ -1040,6 +1074,12 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
> def = 3000;
> step = 150;
> break;
> + case AXP1530_ID:
> + /*
> + * Do not set the DCDC frequency on AXP1530
This should say that the frequency is fixed and cannot be programmed.
I also added a warning if the frequency is not 3 MHz.
Either this, or we make the "x-powers,dcdc-freq" DT property optional.
Cheers,
Andre
> + */
> + return 0;
> + break;
> default:
> dev_err(&pdev->dev,
> "Setting DCDC frequency for unsupported AXP variant\n");
> @@ -1220,6 +1260,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
> bool drivevbus = false;
>
> switch (axp20x->variant) {
> + case AXP1530_ID:
> + regulators = axp1530_regulators;
> + nregulators = AXP1530_REG_ID_MAX;
> + break;
> case AXP202_ID:
> case AXP209_ID:
> regulators = axp20x_regulators;
next prev parent reply other threads:[~2022-12-15 23:17 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-14 19:03 [PATCH v5 0/3] AXP1530 PMIC Martin Botka
2022-12-14 19:03 ` [PATCH v5 1/3] dt-bindings: mfd: x-powers,axp152: Document the AXP1530 variant Martin Botka
2022-12-14 19:03 ` [PATCH v5 2/3] mfd: ax20x: Add suppport for AXP1530 PMIC Martin Botka
2022-12-16 18:17 ` Andre Przywara
2022-12-17 0:13 ` Martin Botka
2023-01-10 0:00 ` Andre Przywara
2023-01-10 0:32 ` Martin Botka
2023-01-13 0:35 ` Andre Przywara
2023-01-13 11:26 ` Martin Botka
2022-12-14 19:03 ` [PATCH v5 3/3] regulator: axp20x: Add support for AXP1530 variant Martin Botka
2022-12-15 23:16 ` Andre Przywara [this message]
2022-12-16 5:26 ` Martin Botka
2022-12-16 11:52 ` Andre Przywara
2022-12-16 12:20 ` Martin Botka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221215231615.6a4fa710@slackpad.lan \
--to=andre.przywara@arm.com \
--cc=angelogioacchino.delregno@somainline.org \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jamipkettunen@somainline.org \
--cc=jernej.skrabec@gmail.com \
--cc=jtrmal@gmail.com \
--cc=konrad.dybcio@somainline.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=lee@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=marijn.suijten@somainline.org \
--cc=martin.botka1@gmail.com \
--cc=martin.botka@somainline.org \
--cc=paul.bouchara@somainline.org \
--cc=robh+dt@kernel.org \
--cc=samuel@sholland.org \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).