On Tue, 3 Feb 2026 10:09:13 +0100 Boris Brezillon <[email protected]> wrote:
> Hello Daniel, > > On Mon, 2 Feb 2026 17:10:38 +0100 > Boris Brezillon <[email protected]> wrote: > > > > > -#[pin_data(PinnedDrop)] > > > > +#[pin_data] > > > > pub(crate) struct TyrData { > > > > pub(crate) pdev: ARef<platform::Device>, > > > > > > > > @@ -92,13 +92,9 @@ fn probe( > > > > pdev: &platform::Device<Core>, > > > > _info: Option<&Self::IdInfo>, > > > > ) -> impl PinInit<Self, Error> { > > > > - let core_clk = Clk::get(pdev.as_ref(), Some(c_str!("core")))?; > > > > - let stacks_clk = OptionalClk::get(pdev.as_ref(), > > > > Some(c_str!("stacks")))?; > > > > - let coregroup_clk = OptionalClk::get(pdev.as_ref(), > > > > Some(c_str!("coregroup")))?; > > > > - > > > > - core_clk.prepare_enable()?; > > > > - stacks_clk.prepare_enable()?; > > > > - coregroup_clk.prepare_enable()?; > > > > + let core_clk = Clk::<Enabled>::get(pdev.as_ref(), > > > > Some(c_str!("core")))?; > > > > > > Ah, more turbofish.. I'd really want to avoid them if possible. > > > > > > Any disadvantage on just ask the user to chain > > > `.get().prepare_enable()?`? This > > > way it is also clear that some action is performed. > > > > I've just disc > > Sorry, I've hit the reply button before I had finished writing my > answer. So I was about to say that I had started writing something > similar without knowing this series existed, and I feel like we'd don't > really need those prepare_enable() shortcuts that exist in C. We might > has well just go: > > Clk::get(dev, Some(c_str!("core"))).prepare()?.enable()?; If we want this pattern to work, we also need: impl<State: ClkState> From<Error<State>> for kernel::error::Error { fn from(e: Error<State>) -> kernel::error::Error { e.error } } > > and have the following variant-specofoc functions > > - Clk<Unprepared>::get[_optional]() (no get on Prepared and Enabled > variants) > - Clk<Unprepared>::prepare() > - Clk<Prepared>::{enable,unprepare}() > - Clk<Enabled>::{disable}() > > Regards, > > Boris >
