debug_uart: Support board-specific UART initialisation

Some boards need to set things up before the debug UART can be used. On
these boards a call to debug_uart_init() is insufficient. When this option
is enabled, the function board_debug_uart_init() will be called when
debug_uart_init() is called. You can put any code here that is needed to
set up the UART ready for use, such as set pin multiplexing or enable
clocks.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2015-10-18 19:51:24 -06:00
parent 97b0597302
commit 0e977bc145
2 changed files with 25 additions and 0 deletions

View file

@ -109,6 +109,17 @@ config DEBUG_UART_SHIFT
value. Use this value to specify the shift to use, where 0=byte value. Use this value to specify the shift to use, where 0=byte
registers, 2=32-bit word registers, etc. registers, 2=32-bit word registers, etc.
config DEBUG_UART_BOARD_INIT
bool "Enable board-specific debug UART init"
depends on DEBUG_UART
help
Some boards need to set things up before the debug UART can be used.
On these boards a call to debug_uart_init() is insufficient. When
this option is enabled, the function board_debug_uart_init() will
be called when debug_uart_init() is called. You can put any code
here that is needed to set up the UART ready for use, such as set
pin multiplexing or enable clocks.
config ROCKCHIP_SERIAL config ROCKCHIP_SERIAL
bool "Rockchip on-chip UART support" bool "Rockchip on-chip UART support"
depends on ARCH_ROCKCHIP && DM_SERIAL depends on ARCH_ROCKCHIP && DM_SERIAL

View file

@ -42,6 +42,11 @@
* - Define _debug_uart_putc() as static inline (avoiding stack usage) * - Define _debug_uart_putc() as static inline (avoiding stack usage)
* - Immediately afterwards, add DEBUG_UART_FUNCS to define the rest of the * - Immediately afterwards, add DEBUG_UART_FUNCS to define the rest of the
* functionality (printch(), etc.) * functionality (printch(), etc.)
*
* If your board needs additional init for the UART to work, enable
* CONFIG_DEBUG_UART_BOARD_INIT and write a function called
* board_debug_uart_init() to perform that init. When debug_uart_init() is
* called, the init will happen automatically.
*/ */
/** /**
@ -57,6 +62,14 @@
*/ */
void debug_uart_init(void); void debug_uart_init(void);
#ifdef CONFIG_DEBUG_UART_BOARD_INIT
void board_debug_uart_init(void);
#else
static inline void board_debug_uart_init(void)
{
}
#endif
/** /**
* printch() - Output a character to the debug UART * printch() - Output a character to the debug UART
* *
@ -136,6 +149,7 @@ void printhex8(uint value);
\ \
void debug_uart_init(void) \ void debug_uart_init(void) \
{ \ { \
board_debug_uart_init(); \
_debug_uart_init(); \ _debug_uart_init(); \
} \ } \