Messages in this thread | | | Date | Tue, 14 Jul 2015 19:33:04 +0200 (CEST) | From | Stefan Wahren <> | Subject | Re: [PATCH] serial: mxs-auart: keep the AUART unit in reset state when not in use |
| |
Hello Juergen,
> Juergen Borleis <jbe@pengutronix.de> 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?
> + } > + > + 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
| |