diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index f28035a..246fc3d 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -68,11 +68,14 @@ lpuart_enable(lpuart, false); - lpuart_setbrg(lpuart->base, - clk_get_rate(lpuart->clk), - baudrate); - - lpuart_enable(lpuart, true); + /* + * We treat baudrate of 0 as a request to disable UART + */ + if (baudrate) { + lpuart_setbrg(lpuart->base, clk_get_rate(lpuart->clk), + baudrate); + lpuart_enable(lpuart, true); + } lpuart->baudrate = baudrate; diff --git a/include/serial/lpuart.h b/include/serial/lpuart.h index a920291..9c6e271 100644 --- a/include/serial/lpuart.h +++ b/include/serial/lpuart.h @@ -228,6 +228,8 @@ unsigned int bfra; u16 sbr; + BUG_ON(!baudrate); + sbr = (u16) (refclock / (16 * baudrate)); writeb(sbr >> 8, base + UARTBDH);