From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevin Cernekee Subject: [PATCH/RFC 4/8] serial: pxa: Add fifo-size and {big,native}-endian properties Date: Wed, 12 Nov 2014 00:46:29 -0800 Message-ID: <1415781993-7755-5-git-send-email-cernekee@gmail.com> References: <1415781993-7755-1-git-send-email-cernekee@gmail.com> Return-path: Received: from mail-pd0-f171.google.com ([209.85.192.171]:37236 "EHLO mail-pd0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752084AbaKLIrM (ORCPT ); Wed, 12 Nov 2014 03:47:12 -0500 In-Reply-To: <1415781993-7755-1-git-send-email-cernekee@gmail.com> Sender: linux-serial-owner@vger.kernel.org List-Id: linux-serial@vger.kernel.org To: gregkh@linuxfoundation.org, jslaby@suse.cz, robh@kernel.org Cc: tushar.behera@linaro.org, daniel@zonque.org, haojian.zhuang@gmail.com, robert.jarzmik@free.fr, grant.likely@linaro.org, f.fainelli@gmail.com, mbizon@freebox.fr, jogo@openwrt.org, linux-mips@linux-mips.org, linux-serial@vger.kernel.org, devicetree@vger.kernel.org With a few tweaks, the PXA serial driver can handle other 16550A clones. Add a fifo-size DT property to override the FIFO depth (BCM7xxx uses 32), and {native,big}-endian properties similar to regmap to support SoCs that have BE or "automagic endian" registers. Signed-off-by: Kevin Cernekee --- drivers/tty/serial/pxa.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/pxa.c b/drivers/tty/serial/pxa.c index 21b7d8b..78ed7ee 100644 --- a/drivers/tty/serial/pxa.c +++ b/drivers/tty/serial/pxa.c @@ -60,13 +60,19 @@ struct uart_pxa_port { static inline unsigned int serial_in(struct uart_pxa_port *up, int offset) { offset <<= 2; - return readl(up->port.membase + offset); + if (!up->port.big_endian) + return readl(up->port.membase + offset); + else + return ioread32be(up->port.membase + offset); } static inline void serial_out(struct uart_pxa_port *up, int offset, int value) { offset <<= 2; - writel(value, up->port.membase + offset); + if (!up->port.big_endian) + writel(value, up->port.membase + offset); + else + iowrite32be(value, up->port.membase + offset); } static void serial_pxa_enable_ms(struct uart_port *port) @@ -833,6 +839,7 @@ static int serial_pxa_probe_dt(struct platform_device *pdev, { struct device_node *np = pdev->dev.of_node; int ret; + u32 val; if (!np) return 1; @@ -843,6 +850,11 @@ static int serial_pxa_probe_dt(struct platform_device *pdev, return ret; } sport->port.line = ret; + + if (of_property_read_u32(np, "fifo-size", &val) == 0) + sport->port.fifosize = val; + sport->port.big_endian = of_device_is_big_endian(np); + return 0; } -- 2.1.1