Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/samples/rust/rust_soc.rs
121794 views
1
// SPDX-License-Identifier: GPL-2.0
2
3
//! Rust SoC Platform driver sample.
4
5
use kernel::{
6
acpi,
7
device::Core,
8
of,
9
platform,
10
prelude::*,
11
soc,
12
str::CString,
13
sync::aref::ARef, //
14
};
15
use pin_init::pin_init_scope;
16
17
#[pin_data]
18
struct SampleSocDriver {
19
pdev: ARef<platform::Device>,
20
#[pin]
21
_dev_reg: soc::Registration,
22
}
23
24
kernel::of_device_table!(
25
OF_TABLE,
26
MODULE_OF_TABLE,
27
<SampleSocDriver as platform::Driver>::IdInfo,
28
[(of::DeviceId::new(c"test,rust-device"), ())]
29
);
30
31
kernel::acpi_device_table!(
32
ACPI_TABLE,
33
MODULE_ACPI_TABLE,
34
<SampleSocDriver as platform::Driver>::IdInfo,
35
[(acpi::DeviceId::new(c"LNUXBEEF"), ())]
36
);
37
38
impl platform::Driver for SampleSocDriver {
39
type IdInfo = ();
40
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
41
const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
42
43
fn probe(
44
pdev: &platform::Device<Core>,
45
_info: Option<&Self::IdInfo>,
46
) -> impl PinInit<Self, Error> {
47
dev_dbg!(pdev, "Probe Rust SoC driver sample.\n");
48
49
let pdev = pdev.into();
50
pin_init_scope(move || {
51
let machine = CString::try_from(c"My cool ACME15 dev board")?;
52
let family = CString::try_from(c"ACME")?;
53
let revision = CString::try_from(c"1.2")?;
54
let serial_number = CString::try_from(c"12345")?;
55
let soc_id = CString::try_from(c"ACME15")?;
56
57
let attr = soc::Attributes {
58
machine: Some(machine),
59
family: Some(family),
60
revision: Some(revision),
61
serial_number: Some(serial_number),
62
soc_id: Some(soc_id),
63
};
64
65
Ok(try_pin_init!(SampleSocDriver {
66
pdev: pdev,
67
_dev_reg <- soc::Registration::new(attr),
68
}? Error))
69
})
70
}
71
}
72
73
kernel::module_platform_driver! {
74
type: SampleSocDriver,
75
name: "rust_soc",
76
authors: ["Matthew Maurer"],
77
description: "Rust SoC Driver",
78
license: "GPL",
79
}
80
81