1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * This file is part of STM32 DFSDM driver |
4 | * |
5 | * Copyright (C) 2017, STMicroelectronics - All Rights Reserved |
6 | * Author(s): Arnaud Pouliquen <arnaud.pouliquen@st.com>. |
7 | */ |
8 | |
9 | #ifndef MDF_STM32_DFSDM__H |
10 | #define MDF_STM32_DFSDM__H |
11 | |
12 | #include <linux/bitfield.h> |
13 | |
14 | /* |
15 | * STM32 DFSDM - global register map |
16 | * __________________________________________________________ |
17 | * | Offset | Registers block | |
18 | * ---------------------------------------------------------- |
19 | * | 0x000 | CHANNEL 0 + COMMON CHANNEL FIELDS | |
20 | * ---------------------------------------------------------- |
21 | * | 0x020 | CHANNEL 1 | |
22 | * ---------------------------------------------------------- |
23 | * | ... | ..... | |
24 | * ---------------------------------------------------------- |
25 | * | 0x20 x n | CHANNEL n | |
26 | * ---------------------------------------------------------- |
27 | * | 0x100 | FILTER 0 + COMMON FILTER FIELDs | |
28 | * ---------------------------------------------------------- |
29 | * | 0x200 | FILTER 1 | |
30 | * ---------------------------------------------------------- |
31 | * | | ..... | |
32 | * ---------------------------------------------------------- |
33 | * | 0x100 x m | FILTER m | |
34 | * ---------------------------------------------------------- |
35 | * | | ..... | |
36 | * ---------------------------------------------------------- |
37 | * | 0x7F0-7FC | Identification registers | |
38 | * ---------------------------------------------------------- |
39 | */ |
40 | |
41 | /* |
42 | * Channels register definitions |
43 | */ |
44 | #define DFSDM_CHCFGR1(y) ((y) * 0x20 + 0x00) |
45 | #define DFSDM_CHCFGR2(y) ((y) * 0x20 + 0x04) |
46 | #define DFSDM_AWSCDR(y) ((y) * 0x20 + 0x08) |
47 | #define DFSDM_CHWDATR(y) ((y) * 0x20 + 0x0C) |
48 | #define DFSDM_CHDATINR(y) ((y) * 0x20 + 0x10) |
49 | |
50 | /* CHCFGR1: Channel configuration register 1 */ |
51 | #define DFSDM_CHCFGR1_SITP_MASK GENMASK(1, 0) |
52 | #define DFSDM_CHCFGR1_SITP(v) FIELD_PREP(DFSDM_CHCFGR1_SITP_MASK, v) |
53 | #define DFSDM_CHCFGR1_SPICKSEL_MASK GENMASK(3, 2) |
54 | #define DFSDM_CHCFGR1_SPICKSEL(v) FIELD_PREP(DFSDM_CHCFGR1_SPICKSEL_MASK, v) |
55 | #define DFSDM_CHCFGR1_SCDEN_MASK BIT(5) |
56 | #define DFSDM_CHCFGR1_SCDEN(v) FIELD_PREP(DFSDM_CHCFGR1_SCDEN_MASK, v) |
57 | #define DFSDM_CHCFGR1_CKABEN_MASK BIT(6) |
58 | #define DFSDM_CHCFGR1_CKABEN(v) FIELD_PREP(DFSDM_CHCFGR1_CKABEN_MASK, v) |
59 | #define DFSDM_CHCFGR1_CHEN_MASK BIT(7) |
60 | #define DFSDM_CHCFGR1_CHEN(v) FIELD_PREP(DFSDM_CHCFGR1_CHEN_MASK, v) |
61 | #define DFSDM_CHCFGR1_CHINSEL_MASK BIT(8) |
62 | #define DFSDM_CHCFGR1_CHINSEL(v) FIELD_PREP(DFSDM_CHCFGR1_CHINSEL_MASK, v) |
63 | #define DFSDM_CHCFGR1_DATMPX_MASK GENMASK(13, 12) |
64 | #define DFSDM_CHCFGR1_DATMPX(v) FIELD_PREP(DFSDM_CHCFGR1_DATMPX_MASK, v) |
65 | #define DFSDM_CHCFGR1_DATPACK_MASK GENMASK(15, 14) |
66 | #define DFSDM_CHCFGR1_DATPACK(v) FIELD_PREP(DFSDM_CHCFGR1_DATPACK_MASK, v) |
67 | #define DFSDM_CHCFGR1_CKOUTDIV_MASK GENMASK(23, 16) |
68 | #define DFSDM_CHCFGR1_CKOUTDIV(v) FIELD_PREP(DFSDM_CHCFGR1_CKOUTDIV_MASK, v) |
69 | #define DFSDM_CHCFGR1_CKOUTSRC_MASK BIT(30) |
70 | #define DFSDM_CHCFGR1_CKOUTSRC(v) FIELD_PREP(DFSDM_CHCFGR1_CKOUTSRC_MASK, v) |
71 | #define DFSDM_CHCFGR1_DFSDMEN_MASK BIT(31) |
72 | #define DFSDM_CHCFGR1_DFSDMEN(v) FIELD_PREP(DFSDM_CHCFGR1_DFSDMEN_MASK, v) |
73 | |
74 | /* CHCFGR2: Channel configuration register 2 */ |
75 | #define DFSDM_CHCFGR2_DTRBS_MASK GENMASK(7, 3) |
76 | #define DFSDM_CHCFGR2_DTRBS(v) FIELD_PREP(DFSDM_CHCFGR2_DTRBS_MASK, v) |
77 | #define DFSDM_CHCFGR2_OFFSET_MASK GENMASK(31, 8) |
78 | #define DFSDM_CHCFGR2_OFFSET(v) FIELD_PREP(DFSDM_CHCFGR2_OFFSET_MASK, v) |
79 | |
80 | /* AWSCDR: Channel analog watchdog and short circuit detector */ |
81 | #define DFSDM_AWSCDR_SCDT_MASK GENMASK(7, 0) |
82 | #define DFSDM_AWSCDR_SCDT(v) FIELD_PREP(DFSDM_AWSCDR_SCDT_MASK, v) |
83 | #define DFSDM_AWSCDR_BKSCD_MASK GENMASK(15, 12) |
84 | #define DFSDM_AWSCDR_BKSCD(v) FIELD_PREP(DFSDM_AWSCDR_BKSCD_MASK, v) |
85 | #define DFSDM_AWSCDR_AWFOSR_MASK GENMASK(20, 16) |
86 | #define DFSDM_AWSCDR_AWFOSR(v) FIELD_PREP(DFSDM_AWSCDR_AWFOSR_MASK, v) |
87 | #define DFSDM_AWSCDR_AWFORD_MASK GENMASK(23, 22) |
88 | #define DFSDM_AWSCDR_AWFORD(v) FIELD_PREP(DFSDM_AWSCDR_AWFORD_MASK, v) |
89 | |
90 | /* |
91 | * Filters register definitions |
92 | */ |
93 | #define DFSDM_FILTER_BASE_ADR 0x100 |
94 | #define DFSDM_FILTER_REG_MASK 0x7F |
95 | #define DFSDM_FILTER_X_BASE_ADR(x) ((x) * 0x80 + DFSDM_FILTER_BASE_ADR) |
96 | |
97 | #define DFSDM_CR1(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x00) |
98 | #define DFSDM_CR2(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x04) |
99 | #define DFSDM_ISR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x08) |
100 | #define DFSDM_ICR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x0C) |
101 | #define DFSDM_JCHGR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x10) |
102 | #define DFSDM_FCR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x14) |
103 | #define DFSDM_JDATAR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x18) |
104 | #define DFSDM_RDATAR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x1C) |
105 | #define DFSDM_AWHTR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x20) |
106 | #define DFSDM_AWLTR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x24) |
107 | #define DFSDM_AWSR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x28) |
108 | #define DFSDM_AWCFR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x2C) |
109 | #define DFSDM_EXMAX(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x30) |
110 | #define DFSDM_EXMIN(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x34) |
111 | #define DFSDM_CNVTIMR(x) (DFSDM_FILTER_X_BASE_ADR(x) + 0x38) |
112 | |
113 | /* CR1 Control register 1 */ |
114 | #define DFSDM_CR1_DFEN_MASK BIT(0) |
115 | #define DFSDM_CR1_DFEN(v) FIELD_PREP(DFSDM_CR1_DFEN_MASK, v) |
116 | #define DFSDM_CR1_JSWSTART_MASK BIT(1) |
117 | #define DFSDM_CR1_JSWSTART(v) FIELD_PREP(DFSDM_CR1_JSWSTART_MASK, v) |
118 | #define DFSDM_CR1_JSYNC_MASK BIT(3) |
119 | #define DFSDM_CR1_JSYNC(v) FIELD_PREP(DFSDM_CR1_JSYNC_MASK, v) |
120 | #define DFSDM_CR1_JSCAN_MASK BIT(4) |
121 | #define DFSDM_CR1_JSCAN(v) FIELD_PREP(DFSDM_CR1_JSCAN_MASK, v) |
122 | #define DFSDM_CR1_JDMAEN_MASK BIT(5) |
123 | #define DFSDM_CR1_JDMAEN(v) FIELD_PREP(DFSDM_CR1_JDMAEN_MASK, v) |
124 | #define DFSDM_CR1_JEXTSEL_MASK GENMASK(12, 8) |
125 | #define DFSDM_CR1_JEXTSEL(v) FIELD_PREP(DFSDM_CR1_JEXTSEL_MASK, v) |
126 | #define DFSDM_CR1_JEXTEN_MASK GENMASK(14, 13) |
127 | #define DFSDM_CR1_JEXTEN(v) FIELD_PREP(DFSDM_CR1_JEXTEN_MASK, v) |
128 | #define DFSDM_CR1_RSWSTART_MASK BIT(17) |
129 | #define DFSDM_CR1_RSWSTART(v) FIELD_PREP(DFSDM_CR1_RSWSTART_MASK, v) |
130 | #define DFSDM_CR1_RCONT_MASK BIT(18) |
131 | #define DFSDM_CR1_RCONT(v) FIELD_PREP(DFSDM_CR1_RCONT_MASK, v) |
132 | #define DFSDM_CR1_RSYNC_MASK BIT(19) |
133 | #define DFSDM_CR1_RSYNC(v) FIELD_PREP(DFSDM_CR1_RSYNC_MASK, v) |
134 | #define DFSDM_CR1_RDMAEN_MASK BIT(21) |
135 | #define DFSDM_CR1_RDMAEN(v) FIELD_PREP(DFSDM_CR1_RDMAEN_MASK, v) |
136 | #define DFSDM_CR1_RCH_MASK GENMASK(26, 24) |
137 | #define DFSDM_CR1_RCH(v) FIELD_PREP(DFSDM_CR1_RCH_MASK, v) |
138 | #define DFSDM_CR1_FAST_MASK BIT(29) |
139 | #define DFSDM_CR1_FAST(v) FIELD_PREP(DFSDM_CR1_FAST_MASK, v) |
140 | #define DFSDM_CR1_AWFSEL_MASK BIT(30) |
141 | #define DFSDM_CR1_AWFSEL(v) FIELD_PREP(DFSDM_CR1_AWFSEL_MASK, v) |
142 | |
143 | /* CR2: Control register 2 */ |
144 | #define DFSDM_CR2_IE_MASK GENMASK(6, 0) |
145 | #define DFSDM_CR2_IE(v) FIELD_PREP(DFSDM_CR2_IE_MASK, v) |
146 | #define DFSDM_CR2_JEOCIE_MASK BIT(0) |
147 | #define DFSDM_CR2_JEOCIE(v) FIELD_PREP(DFSDM_CR2_JEOCIE_MASK, v) |
148 | #define DFSDM_CR2_REOCIE_MASK BIT(1) |
149 | #define DFSDM_CR2_REOCIE(v) FIELD_PREP(DFSDM_CR2_REOCIE_MASK, v) |
150 | #define DFSDM_CR2_JOVRIE_MASK BIT(2) |
151 | #define DFSDM_CR2_JOVRIE(v) FIELD_PREP(DFSDM_CR2_JOVRIE_MASK, v) |
152 | #define DFSDM_CR2_ROVRIE_MASK BIT(3) |
153 | #define DFSDM_CR2_ROVRIE(v) FIELD_PREP(DFSDM_CR2_ROVRIE_MASK, v) |
154 | #define DFSDM_CR2_AWDIE_MASK BIT(4) |
155 | #define DFSDM_CR2_AWDIE(v) FIELD_PREP(DFSDM_CR2_AWDIE_MASK, v) |
156 | #define DFSDM_CR2_SCDIE_MASK BIT(5) |
157 | #define DFSDM_CR2_SCDIE(v) FIELD_PREP(DFSDM_CR2_SCDIE_MASK, v) |
158 | #define DFSDM_CR2_CKABIE_MASK BIT(6) |
159 | #define DFSDM_CR2_CKABIE(v) FIELD_PREP(DFSDM_CR2_CKABIE_MASK, v) |
160 | #define DFSDM_CR2_EXCH_MASK GENMASK(15, 8) |
161 | #define DFSDM_CR2_EXCH(v) FIELD_PREP(DFSDM_CR2_EXCH_MASK, v) |
162 | #define DFSDM_CR2_AWDCH_MASK GENMASK(23, 16) |
163 | #define DFSDM_CR2_AWDCH(v) FIELD_PREP(DFSDM_CR2_AWDCH_MASK, v) |
164 | |
165 | /* ISR: Interrupt status register */ |
166 | #define DFSDM_ISR_JEOCF_MASK BIT(0) |
167 | #define DFSDM_ISR_JEOCF(v) FIELD_PREP(DFSDM_ISR_JEOCF_MASK, v) |
168 | #define DFSDM_ISR_REOCF_MASK BIT(1) |
169 | #define DFSDM_ISR_REOCF(v) FIELD_PREP(DFSDM_ISR_REOCF_MASK, v) |
170 | #define DFSDM_ISR_JOVRF_MASK BIT(2) |
171 | #define DFSDM_ISR_JOVRF(v) FIELD_PREP(DFSDM_ISR_JOVRF_MASK, v) |
172 | #define DFSDM_ISR_ROVRF_MASK BIT(3) |
173 | #define DFSDM_ISR_ROVRF(v) FIELD_PREP(DFSDM_ISR_ROVRF_MASK, v) |
174 | #define DFSDM_ISR_AWDF_MASK BIT(4) |
175 | #define DFSDM_ISR_AWDF(v) FIELD_PREP(DFSDM_ISR_AWDF_MASK, v) |
176 | #define DFSDM_ISR_JCIP_MASK BIT(13) |
177 | #define DFSDM_ISR_JCIP(v) FIELD_PREP(DFSDM_ISR_JCIP_MASK, v) |
178 | #define DFSDM_ISR_RCIP_MASK BIT(14) |
179 | #define DFSDM_ISR_RCIP(v) FIELD_PREP(DFSDM_ISR_RCIP, v) |
180 | #define DFSDM_ISR_CKABF_MASK GENMASK(23, 16) |
181 | #define DFSDM_ISR_CKABF(v) FIELD_PREP(DFSDM_ISR_CKABF_MASK, v) |
182 | #define DFSDM_ISR_SCDF_MASK GENMASK(31, 24) |
183 | #define DFSDM_ISR_SCDF(v) FIELD_PREP(DFSDM_ISR_SCDF_MASK, v) |
184 | |
185 | /* ICR: Interrupt flag clear register */ |
186 | #define DFSDM_ICR_CLRJOVRF_MASK BIT(2) |
187 | #define DFSDM_ICR_CLRJOVRF(v) FIELD_PREP(DFSDM_ICR_CLRJOVRF_MASK, v) |
188 | #define DFSDM_ICR_CLRROVRF_MASK BIT(3) |
189 | #define DFSDM_ICR_CLRROVRF(v) FIELD_PREP(DFSDM_ICR_CLRROVRF_MASK, v) |
190 | #define DFSDM_ICR_CLRCKABF_MASK GENMASK(23, 16) |
191 | #define DFSDM_ICR_CLRCKABF(v) FIELD_PREP(DFSDM_ICR_CLRCKABF_MASK, v) |
192 | #define DFSDM_ICR_CLRCKABF_CH_MASK(y) BIT(16 + (y)) |
193 | #define DFSDM_ICR_CLRCKABF_CH(v, y) \ |
194 | (((v) << (16 + (y))) & DFSDM_ICR_CLRCKABF_CH_MASK(y)) |
195 | #define DFSDM_ICR_CLRSCDF_MASK GENMASK(31, 24) |
196 | #define DFSDM_ICR_CLRSCDF(v) FIELD_PREP(DFSDM_ICR_CLRSCDF_MASK, v) |
197 | #define DFSDM_ICR_CLRSCDF_CH_MASK(y) BIT(24 + (y)) |
198 | #define DFSDM_ICR_CLRSCDF_CH(v, y) \ |
199 | (((v) << (24 + (y))) & DFSDM_ICR_CLRSCDF_MASK(y)) |
200 | |
201 | /* FCR: Filter control register */ |
202 | #define DFSDM_FCR_IOSR_MASK GENMASK(7, 0) |
203 | #define DFSDM_FCR_IOSR(v) FIELD_PREP(DFSDM_FCR_IOSR_MASK, v) |
204 | #define DFSDM_FCR_FOSR_MASK GENMASK(25, 16) |
205 | #define DFSDM_FCR_FOSR(v) FIELD_PREP(DFSDM_FCR_FOSR_MASK, v) |
206 | #define DFSDM_FCR_FORD_MASK GENMASK(31, 29) |
207 | #define DFSDM_FCR_FORD(v) FIELD_PREP(DFSDM_FCR_FORD_MASK, v) |
208 | |
209 | /* RDATAR: Filter data register for regular channel */ |
210 | #define DFSDM_DATAR_CH_MASK GENMASK(2, 0) |
211 | #define DFSDM_DATAR_DATA_OFFSET 8 |
212 | #define DFSDM_DATAR_DATA_MASK GENMASK(31, DFSDM_DATAR_DATA_OFFSET) |
213 | |
214 | /* AWLTR: Filter analog watchdog low threshold register */ |
215 | #define DFSDM_AWLTR_BKAWL_MASK GENMASK(3, 0) |
216 | #define DFSDM_AWLTR_BKAWL(v) FIELD_PREP(DFSDM_AWLTR_BKAWL_MASK, v) |
217 | #define DFSDM_AWLTR_AWLT_MASK GENMASK(31, 8) |
218 | #define DFSDM_AWLTR_AWLT(v) FIELD_PREP(DFSDM_AWLTR_AWLT_MASK, v) |
219 | |
220 | /* AWHTR: Filter analog watchdog low threshold register */ |
221 | #define DFSDM_AWHTR_BKAWH_MASK GENMASK(3, 0) |
222 | #define DFSDM_AWHTR_BKAWH(v) FIELD_PREP(DFSDM_AWHTR_BKAWH_MASK, v) |
223 | #define DFSDM_AWHTR_AWHT_MASK GENMASK(31, 8) |
224 | #define DFSDM_AWHTR_AWHT(v) FIELD_PREP(DFSDM_AWHTR_AWHT_MASK, v) |
225 | |
226 | /* AWSR: Filter watchdog status register */ |
227 | #define DFSDM_AWSR_AWLTF_MASK GENMASK(7, 0) |
228 | #define DFSDM_AWSR_AWLTF(v) FIELD_PREP(DFSDM_AWSR_AWLTF_MASK, v) |
229 | #define DFSDM_AWSR_AWHTF_MASK GENMASK(15, 8) |
230 | #define DFSDM_AWSR_AWHTF(v) FIELD_PREP(DFSDM_AWSR_AWHTF_MASK, v) |
231 | |
232 | /* AWCFR: Filter watchdog status register */ |
233 | #define DFSDM_AWCFR_AWLTF_MASK GENMASK(7, 0) |
234 | #define DFSDM_AWCFR_AWLTF(v) FIELD_PREP(DFSDM_AWCFR_AWLTF_MASK, v) |
235 | #define DFSDM_AWCFR_AWHTF_MASK GENMASK(15, 8) |
236 | #define DFSDM_AWCFR_AWHTF(v) FIELD_PREP(DFSDM_AWCFR_AWHTF_MASK, v) |
237 | |
238 | /* |
239 | * Identification register definitions |
240 | */ |
241 | #define DFSDM_HWCFGR 0x7F0 |
242 | #define DFSDM_VERR 0x7F4 |
243 | #define DFSDM_IPIDR 0x7F8 |
244 | #define DFSDM_SIDR 0x7FC |
245 | |
246 | /* HWCFGR: Hardware configuration register */ |
247 | #define DFSDM_HWCFGR_NBT_MASK GENMASK(7, 0) |
248 | #define DFSDM_HWCFGR_NBF_MASK GENMASK(15, 8) |
249 | |
250 | /* VERR: Version register */ |
251 | #define DFSDM_VERR_MINREV_MASK GENMASK(3, 0) |
252 | #define DFSDM_VERR_MAJREV_MASK GENMASK(7, 4) |
253 | |
254 | #define STM32MP15_IPIDR_NUMBER 0x00110031 |
255 | |
256 | /* DFSDM filter order */ |
257 | enum stm32_dfsdm_sinc_order { |
258 | DFSDM_FASTSINC_ORDER, /* FastSinc filter type */ |
259 | DFSDM_SINC1_ORDER, /* Sinc 1 filter type */ |
260 | DFSDM_SINC2_ORDER, /* Sinc 2 filter type */ |
261 | DFSDM_SINC3_ORDER, /* Sinc 3 filter type */ |
262 | DFSDM_SINC4_ORDER, /* Sinc 4 filter type (N.A. for watchdog) */ |
263 | DFSDM_SINC5_ORDER, /* Sinc 5 filter type (N.A. for watchdog) */ |
264 | DFSDM_NB_SINC_ORDER, |
265 | }; |
266 | |
267 | /** |
268 | * struct stm32_dfsdm_filter_osr - DFSDM filter settings linked to oversampling |
269 | * @iosr: integrator oversampling |
270 | * @fosr: filter oversampling |
271 | * @rshift: output sample right shift (hardware shift) |
272 | * @lshift: output sample left shift (software shift) |
273 | * @res: output sample resolution |
274 | * @bits: output sample resolution in bits |
275 | * @max: output sample maximum positive value |
276 | */ |
277 | struct stm32_dfsdm_filter_osr { |
278 | unsigned int iosr; |
279 | unsigned int fosr; |
280 | unsigned int rshift; |
281 | unsigned int lshift; |
282 | u64 res; |
283 | u32 bits; |
284 | s32 max; |
285 | }; |
286 | |
287 | /** |
288 | * struct stm32_dfsdm_filter - structure relative to stm32 FDSDM filter |
289 | * @ford: filter order |
290 | * @flo: filter oversampling data table indexed by fast mode flag |
291 | * @sync_mode: filter synchronized with filter 0 |
292 | * @fast: filter fast mode |
293 | */ |
294 | struct stm32_dfsdm_filter { |
295 | enum stm32_dfsdm_sinc_order ford; |
296 | struct stm32_dfsdm_filter_osr flo[2]; |
297 | unsigned int sync_mode; |
298 | unsigned int fast; |
299 | }; |
300 | |
301 | /** |
302 | * struct stm32_dfsdm_channel - structure relative to stm32 FDSDM channel |
303 | * @id: id of the channel |
304 | * @type: interface type linked to stm32_dfsdm_chan_type |
305 | * @src: interface type linked to stm32_dfsdm_chan_src |
306 | * @alt_si: alternative serial input interface |
307 | */ |
308 | struct stm32_dfsdm_channel { |
309 | unsigned int id; |
310 | unsigned int type; |
311 | unsigned int src; |
312 | unsigned int alt_si; |
313 | }; |
314 | |
315 | /** |
316 | * struct stm32_dfsdm - stm32 FDSDM driver common data (for all instances) |
317 | * @base: control registers base cpu addr |
318 | * @phys_base: DFSDM IP register physical address |
319 | * @regmap: regmap for register read/write |
320 | * @fl_list: filter resources list |
321 | * @num_fls: number of filter resources available |
322 | * @ch_list: channel resources list |
323 | * @num_chs: number of channel resources available |
324 | * @spi_master_freq: SPI clock out frequency |
325 | */ |
326 | struct stm32_dfsdm { |
327 | void __iomem *base; |
328 | phys_addr_t phys_base; |
329 | struct regmap *regmap; |
330 | struct stm32_dfsdm_filter *fl_list; |
331 | unsigned int num_fls; |
332 | struct stm32_dfsdm_channel *ch_list; |
333 | unsigned int num_chs; |
334 | unsigned int spi_master_freq; |
335 | }; |
336 | |
337 | /* DFSDM channel serial spi clock source */ |
338 | enum stm32_dfsdm_spi_clk_src { |
339 | DFSDM_CHANNEL_SPI_CLOCK_EXTERNAL, |
340 | DFSDM_CHANNEL_SPI_CLOCK_INTERNAL, |
341 | DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_FALLING, |
342 | DFSDM_CHANNEL_SPI_CLOCK_INTERNAL_DIV2_RISING |
343 | }; |
344 | |
345 | int stm32_dfsdm_start_dfsdm(struct stm32_dfsdm *dfsdm); |
346 | int stm32_dfsdm_stop_dfsdm(struct stm32_dfsdm *dfsdm); |
347 | |
348 | #endif |
349 | |