Skip to content

Commit 6fc53a6

Browse files
Martinhoff-makerkartben
authored andcommitted
drivers: serial: silabs: split init in silabs eusart driver
Split of uart_silabs_eusart_init function to have better visibility of initialization. Signed-off-by: Martin Hoff <martin.hoff@silabs.com>
1 parent 3382b67 commit 6fc53a6

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

drivers/serial/uart_silabs_eusart.c

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)