Skip to content

Commit a138954

Browse files
Martinhoff-makerkartben
authored andcommitted
drivers: serial: silabs: introduce silabs eusart runtime configure
Introduce runtime configuration API for the silabs eusart driver. Signed-off-by: Martin Hoff <martin.hoff@silabs.com>
1 parent 02c8d02 commit a138954

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

drivers/serial/uart_silabs_eusart.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,42 @@ static void uart_silabs_eusart_configure_peripheral(const struct device *dev, bo
367367
}
368368
}
369369

370+
#ifdef CONFIG_UART_USE_RUNTIME_CONFIGURE
371+
static int uart_silabs_eusart_configure(const struct device *dev, const struct uart_config *cfg)
372+
{
373+
const struct uart_silabs_eusart_config *config = dev->config;
374+
struct uart_silabs_eusart_data *data = dev->data;
375+
struct uart_config *uart_cfg = &data->uart_cfg;
376+
EUSART_TypeDef *eusart = config->eusart;
377+
378+
if (cfg->parity == UART_CFG_PARITY_MARK || cfg->parity == UART_CFG_PARITY_SPACE) {
379+
return -ENOSYS;
380+
}
381+
382+
if (cfg->flow_ctrl == UART_CFG_FLOW_CTRL_DTR_DSR ||
383+
cfg->flow_ctrl == UART_CFG_FLOW_CTRL_RS485) {
384+
return -ENOSYS;
385+
}
386+
387+
*uart_cfg = *cfg;
388+
389+
EUSART_Enable(eusart, eusartDisable);
390+
uart_silabs_eusart_configure_peripheral(dev, true);
391+
392+
return 0;
393+
};
394+
395+
static int uart_silabs_eusart_config_get(const struct device *dev, struct uart_config *cfg)
396+
{
397+
struct uart_silabs_eusart_data *data = dev->data;
398+
struct uart_config *uart_cfg = &data->uart_cfg;
399+
400+
*cfg = *uart_cfg;
401+
402+
return 0;
403+
}
404+
#endif /* CONFIG_UART_USE_RUNTIME_CONFIGURE */
405+
370406
static int uart_silabs_eusart_init(const struct device *dev)
371407
{
372408
int err;
@@ -420,6 +456,10 @@ static DEVICE_API(uart, uart_silabs_eusart_driver_api) = {
420456
.poll_in = uart_silabs_eusart_poll_in,
421457
.poll_out = uart_silabs_eusart_poll_out,
422458
.err_check = uart_silabs_eusart_err_check,
459+
#ifdef CONFIG_UART_USE_RUNTIME_CONFIGURE
460+
.configure = uart_silabs_eusart_configure,
461+
.config_get = uart_silabs_eusart_config_get,
462+
#endif
423463
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
424464
.fifo_fill = uart_silabs_eusart_fifo_fill,
425465
.fifo_read = uart_silabs_eusart_fifo_read,

0 commit comments

Comments
 (0)