Thread (5 messages) 5 messages, 3 authors, 2015-05-18

[PATCH] serial: 8250_uniphier: add UniPhier serial driver

From: matthias.bgg@gmail.com (Matthias Brugger)
Date: 2015-05-16 09:17:38
Also in: linux-serial, lkml

2015-05-15 14:26 GMT+02:00 Masahiro Yamada [off-list ref]:
quoted hunk ↗ jump to hunk
Add the driver for on-chip UART used on UniPhier SoCs.
The register map of this hardware is similar to that of 8250
(but the address for FCR, LCR is different), so it should go
into drivers/tty/serial/8250 directory.

Signed-off-by: Masahiro Yamada <redacted>
---

 drivers/tty/serial/8250/8250_uniphier.c | 243 ++++++++++++++++++++++++++++++++
 drivers/tty/serial/8250/Kconfig         |   7 +
 drivers/tty/serial/8250/Makefile        |   1 +
 3 files changed, 251 insertions(+)
 create mode 100644 drivers/tty/serial/8250/8250_uniphier.c
diff --git a/drivers/tty/serial/8250/8250_uniphier.c b/drivers/tty/serial/8250/8250_uniphier.c
new file mode 100644
index 0000000..f108d81
--- /dev/null
+++ b/drivers/tty/serial/8250/8250_uniphier.c
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/clk.h>
+#include <linux/of.h>
+#include <linux/io.h>
+#include <linux/serial_core.h>
+#include <linux/serial_reg.h>
+#include <linux/serial_8250.h>
+#include "8250.h"
+
+/*
+ * Most (but not all) of UniPhier UART devices have 64-depth FIFO.
+ * Set this value if "fifo-size" property is missing from the device tree node.
+ */
+#define UNIPHIER_UART_DEFAULT_FIFO_SIZE        64
+
+#define UNIPHIER_UART_CHAR_FCR 3       /* Character / FIFO Control Register */
+#define UNIPHIER_UART_LCR_MCR  4       /* Line/Modem Control Register */
+#define UNIPHIER_UART_DLR      9       /* Divisor Latch Register */
+
+/*
+ * The register map is slightly different from that of 8250.
+ * IO callbacks must be overridden for correct access to FCR, LCR, and MCR.
+ */
+static unsigned int uniphier_serial_in(struct uart_port *p, int offset)
+{
+       int valshift = 0;
+
+       switch (offset) {
+       case UART_LCR:
+               valshift = 8;
Please use a define for the value. Something like UNIPHIER_UART_LCR_SHIFT maybe.

Cheers,
Matthias



-- 
motzblog.wordpress.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help