• Jan Kundrát's avatar
    i2c: gpio: Enable working over slow can_sleep GPIOs · f11a0446
    Jan Kundrát authored
    "Slow" GPIOs (usually those connected over an SPI or an I2C bus) are,
    well, slow in their operation. It is generally a good idea to avoid
    using them for time-critical operation, but sometimes the hardware just
    sucks, and the software has to cope. In addition to that, the I2C bus
    itself does not actually define any strict timing limits; the bus is
    free to go all the way down to DC. The timeouts (and therefore the
    slowest acceptable frequency) are present only in SMBus.
    
    The `can_sleep` is IMHO a wrong concept to use here. My SPI-to-quad-UART
    chip (MAX14830) is connected via a 26MHz SPI bus, and it happily drives
    SCL at 200kHz (5µs pulses) during my benchmarks. That's faster than the
    maximal allowed speed of the traditional I2C.
    
    The previous version of this code did not really block operation over
    slow GPIO pins, anyway. Instead, it just resorted to printing a warning
    with a backtrace each time a GPIO pin was accessed, thereby slowing
    things down even more.
    
    Finally, it's not just me. A similar patch was originally submitted in
    2015 [1].
    
    [1] https://patchwork.ozlabs.org/patch/450956/Signed-off-by: default avatarJan Kundrát <jan.kundrat@cesnet.cz>
    Acked-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    f11a0446
i2c-gpio.c 10.5 KB