@@ -8,7 +8,6 @@ use crate::{
88 bindings, c_types, device, driver, error:: from_kernel_result, io_mem:: Resource , power,
99 str:: CStr , to_result, types:: PointerWrapper , Error , Result , ThisModule ,
1010} ;
11- use core:: { marker:: PhantomData , ops:: Deref } ;
1211
1312/// A registration of an amba driver.
1413pub type Registration < T > = driver:: Registration < Adapter < T > > ;
@@ -27,12 +26,9 @@ pub struct DeviceId<T = ()> {
2726}
2827
2928/// An amba driver.
30- pub trait Driver
31- where
32- <Self :: Data as Deref >:: Target : driver:: DeviceRemoval ,
33- {
29+ pub trait Driver {
3430 /// Data stored on device by driver.
35- type Data : PointerWrapper + Send + Sync + Deref ;
31+ type Data : PointerWrapper + Send + Sync + driver :: DeviceRemoval = ( ) ;
3632
3733 /// The type that implements the power-management operations.
3834 ///
5652}
5753
5854/// 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 ) ;
6256
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 > {
6758 type RegType = bindings:: amba_driver ;
6859 type RawIdType = bindings:: amba_id ;
6960 type IdType = DeviceId < T :: IdInfo > ;
@@ -112,10 +103,7 @@ where
112103unsafe extern "C" fn probe_callback < T : Driver > (
113104 adev : * mut bindings:: amba_device ,
114105 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 {
119107 from_kernel_result ! {
120108 // SAFETY: `adev` is valid by the contract with the C code. `dev` is alive only for the
121109 // duration of this call, so it is guaranteed to remain alive for the lifetime of `dev`.
@@ -133,18 +121,15 @@ where
133121 }
134122}
135123
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 ) {
140125 // SAFETY: `adev` is valid by the contract with the C code.
141126 let ptr = unsafe { bindings:: amba_get_drvdata ( adev) } ;
142127 // SAFETY: The value returned by `amba_get_drvdata` was stored by a previous call to
143128 // `amba_set_drvdata` in `probe_callback` above; the value comes from a call to
144129 // `T::Data::into_pointer`.
145130 let data = unsafe { T :: Data :: from_pointer ( ptr) } ;
146131 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) ;
148133}
149134
150135/// An Amba device.
@@ -210,16 +195,11 @@ unsafe impl device::RawDevice for Device {
210195/// # use kernel::prelude::*;
211196/// # use kernel::{amba, declare_amba_id_table, module_amba_driver};
212197/// #
213- /// # struct State;
214- /// # impl kernel::driver::DeviceRemoval for State {
215- /// # fn device_remove(&self) {}
216- /// # }
217198/// struct MyDriver;
218199/// impl amba::Driver for MyDriver {
219200/// // [...]
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(())
223203/// # }
224204/// # declare_amba_id_table! [
225205/// # { id: 0x00041061, mask: 0x000fffff, data: () },
@@ -248,15 +228,10 @@ macro_rules! module_amba_driver {
248228/// # use kernel::prelude::*;
249229/// # use kernel::{amba, declare_amba_id_table};
250230/// #
251- /// # struct State;
252- /// # impl kernel::driver::DeviceRemoval for State {
253- /// # fn device_remove(&self) {}
254- /// # }
255231/// # struct Sample;
256232/// # 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(())
260235/// # }
261236/// declare_amba_id_table! [
262237/// { id: 0x00041061, mask: 0x000fffff, data: () },
0 commit comments