linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Abraham <thomas.abraham@linaro.org>
To: linux-serial@vger.kernel.org, devicetree-discuss@lists.ozlabs.org
Cc: linux-arm-kernel@lists.infradead.org, alan@linux.intel.com,
	grant.likely@secretlab.ca, linux-samsung-soc@vger.kernel.org,
	kgene.kim@samsung.com, ben-linux@fluff.org
Subject: [PATCH v2 7/9] serial: samsung: merge all SoC specific port reset functions
Date: Mon, 10 Oct 2011 15:38:03 +0530	[thread overview]
Message-ID: <1318241285-23568-8-git-send-email-thomas.abraham@linaro.org> (raw)
In-Reply-To: <1318241285-23568-1-git-send-email-thomas.abraham@linaro.org>

The port reset function in each of the platform specific extension performs
the same operations and hence all the reset port functions can be merged into
one and moved into the common samsung uart driver. The SoC specific port reset
functions are removed from SoC extensions.

Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 drivers/tty/serial/s3c2410.c |   18 ------------------
 drivers/tty/serial/s3c2412.c |   24 ------------------------
 drivers/tty/serial/s3c2440.c |   24 ------------------------
 drivers/tty/serial/s3c6400.c |   24 ------------------------
 drivers/tty/serial/s5pv210.c |   22 +---------------------
 drivers/tty/serial/samsung.c |   23 ++++++++++++++++++-----
 6 files changed, 19 insertions(+), 116 deletions(-)

diff --git a/drivers/tty/serial/s3c2410.c b/drivers/tty/serial/s3c2410.c
index e668a9d..1491c32 100644
--- a/drivers/tty/serial/s3c2410.c
+++ b/drivers/tty/serial/s3c2410.c
@@ -25,23 +25,6 @@
 
 #include "samsung.h"
 
-static int s3c2410_serial_resetport(struct uart_port *port,
-				    struct s3c2410_uartcfg *cfg)
-{
-	dbg("s3c2410_serial_resetport: port=%p (%08lx), cfg=%p\n",
-	    port, port->mapbase, cfg);
-
-	wr_regl(port, S3C2410_UCON,  cfg->ucon);
-	wr_regl(port, S3C2410_ULCON, cfg->ulcon);
-
-	/* reset both fifos */
-
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	return 0;
-}
-
 static struct s3c24xx_uart_info s3c2410_uart_inf = {
 	.name		= "Samsung S3C2410 UART",
 	.type		= PORT_S3C2410,
@@ -56,7 +39,6 @@ static struct s3c24xx_uart_info s3c2410_uart_inf = {
 	.num_clks	= 2,
 	.clksel_mask	= S3C2410_UCON_CLKMASK,
 	.clksel_shift	= S3C2410_UCON_CLKSHIFT,
-	.reset_port	= s3c2410_serial_resetport,
 };
 
 static int s3c2410_serial_probe(struct platform_device *dev)
diff --git a/drivers/tty/serial/s3c2412.c b/drivers/tty/serial/s3c2412.c
index 5b85c19..38ae730 100644
--- a/drivers/tty/serial/s3c2412.c
+++ b/drivers/tty/serial/s3c2412.c
@@ -25,29 +25,6 @@
 
 #include "samsung.h"
 
-static int s3c2412_serial_resetport(struct uart_port *port,
-				    struct s3c2410_uartcfg *cfg)
-{
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-
-	dbg("%s: port=%p (%08lx), cfg=%p\n",
-	    __func__, port, port->mapbase, cfg);
-
-	/* ensure we don't change the clock settings... */
-
-	ucon &= S3C2412_UCON_CLKMASK;
-
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-	wr_regl(port, S3C2410_ULCON, cfg->ulcon);
-
-	/* reset both fifos */
-
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	return 0;
-}
-
 static struct s3c24xx_uart_info s3c2412_uart_inf = {
 	.name		= "Samsung S3C2412 UART",
 	.type		= PORT_S3C2412,
@@ -63,7 +40,6 @@ static struct s3c24xx_uart_info s3c2412_uart_inf = {
 	.num_clks	= 4,
 	.clksel_mask	= S3C2412_UCON_CLKMASK,
 	.clksel_shift	= S3C2412_UCON_CLKSHIFT,
-	.reset_port	= s3c2412_serial_resetport,
 };
 
 /* device management */
diff --git a/drivers/tty/serial/s3c2440.c b/drivers/tty/serial/s3c2440.c
index 39930f8..70652f5 100644
--- a/drivers/tty/serial/s3c2440.c
+++ b/drivers/tty/serial/s3c2440.c
@@ -25,29 +25,6 @@
 
 #include "samsung.h"
 
-static int s3c2440_serial_resetport(struct uart_port *port,
-				    struct s3c2410_uartcfg *cfg)
-{
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-
-	dbg("s3c2440_serial_resetport: port=%p (%08lx), cfg=%p\n",
-	    port, port->mapbase, cfg);
-
-	/* ensure we don't change the clock settings... */
-
-	ucon &= (S3C2440_UCON0_DIVMASK | (3<<10));
-
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-	wr_regl(port, S3C2410_ULCON, cfg->ulcon);
-
-	/* reset both fifos */
-
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	return 0;
-}
-
 static struct s3c24xx_uart_info s3c2440_uart_inf = {
 	.name		= "Samsung S3C2440 UART",
 	.type		= PORT_S3C2440,
@@ -62,7 +39,6 @@ static struct s3c24xx_uart_info s3c2440_uart_inf = {
 	.num_clks	= 4,
 	.clksel_mask	= S3C2440_UCON_CLKMASK,
 	.clksel_shift	= S3C2440_UCON_CLKSHIFT,
-	.reset_port	= s3c2440_serial_resetport,
 };
 
 /* device management */
diff --git a/drivers/tty/serial/s3c6400.c b/drivers/tty/serial/s3c6400.c
index c5a6d46..30a69f1 100644
--- a/drivers/tty/serial/s3c6400.c
+++ b/drivers/tty/serial/s3c6400.c
@@ -26,29 +26,6 @@
 
 #include "samsung.h"
 
-static int s3c6400_serial_resetport(struct uart_port *port,
-				    struct s3c2410_uartcfg *cfg)
-{
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-
-	dbg("s3c6400_serial_resetport: port=%p (%08lx), cfg=%p\n",
-	    port, port->mapbase, cfg);
-
-	/* ensure we don't change the clock settings... */
-
-	ucon &= S3C6400_UCON_CLKMASK;
-
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-	wr_regl(port, S3C2410_ULCON, cfg->ulcon);
-
-	/* reset both fifos */
-
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	return 0;
-}
-
 static struct s3c24xx_uart_info s3c6400_uart_inf = {
 	.name		= "Samsung S3C6400 UART",
 	.type		= PORT_S3C6400,
@@ -64,7 +41,6 @@ static struct s3c24xx_uart_info s3c6400_uart_inf = {
 	.num_clks	= 4,
 	.clksel_mask	= S3C6400_UCON_CLKMASK,
 	.clksel_shift	= S3C6400_UCON_CLKSHIFT,
-	.reset_port	= s3c6400_serial_resetport,
 };
 
 /* device management */
diff --git a/drivers/tty/serial/s5pv210.c b/drivers/tty/serial/s5pv210.c
index 173df5a..d232094 100644
--- a/drivers/tty/serial/s5pv210.c
+++ b/drivers/tty/serial/s5pv210.c
@@ -25,25 +25,6 @@
 #include <plat/regs-serial.h>
 #include "samsung.h"
 
-static int s5pv210_serial_resetport(struct uart_port *port,
-					struct s3c2410_uartcfg *cfg)
-{
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-
-	ucon &= S5PV210_UCON_CLKMASK;
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-	wr_regl(port, S3C2410_ULCON, cfg->ulcon);
-
-	/* reset both fifos */
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	/* It is need to delay When reset FIFO register */
-	udelay(1);
-
-	return 0;
-}
-
 #define S5PV210_UART_DEFAULT_INFO(fifo_size)			\
 		.name		= "Samsung S5PV210 UART0",	\
 		.type		= PORT_S3C6400,			\
@@ -58,8 +39,7 @@ static int s5pv210_serial_resetport(struct uart_port *port,
 		.def_clk_sel	= S3C2410_UCON_CLKSEL0,		\
 		.num_clks	= 2,				\
 		.clksel_mask	= S5PV210_UCON_CLKMASK,		\
-		.clksel_shift	= S5PV210_UCON_CLKSHIFT,	\
-		.reset_port	= s5pv210_serial_resetport
+		.clksel_shift	= S5PV210_UCON_CLKSHIFT
 
 static struct s3c24xx_uart_info s5p_port_fifo256 = {
 	S5PV210_UART_DEFAULT_INFO(256),
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
index dc5a4ed..78aea1a 100644
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung.c
@@ -965,16 +965,29 @@ static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS
 
 /* s3c24xx_serial_resetport
  *
- * wrapper to call the specific reset for this port (reset the fifos
- * and the settings)
+ * reset the fifos and other the settings.
 */
 
-static inline int s3c24xx_serial_resetport(struct uart_port *port,
-					   struct s3c2410_uartcfg *cfg)
+static void s3c24xx_serial_resetport(struct uart_port *port,
+				   struct s3c2410_uartcfg *cfg)
 {
 	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ucon = rd_regl(port, S3C2410_UCON);
+	unsigned int ucon_mask;
 
-	return (info->reset_port)(port, cfg);
+	ucon_mask = info->clksel_mask;
+	if (info->type == PORT_S3C2440)
+		ucon_mask |= S3C2440_UCON0_DIVMASK;
+
+	ucon &= ucon_mask;
+	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
+
+	/* reset both fifos */
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
+
+	/* some delay is required after fifo reset */
+	udelay(1);
 }
 
 
-- 
1.6.6.rc2


  parent reply	other threads:[~2011-10-10 10:07 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-10 10:07 [PATCH v2 0/9] serial: samsung: rework clock lookup and add device tree support Thomas Abraham
2011-10-10 10:07 ` [PATCH v2 1/9] serial: samsung: Keep a copy of the location of platform data in driver's private data Thomas Abraham
     [not found] ` <1318241285-23568-1-git-send-email-thomas.abraham-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2011-10-10 10:07   ` [PATCH v2 2/9] serial: samsung: move handling of fclk/n clock to platform code Thomas Abraham
2011-10-10 10:07 ` [PATCH v2 3/9] serial: samsung: switch to clkdev based clock lookup Thomas Abraham
2011-10-10 10:08 ` [PATCH v2 4/9] serial: samsung: remove struct 's3c24xx_uart_clksrc' and all uses of it Thomas Abraham
2011-10-24 11:37   ` Grant Likely
2011-10-10 10:08 ` [PATCH v2 5/9] serial: samsung: remove all uses of get_clksrc and set_clksrc Thomas Abraham
2011-10-10 10:08 ` [PATCH v2 6/9] arm: samsung: register uart clocks to clock lookup list Thomas Abraham
2011-10-10 10:08 ` Thomas Abraham [this message]
2011-10-10 10:08 ` [PATCH v2 8/9] serial: samsung: merge probe() function from all SoC specific extensions Thomas Abraham
2011-10-10 10:08 ` [PATCH v2 9/9] serial: samsung: add device tree support Thomas Abraham
2011-10-24 11:38   ` Grant Likely
2011-10-24  8:27 ` [PATCH v2 0/9] serial: samsung: rework clock lookup and " Kukjin Kim
2011-10-24  9:05   ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1318241285-23568-8-git-send-email-thomas.abraham@linaro.org \
    --to=thomas.abraham@linaro.org \
    --cc=alan@linux.intel.com \
    --cc=ben-linux@fluff.org \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=kgene.kim@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).