[PATCH] serial: mxs-auart: keep the AUART unit in reset state when not in use
From: Stefan Wahren <hidden>
Date: 2015-07-14 17:33:13
Also in:
linux-serial, lkml
Hello Juergen,
quoted hunk ↗ jump to hunk
Juergen Borleis [off-list ref] hat am 14. Juli 2015 um 16:41 geschrieben: [...] --- drivers/tty/serial/mxs-auart.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-)diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c index 13cf773..f42b6ad 100644 --- a/drivers/tty/serial/mxs-auart.c +++ b/drivers/tty/serial/mxs-auart.c@@ -858,6 +858,30 @@ static void mxs_auart_reset(struct uart_port *u)writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR); } +static void mxs_auart_do_reset(struct uart_port *u)
i think the naming of this new function is too similiar to mxs_auart_reset() and doesn't represent the exact behavior. How about mxs_auart_keep_reset() or mxs_auart_gate()?
+{
+ int i;
+ u32 reg;
+
+ reg = readl(u->membase + AUART_CTRL0);
+ /* if already in reset state, keep it untouched */
+ if (reg & AUART_CTRL0_SFTRST)
+ return;
+
+ writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
+ writel(AUART_CTRL0_SFTRST, u->membase + AUART_CTRL0_SET);
+
+ for (i = 0; i < 1000; i++) {
+ reg = readl(u->membase + AUART_CTRL0);
+ /* reset is finished when the clock is gated */
+ if (reg & AUART_CTRL0_CLKGATE)
+ return;
+ udelay(10);The delay in mxs_auart_reset() has a value of 3 microseconds. Why not the same here?
quoted hunk ↗ jump to hunk
+ } + + dev_err(u->dev, "Failed to reset the unit."); +} + static int mxs_auart_startup(struct uart_port *u) { int ret;@@ -867,7 +891,10 @@ static int mxs_auart_startup(struct uart_port *u)if (ret) return ret; - writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR); + /* reset the unit if not aready done */
Just a typo: already? Thanks Stefan