• Alain Volmat's avatar
    i2c: stm32f7: Fix PEC handling in case of SMBUS transfers · c896ff2d
    Alain Volmat authored
    In case of SMBUS byte read with PEC enabled, the whole transfer
    is split into two commands.  A first write command, followed by
    a read command.  The write command does not have any PEC byte
    and a PEC byte is appended at the end of the read command.
    (cf Read byte protocol with PEC in SMBUS specification)
    
    Within the STM32 I2C controller, handling (either sending
    or receiving) of the PEC byte is done via the PECBYTE bit in
    register CR2.
    
    Currently, the PECBYTE is set at the beginning of a transfer,
    which lead to sending a PEC byte at the end of the write command
    (hence losing the real last byte), and also does not check the
    PEC byte received during the read command.
    
    This patch corrects the function stm32f7_i2c_smbus_xfer_msg
    in order to only set the PECBYTE during the read command.
    
    Fixes: 9e48155f ("i2c: i2c-stm32f7: Add initial SMBus protocols support")
    Signed-off-by: default avatarAlain Volmat <alain.volmat@foss.st.com>
    Reviewed-by: default avatarPierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
    Acked-by: default avatarAndi Shyti <andi.shyti@kernel.org>
    Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
    c896ff2d
i2c-stm32f7.c 65.3 KB