pub struct Registration<T: Driver>(/* private fields */);
Expand description
CPU frequency driver Registration.
§Examples
The following example demonstrates how to register a cpufreq driver.
use kernel::{
cpufreq,
c_str,
device::{Core, Device},
macros::vtable,
of, platform,
sync::Arc,
};
struct SampleDevice;
#[derive(Default)]
struct SampleDriver;
#[vtable]
impl cpufreq::Driver for SampleDriver {
const NAME: &'static CStr = c_str!("cpufreq-sample");
const FLAGS: u16 = cpufreq::flags::NEED_INITIAL_FREQ_CHECK | cpufreq::flags::IS_COOLING_DEV;
const BOOST_ENABLED: bool = true;
type PData = Arc<SampleDevice>;
fn init(policy: &mut cpufreq::Policy) -> Result<Self::PData> {
// Initialize here
Ok(Arc::new(SampleDevice, GFP_KERNEL)?)
}
fn exit(_policy: &mut cpufreq::Policy, _data: Option<Self::PData>) -> Result {
Ok(())
}
fn suspend(policy: &mut cpufreq::Policy) -> Result {
policy.generic_suspend()
}
fn verify(data: &mut cpufreq::PolicyData) -> Result {
data.generic_verify()
}
fn target_index(policy: &mut cpufreq::Policy, index: cpufreq::TableIndex) -> Result {
// Update CPU frequency
Ok(())
}
fn get(policy: &mut cpufreq::Policy) -> Result<u32> {
policy.generic_get()
}
}
impl platform::Driver for SampleDriver {
type IdInfo = ();
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = None;
fn probe(
pdev: &platform::Device<Core>,
_id_info: Option<&Self::IdInfo>,
) -> Result<Pin<KBox<Self>>> {
cpufreq::Registration::<SampleDriver>::new_foreign_owned(pdev.as_ref())?;
Ok(KBox::new(Self {}, GFP_KERNEL)?.into())
}
}
Implementations§
Source§impl<T: Driver> Registration<T>
impl<T: Driver> Registration<T>
Sourcepub fn new_foreign_owned(dev: &Device<Bound>) -> Result
pub fn new_foreign_owned(dev: &Device<Bound>) -> Result
Same as Registration::new
, but does not return a Registration
instance.
Instead the Registration
is owned by Devres
and will be revoked / dropped, once the
device is detached.
Trait Implementations§
Source§impl<T: Driver> Drop for Registration<T>
impl<T: Driver> Drop for Registration<T>
impl<T: Driver> Send for Registration<T>
SAFETY: Registration with and unregistration from the cpufreq subsystem can happen from any thread.
impl<T: Driver> Sync for Registration<T>
SAFETY: Registration
doesn’t offer any methods or access to fields when shared between threads
or CPUs, so it is safe to share it.
Auto Trait Implementations§
impl<T> Freeze for Registration<T>
impl<T> !RefUnwindSafe for Registration<T>
impl<T> Unpin for Registration<T>where
T: Unpin,
impl<T> !UnwindSafe for Registration<T>
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
Mutably borrows from an owned value. Read more