@@ -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+
370406static 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