]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
serial: stm32: fix uart enable management
authorAlexandre TORGUE <alexandre.torgue@st.com>
Thu, 15 Sep 2016 16:42:42 +0000 (18:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Sep 2016 09:48:56 +0000 (11:48 +0200)
Signed-off-by: Gerald Baeza <gerald.baeza@st.com>
Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/stm32-usart.c

index 3b99d790fb3fdba15d120f3791efd418691833d4..4d3001b77e7ee344d25c27b8af0f99065dc4869d 100644 (file)
@@ -461,9 +461,11 @@ static void stm32_shutdown(struct uart_port *port)
 {
        struct stm32_port *stm32_port = to_stm32_port(port);
        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
+       struct stm32_usart_config *cfg = &stm32_port->info->cfg;
        u32 val;
 
        val = USART_CR1_TXEIE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
+       val |= BIT(cfg->uart_enable_bit);
        stm32_clr_bits(port, ofs->cr1, val);
 
        free_irq(port->irq, port);
@@ -923,6 +925,7 @@ static void stm32_console_write(struct console *co, const char *s, unsigned cnt)
        struct uart_port *port = &stm32_ports[co->index].port;
        struct stm32_port *stm32_port = to_stm32_port(port);
        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
+       struct stm32_usart_config *cfg = &stm32_port->info->cfg;
        unsigned long flags;
        u32 old_cr1, new_cr1;
        int locked = 1;
@@ -935,9 +938,10 @@ static void stm32_console_write(struct console *co, const char *s, unsigned cnt)
        else
                spin_lock(&port->lock);
 
-       /* Save and disable interrupts */
+       /* Save and disable interrupts, enable the transmitter */
        old_cr1 = readl_relaxed(port->membase + ofs->cr1);
        new_cr1 = old_cr1 & ~USART_CR1_IE_MASK;
+       new_cr1 |=  USART_CR1_TE | BIT(cfg->uart_enable_bit);
        writel_relaxed(new_cr1, port->membase + ofs->cr1);
 
        uart_console_write(port, s, cnt, stm32_console_putchar);