From 05ca434d082096fbf3f2186b4b990811dfc2022b Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 19 Jul 2024 14:11:35 -0600 Subject: [PATCH] tool: Implement usbc_mux_info command --- tool/src/ec.rs | 11 +++++++++++ tool/src/main.rs | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/tool/src/ec.rs b/tool/src/ec.rs index 0bd793784..c8edb4a39 100644 --- a/tool/src/ec.rs +++ b/tool/src/ec.rs @@ -39,6 +39,7 @@ enum Cmd { SetNoInput = 19, SecurityGet = 20, SecuritySet = 21, + UsbcMuxInfo = 22, } const CMD_SPI_FLAG_READ: u8 = 1 << 0; @@ -327,6 +328,16 @@ impl Ec { self.command(Cmd::SecuritySet, &mut data) } + /// Get USB-C mux info + pub unsafe fn usbc_mux_info(&mut self, port: u8) -> Result { + let mut data = [port, 0, 0]; + self.command(Cmd::UsbcMuxInfo, &mut data)?; + Ok( + (data[1] as u16) | + ((data[2] as u16) << 8) + ) + } + pub fn into_dyn(self) -> Ec> where A: 'static { Ec { diff --git a/tool/src/main.rs b/tool/src/main.rs index a31da3fe9..d194abc12 100644 --- a/tool/src/main.rs +++ b/tool/src/main.rs @@ -301,6 +301,13 @@ unsafe fn security_set(ec: &mut Ec>, state: SecurityState) -> Re Ok(()) } +unsafe fn usbc_mux_info(ec: &mut Ec>, port: u8) -> Result<(), Error> { + let info = ec.usbc_mux_info(port)?; + println!("{:04X}", info); + + Ok(()) +} + fn parse_color(s: &str) -> Result<(u8, u8, u8), String> { let r = u8::from_str_radix(&s[0..2], 16); let g = u8::from_str_radix(&s[2..4], 16); @@ -361,6 +368,9 @@ enum SubCommand { Security { state: Option, }, + UsbcMuxInfo { + port: u8, + }, } #[derive(clap::ValueEnum, Clone)] @@ -638,5 +648,14 @@ fn main() { }, } }, + SubCommand::UsbcMuxInfo { port } => { + match unsafe { usbc_mux_info(&mut ec, port) } { + Ok(()) => (), + Err(err) => { + eprintln!("failed to get usbc_mux_info {}: {:X?}", port, err); + process::exit(1); + }, + } + }, } }