These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / sound / soc / sti / uniperif.h
1 /*
2  * Copyright (C) STMicroelectronics SA 2015
3  * Authors: Arnaud Pouliquen <arnaud.pouliquen@st.com>
4  *          for STMicroelectronics.
5  * License terms:  GNU General Public License (GPL), version 2
6  */
7
8 #ifndef __SND_ST_AUD_UNIPERIF_H
9 #define __SND_ST_AUD_UNIPERIF_H
10
11 #include <linux/regmap.h>
12
13 #include <sound/dmaengine_pcm.h>
14
15 /*
16  * Register access macros
17  */
18
19 #define GET_UNIPERIF_REG(ip, offset, shift, mask) \
20         ((readl_relaxed(ip->base + offset) >> shift) & mask)
21 #define SET_UNIPERIF_REG(ip, offset, shift, mask, value) \
22         writel_relaxed(((readl_relaxed(ip->base + offset) & \
23         ~(mask << shift)) | (((value) & mask) << shift)), ip->base + offset)
24 #define SET_UNIPERIF_BIT_REG(ip, offset, shift, mask, value) \
25         writel_relaxed((((value) & mask) << shift), ip->base + offset)
26
27 /*
28  * AUD_UNIPERIF_SOFT_RST reg
29  */
30
31 #define UNIPERIF_SOFT_RST_OFFSET(ip) 0x0000
32 #define GET_UNIPERIF_SOFT_RST(ip) \
33         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
34                 readl_relaxed(ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) : 0)
35 #define SET_UNIPERIF_SOFT_RST(ip, value) \
36         writel_relaxed(value, ip->base + UNIPERIF_SOFT_RST_OFFSET(ip))
37
38 /* SOFT_RST */
39 #define UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip) 0x0
40 #define UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip) 0x1
41 #define SET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \
42         SET_UNIPERIF_BIT_REG(ip, \
43                 UNIPERIF_SOFT_RST_OFFSET(ip), \
44                 UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \
45                 UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip), 1)
46 #define GET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \
47         GET_UNIPERIF_REG(ip, \
48                 UNIPERIF_SOFT_RST_OFFSET(ip), \
49                 UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \
50                 UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip))
51
52 /*
53  * AUD_UNIPERIF_FIFO_DATA reg
54  */
55
56 #define UNIPERIF_FIFO_DATA_OFFSET(ip) 0x0004
57 #define SET_UNIPERIF_DATA(ip, value) \
58         writel_relaxed(value, ip->base + UNIPERIF_FIFO_DATA_OFFSET(ip))
59
60 /*
61  * AUD_UNIPERIF_CHANNEL_STA_REGN reg
62  */
63
64 #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n))
65 #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \
66         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n))
67 #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \
68         writel_relaxed(value, ip->base + \
69                         UNIPERIF_CHANNEL_STA_REGN(ip, n))
70
71 #define UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip) 0x0060
72 #define GET_UNIPERIF_CHANNEL_STA_REG0(ip) \
73         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip))
74 #define SET_UNIPERIF_CHANNEL_STA_REG0(ip, value) \
75         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip))
76
77 #define UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip) 0x0064
78 #define GET_UNIPERIF_CHANNEL_STA_REG1(ip) \
79         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip))
80 #define SET_UNIPERIF_CHANNEL_STA_REG1(ip, value) \
81         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip))
82
83 #define UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip) 0x0068
84 #define GET_UNIPERIF_CHANNEL_STA_REG2(ip) \
85         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip))
86 #define SET_UNIPERIF_CHANNEL_STA_REG2(ip, value) \
87         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip))
88
89 #define UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip) 0x006C
90 #define GET_UNIPERIF_CHANNEL_STA_REG3(ip) \
91         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip))
92 #define SET_UNIPERIF_CHANNEL_STA_REG3(ip, value) \
93         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip))
94
95 #define UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip) 0x0070
96 #define GET_UNIPERIF_CHANNEL_STA_REG4(ip) \
97         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip))
98 #define SET_UNIPERIF_CHANNEL_STA_REG4(ip, value) \
99         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip))
100
101 #define UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip) 0x0074
102 #define GET_UNIPERIF_CHANNEL_STA_REG5(ip) \
103         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip))
104 #define SET_UNIPERIF_CHANNEL_STA_REG5(ip, value) \
105         writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip))
106
107 /*
108  *  AUD_UNIPERIF_ITS reg
109  */
110
111 #define UNIPERIF_ITS_OFFSET(ip) 0x000C
112 #define GET_UNIPERIF_ITS(ip) \
113         readl_relaxed(ip->base + UNIPERIF_ITS_OFFSET(ip))
114
115 /* MEM_BLK_READ */
116 #define UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip) 5
117 #define UNIPERIF_ITS_MEM_BLK_READ_MASK(ip) \
118         (BIT(UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip)))
119
120 /* FIFO_ERROR */
121 #define UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip) \
122         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
123 #define UNIPERIF_ITS_FIFO_ERROR_MASK(ip) \
124         (BIT(UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip)))
125
126 /* DMA_ERROR */
127 #define UNIPERIF_ITS_DMA_ERROR_SHIFT(ip) 9
128 #define UNIPERIF_ITS_DMA_ERROR_MASK(ip) \
129         (BIT(UNIPERIF_ITS_DMA_ERROR_SHIFT(ip)))
130
131 /* UNDERFLOW_REC_DONE */
132 #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip) \
133         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
134 #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_MASK(ip) \
135         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
136                 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip))))
137
138 /* UNDERFLOW_REC_FAILED */
139 #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip) \
140         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
141 #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_MASK(ip) \
142         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
143                 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip))))
144
145 /*
146  *  AUD_UNIPERIF_ITS_BCLR reg
147  */
148
149 /* FIFO_ERROR */
150 #define UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip) \
151         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
152 #define UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip) \
153         (BIT(UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip)))
154 #define SET_UNIPERIF_ITS_BCLR_FIFO_ERROR(ip) \
155         SET_UNIPERIF_ITS_BCLR(ip, \
156                 UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip))
157
158 #define UNIPERIF_ITS_BCLR_OFFSET(ip) 0x0010
159 #define SET_UNIPERIF_ITS_BCLR(ip, value) \
160         writel_relaxed(value, ip->base + UNIPERIF_ITS_BCLR_OFFSET(ip))
161
162 /*
163  *  AUD_UNIPERIF_ITM reg
164  */
165
166 #define UNIPERIF_ITM_OFFSET(ip) 0x0018
167 #define GET_UNIPERIF_ITM(ip) \
168         readl_relaxed(ip->base + UNIPERIF_ITM_OFFSET(ip))
169
170 /* FIFO_ERROR */
171 #define UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip) \
172         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
173 #define UNIPERIF_ITM_FIFO_ERROR_MASK(ip) \
174         (BIT(UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip)))
175
176 /* UNDERFLOW_REC_DONE */
177 #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip) \
178         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
179 #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_MASK(ip) \
180         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
181                 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip))))
182
183 /* UNDERFLOW_REC_FAILED */
184 #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip) \
185         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
186 #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_MASK(ip) \
187         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
188                 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip))))
189
190 /*
191  *  AUD_UNIPERIF_ITM_BCLR reg
192  */
193
194 #define UNIPERIF_ITM_BCLR_OFFSET(ip) 0x001c
195 #define SET_UNIPERIF_ITM_BCLR(ip, value) \
196         writel_relaxed(value, ip->base + UNIPERIF_ITM_BCLR_OFFSET(ip))
197
198 /* FIFO_ERROR */
199 #define UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip) \
200         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
201 #define UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip) \
202         (BIT(UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip)))
203 #define SET_UNIPERIF_ITM_BCLR_FIFO_ERROR(ip) \
204         SET_UNIPERIF_ITM_BCLR(ip, \
205                 UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip))
206
207 /* DMA_ERROR */
208 #define UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip) 9
209 #define UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip) \
210         (BIT(UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip)))
211 #define SET_UNIPERIF_ITM_BCLR_DMA_ERROR(ip) \
212         SET_UNIPERIF_ITM_BCLR(ip, \
213                 UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip))
214
215 /*
216  *  AUD_UNIPERIF_ITM_BSET reg
217  */
218
219 #define UNIPERIF_ITM_BSET_OFFSET(ip) 0x0020
220 #define SET_UNIPERIF_ITM_BSET(ip, value) \
221         writel_relaxed(value, ip->base + UNIPERIF_ITM_BSET_OFFSET(ip))
222
223 /* FIFO_ERROR */
224 #define UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip) \
225         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
226 #define UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip) \
227         (BIT(UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip)))
228 #define SET_UNIPERIF_ITM_BSET_FIFO_ERROR(ip) \
229         SET_UNIPERIF_ITM_BSET(ip, \
230                 UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip))
231
232 /* MEM_BLK_READ */
233 #define UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip) 5
234 #define UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip) \
235         (BIT(UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip)))
236 #define SET_UNIPERIF_ITM_BSET_MEM_BLK_READ(ip) \
237         SET_UNIPERIF_ITM_BSET(ip, \
238                 UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip))
239
240 /* DMA_ERROR */
241 #define UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip) 9
242 #define UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip) \
243         (BIT(UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip)))
244 #define SET_UNIPERIF_ITM_BSET_DMA_ERROR(ip) \
245         SET_UNIPERIF_ITM_BSET(ip, \
246                 UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip))
247
248 /* UNDERFLOW_REC_DONE */
249 #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip) \
250         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
251 #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip) \
252         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
253                 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip))))
254 #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE(ip) \
255         SET_UNIPERIF_ITM_BSET(ip, \
256                 UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip))
257
258 /* UNDERFLOW_REC_FAILED */
259 #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip) \
260         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
261 #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip) \
262         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
263                 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip))))
264 #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(ip) \
265         SET_UNIPERIF_ITM_BSET(ip, \
266                 UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip))
267
268 /*
269  * UNIPERIF_CONFIG reg
270  */
271
272 #define UNIPERIF_CONFIG_OFFSET(ip) 0x0040
273 #define GET_UNIPERIF_CONFIG(ip) \
274         readl_relaxed(ip->base + UNIPERIF_CONFIG_OFFSET(ip))
275 #define SET_UNIPERIF_CONFIG(ip, value) \
276         writel_relaxed(value, ip->base + UNIPERIF_CONFIG_OFFSET(ip))
277
278 /* PARITY_CNTR */
279 #define UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip) 0
280 #define UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip) 0x1
281 #define GET_UNIPERIF_CONFIG_PARITY_CNTR(ip) \
282         GET_UNIPERIF_REG(ip, \
283                 UNIPERIF_CONFIG_OFFSET(ip), \
284                 UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
285                 UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip))
286 #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_HW(ip) \
287         SET_UNIPERIF_REG(ip, \
288                 UNIPERIF_CONFIG_OFFSET(ip), \
289                 UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
290                 UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 0)
291 #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_SW(ip) \
292         SET_UNIPERIF_REG(ip, \
293                 UNIPERIF_CONFIG_OFFSET(ip), \
294                 UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
295                 UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 1)
296
297 /* CHANNEL_STA_CNTR */
298 #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip) 1
299 #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip) 0x1
300 #define GET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR(ip) \
301         GET_UNIPERIF_REG(ip, \
302                 UNIPERIF_CONFIG_OFFSET(ip), \
303                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
304                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip))
305 #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_SW(ip) \
306         SET_UNIPERIF_REG(ip, \
307                 UNIPERIF_CONFIG_OFFSET(ip), \
308                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
309                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 0)
310 #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_HW(ip) \
311         SET_UNIPERIF_REG(ip, \
312                 UNIPERIF_CONFIG_OFFSET(ip),    \
313                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
314                 UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 1)
315
316 /* USER_DAT_CNTR */
317 #define UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip) 2
318 #define UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip) 0x1
319 #define GET_UNIPERIF_CONFIG_USER_DAT_CNTR(ip) \
320         GET_UNIPERIF_REG(ip, \
321                 UNIPERIF_CONFIG_OFFSET(ip), \
322                 UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
323                 UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip))
324 #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_HW(ip) \
325         SET_UNIPERIF_REG(ip, \
326                 UNIPERIF_CONFIG_OFFSET(ip), \
327                 UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
328                 UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 1)
329 #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_SW(ip) \
330         SET_UNIPERIF_REG(ip, \
331                 UNIPERIF_CONFIG_OFFSET(ip), \
332                 UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
333                 UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 0)
334
335 /* VALIDITY_DAT_CNTR */
336 #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip) 3
337 #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip) 0x1
338 #define GET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR(ip) \
339         GET_UNIPERIF_REG(ip, \
340                 UNIPERIF_CONFIG_OFFSET(ip), \
341                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
342                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip))
343 #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_SW(ip) \
344         SET_UNIPERIF_REG(ip, \
345                 UNIPERIF_CONFIG_OFFSET(ip), \
346                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
347                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 0)
348 #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_HW(ip) \
349         SET_UNIPERIF_REG(ip, \
350                 UNIPERIF_CONFIG_OFFSET(ip), \
351                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
352                 UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 1)
353
354 /* ONE_BIT_AUD_SUPPORT */
355 #define UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip) 4
356 #define UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip) 0x1
357 #define GET_UNIPERIF_CONFIG_ONE_BIT_AUD(ip) \
358         GET_UNIPERIF_REG(ip, \
359                 UNIPERIF_CONFIG_OFFSET(ip), \
360                 UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
361                 UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip))
362 #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_DISABLE(ip) \
363         SET_UNIPERIF_REG(ip, \
364                 UNIPERIF_CONFIG_OFFSET(ip), \
365                 UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
366                 UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 0)
367 #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_ENABLE(ip) \
368         SET_UNIPERIF_REG(ip, \
369                 UNIPERIF_CONFIG_OFFSET(ip), \
370                 UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
371                 UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 1)
372
373 /* MEMORY_FMT */
374 #define UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip) 5
375 #define UNIPERIF_CONFIG_MEM_FMT_MASK(ip) 0x1
376 #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) 0
377 #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) 1
378 #define GET_UNIPERIF_CONFIG_MEM_FMT(ip) \
379         GET_UNIPERIF_REG(ip, \
380                 UNIPERIF_CONFIG_OFFSET(ip), \
381                 UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \
382                 UNIPERIF_CONFIG_MEM_FMT_MASK(ip))
383 #define SET_UNIPERIF_CONFIG_MEM_FMT(ip, value)  \
384         SET_UNIPERIF_REG(ip, \
385                 UNIPERIF_CONFIG_OFFSET(ip), \
386                 UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \
387                 UNIPERIF_CONFIG_MEM_FMT_MASK(ip), value)
388 #define SET_UNIPERIF_CONFIG_MEM_FMT_16_0(ip)   \
389         SET_UNIPERIF_CONFIG_MEM_FMT(ip, \
390                 VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip))
391 #define SET_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) \
392         SET_UNIPERIF_CONFIG_MEM_FMT(ip, \
393                 VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip))
394
395 /* REPEAT_CHL_STS */
396 #define UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip) 6
397 #define UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip) 0x1
398 #define GET_UNIPERIF_CONFIG_REPEAT_CHL_STS(ip) \
399         GET_UNIPERIF_REG(ip, \
400                 UNIPERIF_CONFIG_OFFSET(ip), \
401                 UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
402                 UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip))
403 #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_ENABLE(ip) \
404         SET_UNIPERIF_REG(ip, \
405                 UNIPERIF_CONFIG_OFFSET(ip), \
406                 UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
407                 UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 0)
408 #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_DISABLE(ip) \
409         SET_UNIPERIF_REG(ip, \
410                 UNIPERIF_CONFIG_OFFSET(ip), \
411                 UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
412                 UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 1)
413
414 /* BACK_STALL_REQ */
415 #define UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip) \
416         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 7 : -1)
417 #define UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip) 0x1
418 #define GET_UNIPERIF_CONFIG_BACK_STALL_REQ(ip) \
419         GET_UNIPERIF_REG(ip, \
420                 UNIPERIF_CONFIG_OFFSET(ip), \
421                 UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
422                 UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip))
423 #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_DISABLE(ip) \
424         SET_UNIPERIF_REG(ip, \
425                 UNIPERIF_CONFIG_OFFSET(ip), \
426                 UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
427                 UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 0)
428 #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_ENABLE(ip) \
429         SET_UNIPERIF_REG(ip, \
430                 UNIPERIF_CONFIG_OFFSET(ip), \
431                 UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
432                 UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 1)
433
434 /* FDMA_TRIGGER_LIMIT */
435 #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip) 8
436 #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip) 0x7F
437 #define GET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip) \
438         GET_UNIPERIF_REG(ip, \
439                 UNIPERIF_CONFIG_OFFSET(ip), \
440                 UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \
441                 UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip))
442 #define SET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip, value) \
443         SET_UNIPERIF_REG(ip, \
444                 UNIPERIF_CONFIG_OFFSET(ip), \
445                 UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \
446                 UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip), value)
447
448 /* CHL_STS_UPDATE */
449 #define UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip) \
450         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1)
451 #define UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip) 0x1
452 #define GET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \
453         GET_UNIPERIF_REG(ip, \
454                 UNIPERIF_CONFIG_OFFSET(ip),  \
455                 UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \
456                 UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip))
457 #define SET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \
458         SET_UNIPERIF_REG(ip, \
459                 UNIPERIF_CONFIG_OFFSET(ip), \
460                 UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \
461                 UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip), 1)
462
463 /* IDLE_MOD */
464 #define UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip) 18
465 #define UNIPERIF_CONFIG_IDLE_MOD_MASK(ip) 0x1
466 #define GET_UNIPERIF_CONFIG_IDLE_MOD(ip) \
467         GET_UNIPERIF_REG(ip, \
468                 UNIPERIF_CONFIG_OFFSET(ip), \
469                 UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
470                 UNIPERIF_CONFIG_IDLE_MOD_MASK(ip))
471 #define SET_UNIPERIF_CONFIG_IDLE_MOD_DISABLE(ip) \
472         SET_UNIPERIF_REG(ip, \
473                 UNIPERIF_CONFIG_OFFSET(ip), \
474                 UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
475                 UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 0)
476 #define SET_UNIPERIF_CONFIG_IDLE_MOD_ENABLE(ip) \
477         SET_UNIPERIF_REG(ip, \
478                 UNIPERIF_CONFIG_OFFSET(ip), \
479                 UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
480                 UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 1)
481
482 /* SUBFRAME_SELECTION */
483 #define UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip) 19
484 #define UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip) 0x1
485 #define GET_UNIPERIF_CONFIG_SUBFRAME_SEL(ip) \
486         GET_UNIPERIF_REG(ip, \
487                 UNIPERIF_CONFIG_OFFSET(ip), \
488                 UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
489                 UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip))
490 #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF1_SUBF0(ip) \
491         SET_UNIPERIF_REG(ip, \
492                 UNIPERIF_CONFIG_OFFSET(ip), \
493                 UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
494                 UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 1)
495 #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF0_SUBF1(ip) \
496         SET_UNIPERIF_REG(ip, \
497                 UNIPERIF_CONFIG_OFFSET(ip), \
498                 UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
499                 UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 0)
500
501 /* FULL_SW_CONTROL */
502 #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip) 20
503 #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip) 0x1
504 #define GET_UNIPERIF_CONFIG_SPDIF_SW_CTRL(ip) \
505         GET_UNIPERIF_REG(ip, \
506                 UNIPERIF_CONFIG_OFFSET(ip), \
507                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
508                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip))
509 #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_ENABLE(ip) \
510         SET_UNIPERIF_REG(ip, \
511                 UNIPERIF_CONFIG_OFFSET(ip), \
512                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
513                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 1)
514 #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_DISABLE(ip) \
515         SET_UNIPERIF_REG(ip, \
516                 UNIPERIF_CONFIG_OFFSET(ip), \
517                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
518                 UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 0)
519
520 /* MASTER_CLKEDGE */
521 #define UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip) \
522         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 24 : -1)
523 #define UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip) 0x1
524 #define GET_UNIPERIF_CONFIG_MSTR_CLKEDGE(ip) \
525         GET_UNIPERIF_REG(ip, \
526                 UNIPERIF_CONFIG_OFFSET(ip), \
527                 UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
528                 UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip))
529 #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_FALLING(ip) \
530         SET_UNIPERIF_REG(ip, \
531                 UNIPERIF_CONFIG_OFFSET(ip), \
532                 UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
533                 UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 1)
534 #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_RISING(ip) \
535         SET_UNIPERIF_REG(ip, \
536                 UNIPERIF_CONFIG_OFFSET(ip), \
537                 UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
538                 UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 0)
539
540 /*
541  * UNIPERIF_CTRL reg
542  */
543
544 #define UNIPERIF_CTRL_OFFSET(ip) 0x0044
545 #define GET_UNIPERIF_CTRL(ip) \
546         readl_relaxed(ip->base + UNIPERIF_CTRL_OFFSET(ip))
547 #define SET_UNIPERIF_CTRL(ip, value) \
548         writel_relaxed(value, ip->base + UNIPERIF_CTRL_OFFSET(ip))
549
550 /* OPERATION */
551 #define UNIPERIF_CTRL_OPERATION_SHIFT(ip) 0
552 #define UNIPERIF_CTRL_OPERATION_MASK(ip) 0x7
553 #define GET_UNIPERIF_CTRL_OPERATION(ip) \
554         GET_UNIPERIF_REG(ip, \
555                 UNIPERIF_CTRL_OFFSET(ip), \
556                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
557                 UNIPERIF_CTRL_OPERATION_MASK(ip))
558 #define VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip) 0
559 #define SET_UNIPERIF_CTRL_OPERATION_OFF(ip) \
560         SET_UNIPERIF_REG(ip, \
561                 UNIPERIF_CTRL_OFFSET(ip), \
562                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
563                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
564                 VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip))
565 #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \
566         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 1 : -1)
567 #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \
568         SET_UNIPERIF_REG(ip, \
569                 UNIPERIF_CTRL_OFFSET(ip), \
570                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
571                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
572                 VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip))
573 #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \
574         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 2 : -1)
575 #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \
576         SET_UNIPERIF_REG(ip, \
577                 UNIPERIF_CTRL_OFFSET(ip), \
578                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
579                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
580                 VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip))
581 #define VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) 3
582 #define SET_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) \
583         SET_UNIPERIF_REG(ip, \
584                 UNIPERIF_CTRL_OFFSET(ip), \
585                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
586                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
587                 VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip))
588 /* This is the same as above! */
589 #define VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) 3
590 #define SET_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) \
591         SET_UNIPERIF_REG(ip, \
592                 UNIPERIF_CTRL_OFFSET(ip), \
593                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
594                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
595                 VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip))
596 #define VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) 4
597 #define SET_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) \
598         SET_UNIPERIF_REG(ip, \
599                 UNIPERIF_CTRL_OFFSET(ip), \
600                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
601                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
602                 VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip))
603 #define VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \
604         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 5 : -1)
605 #define SET_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \
606         SET_UNIPERIF_REG(ip, \
607                 UNIPERIF_CTRL_OFFSET(ip), \
608                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
609                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
610                 VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip))
611 #define VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \
612         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 7)
613 #define SET_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \
614         SET_UNIPERIF_REG(ip, \
615                 UNIPERIF_CTRL_OFFSET(ip), \
616                 UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
617                 UNIPERIF_CTRL_OPERATION_MASK(ip), \
618                 VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip))
619
620 /* EXIT_STBY_ON_EOBLOCK */
621 #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip) \
622         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 3)
623 #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip) 0x1
624 #define GET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK(ip) \
625         GET_UNIPERIF_REG(ip, \
626                 UNIPERIF_CTRL_OFFSET(ip), \
627                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
628                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip))
629 #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_OFF(ip) \
630         SET_UNIPERIF_REG(ip, \
631                 UNIPERIF_CTRL_OFFSET(ip), \
632                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
633                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 0)
634 #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_ON(ip) \
635         SET_UNIPERIF_REG(ip, \
636                 UNIPERIF_CTRL_OFFSET(ip), \
637                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
638                 UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 1)
639
640 /* ROUNDING */
641 #define UNIPERIF_CTRL_ROUNDING_SHIFT(ip) 4
642 #define UNIPERIF_CTRL_ROUNDING_MASK(ip) 0x1
643 #define GET_UNIPERIF_CTRL_ROUNDING(ip) \
644         GET_UNIPERIF_REG(ip, \
645                 UNIPERIF_CTRL_OFFSET(ip), \
646                 UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
647                 UNIPERIF_CTRL_ROUNDING_MASK(ip))
648 #define SET_UNIPERIF_CTRL_ROUNDING_OFF(ip) \
649         SET_UNIPERIF_REG(ip, \
650                 UNIPERIF_CTRL_OFFSET(ip), \
651                 UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
652                 UNIPERIF_CTRL_ROUNDING_MASK(ip), 0)
653 #define SET_UNIPERIF_CTRL_ROUNDING_ON(ip) \
654         SET_UNIPERIF_REG(ip, \
655                 UNIPERIF_CTRL_OFFSET(ip), \
656                 UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
657                 UNIPERIF_CTRL_ROUNDING_MASK(ip), 1)
658
659 /* DIVIDER */
660 #define UNIPERIF_CTRL_DIVIDER_SHIFT(ip) 5
661 #define UNIPERIF_CTRL_DIVIDER_MASK(ip) 0xff
662 #define GET_UNIPERIF_CTRL_DIVIDER(ip) \
663         GET_UNIPERIF_REG(ip, \
664                 UNIPERIF_CTRL_OFFSET(ip), \
665                 UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \
666                 UNIPERIF_CTRL_DIVIDER_MASK(ip))
667 #define SET_UNIPERIF_CTRL_DIVIDER(ip, value) \
668         SET_UNIPERIF_REG(ip, \
669                 UNIPERIF_CTRL_OFFSET(ip), \
670                 UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \
671                 UNIPERIF_CTRL_DIVIDER_MASK(ip), value)
672
673 /* BYTE_SWAP */
674 #define UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip) \
675         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 13 : -1)
676 #define UNIPERIF_CTRL_BYTE_SWP_MASK(ip) 0x1
677 #define GET_UNIPERIF_CTRL_BYTE_SWP(ip) \
678         GET_UNIPERIF_REG(ip, \
679                 UNIPERIF_CTRL_OFFSET(ip), \
680                 UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
681                 UNIPERIF_CTRL_BYTE_SWP_MASK(ip))
682 #define SET_UNIPERIF_CTRL_BYTE_SWP_OFF(ip) \
683         SET_UNIPERIF_REG(ip, \
684                 UNIPERIF_CTRL_OFFSET(ip), \
685                 UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
686                 UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 0)
687 #define SET_UNIPERIF_CTRL_BYTE_SWP_ON(ip) \
688         SET_UNIPERIF_REG(ip, \
689                 UNIPERIF_CTRL_OFFSET(ip), \
690                 UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
691                 UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 1)
692
693 /* ZERO_STUFFING_HW_SW */
694 #define UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip) \
695         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 14 : -1)
696 #define UNIPERIF_CTRL_ZERO_STUFF_MASK(ip) 0x1
697 #define GET_UNIPERIF_CTRL_ZERO_STUFF(ip) \
698         GET_UNIPERIF_REG(ip, \
699                 UNIPERIF_CTRL_OFFSET(ip), \
700                 UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
701                 UNIPERIF_CTRL_ZERO_STUFF_MASK(ip))
702 #define SET_UNIPERIF_CTRL_ZERO_STUFF_HW(ip) \
703         SET_UNIPERIF_REG(ip, \
704                 UNIPERIF_CTRL_OFFSET(ip), \
705                 UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
706                 UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 1)
707 #define SET_UNIPERIF_CTRL_ZERO_STUFF_SW(ip) \
708         SET_UNIPERIF_REG(ip, \
709                 UNIPERIF_CTRL_OFFSET(ip), \
710                 UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
711                 UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 0)
712
713 /* SPDIF_LAT */
714 #define UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip) \
715         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1)
716 #define UNIPERIF_CTRL_SPDIF_LAT_MASK(ip) 0x1
717 #define GET_UNIPERIF_CTRL_SPDIF_LAT(ip) \
718         GET_UNIPERIF_REG(ip, \
719                 UNIPERIF_CTRL_OFFSET(ip), \
720                 UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
721                 UNIPERIF_CTRL_SPDIF_LAT_MASK(ip))
722 #define SET_UNIPERIF_CTRL_SPDIF_LAT_ON(ip) \
723         SET_UNIPERIF_REG(ip, \
724                 UNIPERIF_CTRL_OFFSET(ip), \
725                 UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
726                 UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 1)
727 #define SET_UNIPERIF_CTRL_SPDIF_LAT_OFF(ip) \
728         SET_UNIPERIF_REG(ip, \
729                 UNIPERIF_CTRL_OFFSET(ip), \
730                 UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
731                 UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 0)
732
733 /* EN_SPDIF_FORMATTING */
734 #define UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip) 17
735 #define UNIPERIF_CTRL_SPDIF_FMT_MASK(ip) 0x1
736 #define GET_UNIPERIF_CTRL_SPDIF_FMT(ip) \
737         GET_UNIPERIF_REG(ip, \
738                 UNIPERIF_CTRL_OFFSET(ip), \
739                 UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
740                 UNIPERIF_CTRL_SPDIF_FMT_MASK(ip))
741 #define SET_UNIPERIF_CTRL_SPDIF_FMT_ON(ip) \
742         SET_UNIPERIF_REG(ip, \
743                 UNIPERIF_CTRL_OFFSET(ip), \
744                 UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
745                 UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 1)
746 #define SET_UNIPERIF_CTRL_SPDIF_FMT_OFF(ip) \
747         SET_UNIPERIF_REG(ip, \
748                 UNIPERIF_CTRL_OFFSET(ip), \
749                 UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
750                 UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 0)
751
752 /* READER_OUT_SELECT */
753 #define UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip) \
754         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 18 : -1)
755 #define UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip) 0x1
756 #define GET_UNIPERIF_CTRL_READER_OUT_SEL(ip) \
757         GET_UNIPERIF_REG(ip, \
758                 UNIPERIF_CTRL_OFFSET(ip), \
759                 UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
760                 UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip))
761 #define SET_UNIPERIF_CTRL_READER_OUT_SEL_IN_MEM(ip) \
762         SET_UNIPERIF_REG(ip, \
763                 UNIPERIF_CTRL_OFFSET(ip), \
764                 UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
765                 UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 0)
766 #define SET_UNIPERIF_CTRL_READER_OUT_SEL_ON_I2S_LINE(ip) \
767         SET_UNIPERIF_REG(ip, \
768                 UNIPERIF_CTRL_OFFSET(ip), \
769                 UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
770                 CORAUD_UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 1)
771
772 /* UNDERFLOW_REC_WINDOW */
773 #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip) 20
774 #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip) 0xff
775 #define GET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip) \
776         GET_UNIPERIF_REG(ip, \
777                 UNIPERIF_CTRL_OFFSET(ip), \
778                 UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \
779                 UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip))
780 #define SET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip, value) \
781         SET_UNIPERIF_REG(ip, \
782                 UNIPERIF_CTRL_OFFSET(ip), \
783                 UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \
784                 UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip), value)
785
786 /*
787  * UNIPERIF_I2S_FMT a.k.a UNIPERIF_FORMAT reg
788  */
789
790 #define UNIPERIF_I2S_FMT_OFFSET(ip) 0x0048
791 #define GET_UNIPERIF_I2S_FMT(ip) \
792         readl_relaxed(ip->base + UNIPERIF_I2S_FMT_OFFSET(ip))
793 #define SET_UNIPERIF_I2S_FMT(ip, value) \
794         writel_relaxed(value, ip->base + UNIPERIF_I2S_FMT_OFFSET(ip))
795
796 /* NBIT */
797 #define UNIPERIF_I2S_FMT_NBIT_SHIFT(ip) 0
798 #define UNIPERIF_I2S_FMT_NBIT_MASK(ip) 0x1
799 #define GET_UNIPERIF_I2S_FMT_NBIT(ip) \
800         GET_UNIPERIF_REG(ip, \
801                 UNIPERIF_I2S_FMT_OFFSET(ip), \
802                 UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
803                 UNIPERIF_I2S_FMT_NBIT_MASK(ip))
804 #define SET_UNIPERIF_I2S_FMT_NBIT_32(ip) \
805         SET_UNIPERIF_REG(ip, \
806                 UNIPERIF_I2S_FMT_OFFSET(ip), \
807                 UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
808                 UNIPERIF_I2S_FMT_NBIT_MASK(ip), 0)
809 #define SET_UNIPERIF_I2S_FMT_NBIT_16(ip) \
810         SET_UNIPERIF_REG(ip, \
811                 UNIPERIF_I2S_FMT_OFFSET(ip), \
812                 UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
813                 UNIPERIF_I2S_FMT_NBIT_MASK(ip), 1)
814
815 /* DATA_SIZE */
816 #define UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip) 1
817 #define UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip) 0x7
818 #define GET_UNIPERIF_I2S_FMT_DATA_SIZE(ip) \
819         GET_UNIPERIF_REG(ip, \
820                 UNIPERIF_I2S_FMT_OFFSET(ip), \
821                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
822                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip))
823 #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(ip) \
824         SET_UNIPERIF_REG(ip, \
825                 UNIPERIF_I2S_FMT_OFFSET(ip), \
826                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
827                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 0)
828 #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_18(ip) \
829         SET_UNIPERIF_REG(ip, \
830                 UNIPERIF_I2S_FMT_OFFSET(ip), \
831                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
832                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 1)
833 #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_20(ip) \
834         SET_UNIPERIF_REG(ip, \
835                 UNIPERIF_I2S_FMT_OFFSET(ip), \
836                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
837                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 2)
838 #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_24(ip) \
839         SET_UNIPERIF_REG(ip, \
840                 UNIPERIF_I2S_FMT_OFFSET(ip), \
841                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
842                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 3)
843 #define SET_UNIPERIF_I2S_FMTL_DATA_SIZE_28(ip) \
844         SET_UNIPERIF_REG(ip, \
845                 UNIPERIF_I2S_FMT_OFFSET(ip), \
846                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
847                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 4)
848 #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_32(ip) \
849         SET_UNIPERIF_REG(ip, \
850                 UNIPERIF_I2S_FMT_OFFSET(ip), \
851                 UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
852                 UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 5)
853
854 /* LR_POL */
855 #define UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip) 4
856 #define UNIPERIF_I2S_FMT_LR_POL_MASK(ip) 0x1
857 #define VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) 0x0
858 #define VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) 0x1
859 #define GET_UNIPERIF_I2S_FMT_LR_POL(ip) \
860         GET_UNIPERIF_REG(ip, \
861                 UNIPERIF_I2S_FMT_OFFSET(ip), \
862                 UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \
863                 UNIPERIF_I2S_FMT_LR_POL_MASK(ip))
864 #define SET_UNIPERIF_I2S_FMT_LR_POL(ip, value) \
865         SET_UNIPERIF_REG(ip, \
866                 UNIPERIF_I2S_FMT_OFFSET(ip), \
867                 UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \
868                 UNIPERIF_I2S_FMT_LR_POL_MASK(ip), value)
869 #define SET_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) \
870         SET_UNIPERIF_I2S_FMT_LR_POL(ip, \
871                 VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip))
872 #define SET_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) \
873         SET_UNIPERIF_I2S_FMT_LR_POL(ip, \
874                 VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip))
875
876 /* SCLK_EDGE */
877 #define UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip) 5
878 #define UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip) 0x1
879 #define GET_UNIPERIF_I2S_FMT_SCLK_EDGE(ip) \
880         GET_UNIPERIF_REG(ip, \
881                 UNIPERIF_I2S_FMT_OFFSET(ip), \
882                 UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
883                 UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip))
884 #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_RISING(ip) \
885         SET_UNIPERIF_REG(ip, \
886                 UNIPERIF_I2S_FMT_OFFSET(ip), \
887                 UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
888                 UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 0)
889 #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_FALLING(ip) \
890         SET_UNIPERIF_REG(ip, \
891                 UNIPERIF_I2S_FMT_OFFSET(ip), \
892                 UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
893                 UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 1)
894
895 /* PADDING */
896 #define UNIPERIF_I2S_FMT_PADDING_SHIFT(ip) 6
897 #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1
898 #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1
899 #define VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) 0x0
900 #define VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) 0x1
901 #define GET_UNIPERIF_I2S_FMT_PADDING(ip) \
902         GET_UNIPERIF_REG(ip, \
903                 UNIPERIF_I2S_FMT_OFFSET(ip), \
904                 UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \
905                 UNIPERIF_I2S_FMT_PADDING_MASK(ip))
906 #define SET_UNIPERIF_I2S_FMT_PADDING(ip, value) \
907         SET_UNIPERIF_REG(ip, \
908                 UNIPERIF_I2S_FMT_OFFSET(ip), \
909                 UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \
910                 UNIPERIF_I2S_FMT_PADDING_MASK(ip), value)
911 #define SET_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) \
912         SET_UNIPERIF_I2S_FMT_PADDING(ip, \
913                 VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip))
914 #define SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) \
915         SET_UNIPERIF_I2S_FMT_PADDING(ip, \
916                 VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip))
917
918 /* ALIGN */
919 #define UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip) 7
920 #define UNIPERIF_I2S_FMT_ALIGN_MASK(ip) 0x1
921 #define GET_UNIPERIF_I2S_FMT_ALIGN(ip) \
922         GET_UNIPERIF_REG(ip, \
923                 UNIPERIF_I2S_FMT_OFFSET(ip), \
924                 UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
925                 UNIPERIF_I2S_FMT_ALIGN_MASK(ip))
926 #define SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(ip) \
927         SET_UNIPERIF_REG(ip, \
928                 UNIPERIF_I2S_FMT_OFFSET(ip), \
929                 UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
930                 UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 0)
931 #define SET_UNIPERIF_I2S_FMT_ALIGN_RIGHT(ip) \
932         SET_UNIPERIF_REG(ip, \
933                 UNIPERIF_I2S_FMT_OFFSET(ip), \
934                 UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
935                 UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 1)
936
937 /* ORDER */
938 #define UNIPERIF_I2S_FMT_ORDER_SHIFT(ip) 8
939 #define UNIPERIF_I2S_FMT_ORDER_MASK(ip) 0x1
940 #define GET_UNIPERIF_I2S_FMT_ORDER(ip) \
941         GET_UNIPERIF_REG(ip, \
942                 UNIPERIF_I2S_FMT_OFFSET(ip), \
943                 UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
944                 UNIPERIF_I2S_FMT_ORDER_MASK(ip))
945 #define SET_UNIPERIF_I2S_FMT_ORDER_LSB(ip) \
946         SET_UNIPERIF_REG(ip, \
947                 UNIPERIF_I2S_FMT_OFFSET(ip), \
948                 UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
949                 UNIPERIF_I2S_FMT_ORDER_MASK(ip), 0)
950 #define SET_UNIPERIF_I2S_FMT_ORDER_MSB(ip) \
951         SET_UNIPERIF_REG(ip, \
952                 UNIPERIF_I2S_FMT_OFFSET(ip), \
953                 UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
954                 UNIPERIF_I2S_FMT_ORDER_MASK(ip), 1)
955
956 /* NUM_CH */
957 #define UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip) 9
958 #define UNIPERIF_I2S_FMT_NUM_CH_MASK(ip) 0x7
959 #define GET_UNIPERIF_I2S_FMT_NUM_CH(ip) \
960         GET_UNIPERIF_REG(ip, \
961                 UNIPERIF_I2S_FMT_OFFSET(ip), \
962                 UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \
963                 UNIPERIF_I2S_FMT_NUM_CH_MASK(ip))
964 #define SET_UNIPERIF_I2S_FMT_NUM_CH(ip, value) \
965         SET_UNIPERIF_REG(ip, \
966                 UNIPERIF_I2S_FMT_OFFSET(ip), \
967                 UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \
968                 UNIPERIF_I2S_FMT_NUM_CH_MASK(ip), value)
969
970 /* NO_OF_SAMPLES_TO_READ */
971 #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip) 12
972 #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip) 0xfffff
973 #define GET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip) \
974         GET_UNIPERIF_REG(ip, \
975                 UNIPERIF_I2S_FMT_OFFSET(ip), \
976                 UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \
977                 UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip))
978 #define SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip, value) \
979         SET_UNIPERIF_REG(ip, \
980                 UNIPERIF_I2S_FMT_OFFSET(ip), \
981                 UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \
982                 UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip), value)
983
984 /*
985  * UNIPERIF_BIT_CONTROL reg
986  */
987
988 #define UNIPERIF_BIT_CONTROL_OFFSET(ip)  \
989         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0x004c)
990 #define GET_UNIPERIF_BIT_CONTROL(ip) \
991         readl_relaxed(ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip))
992 #define SET_UNIPERIF_BIT_CONTROL(ip, value) \
993         writel_relaxed(value, ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip))
994
995 /* CLR_UNDERFLOW_DURATION */
996 #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip) 0
997 #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip) 0x1
998 #define GET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \
999         GET_UNIPERIF_REG(ip, \
1000                 UNIPERIF_BIT_CONTROL_OFFSET(ip), \
1001                 UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \
1002                 UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip))
1003 #define SET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \
1004         SET_UNIPERIF_REG(ip, \
1005                 UNIPERIF_BIT_CONTROL_OFFSET(ip), \
1006                 UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \
1007                 UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip), 1)
1008
1009 /* CHL_STS_UPDATE */
1010 #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip) 1
1011 #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip) 0x1
1012 #define GET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \
1013         GET_UNIPERIF_REG(ip, \
1014                 UNIPERIF_BIT_CONTROL_OFFSET(ip), \
1015                 UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \
1016                 UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip))
1017 #define SET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \
1018         SET_UNIPERIF_BIT_REG(ip, \
1019                 UNIPERIF_BIT_CONTROL_OFFSET(ip), \
1020                 UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \
1021                 UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip), 1)
1022
1023 /*
1024  * UNIPERIF_STATUS_1 reg
1025  */
1026
1027 #define UNIPERIF_STATUS_1_OFFSET(ip) 0x0050
1028 #define GET_UNIPERIF_STATUS_1(ip) \
1029         readl_relaxed(ip->base + UNIPERIF_STATUS_1_OFFSET(ip))
1030 #define SET_UNIPERIF_STATUS_1(ip, value) \
1031         writel_relaxed(value, ip->base + UNIPERIF_STATUS_1_OFFSET(ip))
1032
1033 /* UNDERFLOW_DURATION */
1034 #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip) \
1035         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0)
1036 #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip) 0xff
1037 #define GET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip) \
1038         GET_UNIPERIF_REG(ip, \
1039                 UNIPERIF_STATUS_1_OFFSET(ip), \
1040                 UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \
1041                 UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip))
1042 #define SET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip, value) \
1043         SET_UNIPERIF_REG(ip, \
1044                 UNIPERIF_STATUS_1_OFFSET(ip), \
1045                 UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \
1046                 UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip), value)
1047
1048 /*
1049  * AUD_UNIPERIF_CHANNEL_STA_REGN reg
1050  */
1051
1052 #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n))
1053 #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \
1054         readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n))
1055 #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \
1056         writel_relaxed(value, ip->base + \
1057                         UNIPERIF_CHANNEL_STA_REGN(ip, n))
1058
1059 /*
1060  * AUD_UNIPERIF_USER_VALIDITY reg
1061  */
1062
1063 #define UNIPERIF_USER_VALIDITY_OFFSET(ip) 0x0090
1064 #define GET_UNIPERIF_USER_VALIDITY(ip) \
1065         readl_relaxed(ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip))
1066 #define SET_UNIPERIF_USER_VALIDITY(ip, value) \
1067         writel_relaxed(value, ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip))
1068
1069 /* VALIDITY_LEFT_AND_RIGHT */
1070 #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip) 0
1071 #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip) 0x3
1072 #define GET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip) \
1073         GET_UNIPERIF_REG(ip, \
1074                 UNIPERIF_USER_VALIDITY_OFFSET(ip), \
1075                 UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \
1076                 UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip))
1077 #define SET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip, value) \
1078         SET_UNIPERIF_REG(ip, \
1079                 UNIPERIF_USER_VALIDITY_OFFSET(ip), \
1080                 UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \
1081                 UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip), \
1082                 value ? 0x3 : 0)
1083
1084 /*
1085  * UNIPERIF_DBG_STANDBY_LEFT_SP reg
1086  */
1087 #define UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip) 0x0150
1088 #define UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip) \
1089         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0)
1090 #define UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip) \
1091         ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 0xFFFFFF)
1092 #define GET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip) \
1093         GET_UNIPERIF_REG(ip, \
1094                 UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \
1095                 UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \
1096                 UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip))
1097 #define SET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip, value) \
1098         SET_UNIPERIF_REG(ip, \
1099                 UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \
1100                 UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \
1101                 UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip), value)
1102
1103 /*
1104  * uniperipheral IP capabilities
1105  */
1106
1107 #define UNIPERIF_FIFO_SIZE              70 /* FIFO is 70 cells deep */
1108 #define UNIPERIF_FIFO_FRAMES            4  /* FDMA trigger limit in frames */
1109
1110 /*
1111  * Uniperipheral IP revisions
1112  */
1113 enum uniperif_version {
1114         SND_ST_UNIPERIF_VERSION_UNKNOWN,
1115         /* SASG1 (Orly), Newman */
1116         SND_ST_UNIPERIF_VERSION_C6AUD0_UNI_1_0,
1117         /* SASC1, SASG2 (Orly2) */
1118         SND_ST_UNIPERIF_VERSION_UNI_PLR_1_0,
1119         /* SASC1, SASG2 (Orly2), TELSS, Cannes */
1120         SND_ST_UNIPERIF_VERSION_UNI_RDR_1_0,
1121         /* TELSS (SASC1) */
1122         SND_ST_UNIPERIF_VERSION_TDM_PLR_1_0,
1123         /* Cannes/Monaco */
1124         SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0
1125 };
1126
1127 enum uniperif_type {
1128         SND_ST_UNIPERIF_PLAYER_TYPE_NONE,
1129         SND_ST_UNIPERIF_PLAYER_TYPE_HDMI,
1130         SND_ST_UNIPERIF_PLAYER_TYPE_PCM,
1131         SND_ST_UNIPERIF_PLAYER_TYPE_SPDIF
1132 };
1133
1134 enum uniperif_state {
1135         UNIPERIF_STATE_STOPPED,
1136         UNIPERIF_STATE_STARTED,
1137         UNIPERIF_STATE_STANDBY,
1138         UNIPERIF_STATE_UNDERFLOW,
1139         UNIPERIF_STATE_OVERFLOW = UNIPERIF_STATE_UNDERFLOW,
1140         UNIPERIF_STATE_XRUN
1141 };
1142
1143 enum uniperif_iec958_encoding_mode {
1144         UNIPERIF_IEC958_ENCODING_MODE_PCM,
1145         UNIPERIF_IEC958_ENCODING_MODE_ENCODED
1146 };
1147
1148 struct uniperif_info {
1149         int id; /* instance value of the uniperipheral IP */
1150         enum uniperif_type player_type;
1151         int underflow_enabled;          /* Underflow recovery mode */
1152 };
1153
1154 struct uniperif_iec958_settings {
1155         enum uniperif_iec958_encoding_mode encoding_mode;
1156         struct snd_aes_iec958 iec958;
1157 };
1158
1159 struct uniperif {
1160         /* System information */
1161         struct uniperif_info *info;
1162         struct device *dev;
1163         int ver; /* IP version, used by register access macros */
1164         struct regmap_field *clk_sel;
1165
1166         /* capabilities */
1167         const struct snd_pcm_hardware *hw;
1168
1169         /* Resources */
1170         struct resource *mem_region;
1171         void __iomem *base;
1172         unsigned long fifo_phys_address;
1173         int irq;
1174
1175         /* Clocks */
1176         struct clk *clk;
1177         int mclk;
1178         int clk_adj;
1179
1180         /* Runtime data */
1181         enum uniperif_state state;
1182
1183         struct snd_pcm_substream *substream;
1184
1185         /* Specific to IEC958 player */
1186         struct uniperif_iec958_settings stream_settings;
1187         struct mutex ctrl_lock; /* For resource updated by stream and controls*/
1188
1189         /*alsa ctrl*/
1190         struct snd_kcontrol_new *snd_ctrls;
1191         int num_ctrls;
1192
1193         /* dai properties */
1194         unsigned int daifmt;
1195
1196         /* DAI callbacks */
1197         const struct snd_soc_dai_ops *dai_ops;
1198 };
1199
1200 struct sti_uniperiph_dai {
1201         int stream;
1202         struct uniperif *uni;
1203         struct snd_dmaengine_dai_dma_data dma_data;
1204 };
1205
1206 struct sti_uniperiph_data {
1207         struct platform_device *pdev;
1208         struct snd_soc_dai_driver *dai;
1209         struct sti_uniperiph_dai dai_data;
1210 };
1211
1212 /* uniperiph player*/
1213 int uni_player_init(struct platform_device *pdev,
1214                     struct uniperif *uni_player);
1215 int uni_player_resume(struct uniperif *player);
1216
1217 /* uniperiph reader */
1218 int uni_reader_init(struct platform_device *pdev,
1219                     struct uniperif *uni_reader);
1220
1221 /* common */
1222 int sti_uniperiph_dai_set_fmt(struct snd_soc_dai *dai,
1223                               unsigned int fmt);
1224
1225 int sti_uniperiph_dai_hw_params(struct snd_pcm_substream *substream,
1226                                 struct snd_pcm_hw_params *params,
1227                                 struct snd_soc_dai *dai);
1228
1229 #endif