• Daniel Kurtz's avatar
    i2c-i801: Enable IRQ for byte_by_byte transactions · d3ff6ce4
    Daniel Kurtz authored
    Byte-by-byte transactions are used primarily for accessing I2C devices
    with an SMBus controller.  For these transactions, for each byte that is
    read or written, the SMBus controller generates a BYTE_DONE IRQ.  The isr
    reads/writes the next byte, and clears the IRQ flag to start the next byte.
    On the penultimate IRQ, the isr also sets the LAST_BYTE flag.
    
    There is no locking around the cmd/len/count/data variables, since the
    I2C adapter lock ensures there is never multiple simultaneous transactions
    for the same device, and the driver thread never accesses these variables
    while interrupts might be occurring.
    
    The end result is faster I2C block read and write transactions.
    
    Note: This patch has only been tested and verified by doing I2C read and
    write block transfers on Cougar Point 6 Series PCH, as well as I2C read
    block transfers on ICH5.
    Signed-off-by: default avatarDaniel Kurtz <djkurtz@chromium.org>
    Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
    d3ff6ce4
i2c-i801.c 32.5 KB