Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0
2
3//! Rust I2C driver sample.
4
5use kernel::{
6 acpi,
7 c_str,
8 device::Core,
9 i2c,
10 of,
11 prelude::*, //
12};
13
14struct SampleDriver;
15
16kernel::acpi_device_table! {
17 ACPI_TABLE,
18 MODULE_ACPI_TABLE,
19 <SampleDriver as i2c::Driver>::IdInfo,
20 [(acpi::DeviceId::new(c_str!("LNUXBEEF")), 0)]
21}
22
23kernel::i2c_device_table! {
24 I2C_TABLE,
25 MODULE_I2C_TABLE,
26 <SampleDriver as i2c::Driver>::IdInfo,
27 [(i2c::DeviceId::new(c_str!("rust_driver_i2c")), 0)]
28}
29
30kernel::of_device_table! {
31 OF_TABLE,
32 MODULE_OF_TABLE,
33 <SampleDriver as i2c::Driver>::IdInfo,
34 [(of::DeviceId::new(c_str!("test,rust_driver_i2c")), 0)]
35}
36
37impl i2c::Driver for SampleDriver {
38 type IdInfo = u32;
39
40 const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
41 const I2C_ID_TABLE: Option<i2c::IdTable<Self::IdInfo>> = Some(&I2C_TABLE);
42 const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
43
44 fn probe(
45 idev: &i2c::I2cClient<Core>,
46 info: Option<&Self::IdInfo>,
47 ) -> impl PinInit<Self, Error> {
48 let dev = idev.as_ref();
49
50 dev_info!(dev, "Probe Rust I2C driver sample.\n");
51
52 if let Some(info) = info {
53 dev_info!(dev, "Probed with info: '{}'.\n", info);
54 }
55
56 Ok(Self)
57 }
58
59 fn shutdown(idev: &i2c::I2cClient<Core>, _this: Pin<&Self>) {
60 dev_info!(idev.as_ref(), "Shutdown Rust I2C driver sample.\n");
61 }
62
63 fn unbind(idev: &i2c::I2cClient<Core>, _this: Pin<&Self>) {
64 dev_info!(idev.as_ref(), "Unbind Rust I2C driver sample.\n");
65 }
66}
67
68kernel::module_i2c_driver! {
69 type: SampleDriver,
70 name: "rust_driver_i2c",
71 authors: ["Igor Korotin"],
72 description: "Rust I2C driver",
73 license: "GPL v2",
74}