Merge branch 'master' of git://git.denx.de/u-boot-net
[platform/kernel/u-boot.git] / drivers / serial / sandbox.c
index cd2f91e..4a05ea4 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2011 The Chromium OS Authors.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
  */
 
 #include <common.h>
+#include <console.h>
 #include <dm.h>
 #include <fdtdec.h>
 #include <lcd.h>
 #include <os.h>
 #include <serial.h>
+#include <video.h>
 #include <linux/compiler.h>
 #include <asm/state.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+
 /*
  *
  *   serial_buf: A buffer that holds keyboard characters for the
- *              Sandbox U-boot.
+ *              Sandbox U-Boot.
  *
  * invariants:
  *   serial_buf_write           == serial_buf_read -> empty buffer
@@ -69,6 +72,9 @@ static int sandbox_serial_probe(struct udevice *dev)
                os_tty_raw(0, state->term_raw == STATE_TERM_RAW_WITH_SIGS);
        priv->start_of_line = 0;
 
+       if (state->term_raw != STATE_TERM_RAW)
+               disable_ctrlc(1);
+
        return 0;
 }
 
@@ -114,13 +120,13 @@ static int sandbox_serial_pending(struct udevice *dev, bool input)
                return 0;
 
        os_usleep(100);
-#ifdef CONFIG_LCD
-       lcd_sync();
+#ifndef CONFIG_SPL_BUILD
+       video_sync_all();
 #endif
        if (next_index == serial_buf_read)
                return 1;       /* buffer full */
 
-       count = os_read_no_block(0, &serial_buf[serial_buf_write], 1);
+       count = os_read(0, &serial_buf[serial_buf_write], 1);
        if (count == 1)
                serial_buf_write = next_index;
 
@@ -138,7 +144,39 @@ static int sandbox_serial_getc(struct udevice *dev)
        serial_buf_read = increment_buffer_index(serial_buf_read);
        return result;
 }
+#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
+
+#ifdef CONFIG_DEBUG_UART_SANDBOX
+
+#include <debug_uart.h>
+
+static inline void _debug_uart_init(void)
+{
+}
+
+static inline void _debug_uart_putc(int ch)
+{
+       os_putc(ch);
+}
+
+DEBUG_UART_FUNCS
+
+#endif /* CONFIG_DEBUG_UART_SANDBOX */
+
+static int sandbox_serial_setconfig(struct udevice *dev, uint serial_config)
+{
+       u8 parity = SERIAL_GET_PARITY(serial_config);
+       u8 bits = SERIAL_GET_BITS(serial_config);
+       u8 stop = SERIAL_GET_STOP(serial_config);
+
+       if (bits != SERIAL_8_BITS || stop != SERIAL_ONE_STOP ||
+           parity != SERIAL_PAR_NONE)
+               return -ENOTSUPP; /* not supported in driver*/
+
+       return 0;
+}
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
 static const char * const ansi_colour[] = {
        "black", "red", "green", "yellow", "blue", "megenta", "cyan",
        "white",
@@ -151,7 +189,7 @@ static int sandbox_serial_ofdata_to_platdata(struct udevice *dev)
        int i;
 
        plat->colour = -1;
-       colour = fdt_getprop(gd->fdt_blob, dev->of_offset,
+       colour = fdt_getprop(gd->fdt_blob, dev_of_offset(dev),
                             "sandbox,text-colour", NULL);
        if (colour) {
                for (i = 0; i < ARRAY_SIZE(ansi_colour); i++) {
@@ -169,6 +207,7 @@ static const struct dm_serial_ops sandbox_serial_ops = {
        .putc = sandbox_serial_putc,
        .pending = sandbox_serial_pending,
        .getc = sandbox_serial_getc,
+       .setconfig = sandbox_serial_setconfig,
 };
 
 static const struct udevice_id sandbox_serial_ids[] = {
@@ -197,3 +236,4 @@ U_BOOT_DEVICE(serial_sandbox_non_fdt) = {
        .name = "serial_sandbox",
        .platdata = &platdata_non_fdt,
 };
+#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */