• Juergen Borleis's avatar
    serial: mxs-auart: keep the AUART unit in reset state when not in use · 17dc72cf
    Juergen Borleis authored
    Whenever the UART device driver gets closed from userland, the driver
    disables the UART unit and then stops the clocks to save power.
    
    The bit which disabled the UART unit is described as:
    
     "UART Enable. If this bit is set to 1, the UART is enabled. Data
      transmission and reception occurs for the UART signals. When the
      UART is disabled in the middle of transmission or reception, it
      completes the current character before stopping."
    
    The important part is the "it completes the current character". Whenever
    a reception is ongoing when the UART gets disabled (including the clock
    off) the statemachine freezes and "remembers" this state on the next
    open() when re-enabling the unit's clock.
    
    In this case we end up receiving an additional bogus character
    immediately.
    
    The solution in this change is to switch the AUART unit into its reset
    state on close() and only release it from its reset state on the next
    open().
    
    Note: when the unit is also used as system console it is always 'in use',
    so we cannot reset it on close().
    Signed-off-by: default avatarJuergen Borleis <jbe@pengutronix.de>
    Reviewed-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    17dc72cf
mxs-auart.c 33.2 KB