diff mbox

[v2,2/2] tty: serial: imx: don't reinit clock in imx_setup_ufcr()

Message ID 1346400167-24669-1-git-send-email-dirk.behme@de.bosch.com (mailing list archive)
State New, archived
Headers show

Commit Message

Dirk Behme Aug. 31, 2012, 8:02 a.m. UTC
Remove the clock configuration from imx_setup_ufcr(). This
isn't needed here and will cause garbage output if done.

To be be sure that we only touch the bits we want (TXTL and RXTL)
we have to mask out all other bits of the UFCR register. Add
one non-existing bit macro for this, too (bit 6, DCEDTE on i.MX6).

Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
CC: Shawn Guo <shawn.guo@linaro.org>
CC: Sascha Hauer <s.hauer@pengutronix.de>
CC: Troy Kisky <troy.kisky@boundarydevices.com>
CC: Xinyu Chen <xinyu.chen@freescale.com>
CC: <stable@vger.kernel.org>
---
Changes in v2: Instead of disabling imx_setup_ufcr() with an
ifndef CONFIG_SERIAL_CORE_CONSOLE, remove the unneeded clock 
configuration from imx_setup_ufcr() itself as proposed by Troy Kisky.

Note: If this patch is accepted, it should go to the same stable
kernels as patch #1 of this series. So most probably 3.4 and 3.5.

 drivers/tty/serial/imx.c |   18 ++++--------------
 1 files changed, 4 insertions(+), 14 deletions(-)

Comments

Shawn Guo Aug. 31, 2012, 2:14 a.m. UTC | #1
On Fri, Aug 31, 2012 at 10:02:47AM +0200, Dirk Behme wrote:
> Remove the clock configuration from imx_setup_ufcr(). This
> isn't needed here and will cause garbage output if done.
> 
> To be be sure that we only touch the bits we want (TXTL and RXTL)
> we have to mask out all other bits of the UFCR register. Add
> one non-existing bit macro for this, too (bit 6, DCEDTE on i.MX6).
> 
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> CC: Shawn Guo <shawn.guo@linaro.org>
> CC: Sascha Hauer <s.hauer@pengutronix.de>
> CC: Troy Kisky <troy.kisky@boundarydevices.com>
> CC: Xinyu Chen <xinyu.chen@freescale.com>
> CC: <stable@vger.kernel.org>

Acked-by: Shawn Guo <shawn.guo@linaro.org>

> ---
> Changes in v2: Instead of disabling imx_setup_ufcr() with an
> ifndef CONFIG_SERIAL_CORE_CONSOLE, remove the unneeded clock 
> configuration from imx_setup_ufcr() itself as proposed by Troy Kisky.
> 
> Note: If this patch is accepted, it should go to the same stable
> kernels as patch #1 of this series. So most probably 3.4 and 3.5.

In such cases, you should repost the series instead of this patch only,
so that maintainer can apply them a little easier.  Let's see if
Greg is fine to apply patch #1 from the early post and #2 from here.
diff mbox

Patch

diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 908178f..e309e8b 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -132,6 +132,7 @@ 
 #define  UCR4_OREN  	 (1<<1)  /* Receiver overrun interrupt enable */
 #define  UCR4_DREN  	 (1<<0)  /* Recv data ready interrupt enable */
 #define  UFCR_RXTL_SHF   0       /* Receiver trigger level shift */
+#define  UFCR_DCEDTE	 (1<<6)  /* DCE/DTE mode select */
 #define  UFCR_RFDIV      (7<<7)  /* Reference freq divider mask */
 #define  UFCR_RFDIV_REG(x)	(((x) < 7 ? 6 - (x) : 6) << 7)
 #define  UFCR_TXTL_SHF   10      /* Transmitter trigger level shift */
@@ -667,22 +668,11 @@  static void imx_break_ctl(struct uart_port *port, int break_state)
 static int imx_setup_ufcr(struct imx_port *sport, unsigned int mode)
 {
 	unsigned int val;
-	unsigned int ufcr_rfdiv;
-
-	/* set receiver / transmitter trigger level.
-	 * RFDIV is set such way to satisfy requested uartclk value
-	 */
-	val = TXTL << 10 | RXTL;
-	ufcr_rfdiv = (clk_get_rate(sport->clk_per) + sport->port.uartclk / 2)
-			/ sport->port.uartclk;
-
-	if(!ufcr_rfdiv)
-		ufcr_rfdiv = 1;
-
-	val |= UFCR_RFDIV_REG(ufcr_rfdiv);
 
+	/* set receiver / transmitter trigger level */
+	val = readl(sport->port.membase + UFCR) & (UFCR_RFDIV | UFCR_DCEDTE);
+	val |= TXTL << UFCR_TXTL_SHF | RXTL;
 	writel(val, sport->port.membase + UFCR);
-
 	return 0;
 }