diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2020-12-21 14:30:00 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-01-15 14:36:12 -0500 |
commit | 41f668b97c7ac8d519f15961b67fc52817115701 (patch) | |
tree | ec6896b66a95dd99a15810beeb404e69704b616d | |
parent | a17b38ce3902e46777322f6ec26e51b25415fa5b (diff) | |
download | u-boot-41f668b97c7ac8d519f15961b67fc52817115701.tar.gz |
console: Introduce console_start() and console_stop()
In the future we would like to stop unused consoles and
also add a reference counting to avoid imbalanced calls
to ->start() and ->stop() in some cases.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | common/console.c | 30 | ||||
-rw-r--r-- | include/console.h | 3 |
2 files changed, 26 insertions, 7 deletions
diff --git a/common/console.c b/common/console.c index e82b5d20759..5b113da9d57 100644 --- a/common/console.c +++ b/common/console.c @@ -172,13 +172,9 @@ static int console_setfile(int file, struct stdio_dev * dev) case stdin: case stdout: case stderr: - /* Start new device */ - if (dev->start) { - error = dev->start(dev); - /* If it's not started dont use it */ - if (error < 0) - break; - } + error = console_start(file, dev); + if (error) + break; /* Assign the new device (leaving the existing one started) */ stdio_devices[file] = dev; @@ -389,6 +385,26 @@ static inline void console_doenv(int file, struct stdio_dev *dev) #endif #endif /* CONIFIG_IS_ENABLED(CONSOLE_MUX) */ +int console_start(int file, struct stdio_dev *sdev) +{ + int error; + + /* Start new device */ + if (sdev->start) { + error = sdev->start(sdev); + /* If it's not started don't use it */ + if (error < 0) + return error; + } + return 0; +} + +void console_stop(int file, struct stdio_dev *sdev) +{ + if (sdev->stop) + sdev->stop(sdev); +} + /** U-Boot INITIAL CONSOLE-NOT COMPATIBLE FUNCTIONS *************************/ int serial_printf(const char *fmt, ...) diff --git a/include/console.h b/include/console.h index 432f892b6cc..58a4ec3f12a 100644 --- a/include/console.h +++ b/include/console.h @@ -8,6 +8,7 @@ #define __CONSOLE_H #include <stdbool.h> +#include <stdio_dev.h> #include <linux/errno.h> extern char console_buffer[]; @@ -15,6 +16,8 @@ extern char console_buffer[]; /* common/console.c */ int console_init_f(void); /* Before relocation; uses the serial stuff */ int console_init_r(void); /* After relocation; uses the console stuff */ +int console_start(int file, struct stdio_dev *sdev); /* Start a console device */ +void console_stop(int file, struct stdio_dev *sdev); /* Stop a console device */ int console_assign(int file, const char *devname); /* Assign the console */ int ctrlc(void); int had_ctrlc(void); /* have we had a Control-C since last clear? */ |