@@ -8,7 +8,6 @@ use crate::{
8
8
bindings, c_types, device, driver, error:: from_kernel_result, io_mem:: Resource , power,
9
9
str:: CStr , to_result, types:: PointerWrapper , Error , Result , ThisModule ,
10
10
} ;
11
- use core:: { marker:: PhantomData , ops:: Deref } ;
12
11
13
12
/// A registration of an amba driver.
14
13
pub type Registration < T > = driver:: Registration < Adapter < T > > ;
@@ -27,12 +26,9 @@ pub struct DeviceId<T = ()> {
27
26
}
28
27
29
28
/// An amba driver.
30
- pub trait Driver
31
- where
32
- <Self :: Data as Deref >:: Target : driver:: DeviceRemoval ,
33
- {
29
+ pub trait Driver {
34
30
/// Data stored on device by driver.
35
- type Data : PointerWrapper + Send + Sync + Deref ;
31
+ type Data : PointerWrapper + Send + Sync + driver :: DeviceRemoval = ( ) ;
36
32
37
33
/// The type that implements the power-management operations.
38
34
///
56
52
}
57
53
58
54
/// An adapter for the registration of Amba drivers.
59
- pub struct Adapter < T : Driver > ( PhantomData < T > )
60
- where
61
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ;
55
+ pub struct Adapter < T : Driver > ( T ) ;
62
56
63
- impl < T : Driver > driver:: DriverOps for Adapter < T >
64
- where
65
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ,
66
- {
57
+ impl < T : Driver > driver:: DriverOps for Adapter < T > {
67
58
type RegType = bindings:: amba_driver ;
68
59
type RawIdType = bindings:: amba_id ;
69
60
type IdType = DeviceId < T :: IdInfo > ;
@@ -112,10 +103,7 @@ where
112
103
unsafe extern "C" fn probe_callback < T : Driver > (
113
104
adev : * mut bindings:: amba_device ,
114
105
aid : * const bindings:: amba_id ,
115
- ) -> c_types:: c_int
116
- where
117
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ,
118
- {
106
+ ) -> c_types:: c_int {
119
107
from_kernel_result ! {
120
108
// SAFETY: `adev` is valid by the contract with the C code. `dev` is alive only for the
121
109
// duration of this call, so it is guaranteed to remain alive for the lifetime of `dev`.
@@ -133,18 +121,15 @@ where
133
121
}
134
122
}
135
123
136
- unsafe extern "C" fn remove_callback < T : Driver > ( adev : * mut bindings:: amba_device )
137
- where
138
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ,
139
- {
124
+ unsafe extern "C" fn remove_callback < T : Driver > ( adev : * mut bindings:: amba_device ) {
140
125
// SAFETY: `adev` is valid by the contract with the C code.
141
126
let ptr = unsafe { bindings:: amba_get_drvdata ( adev) } ;
142
127
// SAFETY: The value returned by `amba_get_drvdata` was stored by a previous call to
143
128
// `amba_set_drvdata` in `probe_callback` above; the value comes from a call to
144
129
// `T::Data::into_pointer`.
145
130
let data = unsafe { T :: Data :: from_pointer ( ptr) } ;
146
131
T :: remove ( & data) ;
147
- << T :: Data as Deref > :: Target as driver:: DeviceRemoval >:: device_remove ( data. deref ( ) ) ;
132
+ <T :: Data as driver:: DeviceRemoval >:: device_remove ( & data) ;
148
133
}
149
134
150
135
/// An Amba device.
@@ -210,16 +195,11 @@ unsafe impl device::RawDevice for Device {
210
195
/// # use kernel::prelude::*;
211
196
/// # use kernel::{amba, declare_amba_id_table, module_amba_driver};
212
197
/// #
213
- /// # struct State;
214
- /// # impl kernel::driver::DeviceRemoval for State {
215
- /// # fn device_remove(&self) {}
216
- /// # }
217
198
/// struct MyDriver;
218
199
/// impl amba::Driver for MyDriver {
219
200
/// // [...]
220
- /// # type Data = kernel::sync::Ref<State>;
221
- /// # fn probe(dev: &mut amba::Device, id: &amba::DeviceId<Self::IdInfo>) -> Result<Self::Data> {
222
- /// # todo!()
201
+ /// # fn probe(_dev: &mut amba::Device, _id: &amba::DeviceId<Self::IdInfo>) -> Result {
202
+ /// # Ok(())
223
203
/// # }
224
204
/// # declare_amba_id_table! [
225
205
/// # { id: 0x00041061, mask: 0x000fffff, data: () },
@@ -248,15 +228,10 @@ macro_rules! module_amba_driver {
248
228
/// # use kernel::prelude::*;
249
229
/// # use kernel::{amba, declare_amba_id_table};
250
230
/// #
251
- /// # struct State;
252
- /// # impl kernel::driver::DeviceRemoval for State {
253
- /// # fn device_remove(&self) {}
254
- /// # }
255
231
/// # struct Sample;
256
232
/// # impl kernel::amba::Driver for Sample {
257
- /// # type Data = kernel::sync::Ref<State>;
258
- /// # fn probe(dev: &mut amba::Device, id: &amba::DeviceId<Self::IdInfo>) -> Result<Self::Data> {
259
- /// # todo!()
233
+ /// # fn probe(_dev: &mut amba::Device, _id: &amba::DeviceId<Self::IdInfo>) -> Result {
234
+ /// # Ok(())
260
235
/// # }
261
236
/// declare_amba_id_table! [
262
237
/// { id: 0x00041061, mask: 0x000fffff, data: () },
0 commit comments