• Michael Walle's avatar
    pinctrl: microchip-sgpio: wait until output is actually set · 1f3c85c2
    Michael Walle authored
    
    
    Right now, when a gpio value is set, the actual hardware pin gets set
    asynchronously. When linux write the output register, it takes some time
    until it is actually propagated to the output shift registers. If that
    output port is connected to an I2C mux for example, the linux driver
    assumes the I2C bus is already switched although it is not.
    
    Fortunately, there is a single shot mode with a feedback: you can
    trigger the single shot and the hardware will clear that bit once it has
    finished the clocking and strobed the load signal of the shift
    registers. This can take a considerable amount of time though.
    Measuremens have shown that it takes up to a whole burst cycle gap which
    is about 50ms on the largest setting. Therefore, we have to mark the
    output bank as sleepable. To avoid unnecessary waiting, just trigger the
    single shot if the value was actually changed.
    Signed-off-by: default avatarMichael Walle <michael@walle.cc>
    Link: https://lore.kernel.org/r/20220226204507.2511633-6-michael@walle.cc
    
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    1f3c85c2
pinctrl-microchip-sgpio.c 25.4 KB