The pca954x mux might not respond under certain cicumstances, like
device behindit holding SDA after recovery loop or some internal issue
in mux itself. Those situations are indicated by ETIMEDOUT returned
from I2C transaction attempting selecting or deselecting the channel.
According to device documentation the reset pulse restores I2C
subsystem of the mux and deselects the channel.
Since the mux switches using transistor switches, the failure of line
behind mux that is currently conneted prevents sending commands to mux
itself, so external reset signal is required.
The following series of patches implements the reset functionality if
it was selected in devicetree. This cannot be default behaviour,
beceuse the reset line might not be dedivated on some boards and such
reset pulse would make other chips need reinitialisation.
---
Changelog:
v2:
* Removed mail header from the commit log
* Decreased reset pulse hold time from 10 to 1 ms
v3:
* Make this functionality enabled by appropriate property in
devicetree
v4:
* Fix missing condition check from devicetree
v5:
* Declare dependency of a new property
---
Wojciech Siudy (2):
dt-bindings: i2c: pca954x: Add timeout reset property
pca954x: Reset if channel select fails
.../bindings/i2c/i2c-mux-pca954x.yaml | 11 ++++
drivers/i2c/muxes/i2c-mux-pca954x.c | 51 +++++++++++++++----
2 files changed, 51 insertions(+), 11 deletions(-)
--
2.34.1