Thread (7 messages) 7 messages, 4 authors, 2015-07-20

[PATCH v3] serial: mxs-auart: keep the AUART unit in reset state when not in use

From: p.zabel@pengutronix.de (Philipp Zabel)
Date: 2015-07-17 14:35:32
Also in: linux-serial, lkml

Am Freitag, den 17.07.2015, 09:10 -0400 schrieb Peter Hurley:
Hi Juergen,

On 07/16/2015 03:40 AM, Juergen Borleis wrote:
quoted
Whenever the UART device driver gets closed from userland, the driver
disables the UART unit and then stops its clock 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() and re-enabling of the unit's clock.

In this case we end up receiving an additional bogus character
immediately.

The solution in this change is to move the AUART unit into its reset
state on close() and only release it from its reset state on the next
open().

Signed-off-by: Juergen Borleis <redacted>
---

Notes:
    v3:
     - missing newline added to an error message
    
    v2:
     - rename mxs_auart_do_reset() to mxs_auart_keep_reset() to better reflect
       what it really does
     - adapt the delay in mxs_auart_keep_reset() to wait for the reset of the
       AURAT unit to what is used in mxs_auart_reset()
The function names and semantics are not clear. See below.
[...]
quoted
+	/* bring it out of reset now */
+	mxs_auart_reset(u);
mxs_auart_reset() is really not resetting but simply performing a block enable.
Isn't there a generic block enable for the iMX.2x SoCs? (Maybe there should be)

The names of these functions don't match expected operations of startup().
Start up should be enabling the device, not keeping it in reset.

And "keep reset" immediately followed by "reset" makes no sense.
I'd call the pair mxs_auart_reset_assert and mxs_auart_reset_deassert.

regards
Philipp
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help