|
1 | 1 | /*
|
2 |
| - * Copyright 2017,2021,2023-2024 NXP |
| 2 | + * Copyright 2017,2021,2023-2025 NXP |
3 | 3 | * Copyright (c) 2020 Softube
|
4 | 4 | *
|
5 | 5 | * SPDX-License-Identifier: Apache-2.0
|
@@ -1179,6 +1179,40 @@ static int mcux_lpuart_configure(const struct device *dev,
|
1179 | 1179 | }
|
1180 | 1180 | #endif /* CONFIG_UART_USE_RUNTIME_CONFIGURE */
|
1181 | 1181 |
|
| 1182 | +#if CONFIG_UART_LINE_CTRL && \ |
| 1183 | + defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT |
| 1184 | +static int mcux_lpuart_line_ctrl_set(const struct device *dev, |
| 1185 | + uint32_t ctrl, uint32_t val) |
| 1186 | +{ |
| 1187 | + const struct mcux_lpuart_config *config = dev->config; |
| 1188 | + int ret = 0; |
| 1189 | + |
| 1190 | + switch (ctrl) { |
| 1191 | + case UART_LINE_CTRL_RTS: |
| 1192 | + /* Disable Transmitter and Receiver */ |
| 1193 | + config->base->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK); |
| 1194 | + |
| 1195 | + if (val >= 1U) { |
| 1196 | + /* Reset TXRTS to set RXRTSE bit, this provides high-level on RTS line */ |
| 1197 | + config->base->MODIR &= ~(LPUART_MODIR_TXRTSPOL_MASK | |
| 1198 | + LPUART_MODIR_TXRTSE_MASK); |
| 1199 | + config->base->MODIR |= LPUART_MODIR_RXRTSE_MASK; |
| 1200 | + } else { |
| 1201 | + /* Set TXRTSE to reset RXRTSE bit,this provide low-level on RTS line*/ |
| 1202 | + config->base->MODIR &= ~(LPUART_MODIR_RXRTSE_MASK); |
| 1203 | + config->base->MODIR |= (LPUART_MODIR_TXRTSPOL_MASK | |
| 1204 | + LPUART_MODIR_TXRTSE_MASK); |
| 1205 | + } |
| 1206 | + break; |
| 1207 | + |
| 1208 | + default: |
| 1209 | + ret = -ENODEV; |
| 1210 | + } |
| 1211 | + |
| 1212 | + return ret; |
| 1213 | +} |
| 1214 | +#endif /* CONFIG_UART_LINE_CTRL */ |
| 1215 | + |
1182 | 1216 | static int mcux_lpuart_init(const struct device *dev)
|
1183 | 1217 | {
|
1184 | 1218 | const struct mcux_lpuart_config *config = dev->config;
|
@@ -1257,6 +1291,10 @@ static DEVICE_API(uart, mcux_lpuart_driver_api) = {
|
1257 | 1291 | .rx_buf_rsp = mcux_lpuart_rx_buf_rsp,
|
1258 | 1292 | .rx_disable = mcux_lpuart_rx_disable,
|
1259 | 1293 | #endif /* CONFIG_UART_ASYNC_API */
|
| 1294 | +#if CONFIG_UART_LINE_CTRL && \ |
| 1295 | + defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT |
| 1296 | + .line_ctrl_set = mcux_lpuart_line_ctrl_set, |
| 1297 | +#endif /* CONFIG_UART_LINE_CTRL */ |
1260 | 1298 | };
|
1261 | 1299 |
|
1262 | 1300 |
|
|
0 commit comments