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 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_
22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_
23 
24 #include <stdio.h>
25 #include <stddef.h>
26 #include <stdint.h>
27 #include "mxc_device.h"
28 #include "mxc_assert.h"
29 #include "mxc_lock.h"
30 #include "mxc_sys.h"
31 #include "mxc_delay.h"
32 #include "spi_regs.h"
33 #include "spi_reva_regs.h"
34 #include "spi.h"
35 #include "dma.h"
36 #include "dma_reva_regs.h"
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 /* **** Functions **** */
43 
44 int MXC_SPI_RevA2_Init(mxc_spi_reva_regs_t *spi, mxc_spi_type_t controller_target,
45                        mxc_spi_interface_t if_mode, uint32_t freq, uint8_t ts_active_pol_mask);
46 
47 int MXC_SPI_RevA2_Config(mxc_spi_cfg_t *cfg);
48 
49 int MXC_SPI_RevA2_Shutdown(mxc_spi_reva_regs_t *spi);
50 
51 uint32_t MXC_SPI_RevA2_GetFlags(mxc_spi_reva_regs_t *spi);
52 
53 void MXC_SPI_RevA2_ClearFlags(mxc_spi_reva_regs_t *spi);
54 
55 void MXC_SPI_RevA2_EnableInt(mxc_spi_reva_regs_t *spi, uint32_t en);
56 
57 void MXC_SPI_RevA2_DisableInt(mxc_spi_reva_regs_t *spi, uint32_t dis);
58 
59 int MXC_SPI_RevA2_SetTSControl(mxc_spi_reva_regs_t *spi, mxc_spi_tscontrol_t ts_control);
60 
61 mxc_spi_tscontrol_t MXC_SPI_RevA2_GetTSControl(mxc_spi_reva_regs_t *spi);
62 
63 int MXC_SPI_RevA2_SetFrequency(mxc_spi_reva_regs_t *spi, uint32_t freq);
64 
65 int MXC_SPI_RevA2_GetFrequency(mxc_spi_reva_regs_t *spi);
66 
67 int MXC_SPI_RevA2_SetFrameSize(mxc_spi_reva_regs_t *spi, int frame_size);
68 
69 int MXC_SPI_RevA2_GetFrameSize(mxc_spi_reva_regs_t *spi);
70 
71 int MXC_SPI_RevA2_SetInterface(mxc_spi_reva_regs_t *spi, mxc_spi_interface_t if_mode);
72 
73 mxc_spi_interface_t MXC_SPI_RevA2_GetInterface(mxc_spi_reva_regs_t *spi);
74 
75 int MXC_SPI_RevA2_SetClkMode(mxc_spi_reva_regs_t *spi, mxc_spi_clkmode_t clk_mode);
76 
77 mxc_spi_clkmode_t MXC_SPI_RevA2_GetClkMode(mxc_spi_reva_regs_t *spi);
78 
79 int MXC_SPI_RevA2_SetCallback(mxc_spi_reva_regs_t *spi, mxc_spi_callback_t callback, void *data);
80 
81 int MXC_SPI_RevA2_GetActive(mxc_spi_reva_regs_t *spi);
82 
83 int MXC_SPI_RevA2_ReadyForSleep(mxc_spi_reva_regs_t *spi);
84 
85 int MXC_SPI_RevA2_SetDummyTX(mxc_spi_reva_regs_t *spi, uint16_t tx_value);
86 
87 int MXC_SPI_RevA2_StartTransmission(mxc_spi_reva_regs_t *spi);
88 
89 int MXC_SPI_RevA2_AbortTransmission(mxc_spi_reva_regs_t *spi);
90 
91 uint8_t MXC_SPI_RevA2_GetTXFIFOAvailable(mxc_spi_reva_regs_t *spi);
92 
93 uint8_t MXC_SPI_RevA2_GetRXFIFOAvailable(mxc_spi_reva_regs_t *spi);
94 
95 int MXC_SPI_RevA2_ClearTXFIFO(mxc_spi_reva_regs_t *spi);
96 
97 int MXC_SPI_RevA2_ClearRXFIFO(mxc_spi_reva_regs_t *spi);
98 
99 int MXC_SPI_RevA2_SetTXThreshold(mxc_spi_reva_regs_t *spi, uint8_t thd_val);
100 
101 int MXC_SPI_RevA2_SetRXThreshold(mxc_spi_reva_regs_t *spi, uint8_t thd_val);
102 
103 uint8_t MXC_SPI_RevA2_GetTXThreshold(mxc_spi_reva_regs_t *spi);
104 
105 uint8_t MXC_SPI_RevA2_GetRXThreshold(mxc_spi_reva_regs_t *spi);
106 
107 /* ** DMA-Specific Functions ** */
108 
109 int MXC_SPI_RevA2_DMA_Init(mxc_spi_reva_regs_t *spi, mxc_dma_reva_regs_t *dma, bool use_dma_tx,
110                            bool use_dma_rx);
111 
112 bool MXC_SPI_RevA2_DMA_GetInitialized(mxc_spi_reva_regs_t *spi);
113 
114 int MXC_SPI_RevA2_DMA_GetTXChannel(mxc_spi_reva_regs_t *spi);
115 
116 int MXC_SPI_RevA2_DMA_GetRXChannel(mxc_spi_reva_regs_t *spi);
117 
118 int MXC_SPI_RevA2_DMA_SetRequestSelect(mxc_spi_reva_regs_t *spi, uint32_t tx_reqsel,
119                                        uint32_t rx_reqsel);
120 
121 void MXC_SPI_RevA2_DMA_SwapByte(uint8_t *buffer, uint32_t len_bytes);
122 
123 /* ** Transaction Functions ** */
124 
125 int MXC_SPI_RevA2_ControllerTransaction(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
126                                         uint32_t tx_length_frames, uint8_t *rx_buffer,
127                                         uint32_t rx_length_frames, uint8_t deassert,
128                                         uint8_t hw_ts_index);
129 
130 int MXC_SPI_RevA2_ControllerTransactionAsync(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
131                                              uint32_t tx_length_frames, uint8_t *rx_buffer,
132                                              uint32_t rx_length_frames, uint8_t deassert,
133                                              uint8_t hw_ts_index);
134 
135 int MXC_SPI_RevA2_ControllerTransactionDMA(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
136                                            uint32_t tx_length_frames, uint8_t *rx_buffer,
137                                            uint32_t rx_length_frames, uint8_t deassert,
138                                            uint8_t hw_ts_index, mxc_dma_reva_regs_t *dma);
139 
140 int MXC_SPI_RevA2_TargetTransaction(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
141                                     uint32_t tx_length_frames, uint8_t *rx_buffer,
142                                     uint32_t rx_length_frames);
143 
144 int MXC_SPI_RevA2_TargetTransactionAsync(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
145                                          uint32_t tx_length_frames, uint8_t *rx_buffer,
146                                          uint32_t rx_length_frames);
147 
148 int MXC_SPI_RevA2_TargetTransactionDMA(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer,
149                                        uint32_t tx_length_frames, uint8_t *rx_buffer,
150                                        uint32_t rx_length_frames, mxc_dma_reva_regs_t *dma);
151 
152 /* ** Handler Functions ** */
153 
154 void MXC_SPI_RevA2_Handler(mxc_spi_reva_regs_t *spi);
155 
156 void MXC_SPI_RevA2_DMA_TX_Handler(mxc_spi_reva_regs_t *spi);
157 
158 void MXC_SPI_RevA2_DMA_RX_Handler(mxc_spi_reva_regs_t *spi);
159 
160 #ifdef __cplusplus
161 }
162 #endif
163 
164 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_
165