[PATCH v8 0/2] Add a bare-minimum Regulator abstraction

Daniel Almeida posted 2 patches 2 months, 3 weeks ago
MAINTAINERS                     |   1 +
rust/bindings/bindings_helper.h |   1 +
rust/helpers/helpers.c          |   1 +
rust/helpers/regulator.c        |  43 +++++
rust/kernel/lib.rs              |   1 +
rust/kernel/regulator.rs        | 418 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 465 insertions(+)
[PATCH v8 0/2] Add a bare-minimum Regulator abstraction
Posted by Daniel Almeida 2 months, 3 weeks ago
Changes in v8:
- Added Alex's r-b
- Added helpers/regulator.c, since the stubs are declared as inline if
  CONFIG_REGULATOR is not set (Intel bot)
- Removed unneeded "regulator.enable()" line from docs: it was not needed
  and, ironically, it misused the API by choosing Regulator<Dynamic>
  and then not keeping the enabled count count balenced (Alex)
- Clarified that the "Enabled" state decreases the enabled refcount when it
  drops (Alex)
- Renamed "Microvolt" as "Voltage" and introduced
  from_microvolts/as_microvolts (Alex)
- Fixed the spelling for MAINTAINERS in the second commit (Alex)
- Link to v7: https://lore.kernel.org/rust-for-linux/20250704-topics-tyr-regulator-v7-0-77bfca2e22dc@collabora.com/

Changes in v7:
- Add RegulatorState::DISABLE_ON_DROP (Alice)
- Remove #[cfg(CONFIG_REGULATOR)] in lib.rs (if this is N we will use
  the stubs)
- Add the bound on 'static directly on RegulatorState to avoid
  repetition
- Removed the `data` member on the example (Alice)
- Removed the `mut` token from try_into_enabled() and
  try_into_disabled() (Miguel & Intel bot)
- Link to v6: https://lore.kernel.org/r/20250627-topics-tyr-regulator-v6-0-1d015219b454@collabora.com

Changes in v6:
- Use ManuallyDrop<T> to avoid running the destructor in
  try_into_enabled() and try_into_disabled(). This is the same strategy
  that was being used successfully in the pre-typestate version of this
  patch
- Link to v5: https://lore.kernel.org/r/20250623-topics-tyr-regulator-v5-0-99069658cb54@collabora.com

Changes in v5:
- Remove TryIntoEnabled and TryIntoDisabled traits (they were only
  implemented for a single type anyways)
- Added regulator.rs to VOLTAGE AND CURRENT REGULATOR FRAMEWORK
- Applied the diff from Miguel Ojeda to format the docs
- Link to v4: https://lore.kernel.org/r/20250609-topics-tyr-regulator-v4-1-b4fdcf1385a7@collabora.com

Changes in v4:
- Rewrote the abstraction to use typestates as per the suggestions by
  Benno and Alex.
- Introduced the `Dynamic` state.
- Added more examples.
- Fixed some broken docs.
- Link to v3: https://lore.kernel.org/r/20250513-topics-tyr-regulator-v3-1-4cc2704dfec6@collabora.com

Changes in v3:
- Rebased on rust-next
- Added examples to showcase the API
- Fixed some rendering issues in the docs
- Exposed {get|set}_voltage for both Regulator and EnabledRegulator
- Derived Clone, Copy, PartialEq and Eq for Microvolt
- Link to v2: https://lore.kernel.org/r/20250326-topics-tyr-regulator-v2-1-c0ea6a861be6@collabora.com

Resend v2:
  - cc Regulator maintainers
Changes from v1:
  - Rebased on rust-next
  - Split the design into two types as suggested by Alice Ryhl.
  - Modify the docs to highlight how users can use kernel::types::Either
    or an enum to enable and disable the regulator at runtime.
  - Link to v1: https://lore.kernel.org/rust-for-linux/20250219162517.278362-1-daniel.almeida@collabora.com/

---
Daniel Almeida (2):
      rust: regulator: add a bare minimum regulator abstraction
      MAINTAINERS: add regulator.rs to the regulator API entry

 MAINTAINERS                     |   1 +
 rust/bindings/bindings_helper.h |   1 +
 rust/helpers/helpers.c          |   1 +
 rust/helpers/regulator.c        |  43 +++++
 rust/kernel/lib.rs              |   1 +
 rust/kernel/regulator.rs        | 418 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 465 insertions(+)
---
base-commit: e04c78d86a9699d136910cfc0bdcf01087e3267e
change-id: 20250714-topics-tyr-regulator2-3aecd5492b2d

Best regards,
-- 
Daniel Almeida <daniel.almeida@collabora.com>
Re: [PATCH v8 0/2] Add a bare-minimum Regulator abstraction
Posted by Mark Brown 2 months, 3 weeks ago
On Mon, 14 Jul 2025 15:52:03 -0300, Daniel Almeida wrote:
> Changes in v8:
> - Added Alex's r-b
> - Added helpers/regulator.c, since the stubs are declared as inline if
>   CONFIG_REGULATOR is not set (Intel bot)
> - Removed unneeded "regulator.enable()" line from docs: it was not needed
>   and, ironically, it misused the API by choosing Regulator<Dynamic>
>   and then not keeping the enabled count count balenced (Alex)
> - Clarified that the "Enabled" state decreases the enabled refcount when it
>   drops (Alex)
> - Renamed "Microvolt" as "Voltage" and introduced
>   from_microvolts/as_microvolts (Alex)
> - Fixed the spelling for MAINTAINERS in the second commit (Alex)
> - Link to v7: https://lore.kernel.org/rust-for-linux/20250704-topics-tyr-regulator-v7-0-77bfca2e22dc@collabora.com/
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[1/2] rust: regulator: add a bare minimum regulator abstraction
      commit: 9b614ceada7cb846de1a1c3bb0b29b0a2726ef45
[2/2] MAINTAINERS: add regulator.rs to the regulator API entry
      commit: d9f334fca5448907cc47ba8553926f9ba148512f

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
Re: [PATCH v8 0/2] Add a bare-minimum Regulator abstraction
Posted by Daniel Almeida 2 months, 3 weeks ago
Mark, this looks like a good candidate for merging, how do you want to go about
this?

I believe that this should go through the regulator tree, but I guess it can go
through the Rust tree if you give your acked-by.

-- Daniel