summaryrefslogtreecommitdiff
path: root/rust/kernel/i2c.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/kernel/i2c.rs')
-rw-r--r--rust/kernel/i2c.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/rust/kernel/i2c.rs b/rust/kernel/i2c.rs
index aea1b44d189b..95b056cc1a71 100644
--- a/rust/kernel/i2c.rs
+++ b/rust/kernel/i2c.rs
@@ -24,6 +24,7 @@ use crate::{
use core::{
marker::PhantomData,
+ mem::offset_of,
ptr::{
from_ref,
NonNull, //
@@ -476,6 +477,12 @@ impl<Ctx: device::DeviceContext> I2cClient<Ctx> {
}
}
+// SAFETY: `I2cClient` is a transparent wrapper of `struct i2c_client`.
+// The offset is guaranteed to point to a valid device field inside `I2cClient`.
+unsafe impl<Ctx: device::DeviceContext> device::AsBusDevice<Ctx> for I2cClient<Ctx> {
+ const OFFSET: usize = offset_of!(bindings::i2c_client, dev);
+}
+
// SAFETY: `I2cClient` is a transparent wrapper of a type that doesn't depend on
// `I2cClient`'s generic argument.
kernel::impl_device_context_deref!(unsafe { I2cClient });