mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:04:41 +01:00
rust: Add SoC Driver Sample
Shows registration of a SoC device upon receipt of a probe. Signed-off-by: Matthew Maurer <mmaurer@google.com> Link: https://patch.msgid.link/20251226-soc-bindings-v4-3-2c2fac08f820@google.com Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
057d44b057
commit
d43a12e474
4 changed files with 94 additions and 0 deletions
|
|
@ -7705,6 +7705,7 @@ F: samples/rust/rust_debugfs.rs
|
|||
F: samples/rust/rust_debugfs_scoped.rs
|
||||
F: samples/rust/rust_driver_platform.rs
|
||||
F: samples/rust/rust_driver_faux.rs
|
||||
F: samples/rust/rust_soc.rs
|
||||
|
||||
DRIVERS FOR OMAP ADAPTIVE VOLTAGE SCALING (AVS)
|
||||
M: Nishanth Menon <nm@ti.com>
|
||||
|
|
|
|||
|
|
@ -161,6 +161,17 @@ config SAMPLE_RUST_DRIVER_AUXILIARY
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config SAMPLE_RUST_SOC
|
||||
tristate "SoC Driver"
|
||||
select SOC_BUS
|
||||
help
|
||||
This option builds the Rust SoC driver sample.
|
||||
|
||||
To compile this as a module, choose M here:
|
||||
the module will be called rust_soc.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config SAMPLE_RUST_HOSTPROGS
|
||||
bool "Host programs"
|
||||
help
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ obj-$(CONFIG_SAMPLE_RUST_DRIVER_USB) += rust_driver_usb.o
|
|||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_FAUX) += rust_driver_faux.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_DRIVER_AUXILIARY) += rust_driver_auxiliary.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_CONFIGFS) += rust_configfs.o
|
||||
obj-$(CONFIG_SAMPLE_RUST_SOC) += rust_soc.o
|
||||
|
||||
rust_print-y := rust_print_main.o rust_print_events.o
|
||||
|
||||
|
|
|
|||
81
samples/rust/rust_soc.rs
Normal file
81
samples/rust/rust_soc.rs
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
//! Rust SoC Platform driver sample.
|
||||
|
||||
use kernel::{
|
||||
acpi,
|
||||
device::Core,
|
||||
of,
|
||||
platform,
|
||||
prelude::*,
|
||||
soc,
|
||||
str::CString,
|
||||
sync::aref::ARef, //
|
||||
};
|
||||
use pin_init::pin_init_scope;
|
||||
|
||||
#[pin_data]
|
||||
struct SampleSocDriver {
|
||||
pdev: ARef<platform::Device>,
|
||||
#[pin]
|
||||
_dev_reg: soc::Registration,
|
||||
}
|
||||
|
||||
kernel::of_device_table!(
|
||||
OF_TABLE,
|
||||
MODULE_OF_TABLE,
|
||||
<SampleSocDriver as platform::Driver>::IdInfo,
|
||||
[(of::DeviceId::new(c"test,rust-device"), ())]
|
||||
);
|
||||
|
||||
kernel::acpi_device_table!(
|
||||
ACPI_TABLE,
|
||||
MODULE_ACPI_TABLE,
|
||||
<SampleSocDriver as platform::Driver>::IdInfo,
|
||||
[(acpi::DeviceId::new(c"LNUXBEEF"), ())]
|
||||
);
|
||||
|
||||
impl platform::Driver for SampleSocDriver {
|
||||
type IdInfo = ();
|
||||
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
|
||||
const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
|
||||
|
||||
fn probe(
|
||||
pdev: &platform::Device<Core>,
|
||||
_info: Option<&Self::IdInfo>,
|
||||
) -> impl PinInit<Self, Error> {
|
||||
let dev = pdev.as_ref();
|
||||
|
||||
dev_dbg!(dev, "Probe Rust SoC driver sample.\n");
|
||||
|
||||
let pdev = pdev.into();
|
||||
pin_init_scope(move || {
|
||||
let machine = CString::try_from(c"My cool ACME15 dev board")?;
|
||||
let family = CString::try_from(c"ACME")?;
|
||||
let revision = CString::try_from(c"1.2")?;
|
||||
let serial_number = CString::try_from(c"12345")?;
|
||||
let soc_id = CString::try_from(c"ACME15")?;
|
||||
|
||||
let attr = soc::Attributes {
|
||||
machine: Some(machine),
|
||||
family: Some(family),
|
||||
revision: Some(revision),
|
||||
serial_number: Some(serial_number),
|
||||
soc_id: Some(soc_id),
|
||||
};
|
||||
|
||||
Ok(try_pin_init!(SampleSocDriver {
|
||||
pdev: pdev,
|
||||
_dev_reg <- soc::Registration::new(attr),
|
||||
}? Error))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
kernel::module_platform_driver! {
|
||||
type: SampleSocDriver,
|
||||
name: "rust_soc",
|
||||
authors: ["Matthew Maurer"],
|
||||
description: "Rust SoC Driver",
|
||||
license: "GPL",
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue