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 <stdio.h>
22 #include <stddef.h>
23 #include <stdint.h>
24 #include <stdbool.h>
25 
26 #include "mxc_device.h"
27 #include "mxc_assert.h"
28 #include "mxc_lock.h"
29 #include "mxc_sys.h"
30 #include "mxc_delay.h"
31 #include "spi_reva1.h"
32 #include "dma.h"
33 
34 /* **** Definitions **** */
35 
36 /* ************************************************************************** */
MXC_SPI_Init(mxc_spi_regs_t * spi,mxc_spi_type_t controller_target,mxc_spi_interface_t if_mode,int numTargets,uint8_t ts_active_pol_mask,uint32_t freq,mxc_spi_pins_t pins)37 int MXC_SPI_Init(mxc_spi_regs_t *spi, mxc_spi_type_t controller_target, mxc_spi_interface_t if_mode,
38                  int numTargets, uint8_t ts_active_pol_mask, uint32_t freq, mxc_spi_pins_t pins)
39 {
40     int spi_num;
41 
42     // Remap input parameters for v1 implementation.
43     int masterMode = controller_target;
44     int quadModeUsed = if_mode;
45     int numSlaves = numTargets;
46     int ssPolarity = ts_active_pol_mask;
47     int hz = freq;
48 
49     spi_num = MXC_SPI_GET_IDX(spi);
50     MXC_ASSERT(spi_num >= 0);
51 
52     if (numSlaves > MXC_SPI_SS_INSTANCES) {
53         return E_BAD_PARAM;
54     }
55 
56     // Check if frequency is too high
57     if ((spi_num == 0) && (hz > PeripheralClock)) {
58         return E_BAD_PARAM;
59     }
60 
61     if ((spi_num == 1) && (hz > SystemCoreClock)) {
62         return E_BAD_PARAM;
63     }
64 
65     mxc_gpio_cfg_t gpio_cfg_spi;
66     gpio_cfg_spi.pad = MXC_GPIO_PAD_NONE;
67     gpio_cfg_spi.port = MXC_GPIO0;
68 
69     // Set VDDIO level
70     if (pins.vddioh) {
71         gpio_cfg_spi.vssel = MXC_GPIO_VSSEL_VDDIOH;
72     } else {
73         gpio_cfg_spi.vssel = MXC_GPIO_VSSEL_VDDIO;
74     }
75 
76     // Configure GPIO for spi
77     if (spi == MXC_SPI1) {
78         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_SPI1);
79         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPI1);
80 
81         //Define pins
82         if (pins.ss1) {
83             gpio_cfg_spi.mask = MXC_GPIO_PIN_26;
84             gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
85             MXC_GPIO_Config(&gpio_cfg_spi);
86         }
87 
88         if (pins.ss2) {
89             gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
90             gpio_cfg_spi.mask = MXC_GPIO_PIN_27;
91             MXC_GPIO_Config(&gpio_cfg_spi);
92         }
93 
94         //clear mask
95         gpio_cfg_spi.mask = 0;
96 
97         // check rest of the pins
98         if (pins.clock) {
99             gpio_cfg_spi.mask |= MXC_GPIO_PIN_23;
100         }
101 
102         if (pins.miso) {
103             gpio_cfg_spi.mask |= MXC_GPIO_PIN_22;
104         }
105 
106         if (pins.mosi) {
107             gpio_cfg_spi.mask |= MXC_GPIO_PIN_21;
108         }
109 
110         if (pins.sdio2) {
111             gpio_cfg_spi.mask |= MXC_GPIO_PIN_24;
112         }
113 
114         if (pins.sdio3) {
115             gpio_cfg_spi.mask |= MXC_GPIO_PIN_25;
116         }
117 
118         if (pins.ss0) {
119             gpio_cfg_spi.mask |= MXC_GPIO_PIN_20;
120         }
121 
122         gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT1;
123 
124 #ifdef MXC_SPI0
125     } else if (spi == MXC_SPI0) {
126         MXC_SYS_Reset_Periph(MXC_SYS_RESET1_SPI0);
127         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SPI0);
128 
129         //Define pins
130         if (pins.ss1) {
131             gpio_cfg_spi.mask = MXC_GPIO_PIN_11;
132             gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
133             MXC_GPIO_Config(&gpio_cfg_spi);
134         }
135 
136         if (pins.ss2) {
137             gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT2;
138             gpio_cfg_spi.mask = MXC_GPIO_PIN_10;
139             MXC_GPIO_Config(&gpio_cfg_spi);
140         }
141 
142         //clear mask
143         gpio_cfg_spi.mask = 0;
144 
145         // check rest of the pins
146         if (pins.clock) {
147             gpio_cfg_spi.mask |= MXC_GPIO_PIN_7;
148         }
149 
150         if (pins.miso) {
151             gpio_cfg_spi.mask |= MXC_GPIO_PIN_6;
152         }
153 
154         if (pins.mosi) {
155             gpio_cfg_spi.mask |= MXC_GPIO_PIN_5;
156         }
157 
158         if (pins.sdio2) {
159             gpio_cfg_spi.mask |= MXC_GPIO_PIN_8;
160         }
161 
162         if (pins.sdio3) {
163             gpio_cfg_spi.mask |= MXC_GPIO_PIN_9;
164         }
165 
166         if (pins.ss0) {
167             gpio_cfg_spi.mask |= MXC_GPIO_PIN_4;
168         }
169 
170         gpio_cfg_spi.func = MXC_GPIO_FUNC_ALT1;
171 #endif
172     } else {
173         return E_NO_DEVICE;
174     }
175 
176     MXC_GPIO_Config(&gpio_cfg_spi);
177 
178     return MXC_SPI_RevA1_Init((mxc_spi_reva_regs_t *)spi, masterMode, quadModeUsed, numSlaves,
179                               ssPolarity, hz);
180 }
181 
MXC_SPI_Shutdown(mxc_spi_regs_t * spi)182 int MXC_SPI_Shutdown(mxc_spi_regs_t *spi)
183 {
184     int spi_num;
185     spi_num = MXC_SPI_GET_IDX(spi);
186     MXC_ASSERT(spi_num >= 0);
187     (void)spi_num;
188 
189     MXC_SPI_RevA1_Shutdown((mxc_spi_reva_regs_t *)spi);
190 
191     if (spi == MXC_SPI1) {
192         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPI1);
193 #ifdef MXC_SPI0
194     } else if (spi == MXC_SPI0) {
195         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_SPI0);
196 #endif
197     } else {
198         return E_NO_DEVICE;
199     }
200 
201     return E_NO_ERROR;
202 }
203 
MXC_SPI_ReadyForSleep(mxc_spi_regs_t * spi)204 int MXC_SPI_ReadyForSleep(mxc_spi_regs_t *spi)
205 {
206     return MXC_SPI_RevA1_ReadyForSleep((mxc_spi_reva_regs_t *)spi);
207 }
208 
MXC_SPI_GetPeripheralClock(mxc_spi_regs_t * spi)209 int MXC_SPI_GetPeripheralClock(mxc_spi_regs_t *spi)
210 {
211     int retval;
212 
213     if (spi == MXC_SPI1) {
214         retval = PeripheralClock;
215 #ifdef MXC_SPI0 // SPI0 is not accessible from the RISC core.
216     } else if (spi == MXC_SPI0) {
217         int sys_clk = (MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_SYSCLK_SEL) >>
218                       MXC_F_GCR_CLKCTRL_SYSCLK_SEL_POS;
219         switch (sys_clk) {
220         case MXC_SYS_CLOCK_IPO:
221             retval = IPO_FREQ;
222             break;
223         case MXC_SYS_CLOCK_IBRO:
224             retval = IBRO_FREQ;
225             break;
226         case MXC_SYS_CLOCK_ISO:
227             retval = ISO_FREQ;
228             break;
229         case MXC_SYS_CLOCK_INRO:
230             retval = INRO_FREQ;
231             break;
232         case MXC_SYS_CLOCK_ERTCO:
233             retval = ERTCO_FREQ;
234             break;
235         case MXC_SYS_CLOCK_EXTCLK:
236             retval = EXTCLK_FREQ;
237             break;
238         default:
239             return E_BAD_STATE;
240         }
241 #endif // MXC_SPI0
242     } else {
243         return E_BAD_PARAM;
244     }
245 
246     retval /= 2;
247 
248     return retval;
249 }
250 
MXC_SPI_SetFrequency(mxc_spi_regs_t * spi,unsigned int hz)251 int MXC_SPI_SetFrequency(mxc_spi_regs_t *spi, unsigned int hz)
252 {
253     return MXC_SPI_RevA1_SetFrequency((mxc_spi_reva_regs_t *)spi, hz);
254 }
255 
MXC_SPI_GetFrequency(mxc_spi_regs_t * spi)256 unsigned int MXC_SPI_GetFrequency(mxc_spi_regs_t *spi)
257 {
258     return MXC_SPI_RevA1_GetFrequency((mxc_spi_reva_regs_t *)spi);
259 }
260 
MXC_SPI_SetDataSize(mxc_spi_regs_t * spi,int dataSize)261 int MXC_SPI_SetDataSize(mxc_spi_regs_t *spi, int dataSize)
262 {
263     return MXC_SPI_RevA1_SetDataSize((mxc_spi_reva_regs_t *)spi, dataSize);
264 }
265 
MXC_SPI_GetDataSize(mxc_spi_regs_t * spi)266 int MXC_SPI_GetDataSize(mxc_spi_regs_t *spi)
267 {
268     return MXC_SPI_RevA1_GetDataSize((mxc_spi_reva_regs_t *)spi);
269 }
270 
MXC_SPI_SetSlave(mxc_spi_regs_t * spi,int ssIdx)271 int MXC_SPI_SetSlave(mxc_spi_regs_t *spi, int ssIdx)
272 {
273     return MXC_SPI_RevA1_SetSlave((mxc_spi_reva_regs_t *)spi, ssIdx);
274 }
275 
MXC_SPI_GetSlave(mxc_spi_regs_t * spi)276 int MXC_SPI_GetSlave(mxc_spi_regs_t *spi)
277 {
278     return MXC_SPI_RevA1_GetSlave((mxc_spi_reva_regs_t *)spi);
279 }
280 
MXC_SPI_SetWidth(mxc_spi_regs_t * spi,mxc_spi_width_t spiWidth)281 int MXC_SPI_SetWidth(mxc_spi_regs_t *spi, mxc_spi_width_t spiWidth)
282 {
283     return MXC_SPI_RevA1_SetWidth((mxc_spi_reva_regs_t *)spi, spiWidth);
284 }
285 
MXC_SPI_GetWidth(mxc_spi_regs_t * spi)286 mxc_spi_width_t MXC_SPI_GetWidth(mxc_spi_regs_t *spi)
287 {
288     return MXC_SPI_RevA1_GetWidth((mxc_spi_reva_regs_t *)spi);
289 }
290 
MXC_SPI_SetMode(mxc_spi_regs_t * spi,mxc_spi_mode_t spiMode)291 int MXC_SPI_SetMode(mxc_spi_regs_t *spi, mxc_spi_mode_t spiMode)
292 {
293     return MXC_SPI_RevA1_SetMode((mxc_spi_reva_regs_t *)spi, spiMode);
294 }
295 
MXC_SPI_GetMode(mxc_spi_regs_t * spi)296 mxc_spi_mode_t MXC_SPI_GetMode(mxc_spi_regs_t *spi)
297 {
298     return MXC_SPI_RevA1_GetMode((mxc_spi_reva_regs_t *)spi);
299 }
300 
MXC_SPI_StartTransmission(mxc_spi_regs_t * spi)301 int MXC_SPI_StartTransmission(mxc_spi_regs_t *spi)
302 {
303     return MXC_SPI_RevA1_StartTransmission((mxc_spi_reva_regs_t *)spi);
304 }
305 
MXC_SPI_GetActive(mxc_spi_regs_t * spi)306 int MXC_SPI_GetActive(mxc_spi_regs_t *spi)
307 {
308     return MXC_SPI_RevA1_GetActive((mxc_spi_reva_regs_t *)spi);
309 }
310 
MXC_SPI_AbortTransmission(mxc_spi_regs_t * spi)311 int MXC_SPI_AbortTransmission(mxc_spi_regs_t *spi)
312 {
313     return MXC_SPI_RevA1_AbortTransmission((mxc_spi_reva_regs_t *)spi);
314 }
315 
MXC_SPI_ReadRXFIFO(mxc_spi_regs_t * spi,unsigned char * bytes,unsigned int len)316 unsigned int MXC_SPI_ReadRXFIFO(mxc_spi_regs_t *spi, unsigned char *bytes, unsigned int len)
317 {
318     return MXC_SPI_RevA1_ReadRXFIFO((mxc_spi_reva_regs_t *)spi, bytes, len);
319 }
320 
MXC_SPI_GetRXFIFOAvailable(mxc_spi_regs_t * spi)321 unsigned int MXC_SPI_GetRXFIFOAvailable(mxc_spi_regs_t *spi)
322 {
323     return MXC_SPI_RevA1_GetRXFIFOAvailable((mxc_spi_reva_regs_t *)spi);
324 }
325 
MXC_SPI_WriteTXFIFO(mxc_spi_regs_t * spi,unsigned char * bytes,unsigned int len)326 unsigned int MXC_SPI_WriteTXFIFO(mxc_spi_regs_t *spi, unsigned char *bytes, unsigned int len)
327 {
328     return MXC_SPI_RevA1_WriteTXFIFO((mxc_spi_reva_regs_t *)spi, bytes, len);
329 }
330 
MXC_SPI_GetTXFIFOAvailable(mxc_spi_regs_t * spi)331 unsigned int MXC_SPI_GetTXFIFOAvailable(mxc_spi_regs_t *spi)
332 {
333     return MXC_SPI_RevA1_GetTXFIFOAvailable((mxc_spi_reva_regs_t *)spi);
334 }
335 
MXC_SPI_ClearRXFIFO(mxc_spi_regs_t * spi)336 void MXC_SPI_ClearRXFIFO(mxc_spi_regs_t *spi)
337 {
338     MXC_SPI_RevA1_ClearRXFIFO((mxc_spi_reva_regs_t *)spi);
339 }
340 
MXC_SPI_ClearTXFIFO(mxc_spi_regs_t * spi)341 void MXC_SPI_ClearTXFIFO(mxc_spi_regs_t *spi)
342 {
343     MXC_SPI_RevA1_ClearTXFIFO((mxc_spi_reva_regs_t *)spi);
344 }
345 
MXC_SPI_SetRXThreshold(mxc_spi_regs_t * spi,unsigned int numBytes)346 int MXC_SPI_SetRXThreshold(mxc_spi_regs_t *spi, unsigned int numBytes)
347 {
348     return MXC_SPI_RevA1_SetRXThreshold((mxc_spi_reva_regs_t *)spi, numBytes);
349 }
350 
MXC_SPI_GetRXThreshold(mxc_spi_regs_t * spi)351 unsigned int MXC_SPI_GetRXThreshold(mxc_spi_regs_t *spi)
352 {
353     return MXC_SPI_RevA1_GetRXThreshold((mxc_spi_reva_regs_t *)spi);
354 }
355 
MXC_SPI_SetTXThreshold(mxc_spi_regs_t * spi,unsigned int numBytes)356 int MXC_SPI_SetTXThreshold(mxc_spi_regs_t *spi, unsigned int numBytes)
357 {
358     return MXC_SPI_RevA1_SetTXThreshold((mxc_spi_reva_regs_t *)spi, numBytes);
359 }
360 
MXC_SPI_GetTXThreshold(mxc_spi_regs_t * spi)361 unsigned int MXC_SPI_GetTXThreshold(mxc_spi_regs_t *spi)
362 {
363     return MXC_SPI_RevA1_GetTXThreshold((mxc_spi_reva_regs_t *)spi);
364 }
365 
MXC_SPI_GetFlags(mxc_spi_regs_t * spi)366 unsigned int MXC_SPI_GetFlags(mxc_spi_regs_t *spi)
367 {
368     return MXC_SPI_RevA1_GetFlags((mxc_spi_reva_regs_t *)spi);
369 }
370 
MXC_SPI_ClearFlags(mxc_spi_regs_t * spi)371 void MXC_SPI_ClearFlags(mxc_spi_regs_t *spi)
372 {
373     MXC_SPI_RevA1_ClearFlags((mxc_spi_reva_regs_t *)spi);
374 }
375 
MXC_SPI_EnableInt(mxc_spi_regs_t * spi,unsigned int intEn)376 void MXC_SPI_EnableInt(mxc_spi_regs_t *spi, unsigned int intEn)
377 {
378     MXC_SPI_RevA1_EnableInt((mxc_spi_reva_regs_t *)spi, intEn);
379 }
380 
MXC_SPI_DisableInt(mxc_spi_regs_t * spi,unsigned int intDis)381 void MXC_SPI_DisableInt(mxc_spi_regs_t *spi, unsigned int intDis)
382 {
383     MXC_SPI_RevA1_DisableInt((mxc_spi_reva_regs_t *)spi, intDis);
384 }
385 
MXC_SPI_MasterTransaction(mxc_spi_req_t * req)386 int MXC_SPI_MasterTransaction(mxc_spi_req_t *req)
387 {
388     return MXC_SPI_RevA1_MasterTransaction((mxc_spi_reva_req_t *)req);
389 }
390 
MXC_SPI_MasterTransactionAsync(mxc_spi_req_t * req)391 int MXC_SPI_MasterTransactionAsync(mxc_spi_req_t *req)
392 {
393     return MXC_SPI_RevA1_MasterTransactionAsync((mxc_spi_reva_req_t *)req);
394 }
395 
MXC_SPI_MasterTransactionDMA(mxc_spi_req_t * req)396 int MXC_SPI_MasterTransactionDMA(mxc_spi_req_t *req)
397 {
398     int reqselTx = -1;
399     int reqselRx = -1;
400 
401     int spi_num;
402 
403     spi_num = MXC_SPI_GET_IDX(req->spi);
404     MXC_ASSERT(spi_num >= 0);
405 
406     if (req->txData != NULL) {
407         switch (spi_num) {
408         case 0:
409             reqselTx = MXC_DMA_REQUEST_SPI1TX;
410             break;
411 
412         case 1:
413             reqselTx = MXC_DMA_REQUEST_SPI0TX;
414             break;
415 
416         default:
417             return E_BAD_PARAM;
418         }
419     }
420 
421     if (req->rxData != NULL) {
422         switch (spi_num) {
423         case 0:
424             reqselRx = MXC_DMA_REQUEST_SPI1RX;
425             break;
426 
427         case 1:
428             reqselRx = MXC_DMA_REQUEST_SPI0RX;
429             break;
430 
431         default:
432             return E_BAD_PARAM;
433         }
434     }
435 
436     return MXC_SPI_RevA1_MasterTransactionDMA((mxc_spi_reva_req_t *)req, reqselTx, reqselRx,
437                                               MXC_DMA);
438 }
439 
MXC_SPI_SlaveTransaction(mxc_spi_req_t * req)440 int MXC_SPI_SlaveTransaction(mxc_spi_req_t *req)
441 {
442     return MXC_SPI_RevA1_SlaveTransaction((mxc_spi_reva_req_t *)req);
443 }
444 
MXC_SPI_SlaveTransactionAsync(mxc_spi_req_t * req)445 int MXC_SPI_SlaveTransactionAsync(mxc_spi_req_t *req)
446 {
447     return MXC_SPI_RevA1_SlaveTransactionAsync((mxc_spi_reva_req_t *)req);
448 }
449 
MXC_SPI_SlaveTransactionDMA(mxc_spi_req_t * req)450 int MXC_SPI_SlaveTransactionDMA(mxc_spi_req_t *req)
451 {
452     int reqselTx = -1;
453     int reqselRx = -1;
454 
455     int spi_num;
456 
457     spi_num = MXC_SPI_GET_IDX(req->spi);
458     MXC_ASSERT(spi_num >= 0);
459 
460     if (req->txData != NULL) {
461         switch (spi_num) {
462         case 0:
463             reqselTx = MXC_DMA_REQUEST_SPI1TX;
464             break;
465 
466         case 1:
467             reqselTx = MXC_DMA_REQUEST_SPI0TX;
468             break;
469 
470         default:
471             return E_BAD_PARAM;
472             break;
473         }
474     }
475 
476     if (req->rxData != NULL) {
477         switch (spi_num) {
478         case 0:
479             reqselRx = MXC_DMA_REQUEST_SPI1RX;
480             break;
481 
482         case 1:
483             reqselRx = MXC_DMA_REQUEST_SPI0RX;
484             break;
485 
486         default:
487             return E_BAD_PARAM;
488             break;
489         }
490     }
491 
492     return MXC_SPI_RevA1_SlaveTransactionDMA((mxc_spi_reva_req_t *)req, reqselTx, reqselRx,
493                                              MXC_DMA);
494 }
495 
MXC_SPI_SetDefaultTXData(mxc_spi_regs_t * spi,unsigned int defaultTXData)496 int MXC_SPI_SetDefaultTXData(mxc_spi_regs_t *spi, unsigned int defaultTXData)
497 {
498     return MXC_SPI_RevA1_SetDefaultTXData((mxc_spi_reva_regs_t *)spi, defaultTXData);
499 }
500 
MXC_SPI_AbortAsync(mxc_spi_regs_t * spi)501 void MXC_SPI_AbortAsync(mxc_spi_regs_t *spi)
502 {
503     MXC_SPI_RevA1_AbortAsync((mxc_spi_reva_regs_t *)spi);
504 }
505 
MXC_SPI_AsyncHandler(mxc_spi_regs_t * spi)506 void MXC_SPI_AsyncHandler(mxc_spi_regs_t *spi)
507 {
508     MXC_SPI_RevA1_AsyncHandler((mxc_spi_reva_regs_t *)spi);
509 }
510 
MXC_SPI_HWSSControl(mxc_spi_regs_t * spi,int state)511 void MXC_SPI_HWSSControl(mxc_spi_regs_t *spi, int state)
512 {
513     MXC_SPI_RevA1_HWSSControl((mxc_spi_reva_regs_t *)spi, state);
514 }
515 
516 /* ** SPI v2 functions to prevent build errors ** */
517 
MXC_SPI_Config(mxc_spi_cfg_t * cfg)518 int MXC_SPI_Config(mxc_spi_cfg_t *cfg)
519 {
520     return E_NOT_SUPPORTED;
521 }
522 
MXC_SPI_ConfigStruct(mxc_spi_cfg_t * cfg,bool use_dma_tx,bool use_dma_rx)523 int MXC_SPI_ConfigStruct(mxc_spi_cfg_t *cfg, bool use_dma_tx, bool use_dma_rx)
524 {
525     return E_NOT_SUPPORTED;
526 }
527 
MXC_SPI_SetTSControl(mxc_spi_regs_t * spi,mxc_spi_tscontrol_t ts_control)528 int MXC_SPI_SetTSControl(mxc_spi_regs_t *spi, mxc_spi_tscontrol_t ts_control)
529 {
530     return E_NOT_SUPPORTED;
531 }
532 
MXC_SPI_GetTSControl(mxc_spi_regs_t * spi)533 mxc_spi_tscontrol_t MXC_SPI_GetTSControl(mxc_spi_regs_t *spi)
534 {
535     return E_NOT_SUPPORTED;
536 }
537 
MXC_SPI_SetFrameSize(mxc_spi_regs_t * spi,int frame_size)538 int MXC_SPI_SetFrameSize(mxc_spi_regs_t *spi, int frame_size)
539 {
540     return MXC_SPI_SetDataSize(spi, frame_size);
541 }
542 
MXC_SPI_GetFrameSize(mxc_spi_regs_t * spi)543 int MXC_SPI_GetFrameSize(mxc_spi_regs_t *spi)
544 {
545     return MXC_SPI_GetDataSize(spi);
546 }
547 
MXC_SPI_SetInterface(mxc_spi_regs_t * spi,mxc_spi_interface_t mode)548 int MXC_SPI_SetInterface(mxc_spi_regs_t *spi, mxc_spi_interface_t mode)
549 {
550     return E_NOT_SUPPORTED;
551 }
552 
MXC_SPI_GetInterface(mxc_spi_regs_t * spi)553 mxc_spi_interface_t MXC_SPI_GetInterface(mxc_spi_regs_t *spi)
554 {
555     return E_NOT_SUPPORTED;
556 }
557 
MXC_SPI_SetClkMode(mxc_spi_regs_t * spi,mxc_spi_clkmode_t clk_mode)558 int MXC_SPI_SetClkMode(mxc_spi_regs_t *spi, mxc_spi_clkmode_t clk_mode)
559 {
560     return E_NOT_SUPPORTED;
561 }
562 
MXC_SPI_GetClkMode(mxc_spi_regs_t * spi)563 mxc_spi_clkmode_t MXC_SPI_GetClkMode(mxc_spi_regs_t *spi)
564 {
565     return E_NOT_SUPPORTED;
566 }
567 
MXC_SPI_SetCallback(mxc_spi_regs_t * spi,mxc_spi_callback_t callback,void * data)568 int MXC_SPI_SetCallback(mxc_spi_regs_t *spi, mxc_spi_callback_t callback, void *data)
569 {
570     return E_NOT_SUPPORTED;
571 }
572 
MXC_SPI_SetDummyTX(mxc_spi_regs_t * spi,uint16_t tx_value)573 int MXC_SPI_SetDummyTX(mxc_spi_regs_t *spi, uint16_t tx_value)
574 {
575     return MXC_SPI_SetDefaultTXData(spi, tx_value);
576 }
577 
578 /* ** DMA-Specific Functions ** */
579 
MXC_SPI_DMA_Init(mxc_spi_regs_t * spi,mxc_dma_regs_t * dma,bool use_dma_tx,bool use_dma_rx)580 int MXC_SPI_DMA_Init(mxc_spi_regs_t *spi, mxc_dma_regs_t *dma, bool use_dma_tx, bool use_dma_rx)
581 {
582     return E_NOT_SUPPORTED;
583 }
584 
MXC_SPI_DMA_GetInitialized(mxc_spi_regs_t * spi)585 bool MXC_SPI_DMA_GetInitialized(mxc_spi_regs_t *spi)
586 {
587     return E_NOT_SUPPORTED;
588 }
589 
MXC_SPI_DMA_GetTXChannel(mxc_spi_regs_t * spi)590 int MXC_SPI_DMA_GetTXChannel(mxc_spi_regs_t *spi)
591 {
592     return E_NOT_SUPPORTED;
593 }
594 
MXC_SPI_DMA_GetRXChannel(mxc_spi_regs_t * spi)595 int MXC_SPI_DMA_GetRXChannel(mxc_spi_regs_t *spi)
596 {
597     return E_NOT_SUPPORTED;
598 }
599 
MXC_SPI_DMA_SetRequestSelect(mxc_spi_regs_t * spi,bool use_dma_tx,bool use_dma_rx)600 int MXC_SPI_DMA_SetRequestSelect(mxc_spi_regs_t *spi, bool use_dma_tx, bool use_dma_rx)
601 {
602     return E_NOT_SUPPORTED;
603 }
604 
605 /* ** Transaction Functions ** */
606 
MXC_SPI_ControllerTransaction(mxc_spi_req_t * req)607 int MXC_SPI_ControllerTransaction(mxc_spi_req_t *req)
608 {
609     return MXC_SPI_MasterTransaction(req);
610 }
611 
MXC_SPI_ControllerTransactionAsync(mxc_spi_req_t * req)612 int MXC_SPI_ControllerTransactionAsync(mxc_spi_req_t *req)
613 {
614     return MXC_SPI_MasterTransactionAsync(req);
615 }
616 
MXC_SPI_ControllerTransactionDMA(mxc_spi_req_t * req)617 int MXC_SPI_ControllerTransactionDMA(mxc_spi_req_t *req)
618 {
619     return MXC_SPI_MasterTransactionDMA(req);
620 }
621 
MXC_SPI_TargetTransaction(mxc_spi_req_t * req)622 int MXC_SPI_TargetTransaction(mxc_spi_req_t *req)
623 {
624     return MXC_SPI_SlaveTransaction(req);
625 }
626 
MXC_SPI_TargetTransactionAsync(mxc_spi_req_t * req)627 int MXC_SPI_TargetTransactionAsync(mxc_spi_req_t *req)
628 {
629     return MXC_SPI_SlaveTransactionAsync(req);
630 }
631 
MXC_SPI_TargetTransactionDMA(mxc_spi_req_t * req)632 int MXC_SPI_TargetTransactionDMA(mxc_spi_req_t *req)
633 {
634     return MXC_SPI_SlaveTransactionDMA(req);
635 }
636 
637 /* ** Handler Functions ** */
638 
MXC_SPI_Handler(mxc_spi_regs_t * spi)639 void MXC_SPI_Handler(mxc_spi_regs_t *spi)
640 {
641     MXC_SPI_AsyncHandler(spi);
642 }
643 
MXC_SPI_DMA_TX_Handler(mxc_spi_regs_t * spi)644 void MXC_SPI_DMA_TX_Handler(mxc_spi_regs_t *spi)
645 {
646     return;
647 }
648 
MXC_SPI_DMA_RX_Handler(mxc_spi_regs_t * spi)649 void MXC_SPI_DMA_RX_Handler(mxc_spi_regs_t *spi)
650 {
651     return;
652 }
653