Skip to content

Commit a229c35

Browse files
committed
STUSB4500: skip register reset after power on
Avoids a attach loop with mobile devices.
1 parent c1be04d commit a229c35

File tree

1 file changed

+9
-5
lines changed
  • openemc-firmware/src/supply/stusb4500

1 file changed

+9
-5
lines changed

openemc-firmware/src/supply/stusb4500/mod.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)