From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753070AbbIOMt2 (ORCPT ); Tue, 15 Sep 2015 08:49:28 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:40288 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753017AbbIOMtZ (ORCPT ); Tue, 15 Sep 2015 08:49:25 -0400 X-AuditID: cbfee61b-f79d56d0000048c5-d6-55f813d3acd9 From: Robert Baldyga To: gregkh@linuxfoundation.org Cc: jslaby@suse.com, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, m.szyprowski@samsung.com, k.kozlowski@samsung.com, Robert Baldyga Subject: [PATCH v3 3/4] serial: samsung: introduce s3c24xx_serial_rx_drain_fifo() function Date: Tue, 15 Sep 2015 14:48:59 +0200 Message-id: <1442321340-28167-4-git-send-email-r.baldyga@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1442321340-28167-1-git-send-email-r.baldyga@samsung.com> References: <1442321340-28167-1-git-send-email-r.baldyga@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprALMWRmVeSWpSXmKPExsVy+t9jQd0rwj9CDdbdZLFoXryezWLKhg9M Fq9fGFpc3jWHzeLM4l52i7VH7rJbPDi8k92B3WP/3DXsHn1bVjF6rN9ylcXj8ya5AJYoLpuU 1JzMstQifbsErozW40/ZCi4LVNz7v5SlgfEKbxcjB4eEgInEzAeGXYycQKaYxIV769m6GLk4 hARmMUp0zFjHDuH8ZJRY+u0MG0gVm4COxJbvExhBbBEBOYknt/8wgxQxC6xjlHg14wUrSEJY IEbi2L+7zCA2i4CqxM6+N0wgNq+Aq8SBR43sEOvkJE4em8wKcgWngJvEla9FIGEhoJI//5ax TGDkXcDIsIpRIrUguaA4KT3XKC+1XK84Mbe4NC9dLzk/dxMjOJyeSe9gPLzL/RCjAAejEg9v RPv3UCHWxLLiytxDjBIczEoivLIcP0KFeFMSK6tSi/Lji0pzUosPMUpzsCiJ88qufBYqJJCe WJKanZpakFoEk2Xi4JRqYOS8YLzQfR2z/06Wb3tjsmuXrMu863XBI0i62LM47gKDabtJVtK1 hf6lUvFPMvM+3dM0t5jwZdu2x7mCbv+/lX0w3znhj+iOyZvFuuevflHJHfwyJnLZzznFMheu 2+4vlm+Y5jN/57//B18Fa1zVFJneytm36dEhwc/zee4GH/ffW2G6+ZJ20jIlluKMREMt5qLi RADYJcUWIwIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch introduces s3c24xx_serial_rx_drain_fifo() which reads data from RX FIFO and writes it to tty buffer. It also checks for special conditions (such as 'break') and handles it. This function has been separated from s3c24xx_serial_rx_chars_pio() as it contains code which can be used also in DMA mode. Signed-off-by: Robert Baldyga --- drivers/tty/serial/samsung.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index dc4be54..1d7dd86 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -621,16 +621,12 @@ finish: return IRQ_HANDLED; } -static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id) +static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport) { - struct s3c24xx_uart_port *ourport = dev_id; struct uart_port *port = &ourport->port; unsigned int ufcon, ch, flag, ufstat, uerstat; - unsigned long flags; int max_count = port->fifosize; - spin_lock_irqsave(&port->lock, flags); - while (max_count-- > 0) { ufcon = rd_regl(port, S3C2410_UFCON); ufstat = rd_regl(port, S3C2410_UFSTAT); @@ -654,9 +650,7 @@ static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id) ufcon |= S3C2410_UFCON_RESETRX; wr_regl(port, S3C2410_UFCON, ufcon); rx_enabled(port) = 1; - spin_unlock_irqrestore(&port->lock, - flags); - goto out; + return; } continue; } @@ -702,10 +696,19 @@ static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id) ch, flag); } - spin_unlock_irqrestore(&port->lock, flags); tty_flip_buffer_push(&port->state->port); +} + +static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id) +{ + struct s3c24xx_uart_port *ourport = dev_id; + struct uart_port *port = &ourport->port; + unsigned long flags; + + spin_lock_irqsave(&port->lock, flags); + s3c24xx_serial_rx_drain_fifo(ourport); + spin_unlock_irqrestore(&port->lock, flags); -out: return IRQ_HANDLED; } -- 1.9.1