Skip to content
  • mario.six@gdsys.cc's avatar
    linux/compat.h: Properly implement ndelay fallback · ca388143
    mario.six@gdsys.cc authored
    
    
    Commit c68c62 ("i2c: mvtwsi: Make delay times frequency-dependent")
    extensively used the ndelay function with a calculated parameter
    which is dependant on the configured frequency of the I2C bus. If
    standard speed is employed, the parameter is usually 10000 (10000ns
    period length for 100kHz frequency).
    
    But, since the arm architecture does not implement a proper version of
    ndelay, the fallback default from include/linux/compat.h is used,
    which defines every ndelay as udelay(1). This causes problems for
    slower speeds on arm, since the delay time is now 9us too short for
    the desired frequency, which leads to random failures of the I2C
    interface.
    
    To remedy this, we implement a proper, parameter-aware ndelay fallback
    for architectures that don't implement a real ndelay function.
    
    Reported-By: default avatarJason Brown <Jason.brown@apcon.com>
    To: Tom Rini <trini@konsulko.com>
    To: Heiko Schocher <hs@denx.de>
    Signed-off-by: default avatarMario Six <mario.six@gdsys.cc>
    ca388143