@@ -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 ,
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 > ;
@@ -110,10 +101,7 @@ where
110
101
unsafe extern "C" fn probe_callback < T : Driver > (
111
102
adev : * mut bindings:: amba_device ,
112
103
aid : * const bindings:: amba_id ,
113
- ) -> c_types:: c_int
114
- where
115
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ,
116
- {
104
+ ) -> c_types:: c_int {
117
105
from_kernel_result ! {
118
106
// SAFETY: `adev` is valid by the contract with the C code. `dev` is alive only for the
119
107
// duration of this call, so it is guaranteed to remain alive for the lifetime of `dev`.
@@ -131,18 +119,15 @@ where
131
119
}
132
120
}
133
121
134
- unsafe extern "C" fn remove_callback < T : Driver > ( adev : * mut bindings:: amba_device )
135
- where
136
- <T :: Data as Deref >:: Target : driver:: DeviceRemoval ,
137
- {
122
+ unsafe extern "C" fn remove_callback < T : Driver > ( adev : * mut bindings:: amba_device ) {
138
123
// SAFETY: `adev` is valid by the contract with the C code.
139
124
let ptr = unsafe { bindings:: amba_get_drvdata ( adev) } ;
140
125
// SAFETY: The value returned by `amba_get_drvdata` was stored by a previous call to
141
126
// `amba_set_drvdata` in `probe_callback` above; the value comes from a call to
142
127
// `T::Data::into_pointer`.
143
128
let data = unsafe { T :: Data :: from_pointer ( ptr) } ;
144
129
T :: remove ( & data) ;
145
- << T :: Data as Deref > :: Target as driver:: DeviceRemoval >:: device_remove ( data. deref ( ) ) ;
130
+ <T :: Data as driver:: DeviceRemoval >:: device_remove ( & data) ;
146
131
}
147
132
148
133
/// An Amba device.
@@ -208,16 +193,11 @@ unsafe impl device::RawDevice for Device {
208
193
/// # use kernel::prelude::*;
209
194
/// # use kernel::{amba, declare_amba_id_table, module_amba_driver};
210
195
/// #
211
- /// # struct State;
212
- /// # impl kernel::driver::DeviceRemoval for State {
213
- /// # fn device_remove(&self) {}
214
- /// # }
215
196
/// struct MyDriver;
216
197
/// impl amba::Driver for MyDriver {
217
198
/// // [...]
218
- /// # type Data = kernel::sync::Ref<State>;
219
- /// # fn probe(dev: &mut amba::Device, id: &amba::DeviceId<Self::IdInfo>) -> Result<Self::Data> {
220
- /// # todo!()
199
+ /// # fn probe(_dev: &mut amba::Device, _id: &amba::DeviceId<Self::IdInfo>) -> Result {
200
+ /// # Ok(())
221
201
/// # }
222
202
/// # declare_amba_id_table! [
223
203
/// # { id: 0x00041061, mask: 0x000fffff, data: () },
@@ -246,15 +226,10 @@ macro_rules! module_amba_driver {
246
226
/// # use kernel::prelude::*;
247
227
/// # use kernel::{amba, declare_amba_id_table};
248
228
/// #
249
- /// # struct State;
250
- /// # impl kernel::driver::DeviceRemoval for State {
251
- /// # fn device_remove(&self) {}
252
- /// # }
253
229
/// # struct Sample;
254
230
/// # impl kernel::amba::Driver for Sample {
255
- /// # type Data = kernel::sync::Ref<State>;
256
- /// # fn probe(dev: &mut amba::Device, id: &amba::DeviceId<Self::IdInfo>) -> Result<Self::Data> {
257
- /// # todo!()
231
+ /// # fn probe(_dev: &mut amba::Device, _id: &amba::DeviceId<Self::IdInfo>) -> Result {
232
+ /// # Ok(())
258
233
/// # }
259
234
/// declare_amba_id_table! [
260
235
/// { id: 0x00041061, mask: 0x000fffff, data: () },
0 commit comments