This series contains a few improvements that simplifies clock handling for drivers.
Patch 1 implements the same typestate pattern that has been used successfully for Regulators. This is needed because otherwise drivers will be responsible for unpreparing and disabling clocks themselves and ultimately handling the reference counts on their own. This is undesirable. The patch automatically encodes this information using the type system so that no misuse can occur. Patch 2 makes things more convenient by offering devres-managed APIs. This lets drivers set clock parameters once and forget about lifetime management. Patch 3 converts clk.rs to the newer kernel-vertical style in order to make future changes easier. This depends on Alice Ryhl's series [0]. [0]: https://lore.kernel.org/rust-for-linux/[email protected]/ --- Changes in v3: - Rebased on top of 6.19-rc4 - Dropped patch 1 (from Alice), added her series as a dependency instead - Fixed Tyr, PWM_TH1520 drivers - Changed clk.rs imports to kernel-vertical style - Added support get_optional shortcut for Prepared and Enabled (i.e.: Clk::<Enabled>::get_optional()) - Fixed misplaced #[inline] tag Thanks, Danilo { - Moved the devres changes into its own patch - Require &Device<Bound> for all functions where a &Device is used - Account for con_in in SAFETY comments where applicable - Added backticks } - Link to v2: https://lore.kernel.org/r/[email protected] Changes in v2: - Added Alice's patch as patch 1, since it is a dependency. - Added devm helpers (like we did for Regulator<T>) - Fixed missing clk_put() call in Drop (Danilo) - Fixed missing parenthesis and wrong docs (Viresh) - Removed extra "dev" parameter from "shutdown" example (Danilo) - Removed useless type annotation from example (Danilo) - Link to v1: https://lore.kernel.org/rust-for-linux/[email protected]/#r --- Daniel Almeida (3): rust: clk: use the type-state pattern rust: clk: add devres-managed clks rust: clk: use 'kernel vertical style' for imports drivers/cpufreq/rcpufreq_dt.rs | 2 +- drivers/gpu/drm/tyr/driver.rs | 31 +-- drivers/pwm/pwm_th1520.rs | 17 +- rust/kernel/clk.rs | 466 +++++++++++++++++++++++++++++------------ rust/kernel/cpufreq.rs | 8 +- 5 files changed, 346 insertions(+), 178 deletions(-) --- base-commit: 9ace4753a5202b02191d54e9fdf7f9e3d02b85eb change-id: 20250909-clk-type-state-c01aa7dd551d prerequisite-change-id: 20250904-clk-send-sync-3cfa7f4e1ce2:v3 prerequisite-patch-id: 13476f9e7e7c3bdbcab42912948953743381b1e0 prerequisite-patch-id: 8f91583384bb4516afcac66d21ac08b3982747b2 prerequisite-patch-id: b2ad5ecbd9a395b622bc04f891b5bb276f6f6b16 Best regards, -- Daniel Almeida <[email protected]>
