There is no need to call ->start() for already started device. All the same, there is no need to call ->stop() for devices still in use.
For now enforce this only for CONSOLE_MUX case. Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com> --- v2: new patch common/console.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/common/console.c b/common/console.c index 1efbcc7672ce..b051c24e7389 100644 --- a/common/console.c +++ b/common/console.c @@ -174,6 +174,16 @@ static struct stdio_dev *tstcdev; struct stdio_dev **console_devices[MAX_FILES]; int cd_count[MAX_FILES]; +static bool console_needs_handle(int file, struct stdio_dev *dev) +{ + int i; + + for (i = 0; i < cd_count[file]; i++) + if (console_devices[file][i] == dev) + return false; + return true; +} + /* * This depends on tstc() always being called before getchar(). * This is guaranteed to be true because this routine is called @@ -272,6 +282,11 @@ static inline void console_doenv(int file, struct stdio_dev *dev) } #endif #else +static inline bool console_needs_handle(int file, struct stdio_dev *dev) +{ + return true; +} + static inline int console_getc(int file) { return stdio_devices[file]->getc(stdio_devices[file]); @@ -310,6 +325,9 @@ int console_start(int file, struct stdio_dev *dev) { int error; + if (!console_needs_handle(file, dev)) + return 0; + /* Start new device */ if (dev->start) { error = dev->start(dev); @@ -322,6 +340,9 @@ int console_start(int file, struct stdio_dev *dev) void console_stop(int file, struct stdio_dev *dev) { + if (!console_needs_handle(file, dev)) + return; + if (dev->stop) dev->stop(dev); } -- 2.29.2