@@ -27,6 +27,7 @@ mod pins;
2727mod slc;
2828mod slchost;
2929mod state;
30+ mod timing;
3031
3132pub use config:: Config ;
3233pub use hinf:: { AnyHinf , HinfInfo , HinfInstance } ;
@@ -35,6 +36,7 @@ pub use pins::Pins;
3536pub use slc:: { AnySlc , SlcInfo , SlcInstance } ;
3637pub use slchost:: { AnySlchost , SlchostInfo , SlchostInstance } ;
3738pub use state:: State ;
39+ pub use timing:: Timing ;
3840
3941/// SDIO peripheral instance.
4042pub trait PeripheralInstance : crate :: private:: Sealed {
@@ -192,6 +194,7 @@ impl<'d> Sdio<'d> {
192194 pub ( crate ) fn hardware_init ( & mut self ) -> Result < ( ) , Error > {
193195 self . low_level_init ( ) ?;
194196 self . low_level_enable_hs ( ) ?;
197+ self . low_level_set_timing ( ) ?;
195198
196199 Err ( Error :: unimplemented ( ) )
197200 }
@@ -226,7 +229,48 @@ impl<'d> Sdio<'d> {
226229 let hinf = unsafe { & * self . hinf . info ( ) . register_block } ;
227230
228231 hinf. cfg_data1 ( )
229- . modify ( |_, w| w. highspeed_enable ( ) . variant ( self . config . hs ) ) ;
232+ . modify ( |_, w| w. highspeed_enable ( ) . variant ( self . config . hs ( ) ) ) ;
233+
234+ Ok ( ( ) )
235+ }
236+
237+ fn low_level_set_timing ( & mut self ) -> Result < ( ) , Error > {
238+ let host = unsafe { & * self . slchost . info ( ) . register_block } ;
239+
240+ match self . config . timing ( ) {
241+ Timing :: PsendPsample => {
242+ host. conf ( ) . modify ( |_, w| unsafe {
243+ w. frc_sdio20 ( ) . bits ( 0x1f ) ;
244+ w. frc_sdio11 ( ) . bits ( 0x0 ) ;
245+ w. frc_pos_samp ( ) . bits ( 0x1f ) ;
246+ w. frc_neg_samp ( ) . bits ( 0x0 )
247+ } ) ;
248+ }
249+ Timing :: PsendNsample => {
250+ host. conf ( ) . modify ( |_, w| unsafe {
251+ w. frc_sdio20 ( ) . bits ( 0x1f ) ;
252+ w. frc_sdio11 ( ) . bits ( 0x0 ) ;
253+ w. frc_pos_samp ( ) . bits ( 0x0 ) ;
254+ w. frc_neg_samp ( ) . bits ( 0x1f )
255+ } ) ;
256+ }
257+ Timing :: NsendPsample => {
258+ host. conf ( ) . modify ( |_, w| unsafe {
259+ w. frc_sdio20 ( ) . bits ( 0x0 ) ;
260+ w. frc_sdio11 ( ) . bits ( 0x1f ) ;
261+ w. frc_pos_samp ( ) . bits ( 0x1f ) ;
262+ w. frc_neg_samp ( ) . bits ( 0x0 )
263+ } ) ;
264+ }
265+ Timing :: NsendNsample => {
266+ host. conf ( ) . modify ( |_, w| unsafe {
267+ w. frc_sdio20 ( ) . bits ( 0x0 ) ;
268+ w. frc_sdio11 ( ) . bits ( 0x1f ) ;
269+ w. frc_pos_samp ( ) . bits ( 0x0 ) ;
270+ w. frc_neg_samp ( ) . bits ( 0x1f )
271+ } ) ;
272+ }
273+ }
230274
231275 Ok ( ( ) )
232276 }
0 commit comments