• Petri Gynther's avatar
    i2c/pca954x: Initialize the mux to disconnected state · cd823db8
    Petri Gynther authored
    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: default avatarPetri Gynther <pgynther@google.com>
    Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
    Cc: stable@kernel.org
    cd823db8
pca954x.c 6.88 KB