@@ -367,6 +367,42 @@ static void uart_silabs_eusart_configure_peripheral(const struct device *dev, bo
367
367
}
368
368
}
369
369
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
+
370
406
static int uart_silabs_eusart_init (const struct device * dev )
371
407
{
372
408
int err ;
@@ -420,6 +456,10 @@ static DEVICE_API(uart, uart_silabs_eusart_driver_api) = {
420
456
.poll_in = uart_silabs_eusart_poll_in ,
421
457
.poll_out = uart_silabs_eusart_poll_out ,
422
458
.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
423
463
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
424
464
.fifo_fill = uart_silabs_eusart_fifo_fill ,
425
465
.fifo_read = uart_silabs_eusart_fifo_read ,
0 commit comments