From 7dc743d773dfb8beef17cd8bb2ec98565dd762d1 Mon Sep 17 00:00:00 2001 From: Robert Zieba Date: Thu, 6 Aug 2026 16:28:50 -0700 Subject: [PATCH] type-c-service/tps6699x: Fix EPR capable flag not being set This flag was not being set properly. --- embedded-service/src/type_c/controller.rs | 2 +- type-c-service/src/driver/tps6699x.rs | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/embedded-service/src/type_c/controller.rs b/embedded-service/src/type_c/controller.rs index 62b79e8f3..093508e96 100644 --- a/embedded-service/src/type_c/controller.rs +++ b/embedded-service/src/type_c/controller.rs @@ -48,7 +48,7 @@ pub struct PortStatus { pub alt_mode: AltMode, /// Power path status pub power_path: PowerPathStatus, - /// EPR mode active + /// Port partner is EPR capable pub epr: bool, /// Port partner is unconstrained pub unconstrained_power: bool, diff --git a/type-c-service/src/driver/tps6699x.rs b/type-c-service/src/driver/tps6699x.rs index 8f1830eac..3ce8418d0 100644 --- a/type-c-service/src/driver/tps6699x.rs +++ b/type-c-service/src/driver/tps6699x.rs @@ -366,13 +366,19 @@ impl Controller for Tps6699x<'_, M, B> { return Err(PdError::InvalidParams.into()); } + let source::Pdo::Fixed(fixed_source_pdo) = source_pdos[0] else { + error!("Port{}: First rx source PDO is not fixed", port.0); + return Err(PdError::InvalidParams.into()); + }; + let pdo = sink::Pdo::try_from(pdo_raw).map_err(|_| Error::from(PdError::InvalidParams))?; let rdo = Rdo::for_pdo(rdo_raw, pdo).ok_or(Error::Pd(PdError::InvalidParams))?; debug!("PDO: {:#?}", pdo); debug!("RDO: {:#?}", rdo); port_status.available_sink_contract = Contract::from_sink(pdo, rdo).try_into().ok(); - port_status.dual_power = source_pdos[0].dual_role_power(); - port_status.unconstrained_power = source_pdos[0].unconstrained_power(); + port_status.dual_power = fixed_source_pdo.dual_role_power; + port_status.unconstrained_power = fixed_source_pdo.unconstrained_power; + port_status.epr = fixed_source_pdo.epr_capable; } } else if status.port_role() { // port_role is true for source