• Adamski, Krzysztof (Nokia - PL/Wroclaw)'s avatar
    i2c: axxia: use auto cmd for last message · 530edb50
    Some recent commits to this driver were trying to make sure the TSS
    interrupt is not generated on busy system due to 25ms timer expiring
    between commands. It can still happen, however if STOP command is not
    issued on time at the end of the transmission. If wait_for_completion in
    axxia_i2c_xfer_msg() would not return after 25ms of getting an
    interrupt, TSS will be generated and idev->err_msg will be set to
    -ETIMEDOUT which will be returned from the axxia_i2c_xfer_msg(), even
    though the transfer did actually succeed (STOP is automatically issued
    when TSS triggers).
    
    Fortunately, apart from already used manual and sequence commands, the
    controller also has so called auto command. It works just like manual
    mode but it but an automatic STOP is issued when either transfer length
    is met or NAK is received from slave device.
    
    This patch changes the axxia_i2c_xfer_msg() function so that auto
    command is used for last message in transaction letting hardware manage
    issuing STOP. TSS is disabled just after command transferring last
    message finishes. Auto command, just like sequence, ends with SS
    interrupt instead of SNS so handling of both had to be unified.
    
    The axxia_i2c_stop() is no longer needed as the transfer can only end
    with following conditions:
    - fully successful - then last message was send by AUTO command and STOP
      was issued automatically
    - NAK received - STOP is issued automatically by controller
    - arbitration lost - STOP should not be issued as we don't control the
      bus
    - IP interrupt received - this is sent when transfer length is set to 0
      for auto/sequence command. The check for that is done before START is
      send so no STOP is required
    - TSS received between commands - STOP is issued by the controller
    Signed-off-by: default avatarKrzysztof Adamski <krzysztof.adamski@nokia.com>
    Reviewed-by: default avatarAlexander Sverdlin <alexander.sverdlin@nokia.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    530edb50
i2c-axxia.c 18.6 KB