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