@@ -53,7 +53,6 @@ struct uart_silabs_config {
53
53
54
54
enum uart_silabs_pm_lock {
55
55
UART_SILABS_PM_LOCK_TX ,
56
- UART_SILABS_PM_LOCK_TX_POLL ,
57
56
UART_SILABS_PM_LOCK_RX ,
58
57
UART_SILABS_PM_LOCK_COUNT ,
59
58
};
@@ -88,7 +87,8 @@ static int uart_silabs_pm_action(const struct device *dev, enum pm_device_action
88
87
*
89
88
* @return true if lock was taken, false otherwise
90
89
*/
91
- static bool uart_silabs_pm_lock_get (const struct device * dev , enum uart_silabs_pm_lock lock )
90
+ static __maybe_unused bool uart_silabs_pm_lock_get (const struct device * dev ,
91
+ enum uart_silabs_pm_lock lock )
92
92
{
93
93
#ifdef CONFIG_PM
94
94
struct uart_silabs_data * data = dev -> data ;
@@ -114,7 +114,8 @@ static bool uart_silabs_pm_lock_get(const struct device *dev, enum uart_silabs_p
114
114
*
115
115
* @return true if lock was released, false otherwise
116
116
*/
117
- static bool uart_silabs_pm_lock_put (const struct device * dev , enum uart_silabs_pm_lock lock )
117
+ static __maybe_unused bool uart_silabs_pm_lock_put (const struct device * dev ,
118
+ enum uart_silabs_pm_lock lock )
118
119
{
119
120
#ifdef CONFIG_PM
120
121
struct uart_silabs_data * data = dev -> data ;
@@ -149,11 +150,13 @@ static void uart_silabs_poll_out(const struct device *dev, unsigned char c)
149
150
{
150
151
const struct uart_silabs_config * config = dev -> config ;
151
152
152
- if (uart_silabs_pm_lock_get (dev , UART_SILABS_PM_LOCK_TX_POLL )) {
153
- USART_IntEnable (config -> base , USART_IF_TXC );
154
- }
155
-
153
+ /* USART_Tx function already waits for the transmit buffer being empty
154
+ * and waits for the bus to be free to transmit.
155
+ */
156
156
USART_Tx (config -> base , c );
157
+
158
+ while (!(config -> base -> STATUS & USART_STATUS_TXC )) {
159
+ }
157
160
}
158
161
159
162
static int uart_silabs_err_check (const struct device * dev )
@@ -746,19 +749,12 @@ static int uart_silabs_async_init(const struct device *dev)
746
749
static void uart_silabs_isr (const struct device * dev )
747
750
{
748
751
__maybe_unused struct uart_silabs_data * data = dev -> data ;
752
+ #ifdef CONFIG_UART_SILABS_USART_ASYNC
749
753
const struct uart_silabs_config * config = dev -> config ;
750
754
USART_TypeDef * usart = config -> base ;
751
755
uint32_t flags = USART_IntGet (usart );
752
- #ifdef CONFIG_UART_SILABS_USART_ASYNC
753
756
struct dma_status stat ;
754
757
#endif
755
-
756
- if (flags & USART_IF_TXC ) {
757
- if (uart_silabs_pm_lock_put (dev , UART_SILABS_PM_LOCK_TX_POLL )) {
758
- USART_IntDisable (usart , USART_IEN_TXC );
759
- USART_IntClear (usart , USART_IF_TXC );
760
- }
761
- }
762
758
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
763
759
if (data -> callback ) {
764
760
data -> callback (dev , data -> cb_data );
0 commit comments