@@ -358,6 +358,30 @@ uart_silabs_eusart_ll2cfg_hwctrl(EUSART_HwFlowControl_TypeDef fc)
358358 return UART_CFG_FLOW_CTRL_NONE ;
359359}
360360
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+
361385/**
362386 * @brief Main initializer for UART
363387 *
@@ -368,11 +392,6 @@ static int uart_silabs_eusart_init(const struct device *dev)
368392{
369393 int err ;
370394 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 ;
376395
377396 /* The peripheral and gpio clock are already enabled from soc and gpio driver */
378397 /* Enable EUSART clock */
@@ -386,16 +405,7 @@ static int uart_silabs_eusart_init(const struct device *dev)
386405 return err ;
387406 }
388407
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);
399409
400410#ifdef CONFIG_UART_INTERRUPT_DRIVEN
401411 config -> irq_config_func (dev );
0 commit comments