• Oleksij Rempel's avatar
    i2c: imx: reduce load by using usleep_range instead of udelay · 2b899f34
    Oleksij Rempel authored
    Documentation/timers/timers-howto.txt recommends to use
    usleep_range on delays > 10usec. According to my test results
    with Neonode zForce touchscreen driver, usleep_range indeed
    reduces CPU load.
    
    Stats collected with "./perf record -a -g -F 1000 sleep 10"
    
    i2c-imx with udelay(50):
    34.19% 0.00% irq/220-Neonode [kernel.kallsyms] [k] irq_thread
        ---irq_thread
           |--33.75%--irq_thread_fn
           |    |--19.27%--0x7f08a878
           |    |     i2c_master_recv
           |    |     i2c_transfer
           |    |     __i2c_transfer
           |    |     i2c_imx_xfer
           |    |     |--11.71%--i2c_imx_trx_complete
           |    |     |--5.70%--i2c_imx_start <<<<----------------
           |    |     |     |--5.38%--__timer_const_udelay
           |    |     |     |      __timer_delay
           |    |     |     |      --5.07%--read_current_timer
    
    i2c-imx with usleep_range(50,100)
    29.08% 0.00% irq/220-Neonode  [kernel.kallsyms] [k] irq_thread
        ---irq_thread
           |--28.89%--irq_thread_fn
           |    |--17.21%--0x7f08a878
           |    |     i2c_master_recv
           |    |     |--17.14%--i2c_transfer
           |    |     |     __i2c_transfer
           |    |     |     i2c_imx_xfer
           |    |     |     |--14.29%--i2c_imx_trx_complete
           |    |     |     |--1.42%--i2c_imx_start <<<<----------
           |    |     |     |      |--0.71%--usleep_range
           |    |     |     |      |--0.53%--i2c_imx_bus_busy
    Signed-off-by: default avatarOleksij Rempel <linux@rempel-privat.de>
    Signed-off-by: default avatarDirk Behme <dirk.behme@de.bosch.com>
    Reviewed-by: default avatarVladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    2b899f34
i2c-imx.c 34.1 KB