i2c/pca954x: Initialize the mux to disconnected state
Port of a Linux kernel commit cd823db

    pca954x power-on default is channel 0 connected. If multiple pca954x
    muxes are connected to the same physical I2C bus, the parent bus will
    see channel 0 devices behind both muxes by default. This is bad.

    Scenario:
                -- pca954x @ 0x70 -- ch 0 (I2C-bus-101) -- EEPROM @ 0x50
                |
    I2C-bus-1 ---
                |
                -- pca954x @ 0x71 -- ch 0 (I2C-bus-111) -- EEPROM @ 0x50

    1. Load I2C bus driver: creates I2C-bus-1
    2. Load pca954x driver: creates virtual I2C-bus-101 and I2C-bus-111
    3. Load eeprom driver
    4. Try to read EEPROM @ 0x50 on I2C-bus-101. The transaction will also bleed
       onto I2C-bus-111 because pca954x @ 0x71 channel 0 is connected by default.

    Fix: Initialize pca954x to disconnected state in pca954x_probe()

    Signed-off-by: Petri Gynther <pgynther@google.com>
    Signed-off-by: Jean Delvare <khali@linux-fr.org>
    Cc: stable@kernel.org

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
1 parent e935209 commit c1388eaf5d7021c8519f0dc8943be16d1c126454
@Andrey Smirnov Andrey Smirnov authored on 7 Sep 2019
Sascha Hauer committed on 9 Sep 2019
Showing 1 changed file
View
drivers/i2c/muxes/i2c-mux-pca954x.c