@@ -220,14 +220,18 @@ where
220220 }
221221
222222 /// Initiates a register reset.
223- fn start_register_reset ( & mut self , i2c : & mut I2C ) -> Result < ( ) > {
223+ fn start_register_reset ( & mut self , i2c : & mut I2C , power_on : bool ) -> Result < ( ) > {
224224 if self . reset != ResetState :: None {
225225 return Ok ( ( ) ) ;
226226 }
227227
228- defmt:: info!( "STUSB4500 register reset" ) ;
228+ if power_on {
229+ defmt:: info!( "Skipping STUSB4500 register reset due to power on or pin reset" ) ;
230+ } else {
231+ defmt:: info!( "STUSB4500 register reset" ) ;
232+ self . write ( i2c, REG_RESET , & [ 1 ] ) ?;
233+ }
229234
230- self . write ( i2c, REG_RESET , & [ 1 ] ) ?;
231235 self . read ( i2c, REG_ALERT_STATUS_1 , 12 ) ?;
232236
233237 self . supply_pdos . clear ( ) ;
@@ -273,7 +277,7 @@ where
273277 ResetState :: OnWait ( since) if monotonics:: now ( ) - since >= reset_duration => {
274278 self . reset = ResetState :: None ;
275279 self . check_id ( i2c) ?;
276- self . start_register_reset ( i2c) ?;
280+ self . start_register_reset ( i2c, true ) ?;
277281 Ok ( true )
278282 }
279283 ResetState :: PinResetHigh ( since) if monotonics:: now ( ) - since >= reset_duration => {
@@ -707,7 +711,7 @@ where
707711 "USB CC not attached for too long after FSM attach, issuing register reset"
708712 ) ;
709713 self . fsm_attached_since = None ;
710- self . start_register_reset ( i2c) ?;
714+ self . start_register_reset ( i2c, false ) ?;
711715 }
712716 }
713717 self . last_fsm_reset = Some ( now) ;
0 commit comments