[PATCH v4 2/2] pwm: th1520: Lock clock rate with clk_rate_exclusive_get
Maurice Hieronymus <[email protected]> Sat, 11 Jul 2026 12:16:30 +0200
| Newsgroups | org.kernel.vger.linux-pwm,org.infradead.lists.linux-riscv,org.kernel.vger.linux-clk,org.kernel.vger.linux-kernel,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
The driver derives period and duty cycle from the clock rate read at probe, so a later rate change would silently miscompute waveforms. Switch to the new ExclusiveClk wrapper to hold the rate for the lifetime of the driver data and drop the corresponding TODO. Reviewed-by: Alice Ryhl <[email protected]> Reviewed-by: Michal Wilczynski <[email protected]> Signed-off-by: Maurice Hieronymus <[email protected]> --- drivers/pwm/pwm_th1520.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/pwm/pwm_th1520.rs b/drivers/pwm/pwm_th1520.rs index 343a1178c5e7..8f9d3fa39200 100644 --- a/drivers/pwm/pwm_th1520.rs +++ b/drivers/pwm/pwm_th1520.rs @@ -22,8 +22,16 @@ use core::ops::Deref; use kernel::{ - clk::{Clk, Enabled}, - device::{Bound, Core, Device}, + clk::{ + Clk, + Enabled, + ExclusiveClk, // + }, + device::{ + Bound, + Core, + Device, // + }, devres, io::{ mem::IoMem, @@ -93,7 +101,7 @@ struct Th1520WfHw { struct Th1520PwmDriverData { #[pin] iomem: devres::Devres<IoMem<TH1520_PWM_REG_SIZE>>, - clk: Clk<Enabled>, + clk: ExclusiveClk, } impl pwm::PwmOps for Th1520PwmDriverData { @@ -319,10 +327,8 @@ fn probe( let request = pdev.io_request_by_index(0).ok_or(ENODEV)?; let clk = Clk::<Enabled>::get(dev, None)?; + let clk = clk.rate_exclusive_get()?; - // TODO: Get exclusive ownership of the clock to prevent rate changes. - // The Rust equivalent of `clk_rate_exclusive_get()` is not yet available. - // This should be updated once it is implemented. let rate_hz = clk.rate().as_hz(); if rate_hz == 0 { dev_err!(dev, "Clock rate is zero\n"); -- 2.51.2