This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 0a70235b0c6dcd629fc42959debaa7518d1d6a0f
Author: ligd <[email protected]>
AuthorDate: Mon Mar 25 12:35:12 2024 +0800

    serial/pl011: fix can't up_putc() after setup
    
    Signed-off-by: ligd <[email protected]>
---
 drivers/serial/uart_pl011.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/serial/uart_pl011.c b/drivers/serial/uart_pl011.c
index 3325568e93..3e78253f44 100644
--- a/drivers/serial/uart_pl011.c
+++ b/drivers/serial/uart_pl011.c
@@ -666,6 +666,16 @@ static void pl011_send(FAR struct uart_dev_s *dev, int ch)
   config->uart->dr = ch;
 }
 
+static void pl011_putc(struct uart_dev_s *dev, int ch)
+{
+  irqstate_t flags;
+
+  flags = spin_lock_irqsave(NULL);
+  while (!pl011_txempty(dev));
+  pl011_send(dev, ch);
+  spin_unlock_irqrestore(NULL, flags);
+}
+
 /***************************************************************************
  * Name: pl011_rxavailable
  *
@@ -986,6 +996,7 @@ static int pl011_setup(FAR struct uart_dev_s *dev)
     }
 
   up_irq_restore(i_flags);
+  pl011_enable(sport);
 
   return 0;
 }
@@ -1060,10 +1071,10 @@ int up_putc(int ch)
     {
       /* Add CR */
 
-      pl011_send(dev, '\r');
+      pl011_putc(dev, '\r');
     }
 
-  pl011_send(dev, ch);
+  pl011_putc(dev, ch);
 
   return ch;
 }

Reply via email to