[U-Boot] [PATCH 3/3] dm: console: Check for serial devices properly
Simon Glass
sjg at chromium.org
Thu Jul 27 15:31:04 UTC 2017
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 at chromium.org>
---
common/console.c | 11 ++++++++++-
drivers/serial/serial-uclass.c | 2 +-
include/stdio_dev.h | 1 +
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/common/console.c b/common/console.c
index 80401acf5b..e9164d7c9d 100644
--- a/common/console.c
+++ b/common/console.c
@@ -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;
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index f360534683..db51863598 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -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;
diff --git a/include/stdio_dev.h b/include/stdio_dev.h
index e4fc8b138b..3164fa2a55 100644
--- a/include/stdio_dev.h
+++ b/include/stdio_dev.h
@@ -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 {
--
2.14.0.rc0.400.g1c36432dff-goog
More information about the U-Boot
mailing list