From f265976df62ec5bc358de68f8808ade96198ae15 Mon Sep 17 00:00:00 2001
From: Donald Sebastian Leung
Date: Fri, 3 Jul 2020 15:55:11 +0800
Subject: [PATCH] i2c: duplicate TCA9548 control byte
---
artiq/firmware/libboard_misoc/i2c.rs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/artiq/firmware/libboard_misoc/i2c.rs b/artiq/firmware/libboard_misoc/i2c.rs
index acade0c24..9e62a97ff 100644
--- a/artiq/firmware/libboard_misoc/i2c.rs
+++ b/artiq/firmware/libboard_misoc/i2c.rs
@@ -183,8 +183,11 @@ mod imp {
if !write(busno, address << 1)? {
return Err("PCA9548 failed to ack write address")
}
- if !write(busno, channels)? {
- return Err("PCA9548 failed to ack control word")
+ // Duplicate control byte: one for SCL, one for SDA
+ for _ in 0..2 {
+ if !write(busno, channels)? {
+ return Err("PCA9548 failed to ack control word")
+ }
}
stop(busno)?;
Ok(())