1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 #include "uart.h"
22 #include "mxc_device.h"
23 #include "mxc_pins.h"
24 #include "mxc_assert.h"
25 #include "uart_revb.h"
26 #include "uart_common.h"
27 #include "lpgcr_regs.h"
28 #include "dma.h"
29 
MXC_UART_DMACallback(int ch,int error)30 void MXC_UART_DMACallback(int ch, int error)
31 {
32     MXC_UART_RevB_DMACallback(ch, error);
33 }
34 
MXC_UART_AsyncCallback(mxc_uart_regs_t * uart,int retVal)35 int MXC_UART_AsyncCallback(mxc_uart_regs_t *uart, int retVal)
36 {
37     return MXC_UART_RevB_AsyncCallback((mxc_uart_revb_regs_t *)uart, retVal);
38 }
39 
MXC_UART_AsyncStop(mxc_uart_regs_t * uart)40 int MXC_UART_AsyncStop(mxc_uart_regs_t *uart)
41 {
42     return MXC_UART_RevB_AsyncStop((mxc_uart_revb_regs_t *)uart);
43 }
44 
MXC_UART_Init(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)45 int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
46 {
47 #ifndef MSDK_NO_GPIO_CLK_INIT
48     int retval;
49 
50     retval = MXC_UART_Shutdown(uart);
51 
52     if (retval) {
53         return retval;
54     }
55 
56     switch (clock) {
57 #if TARGET_NUM != 32680
58     case MXC_UART_ERTCO_CLK:
59         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO);
60         break;
61 #endif
62 
63     case MXC_UART_IBRO_CLK:
64         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO);
65         break;
66 
67     default:
68         break;
69     }
70 
71     switch (MXC_UART_GET_IDX(uart)) {
72     case 0:
73         MXC_GPIO_Config(&gpio_cfg_uart0);
74         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART0);
75         break;
76 
77     case 1:
78         MXC_GPIO_Config(&gpio_cfg_uart1);
79         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART1);
80         break;
81 
82     case 2:
83         MXC_GPIO_Config(&gpio_cfg_uart2);
84         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART2);
85         break;
86 
87     case 3:
88         MXC_GPIO_Config(&gpio_cfg_uart3);
89         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART3);
90         break;
91 
92     default:
93         return E_BAD_PARAM;
94     }
95 #endif // MSDK_NO_GPIO_CLK_INIT
96 
97     return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, clock);
98 }
99 
MXC_UART_Shutdown(mxc_uart_regs_t * uart)100 int MXC_UART_Shutdown(mxc_uart_regs_t *uart)
101 {
102     switch (MXC_UART_GET_IDX(uart)) {
103     case 0:
104         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART0);
105         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART0);
106         break;
107 
108     case 1:
109         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART1);
110         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART1);
111         break;
112 
113     case 2:
114         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART2);
115         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART2);
116         break;
117 
118     case 3:
119         MXC_SYS_Reset_Periph(MXC_SYS_RESET_UART3);
120         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART3);
121         break;
122 
123     default:
124         return E_BAD_PARAM;
125     }
126 
127     return E_NO_ERROR;
128 }
129 
MXC_UART_ReadyForSleep(mxc_uart_regs_t * uart)130 int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart)
131 {
132     return MXC_UART_RevB_ReadyForSleep((mxc_uart_revb_regs_t *)uart);
133 }
134 
MXC_UART_SetFrequency(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)135 int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
136 {
137     int freq;
138     unsigned mod = 0;
139     unsigned clkDiv = 0;
140 
141     if (MXC_UART_GET_IDX(uart) < 0) {
142         return E_BAD_PARAM;
143     }
144 
145     // check if the uart is LPUART
146     if (uart == MXC_UART3) {
147         // OSR default value
148         uart->osr = 5;
149 
150         switch (clock) {
151         case MXC_UART_IBRO_CLK:
152             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK;
153             clkDiv = ((IBRO_FREQ) / baud);
154             mod = ((IBRO_FREQ) % baud);
155             break;
156 
157         case MXC_UART_ERTCO_CLK:
158             // Only supports up to 9600 baud with ERTCO clock.
159             if (baud > 9600) {
160                 return E_NOT_SUPPORTED;
161             }
162 
163             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK;
164             uart->ctrl |= MXC_F_UART_CTRL_FDM;
165             if (baud == 9600) {
166                 clkDiv = 7;
167                 mod = 0;
168             } else {
169                 clkDiv = ((ERTCO_FREQ * 2) / baud);
170                 mod = ((ERTCO_FREQ * 2) % baud);
171             }
172 
173             if (baud > 2400) {
174                 uart->osr = 0;
175             } else {
176                 uart->osr = 1;
177             }
178             break;
179 
180         default:
181             return E_BAD_PARAM;
182         }
183 
184         if (!clkDiv || mod > (baud / 2)) {
185             clkDiv++;
186         }
187         uart->clkdiv = clkDiv;
188 
189         freq = MXC_UART_GetFrequency(uart);
190     } else {
191         if (clock == MXC_UART_ERTCO_CLK) {
192             return E_BAD_PARAM;
193         }
194 
195         freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, clock);
196     }
197 
198     if (freq > 0) {
199         // Enable baud clock and wait for it to become ready.
200         uart->ctrl |= MXC_F_UART_CTRL_BCLKEN;
201         while (((uart->ctrl & MXC_F_UART_CTRL_BCLKRDY) >> MXC_F_UART_CTRL_BCLKRDY_POS) == 0) {}
202     }
203 
204     return freq;
205 }
206 
MXC_UART_GetFrequency(mxc_uart_regs_t * uart)207 int MXC_UART_GetFrequency(mxc_uart_regs_t *uart)
208 {
209     int periphClock = 0;
210 
211     if (MXC_UART_GET_IDX(uart) < 0) {
212         return E_BAD_PARAM;
213     }
214 
215     // check if UART is LP UART
216     if (uart == MXC_UART3) {
217         if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) ==
218             MXC_S_UART_REVB_CTRL_BCLKSRC_PERIPHERAL_CLOCK) {
219             periphClock = IBRO_FREQ;
220         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) ==
221                    MXC_S_UART_REVB_CTRL_BCLKSRC_EXTERNAL_CLOCK) {
222             periphClock = ERTCO_FREQ * 2;
223         } else {
224             return E_NOT_SUPPORTED;
225         }
226         return (periphClock / uart->clkdiv);
227     } else {
228         return MXC_UART_RevB_GetFrequency((mxc_uart_revb_regs_t *)uart);
229     }
230 }
231 
MXC_UART_SetDataSize(mxc_uart_regs_t * uart,int dataSize)232 int MXC_UART_SetDataSize(mxc_uart_regs_t *uart, int dataSize)
233 {
234     return MXC_UART_RevB_SetDataSize((mxc_uart_revb_regs_t *)uart, dataSize);
235 }
236 
MXC_UART_SetStopBits(mxc_uart_regs_t * uart,mxc_uart_stop_t stopBits)237 int MXC_UART_SetStopBits(mxc_uart_regs_t *uart, mxc_uart_stop_t stopBits)
238 {
239     return MXC_UART_RevB_SetStopBits((mxc_uart_revb_regs_t *)uart, stopBits);
240 }
241 
MXC_UART_SetParity(mxc_uart_regs_t * uart,mxc_uart_parity_t parity)242 int MXC_UART_SetParity(mxc_uart_regs_t *uart, mxc_uart_parity_t parity)
243 {
244     return MXC_UART_RevB_SetParity((mxc_uart_revb_regs_t *)uart, parity);
245 }
246 
MXC_UART_SetFlowCtrl(mxc_uart_regs_t * uart,mxc_uart_flow_t flowCtrl,int rtsThreshold)247 int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rtsThreshold)
248 {
249     if (flowCtrl == MXC_UART_FLOW_EN) {
250         switch (MXC_UART_GET_IDX(uart)) {
251         case 0:
252             MXC_GPIO_Config(&gpio_cfg_uart0_flow);
253             break;
254 
255         case 1:
256             MXC_GPIO_Config(&gpio_cfg_uart1_flow);
257             break;
258 
259         case 2:
260             MXC_GPIO_Config(&gpio_cfg_uart2_flow);
261             break;
262 
263         default:
264             return E_BAD_PARAM;
265         }
266     } else {
267         switch (MXC_UART_GET_IDX(uart)) {
268         case 0:
269             MXC_GPIO_Config(&gpio_cfg_uart0_flow_disable);
270             break;
271 
272         case 1:
273             MXC_GPIO_Config(&gpio_cfg_uart1_flow_disable);
274             break;
275 
276         case 2:
277             MXC_GPIO_Config(&gpio_cfg_uart2_flow_disable);
278             break;
279 
280         default:
281             return E_BAD_PARAM;
282         }
283     }
284 
285     return MXC_UART_RevB_SetFlowCtrl((mxc_uart_revb_regs_t *)uart, flowCtrl, rtsThreshold);
286 }
287 
MXC_UART_SetClockSource(mxc_uart_regs_t * uart,mxc_uart_clock_t clock)288 int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock)
289 {
290     return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock);
291 }
292 
MXC_UART_GetActive(mxc_uart_regs_t * uart)293 int MXC_UART_GetActive(mxc_uart_regs_t *uart)
294 {
295     return MXC_UART_RevB_GetActive((mxc_uart_revb_regs_t *)uart);
296 }
297 
MXC_UART_AbortTransmission(mxc_uart_regs_t * uart)298 int MXC_UART_AbortTransmission(mxc_uart_regs_t *uart)
299 {
300     return MXC_UART_RevB_AbortTransmission((mxc_uart_revb_regs_t *)uart);
301 }
302 
MXC_UART_ReadCharacterRaw(mxc_uart_regs_t * uart)303 int MXC_UART_ReadCharacterRaw(mxc_uart_regs_t *uart)
304 {
305     return MXC_UART_RevB_ReadCharacterRaw((mxc_uart_revb_regs_t *)uart);
306 }
307 
MXC_UART_WriteCharacterRaw(mxc_uart_regs_t * uart,uint8_t character)308 int MXC_UART_WriteCharacterRaw(mxc_uart_regs_t *uart, uint8_t character)
309 {
310     return MXC_UART_RevB_WriteCharacterRaw((mxc_uart_revb_regs_t *)uart, character);
311 }
312 
MXC_UART_ReadCharacter(mxc_uart_regs_t * uart)313 int MXC_UART_ReadCharacter(mxc_uart_regs_t *uart)
314 {
315     return MXC_UART_Common_ReadCharacter(uart);
316 }
317 
MXC_UART_WriteCharacter(mxc_uart_regs_t * uart,uint8_t character)318 int MXC_UART_WriteCharacter(mxc_uart_regs_t *uart, uint8_t character)
319 {
320     return MXC_UART_Common_WriteCharacter(uart, character);
321 }
322 
MXC_UART_Read(mxc_uart_regs_t * uart,uint8_t * buffer,int * len)323 int MXC_UART_Read(mxc_uart_regs_t *uart, uint8_t *buffer, int *len)
324 {
325     return MXC_UART_RevB_Read((mxc_uart_revb_regs_t *)uart, buffer, len);
326 }
327 
MXC_UART_Write(mxc_uart_regs_t * uart,const uint8_t * byte,int * len)328 int MXC_UART_Write(mxc_uart_regs_t *uart, const uint8_t *byte, int *len)
329 {
330     return MXC_UART_RevB_Write((mxc_uart_revb_regs_t *)uart, byte, len);
331 }
332 
MXC_UART_ReadRXFIFO(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len)333 unsigned int MXC_UART_ReadRXFIFO(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len)
334 {
335     return MXC_UART_RevB_ReadRXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
336 }
337 
MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)338 int MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len,
339                            mxc_uart_dma_complete_cb_t callback)
340 {
341     mxc_dma_config_t config;
342 
343     int uart_num = MXC_UART_GET_IDX(uart);
344 
345     switch (uart_num) {
346     case 0:
347         config.reqsel = MXC_DMA_REQUEST_UART0RX;
348         break;
349 
350     case 1:
351         config.reqsel = MXC_DMA_REQUEST_UART1RX;
352         break;
353 
354     case 2:
355         config.reqsel = MXC_DMA_REQUEST_UART2RX;
356         break;
357 
358     case 3:
359         config.reqsel = MXC_DMA_REQUEST_UART3RX;
360         break;
361 
362     default:
363         return E_BAD_PARAM;
364         break;
365     }
366 
367     return MXC_UART_RevB_ReadRXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
368 }
369 
MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t * uart)370 unsigned int MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t *uart)
371 {
372     return MXC_UART_RevB_GetRXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
373 }
374 
MXC_UART_WriteTXFIFO(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len)375 unsigned int MXC_UART_WriteTXFIFO(mxc_uart_regs_t *uart, const unsigned char *bytes,
376                                   unsigned int len)
377 {
378     return MXC_UART_RevB_WriteTXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
379 }
380 
MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)381 int MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t *uart, const unsigned char *bytes, unsigned int len,
382                             mxc_uart_dma_complete_cb_t callback)
383 {
384     mxc_dma_config_t config;
385 
386     int uart_num = MXC_UART_GET_IDX(uart);
387     switch (uart_num) {
388     case 0:
389         config.reqsel = MXC_DMA_REQUEST_UART0TX;
390         break;
391 
392     case 1:
393         config.reqsel = MXC_DMA_REQUEST_UART1TX;
394         break;
395 
396     case 2:
397         config.reqsel = MXC_DMA_REQUEST_UART2TX;
398         break;
399 
400     case 3:
401         config.reqsel = MXC_DMA_REQUEST_UART3TX;
402         break;
403 
404     default:
405         return E_BAD_PARAM;
406         break;
407     }
408 
409     return MXC_UART_RevB_WriteTXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
410 }
411 
MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t * uart)412 unsigned int MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t *uart)
413 {
414     return MXC_UART_RevB_GetTXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
415 }
416 
MXC_UART_ClearRXFIFO(mxc_uart_regs_t * uart)417 int MXC_UART_ClearRXFIFO(mxc_uart_regs_t *uart)
418 {
419     return MXC_UART_RevB_ClearRXFIFO((mxc_uart_revb_regs_t *)uart);
420 }
421 
MXC_UART_ClearTXFIFO(mxc_uart_regs_t * uart)422 int MXC_UART_ClearTXFIFO(mxc_uart_regs_t *uart)
423 {
424     return MXC_UART_RevB_ClearTXFIFO((mxc_uart_revb_regs_t *)uart);
425 }
426 
MXC_UART_SetRXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)427 int MXC_UART_SetRXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
428 {
429     return MXC_UART_RevB_SetRXThreshold((mxc_uart_revb_regs_t *)uart, numBytes);
430 }
431 
MXC_UART_GetRXThreshold(mxc_uart_regs_t * uart)432 unsigned int MXC_UART_GetRXThreshold(mxc_uart_regs_t *uart)
433 {
434     return MXC_UART_RevB_GetRXThreshold((mxc_uart_revb_regs_t *)uart);
435 }
436 
MXC_UART_SetTXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)437 int MXC_UART_SetTXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
438 {
439     return E_NOT_SUPPORTED;
440 }
441 
MXC_UART_GetTXThreshold(mxc_uart_regs_t * uart)442 unsigned int MXC_UART_GetTXThreshold(mxc_uart_regs_t *uart)
443 {
444     return E_NOT_SUPPORTED;
445 }
446 
MXC_UART_GetFlags(mxc_uart_regs_t * uart)447 unsigned int MXC_UART_GetFlags(mxc_uart_regs_t *uart)
448 {
449     return MXC_UART_RevB_GetFlags((mxc_uart_revb_regs_t *)uart);
450 }
451 
MXC_UART_ClearFlags(mxc_uart_regs_t * uart,unsigned int flags)452 int MXC_UART_ClearFlags(mxc_uart_regs_t *uart, unsigned int flags)
453 {
454     return MXC_UART_RevB_ClearFlags((mxc_uart_revb_regs_t *)uart, flags);
455 }
456 
MXC_UART_EnableInt(mxc_uart_regs_t * uart,unsigned int intEn)457 int MXC_UART_EnableInt(mxc_uart_regs_t *uart, unsigned int intEn)
458 {
459     return MXC_UART_RevB_EnableInt((mxc_uart_revb_regs_t *)uart, intEn);
460 }
461 
MXC_UART_DisableInt(mxc_uart_regs_t * uart,unsigned int intDis)462 int MXC_UART_DisableInt(mxc_uart_regs_t *uart, unsigned int intDis)
463 {
464     return MXC_UART_RevB_DisableInt((mxc_uart_revb_regs_t *)uart, intDis);
465 }
466 
MXC_UART_GetStatus(mxc_uart_regs_t * uart)467 unsigned int MXC_UART_GetStatus(mxc_uart_regs_t *uart)
468 {
469     return MXC_UART_RevB_GetStatus((mxc_uart_revb_regs_t *)uart);
470 }
471 
MXC_UART_Transaction(mxc_uart_req_t * req)472 int MXC_UART_Transaction(mxc_uart_req_t *req)
473 {
474     return MXC_UART_RevB_Transaction((mxc_uart_revb_req_t *)req);
475 }
476 
MXC_UART_TransactionAsync(mxc_uart_req_t * req)477 int MXC_UART_TransactionAsync(mxc_uart_req_t *req)
478 {
479     return MXC_UART_RevB_TransactionAsync((mxc_uart_revb_req_t *)req);
480 }
481 
MXC_UART_TransactionDMA(mxc_uart_req_t * req)482 int MXC_UART_TransactionDMA(mxc_uart_req_t *req)
483 {
484     return MXC_UART_RevB_TransactionDMA((mxc_uart_revb_req_t *)req);
485 }
486 
MXC_UART_AbortAsync(mxc_uart_regs_t * uart)487 int MXC_UART_AbortAsync(mxc_uart_regs_t *uart)
488 {
489     return MXC_UART_RevB_AbortAsync((mxc_uart_revb_regs_t *)uart);
490 }
491 
MXC_UART_AsyncHandler(mxc_uart_regs_t * uart)492 int MXC_UART_AsyncHandler(mxc_uart_regs_t *uart)
493 {
494     return MXC_UART_RevB_AsyncHandler((mxc_uart_revb_regs_t *)uart);
495 }
496 
MXC_UART_GetAsyncTXCount(mxc_uart_req_t * req)497 uint32_t MXC_UART_GetAsyncTXCount(mxc_uart_req_t *req)
498 {
499     return req->txCnt;
500 }
501 
MXC_UART_GetAsyncRXCount(mxc_uart_req_t * req)502 uint32_t MXC_UART_GetAsyncRXCount(mxc_uart_req_t *req)
503 {
504     return req->rxCnt;
505 }
506 
MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t * uart,bool enable)507 int MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t *uart, bool enable)
508 {
509     return MXC_UART_RevB_SetAutoDMAHandlers((mxc_uart_revb_regs_t *)uart, enable);
510 }
511 
MXC_UART_SetTXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)512 int MXC_UART_SetTXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
513 {
514     return MXC_UART_RevB_SetTXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
515 }
516 
MXC_UART_GetTXDMAChannel(mxc_uart_regs_t * uart)517 int MXC_UART_GetTXDMAChannel(mxc_uart_regs_t *uart)
518 {
519     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
520 }
521 
MXC_UART_SetRXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)522 int MXC_UART_SetRXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
523 {
524     return MXC_UART_RevB_SetRXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
525 }
526 
MXC_UART_GetRXDMAChannel(mxc_uart_regs_t * uart)527 int MXC_UART_GetRXDMAChannel(mxc_uart_regs_t *uart)
528 {
529     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
530 }
531