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