Signed-off-by: Antony Pavlov <[email protected]>
---
 drivers/serial/serial_ns16550.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
index aa0992f..7130871 100644
--- a/drivers/serial/serial_ns16550.c
+++ b/drivers/serial/serial_ns16550.c
@@ -257,6 +257,30 @@ static __maybe_unused struct ns16550_drvdata omap_drvdata 
= {
        .linux_console_name = "ttyO",
 };
 
+#define JZ_UART_SHIFT  2
+
+static void jz_serial_reg_write(unsigned int val, unsigned long base,
+       unsigned char reg_offset)
+{
+       switch (reg_offset) {
+       case (fcr << JZ_UART_SHIFT):
+               val |= 0x10; /* Enable uart module */
+               break;
+       case (ier << JZ_UART_SHIFT):
+               val |= (val & 0x4) << 2;
+               break;
+       default:
+               break;
+       }
+
+       writeb(val & 0xff, (void *)(base + reg_offset));
+}
+
+static __maybe_unused struct ns16550_drvdata jz_drvdata = {
+       .init_port = ns16550_serial_init_port,
+       .reg_write = jz_serial_reg_write,
+};
+
 /**
  * @brief Probe entry point -called on the first match for device
  *
@@ -351,6 +375,12 @@ static struct of_device_id ns16550_serial_dt_ids[] = {
                .data = (unsigned long)&omap_drvdata,
        },
 #endif
+#if IS_ENABLED(CONFIG_MACH_MIPS_XBURST)
+       {
+               .compatible = "ingenic,jz4740-uart",
+               .data = (unsigned long)&jz_drvdata,
+       },
+#endif
        {
                /* sentinel */
        },
-- 
1.9.0


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to