@@ -358,6 +358,30 @@ uart_silabs_eusart_ll2cfg_hwctrl(EUSART_HwFlowControl_TypeDef fc)
358
358
return UART_CFG_FLOW_CTRL_NONE ;
359
359
}
360
360
361
+ static void uart_silabs_eusart_configure_peripheral (const struct device * dev , bool enable )
362
+ {
363
+ const struct uart_silabs_eusart_config * config = dev -> config ;
364
+ const struct uart_silabs_eusart_data * data = dev -> data ;
365
+ const struct uart_config * uart_cfg = & data -> uart_cfg ;
366
+ EUSART_UartInit_TypeDef eusartInit = EUSART_UART_INIT_DEFAULT_HF ;
367
+ EUSART_AdvancedInit_TypeDef advancedSettings = EUSART_ADVANCED_INIT_DEFAULT ;
368
+
369
+ eusartInit .baudrate = uart_cfg -> baudrate ;
370
+ eusartInit .parity = uart_silabs_eusart_cfg2ll_parity (uart_cfg -> parity );
371
+ eusartInit .stopbits = uart_silabs_eusart_cfg2ll_stopbits (uart_cfg -> stop_bits );
372
+ eusartInit .databits =
373
+ uart_silabs_eusart_cfg2ll_databits (uart_cfg -> data_bits , uart_cfg -> parity );
374
+ advancedSettings .hwFlowControl = uart_silabs_eusart_cfg2ll_hwctrl (uart_cfg -> flow_ctrl );
375
+ eusartInit .advancedSettings = & advancedSettings ;
376
+ eusartInit .enable = eusartDisable ;
377
+
378
+ EUSART_UartInitHf (config -> eusart , & eusartInit );
379
+
380
+ if (enable ) {
381
+ EUSART_Enable (config -> eusart , eusartEnable );
382
+ }
383
+ }
384
+
361
385
/**
362
386
* @brief Main initializer for UART
363
387
*
@@ -368,11 +392,6 @@ static int uart_silabs_eusart_init(const struct device *dev)
368
392
{
369
393
int err ;
370
394
const struct uart_silabs_eusart_config * config = dev -> config ;
371
- struct uart_silabs_eusart_data * data = dev -> data ;
372
- struct uart_config * uart_cfg = & data -> uart_cfg ;
373
-
374
- EUSART_UartInit_TypeDef eusartInit = EUSART_UART_INIT_DEFAULT_HF ;
375
- EUSART_AdvancedInit_TypeDef advancedSettings = EUSART_ADVANCED_INIT_DEFAULT ;
376
395
377
396
/* The peripheral and gpio clock are already enabled from soc and gpio driver */
378
397
/* Enable EUSART clock */
@@ -386,16 +405,7 @@ static int uart_silabs_eusart_init(const struct device *dev)
386
405
return err ;
387
406
}
388
407
389
- /* Init EUSART */
390
- eusartInit .baudrate = uart_cfg -> baudrate ;
391
- eusartInit .parity = uart_silabs_eusart_cfg2ll_parity (uart_cfg -> parity );
392
- eusartInit .stopbits = uart_silabs_eusart_cfg2ll_stopbits (uart_cfg -> stop_bits );
393
- eusartInit .databits =
394
- uart_silabs_eusart_cfg2ll_databits (uart_cfg -> data_bits , uart_cfg -> parity );
395
- advancedSettings .hwFlowControl = uart_silabs_eusart_cfg2ll_hwctrl (uart_cfg -> flow_ctrl );
396
- eusartInit .advancedSettings = & advancedSettings ;
397
-
398
- EUSART_UartInitHf (config -> eusart , & eusartInit );
408
+ uart_silabs_eusart_configure_peripheral (dev , true);
399
409
400
410
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
401
411
config -> irq_config_func (dev );
0 commit comments