[PATCH 2/2] pwm: th1520: Lock clock rate with clk_rate_exclusive_get
From: Maurice Hieronymus via B4 Relay
Date: Tue May 26 2026 - 13:06:25 EST
From: Maurice Hieronymus <mhi@xxxxxxxxxxx>
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.
Signed-off-by: Maurice Hieronymus <mhi@xxxxxxxxxxx>
---
drivers/pwm/pwm_th1520.rs | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/pwm/pwm_th1520.rs b/drivers/pwm/pwm_th1520.rs
index ddd44a5ce497..19e8621bc52c 100644
--- a/drivers/pwm/pwm_th1520.rs
+++ b/drivers/pwm/pwm_th1520.rs
@@ -22,7 +22,7 @@
use core::ops::Deref;
use kernel::{
- clk::Clk,
+ clk::{Clk, ExclusiveClk},
device::{Bound, Core, Device},
devres,
io::{
@@ -93,7 +93,7 @@ struct Th1520WfHw {
struct Th1520PwmDriverData {
#[pin]
iomem: devres::Devres<IoMem<TH1520_PWM_REG_SIZE>>,
- clk: Clk,
+ clk: ExclusiveClk,
}
impl pwm::PwmOps for Th1520PwmDriverData {
@@ -328,10 +328,8 @@ fn probe(
let clk = Clk::get(dev, None)?;
clk.prepare_enable()?;
+ 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