pub struct OptionalClk(/* private fields */);
Expand description
A reference-counted optional clock.
A lightweight wrapper around an optional Clk
. An OptionalClk
represents a Clk
that a driver can function without but may improve performance or enable additional
features when available.
§Invariants
An OptionalClk
instance encapsulates a Clk
with either a valid struct clk
or
NULL
pointer.
Instances of this type are reference-counted. Calling OptionalClk::get
ensures that the
allocation remains valid for the lifetime of the OptionalClk
.
§Examples
The following example demonstrates how to obtain and configure an optional clock for a device. The code functions correctly whether or not the clock is available.
use kernel::c_str;
use kernel::clk::{OptionalClk, Hertz};
use kernel::device::Device;
use kernel::error::Result;
fn configure_clk(dev: &Device) -> Result {
let clk = OptionalClk::get(dev, Some(c_str!("apb_clk")))?;
clk.prepare_enable()?;
let expected_rate = Hertz::from_ghz(1);
if clk.rate() != expected_rate {
clk.set_rate(expected_rate)?;
}
clk.disable_unprepare();
Ok(())
}
Implementations§
Source§impl OptionalClk
impl OptionalClk
Sourcepub fn get(dev: &Device, name: Option<&CStr>) -> Result<Self>
pub fn get(dev: &Device, name: Option<&CStr>) -> Result<Self>
Gets OptionalClk
corresponding to a Device
and a connection id.
Equivalent to the kernel’s clk_get_optional
API.
Methods from Deref<Target = Clk>§
Sourcepub fn enable(&self) -> Result
pub fn enable(&self) -> Result
Enable the clock.
Equivalent to the kernel’s clk_enable
API.
Sourcepub fn disable(&self)
pub fn disable(&self)
Disable the clock.
Equivalent to the kernel’s clk_disable
API.
Sourcepub fn prepare(&self) -> Result
pub fn prepare(&self) -> Result
Prepare the clock.
Equivalent to the kernel’s clk_prepare
API.
Sourcepub fn unprepare(&self)
pub fn unprepare(&self)
Unprepare the clock.
Equivalent to the kernel’s clk_unprepare
API.
Sourcepub fn prepare_enable(&self) -> Result
pub fn prepare_enable(&self) -> Result
Prepare and enable the clock.
Equivalent to calling Clk::prepare
followed by Clk::enable
.
Sourcepub fn disable_unprepare(&self)
pub fn disable_unprepare(&self)
Disable and unprepare the clock.
Equivalent to calling Clk::disable
followed by Clk::unprepare
.
Sourcepub fn rate(&self) -> Hertz
pub fn rate(&self) -> Hertz
Get clock’s rate.
Equivalent to the kernel’s clk_get_rate
API.
Sourcepub fn set_rate(&self, rate: Hertz) -> Result
pub fn set_rate(&self, rate: Hertz) -> Result
Set clock’s rate.
Equivalent to the kernel’s clk_set_rate
API.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OptionalClk
impl RefUnwindSafe for OptionalClk
impl !Send for OptionalClk
impl !Sync for OptionalClk
impl Unpin for OptionalClk
impl UnwindSafe for OptionalClk
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> PinInit<T> for T
impl<T> PinInit<T> for T
Source§unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), Infallible>
unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), Infallible>
slot
. Read more