dm: console: Check for serial devices properly
authorSimon Glass <sjg@chromium.org>
Thu, 27 Jul 2017 15:31:04 +0000 (09:31 -0600)
committerTom Rini <trini@konsulko.com>
Mon, 31 Jul 2017 16:21:40 +0000 (12:21 -0400)
With driver model the serial device is often not called "serial". Mark
driver-model stdio devices so that they can be detected and we can look up
the uclass. This is a more reliable way of finding out whether the console
is connected to a serial device or not.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/console.c
drivers/serial/serial-uclass.c
include/stdio_dev.h

index b7ed9a3..ec4af3b 100644 (file)
@@ -8,6 +8,7 @@
 #include <common.h>
 #include <console.h>
 #include <debug_uart.h>
+#include <dm.h>
 #include <stdarg.h>
 #include <iomux.h>
 #include <malloc.h>
@@ -150,12 +151,20 @@ static int console_setfile(int file, struct stdio_dev * dev)
  * console_dev_is_serial() - Check if a stdio device is a serial device
  *
  * @sdev: Device to check
- * @return true if this device is a serial device
+ * @return true if this device is in the serial uclass (or for pre-driver-model,
+ * whether it is called "serial".
  */
 static bool console_dev_is_serial(struct stdio_dev *sdev)
 {
        bool is_serial;
 
+#ifdef CONFIG_DM_SERIAL
+       if (sdev->flags & DEV_FLAGS_DM) {
+               struct udevice *dev = sdev->priv;
+
+               is_serial = device_get_uclass_id(dev) == UCLASS_SERIAL;
+       } else
+#endif
        is_serial = !strcmp(sdev->name, "serial");
 
        return is_serial;
index 9cae9fb..998d372 100644 (file)
@@ -353,7 +353,7 @@ static int serial_post_probe(struct udevice *dev)
        memset(&sdev, '\0', sizeof(sdev));
 
        strncpy(sdev.name, dev->name, sizeof(sdev.name));
-       sdev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT;
+       sdev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_DM;
        sdev.priv = dev;
        sdev.putc = serial_stub_putc;
        sdev.puts = serial_stub_puts;
index e4fc8b1..3164fa2 100644 (file)
@@ -16,6 +16,7 @@
 
 #define DEV_FLAGS_INPUT         0x00000001     /* Device can be used as input  console */
 #define DEV_FLAGS_OUTPUT 0x00000002    /* Device can be used as output console */
+#define DEV_FLAGS_DM     0x00000004    /* Device priv is a struct udevice * */
 
 /* Device information */
 struct stdio_dev {