1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
|
/*
* File : drv_i2s.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2015-11-19 Urey the first version
*/
#ifndef _DRV_I2S_H_
#define _DRV_I2S_H_
/*********************************************************************************************************
** ͷ�ļ�
*********************************************************************************************************/
#include "x1000.h"
#include "drv_clock.h"
#include "drv_dma.h"
/*********************************************************************************************************
** CODEC ����
*********************************************************************************************************/
#define JZ_I2S_USE_INNER_CODEC
#undef JZ_I2S_USE_EX_CODEC
/*********************************************************************************************************
** AIC ���ݽṹ
*********************************************************************************************************/
enum aic_mode {
AIC_NO_MODE = 0,
AIC_I2S_MODE,
AIC_SPDIF_MODE,
AIC_AC97_MODE
};
struct jz_aic_device;
struct jz_aic
{
struct rt_device parent;
uint32_t base;
struct clk *clk;
struct clk *clk_gate;
uint32_t clk_rate;
/* for interrupt */
int irqno;
int irqflags;
uint32_t ror; /*counter for debug*/
uint32_t tur;
uint32_t mask;
/* for AIC work mode protect */
enum aic_mode aic_working_mode;
/* for sub device */
uint32_t dma_addr;
struct jz_aic_device *aic_dev;
};
struct jz_aic_device
{
struct rt_device parent;
};
/*********************************************************************************************************
** AIC ָ��
*********************************************************************************************************/
#define AIC_CMD_SET_MODE 0x20
#define AIC_CMD_SET_RATE 0x21
#define AIC_CMD_SET_SUBDEV 0x22
/*********************************************************************************************************
** AIC �Ĵ�������
***********************************************************************************************************/
static void inline jz_aic_write_reg(struct jz_aic *aic,uint32_t reg, uint32_t val)
{
writel(val, aic->base + reg);
}
static uint32_t inline jz_aic_read_reg(struct jz_aic *aic,uint32_t reg)
{
return readl(aic->base + reg);
}
/* For AC97 and I2S */
#define AICFR (0x00)
#define AICCR (0x04)
#define ACCR1 (0x08)
#define ACCR2 (0x0c)
#define I2SCR (0x10)
#define AICSR (0x14)
#define ACSR (0x18)
#define I2SSR (0x1c)
#define ACCAR (0x20)
#define ACCDR (0x24)
#define ACSAR (0x28)
#define ACSDR (0x2c)
#define I2SDIV (0x30)
#define AICDR (0x34)
/* For SPDIF */
#define SPENA (0x80)
#define SPCTRL (0x84)
#define SPSTATE (0x88)
#define SPCFG1 (0x8c)
#define SPCFG2 (0x90)
#define SPFIFO (0x94)
#define I2S_CPM_VALID 0xb0000070
/* For AICFR */
#define AICFR_ENB_BIT (0)
#define AICFR_ENB_MASK (1 << AICFR_ENB_BIT)
#define AICFR_SYNCD_BIT (1)
#define AICFR_SYNCD_MASK (1 << AICFR_SYNCD_BIT)
#define AICFR_BCKD_BIT (2)
#define AICFR_BCKD_MASK (1 << AICFR_BCKD_BIT)
#define AICFR_RST_BIT (3)
#define AICFR_RST_MASK (1 << AICFR_RST_BIT)
#define AICFR_AUSEL_BIT (4)
#define AICFR_AUSEL_MASK (1 << AICFR_AUSEL_BIT)
#define AICFR_ICDC_BIT (5)
#define AICFR_ICDC_MASK (1 << AICFR_ICDC_BIT)
#define AICFR_LSMP_BIT (6)
#define AICFR_LSMP_MASK (1 << AICFR_LSMP_BIT)
#define AICFR_CDC_SLV_BIT (7)
#define AICFR_CDC_SLV_MASK (1 << AICFR_CDC_SLV_BIT)
#define AICFR_DMODE_BIT (8)
#define AICFR_DMODE_MASK (1 << AICFR_DMODE_BIT)
#define AICFR_ISYNCD_BIT (9)
#define AICFR_ISYNCD_MASK (1 << AICFR_ISYNCD_BIT)
#define AICFR_IBCKD_BIT (10)
#define AICFR_IBCKD_MASK (1 << AICFR_IBCKD_BIT)
#define AICFR_SYSCLKD_BIT (11)
#define AICFR_SYSCLKD_MASK (1 << AICFR_SYSCLKD_BIT)
#define AICFR_MSB_BIT (12)
#define AICFR_MSB_MASK (1 << AICFR_MSB_BIT)
#define AICFR_TFTH_BIT (16)
#define AICFR_TFTH_MASK (0x1f << AICFR_TFTH_BIT)
#define AICFR_RFTH_BIT (24)
#define AICFR_RFTH_MASK (0x1f << AICFR_RFTH_BIT)
/* For AICCR */
#define AICCR_EREC_BIT (0)
#define AICCR_EREC_MASK (1 << AICCR_EREC_BIT)
#define AICCR_ERPL_BIT (1)
#define AICCR_ERPL_MASK (1 << AICCR_ERPL_BIT)
#define AICCR_ENLBF_BIT (2)
#define AICCR_ENLBF_MASK (1 << AICCR_ENLBF_BIT)
#define AICCR_ETFS_BIT (3)
#define AICCR_ETFS_MASK (1 << AICCR_ETFS_BIT)
#define AICCR_ERFS_BIT (4)
#define AICCR_ERFS_MASK (1 << AICCR_ERFS_BIT)
#define AICCR_ETUR_BIT (5)
#define AICCR_ETUR_MASK (1 << AICCR_ETUR_BIT)
#define AICCR_EROR_BIT (6)
#define AICCR_EROR_MASK (1 << AICCR_EROR_BIT)
#define AICCR_EALL_INT_MASK (AICCR_EROR_MASK|AICCR_ETUR_MASK|AICCR_ERFS_MASK|AICCR_ETFS_MASK)
#define AICCR_RFLUSH_BIT (7)
#define AICCR_RFLUSH_MASK (1 << AICCR_RFLUSH_BIT)
#define AICCR_TFLUSH_BIT (8)
#define AICCR_TFLUSH_MASK (1 << AICCR_TFLUSH_BIT)
#define AICCR_ASVTSU_BIT (9)
#define AICCR_ASVTSU_MASK (1 << AICCR_ASVTSU_BIT)
#define AICCR_ENDSW_BIT (10)
#define AICCR_ENDSW_MASK (1 << AICCR_ENDSW_BIT)
#define AICCR_M2S_BIT (11)
#define AICCR_M2S_MASK (1 << AICCR_M2S_BIT)
#define AICCR_TDMS_BIT (14)
#define AICCR_TDMS_MASK (1 << AICCR_TDMS_BIT)
#define AICCR_RDMS_BIT (15)
#define AICCR_RDMS_MASK (1 << AICCR_RDMS_BIT)
#define AICCR_ISS_BIT (16)
#define AICCR_ISS_MASK (0x7 << AICCR_ISS_BIT)
#define AICCR_OSS_BIT (19)
#define AICCR_OSS_MASK (0x7 << AICCR_OSS_BIT)
#define AICCR_CHANNEL_BIT (24)
#define AICCR_CHANNEL_MASK (0x7 << AICCR_CHANNEL_BIT)
#define AICCR_PACK16_BIT (28)
#define AICCR_PACK16_MASK (1 << AICCR_PACK16_BIT)
/* For ACCR1 */
#define ACCR1_XS_BIT (0)
#define ACCR1_XS_MASK (0x3ff << ACCR1_XS_BIT)
#define ACCR1_RS_BIT (16)
#define ACCR1_RS_MASK (0x3ff << ACCR1_RS_BIT)
/* For ACCR2 */
#define ACCR2_SA_BIT (0)
#define ACCR2_SA_MASK (1 << ACCR2_SA_BIT)
#define ACCR2_SS_BIT (1)
#define ACCR2_SS_MASK (1 << ACCR2_SS_BIT)
#define ACCR2_SR_BIT (2)
#define ACCR2_SR_MASK (1 << ACCR2_SR_BIT)
#define ACCR2_SO_BIT (3)
#define ACCR2_SO_MASK (1 << ACCR2_SO_BIT)
#define ACCR2_ECADT_BIT (16)
#define ACCR2_ECADT_MASK (1 << ACCR2_ECADT_BIT)
#define ACCR2_ECADR_BIT (17)
#define ACCR2_ECADR_MASK (1 << ACCR2_ECADR_BIT)
#define ACCR2_ERSTO_BIT (18)
#define ACCR2_ERSTO_MASK (1 << ACCR2_ERSTO_BIT)
/* For I2SCR */
#define I2SCR_AMSL_BIT (0)
#define I2SCR_AMSL_MASK (1 << I2SCR_AMSL_BIT)
#define I2SCR_ESCLK_BIT (4)
#define I2SCR_ESCLK_MASK (1 << I2SCR_ESCLK_BIT)
#define I2SCR_STPBK_BIT (12)
#define I2SCR_STPBK_MASK (1 << I2SCR_STPBK_BIT)
#define I2SCR_ISTPBK_BIT (13)
#define I2SCR_ISTPBK_MASK (1 << I2SCR_ISTPBK_BIT)
#define I2SCR_SWLH_BIT (16)
#define I2SCR_SWLH_MASK (1 << I2SCR_SWLH_BIT)
#define I2SCR_RFIRST_BIT (17)
#define I2SCR_RFIRST_MASK (1 << I2SCR_RFIRST_BIT)
/* For AICSR */
#define AICSR_TFS_BIT (3)
#define AICSR_TFS_MASK (1 << AICSR_TFS_BIT)
#define AICSR_RFS_BIT (4)
#define AICSR_RFS_MASK (1 << AICSR_RFS_BIT)
#define AICSR_TUR_BIT (5)
#define AICSR_TUR_MASK (1 << AICSR_TUR_BIT)
#define AICSR_ROR_BIT (6)
#define AICSR_ROR_MASK (1 << AICSR_ROR_BIT)
#define AICSR_ALL_INT_MASK (AICSR_TFS_MASK|AICSR_RFS_MASK|AICSR_TUR_MASK|AICSR_ROR_MASK)
#define AICSR_TFL_BIT (8)
#define AICSR_TFL_MASK (0x3f << AICSR_TFL_BIT)
#define AICSR_RFL_BIT (24)
#define AICSR_RFL_MASK (0x3f << AICSR_RFL_BIT)
/* For ACSR */
#define ACSR_CADT_BIT (16)
#define ACSR_CADT_MASK (1 << ACSR_CADT_BIT)
#define ACSR_SADR_BIT (17)
#define ACSR_SADR_MASK (1 << ACSR_SADR_BIT)
#define ACSR_RSTO_BIT (18)
#define ACSR_RSTO_MASK (1 << ACSR_RSTO_BIT)
#define ACSR_CLPM_BIT (19)
#define ACSR_CLPM_MASK (1 << ACSR_CLPM_BIT)
#define ACSR_CRDY_BIT (20)
#define ACSR_CRDY_MASK (1 << ACSR_CRDY_BIT)
#define ACSR_SLTERR_BIT (21)
#define ACSR_SLTERR_MASK (1 << ACSR_SLTERR_BIT)
/* For I2SSR */
#define I2SSR_BSY_BIT (2)
#define I2SSR_BSY_MASK (1 << I2SSR_BSY_BIT)
#define I2SSR_RBSY_BIT (3)
#define I2SSR_RBSY_MASK (1 << I2SSR_RBSY_BIT)
#define I2SSR_TBSY_BIT (4)
#define I2SSR_TBSY_MASK (1 << I2SSR_TBSY_BIT)
#define I2SSR_CHBSY_BIT (5)
#define I2SSR_CHBSY_MASK (1 << I2SSR_CHBSY_BIT)
/* For ACCAR */
#define ACCAR_CAR_BIT (0)
#define ACCAR_CAR_MASK (0xfffff << ACCAR_CAR_BIT)
/* For ACCDR */
#define ACCDR_CDR_BIT (0)
#define ACCDR_CDR_MASK (0xfffff << ACCDR_CDR_BIT)
/* For ACSAR */
#define ACSAR_SAR_BIT (0)
#define ACSAR_SAR_MASK (0xfffff << ACSAR_SAR_BIT)
/* For ACSDR */
#define ACSDR_SDR_BIT (0)
#define ACSDR_SDR_MASK (0xfffff << ACSDR_SDR_BIT)
/* For I2SDIV */
#define I2SDIV_DV_BIT (0)
#define I2SDIV_DV_MASK (0x1ff << I2SDIV_DV_BIT)
#define I2SDIV_IDV_BIT (16)
#define I2SDIV_IDV_MASK (0x1ff << I2SDIV_IDV_BIT)
/* For AICDR */
#define AICDR_DATA_BIT (0)
#define AICDR_DATA_MASK (0xfffffff << AICDR_DATA_BIT)
/* For SPENA */
#define SPENA_SPEN_BIT (0)
#define SPENA_SPEN_MASK (1 << SPENA_SPEN_BIT)
/* For SPCTRL */
#define SPCTRL_M_FFUR_BIT (0)
#define SPCTRL_M_FFUR_MASK (1 << SPCTRL_M_FFUR_BIT)
#define SPCTRL_M_TRIG_BIT (1)
#define SPCTRL_M_TRIG_MASK (1 << SPCTRL_M_TRIG_BIT)
#define SPCTRL_SPDIF_I2S_BIT (10)
#define SPCTRL_SPDIF_I2S_MASK (1 << SPCTRL_SPDIF_I2S_BIT)
#define SPCTRL_SFT_RST_BIT (11)
#define SPCTRL_SFT_RST_MASK (1 << SPCTRL_SFT_RST_BIT)
#define SPCTRL_INVALID_BIT (12)
#define SPCTRL_INVALID_MASK (1 << SPCTRL_INVALID_BIT)
#define SPCTRL_SIGN_N_BIT (13)
#define SPCTRL_SIGN_N_MASK (1 << SPCTRL_SIGN_N_BIT)
#define SPCTRL_D_TYPE_BIT (14)
#define SPCTRL_D_TYPE_MASK (1 << SPCTRL_D_TYPE_BIT)
#define SPCTRL_DMA_EN_BIT (15)
#define SPCTRL_DMA_EN_MASK (1 << SPCTRL_DMA_EN_BIT)
/* For SPSTATE */
#define SPSTATE_F_FFUR_BIT (0)
#define SPSTATE_F_FFUR_MASK (1 << SPSTATE_F_FFUR_BIT)
#define SPSTATE_F_TRIG_BIT (1)
#define SPSTATE_F_TRIG_MASK (1 << SPSTATE_F_TRIG_BIT)
#define SPSTATE_BUSY_BIT (7)
#define SPSTATE_BUSY_MASK (1 << SPSTATE_BUSY_BIT)
#define SPSTATE_FIFO_LVL_BIT (8)
#define SPSTATE_FIFO_LVL_MASK (0x7f << SPSTATE_FIFO_LVL_BIT)
/* For SPCFG1 */
#define SPCFG1_CH2_NUM_BIT (0)
#define SPCFG1_CH2_NUM_MASK (0xf << SPCFG1_CH2_NUM_BIT)
#define SPCFG1_CH1_NUM_BIT (4)
#define SPCFG1_CH1_NUM_MASK (0xf << SPCFG1_CH1_NUM_BIT)
#define SPCFG1_SRC_NUM_BIT (8)
#define SPCFG1_SRC_NUM_MASK (0xf << SPCFG1_SRC_NUM_BIT)
#define SPCFG1_TRIG_BIT (12)
#define SPCFG1_TRIG_MASK (0x3 << SPCFG1_TRIG_BIT)
#define SPCFG1_ZRO_VLD_BIT (16)
#define SPCFG1_ZRO_VLD_MASK (1 << SPCFG1_ZRO_VLD_BIT)
#define SPCFG1_INIT_LVL_BIT (17)
#define SPCFG1_INIT_LVL_MASK (1 << SPCFG1_INIT_LVL_BIT)
/* For SPCFG2 */
#define SPCFG2_CON_PRO_BIT (0)
#define SPCFG2_CON_PRO_MASK (1 << SPCFG2_CON_PRO_BIT)
#define SPCFG2_AUDIO_N_BIT (1)
#define SPCFG2_AUDIO_N_MASK (1 << SPCFG2_AUDIO_N_BIT)
#define SPCFG2_COPY_N_BIT (2)
#define SPCFG2_COPY_N_MASK (1 << SPCFG2_COPY_N_BIT)
#define SPCFG2_PRE_BIT (3)
#define SPCFG2_PRE_MASK (1 << SPCFG2_PRE_BIT)
#define SPCFG2_CH_MD_BIT (6)
#define SPCFG2_CH_MD_MASK (0x3 << SPCFG2_CH_MD_BIT)
#define SPCFG2_CAT_CODE_BIT (8)
#define SPCFG2_CAT_CODE_MASK (0xff << SPCFG2_CAT_CODE_BIT)
#define SPCFG2_CLK_ACU_BIT (16)
#define SPCFG2_CLK_ACU_MASK (0x3 << SPCFG2_CLK_ACU_BIT)
#define SPCFG2_MAX_WL_BIT (18)
#define SPCFG2_MAX_WL_MASK (1 << SPCFG2_MAX_WL_BIT)
#define SPCFG2_SAMPL_WL_BIT (19)
#define SPCFG2_SAMPL_WL_MASK (0x7 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_20BITM (0x1 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_21BIT (0x6 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_22BIT (0x2 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_23BIT (0x4 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_24BIT (0x5 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_16BIT (0x1 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_17BIT (0x6 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_18BIT (0x2 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_19BIT (0x4 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_SAMPL_WL_20BITL (0x5 << SPCFG2_SAMPL_WL_BIT)
#define SPCFG2_ORG_FRQ_BIT (22)
#define SPCFG2_ORG_FRQ_MASK (0xf << SPCFG2_ORG_FRQ_BIT)
#define SPCFG2_FS_BIT (26)
#define SPCFG2_FS_MASK (0xf << SPCFG2_FS_BIT)
#define SPFIFO_DATA_BIT (0)
#define SPFIFO_DATA_MASK (0xffffff << SPFIFO_DATA_BIT)
#define jz_aic_set_reg(parent, addr, val, mask, offset) \
do { \
volatile unsigned int reg_tmp; \
reg_tmp = jz_aic_read_reg(parent, addr); \
reg_tmp &= ~(mask); \
reg_tmp |= (val << offset) & mask; \
jz_aic_write_reg(parent, addr, reg_tmp); \
} while(0)
#define jz_aic_get_reg(parent, addr, mask, offset) \
((jz_aic_read_reg(parent, addr) & mask) >> offset)
/*For ALL*/
/*aic fr*/
#define __aic_enable_msb(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_MSB_MASK, AICFR_MSB_BIT)
#define __aic_disable_msb(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_MSB_MASK, AICFR_MSB_BIT)
#define __aic_reset(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_RST_MASK, AICFR_RST_BIT)
/*aic cr*/
#define __aic_flush_rxfifo(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_RFLUSH_MASK, AICCR_RFLUSH_BIT)
#define __aic_flush_txfifo(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_TFLUSH_MASK, AICCR_TFLUSH_BIT)
#define __aic_en_ror_int(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_EROR_MASK, AICCR_EROR_BIT)
#define __aic_dis_ror_int(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_EROR_MASK, AICCR_EROR_BIT)
#define __aic_en_tur_int(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ETUR_MASK, AICCR_ETUR_BIT)
#define __aic_dis_tur_int(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ETUR_MASK, AICCR_ETUR_BIT)
#define __aic_en_rfs_int(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ERFS_MASK, AICCR_ERFS_BIT)
#define __aic_dis_rfs_int(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ERFS_MASK, AICCR_ERFS_BIT)
#define __aic_en_tfs_int(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ETFS_MASK, AICCR_ETFS_BIT)
#define __aic_dis_tfs_int(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ETFS_MASK, AICCR_ETFS_BIT)
#define __aic_get_irq_enmask(parent) \
jz_aic_get_reg(parent, AICCR, AICCR_EALL_INT_MASK, AICCR_ETFS_BIT)
#define __aic_set_irq_enmask(parent, mask) \
jz_aic_set_reg(parent, AICCR, mask, AICCR_EALL_INT_MASK, AICCR_ETFS_BIT)
/*aic sr*/
#define __aic_read_rfl(parent) \
jz_aic_get_reg(parent, AICSR ,AICSR_RFL_MASK, AICSR_RFL_BIT)
#define __aic_read_tfl(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_TFL_MASK, AICSR_TFL_BIT)
#define __aic_clear_ror(parent) \
jz_aic_set_reg(parent, AICSR, 0, AICSR_ROR_MASK, AICSR_ROR_BIT)
#define __aic_test_ror(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_ROR_MASK, AICSR_ROR_BIT)
#define __aic_clear_tur(parent) \
jz_aic_set_reg(parent, AICSR, 0, AICSR_TUR_MASK, AICSR_TUR_BIT)
#define __aic_test_tur(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_TUR_MASK, AICSR_TUR_BIT)
#define __aic_clear_rfs(parent) \
jz_aic_set_reg(parent, AICSR, 0, AICSR_RFS_MASK, AICSR_RFS_BIT)
#define __aic_test_rfs(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_RFS_MASK, AICSR_RFS_BIT)
#define __aic_clear_tfs(parent) \
jz_aic_set_reg(parent, AICSR, 0, AICSR_TFS_MASK, AICSR_TFS_BIT)
#define __aic_test_tfs(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_TFS_MASK, AICSR_TFS_BIT)
#define __aic_get_irq_flag(parent) \
jz_aic_get_reg(parent, AICSR, AICSR_ALL_INT_MASK, AICSR_TFS_BIT)
#define __aic_clear_all_irq_flag(parent) \
jz_aic_set_reg(parent, AICSR, AICSR_ALL_INT_MASK, AICSR_ALL_INT_MASK, AICSR_TFS_BIT)
/* aic dr*/
#define __aic_write_txfifo(parent, n) \
jz_aic_write_reg(parent, AICDR, (n))
/* For SPFIFO */
#define __spdif_test_underrun(parent) \
jz_aic_get_reg(parent, SPSTATE, SPSTATE_F_FFUR_MASK, SPSTATE_F_FFUR_BIT)
#define __spdif_clear_underrun(parent) \
jz_aic_set_reg(parent, SPSTATE, 0, SPSTATE_F_FFUR_MASK, SPSTATE_F_FFUR_BIT)
#define __spdif_is_enable_transmit_dma(parent) \
jz_aic_get_reg(parent, SPCTRL, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
#define __spdif_enable_transmit_dma(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
#define __spdif_disable_transmit_dma(parent) \
jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
#define __spdif_reset(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SFT_RST_MASK, SPCTRL_SFT_RST_BIT)
#define __spdif_get_reset(parent) \
jz_aic_get_reg(parent, SPCTRL,SPCTRL_SFT_RST_MASK, SPCTRL_SFT_RST_BIT)
#define __spdif_enable(parent) \
jz_aic_set_reg(parent, SPENA, 1, SPENA_SPEN_MASK, SPENA_SPEN_BIT)
#define __spdif_disable(parent) \
jz_aic_set_reg(parent, SPENA, 0, SPENA_SPEN_MASK, SPENA_SPEN_BIT)
#define __spdif_set_dtype(parent, n) \
jz_aic_set_reg(parent, SPCTRL, n, SPCTRL_D_TYPE_MASK, SPCTRL_D_TYPE_BIT)
#define __spdif_set_trigger(parent, n) \
jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_TRIG_MASK, SPCFG1_TRIG_BIT)
#define __spdif_set_ch1num(parent, n) \
jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_CH1_NUM_MASK, SPCFG1_CH1_NUM_BIT)
#define __spdif_set_ch2num(parent, n) \
jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_CH2_NUM_MASK, SPCFG1_CH2_NUM_BIT)
#define __spdif_set_srcnum(parent, n) \
jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_SRC_NUM_MASK, SPCFG1_SRC_NUM_BIT)
#define __interface_select_spdif(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SPDIF_I2S_MASK, SPCTRL_SPDIF_I2S_BIT)
#define __spdif_play_lastsample(parent) \
jz_aic_set_reg(parent, SPCFG1, 1, SPCFG1_ZRO_VLD_MASK, SPCFG1_ZRO_VLD_BIT)
#define __spdif_init_set_low(parent) \
jz_aic_set_reg(parent, SPCFG1, 0, SPCFG1_INIT_LVL_MASK, SPCFG1_INIT_LVL_BIT)
#define __spdif_choose_consumer(parent) \
jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CON_PRO_MASK, SPCFG2_CON_PRO_BIT)
#define __spdif_clear_audion(parent) \
jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_AUDIO_N_MASK, SPCFG2_AUDIO_N_BIT)
#define __spdif_set_copyn(parent) \
jz_aic_set_reg(parent, SPCFG2, 1, SPCFG2_COPY_N_MASK, SPCFG2_COPY_N_BIT)
#define __spdif_clear_pre(parent) \
jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_PRE_MASK, SPCFG2_PRE_BIT)
#define __spdif_choose_chmd(parent) \
jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CH_MD_MASK, SPCFG2_CH_MD_BIT)
#define __spdif_set_category_code_normal(parent) \
jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CAT_CODE_MASK, SPCFG2_CAT_CODE_BIT)
#define __spdif_set_clkacu(parent, n) \
jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_CLK_ACU_MASK, SPCFG2_CLK_ACU_BIT)
#define __spdif_set_sample_size(parent, n) \
jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_SAMPL_WL_MASK, SPCFG2_SAMPL_WL_BIT)
#define __spdif_set_max_wl(parent, n) \
jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_MAX_WL_MASK, SPCFG2_MAX_WL_BIT)
#define __spdif_set_ori_sample_freq(parent, org_frq_tmp) \
jz_aic_set_reg(parent, SPCFG2, org_frq_tmp, SPCFG2_ORG_FRQ_MASK, SPCFG2_ORG_FRQ_BIT)
#define __spdif_set_sample_freq(parent, fs_tmp) \
jz_aic_set_reg(parent, SPCFG2, fs_tmp, SPCFG2_FS_MASK, SPCFG2_FS_BIT)
#define __spdif_set_valid(parent) \
jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_INVALID_MASK, SPCTRL_INVALID_BIT)
#define __spdif_mask_trig(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_M_TRIG_MASK, SPCTRL_M_TRIG_BIT)
#define __spdif_disable_underrun_intr(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_M_FFUR_MASK, SPCTRL_M_FFUR_BIT)
#define __spdif_set_signn(parent) \
jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SIGN_N_MASK, SPCTRL_SIGN_N_BIT)
#define __spdif_clear_signn(parent) \
jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_SIGN_N_MASK, SPCTRL_SIGN_N_BIT)
/* For I2S */
/*aic fr*/
#define __i2s_is_enable(parent) \
jz_aic_get_reg(parent, AICFR, AICFR_ENB_MASK, AICFR_ENB_BIT)
#define __aic_enable(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_ENB_MASK, AICFR_ENB_BIT)
#define __aic_disable(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_ENB_MASK, AICFR_ENB_BIT)
#define __i2s_external_codec(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
#define __i2s_bclk_output(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_BCKD_MASK, AICFR_BCKD_BIT)
#define __i2s_bclk_input(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_BCKD_MASK, AICFR_BCKD_BIT)
#define __i2s_sync_output(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_SYNCD_MASK, AICFR_SYNCD_BIT)
#define __i2s_sync_input(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_SYNCD_MASK, AICFR_SYNCD_BIT)
#define __aic_select_i2s(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_AUSEL_MASK, AICFR_AUSEL_BIT)
#define __aic_select_internal_codec(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
#define __aic_select_external_codec(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
#define __i2s_play_zero(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_LSMP_MASK, AICFR_LSMP_BIT)
#define __i2s_play_lastsample(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_LSMP_MASK, AICFR_LSMP_BIT)
#define __i2s_codec_slave(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_CDC_SLV_MASK, AICFR_CDC_SLV_BIT)
#define __i2s_codec_master(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_CDC_SLV_MASK, AICFR_CDC_SLV_BIT)
#define __i2s_select_sysclk_output(parent) \
jz_aic_set_reg(parent, AICFR, 0, AICFR_SYSCLKD_MASK, AICFR_SYSCLKD_BIT)
#define __i2s_select_sysclk_input(parent) \
jz_aic_set_reg(parent, AICFR, 1, AICFR_SYSCLKD_MASK, AICFR_SYSCLKD_BIT)
#define __i2s_set_transmit_trigger(parent, n) \
jz_aic_set_reg(parent, AICFR, n, AICFR_TFTH_MASK, AICFR_TFTH_BIT)
#define __i2s_set_receive_trigger(parent, n) \
jz_aic_set_reg(parent, AICFR, n, AICFR_RFTH_MASK, AICFR_RFTH_BIT)
/*aiccr*/
#define I2S_SS2REG(n) (((n) > 18 ? (n)/6 : (n)/9)) /* n = 8, 16, 18, 20, 24 */
#define __i2s_aic_packet16(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_PACK16_MASK, AICCR_PACK16_BIT)
#define __i2s_aic_unpacket16(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_PACK16_MASK, AICCR_PACK16_BIT)
#define __i2s_channel(parent, n) \
jz_aic_set_reg(parent, AICCR, ((n) - 1), AICCR_CHANNEL_MASK, AICCR_CHANNEL_BIT)
#define __i2s_set_oss(parent, n) \
jz_aic_set_reg(parent, AICCR, I2S_SS2REG(n) , AICCR_OSS_MASK, AICCR_OSS_BIT)
#define __i2s_set_iss(parent, n) \
jz_aic_set_reg(parent, AICCR, I2S_SS2REG(n) , AICCR_ISS_MASK, AICCR_ISS_BIT)
#define __i2s_transmit_dma_is_enable(parent) \
jz_aic_get_reg(parent, AICCR, AICCR_TDMS_MASK,AICCR_TDMS_BIT)
#define __i2s_disable_transmit_dma(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_TDMS_MASK, AICCR_TDMS_BIT)
#define __i2s_enable_transmit_dma(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_TDMS_MASK, AICCR_TDMS_BIT)
#define __i2s_receive_dma_is_enable(parent) \
jz_aic_get_reg(parent, AICCR, AICCR_RDMS_MASK,AICCR_RDMS_BIT)
#define __i2s_disable_receive_dma(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_RDMS_MASK, AICCR_RDMS_BIT)
#define __i2s_enable_receive_dma(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_RDMS_MASK, AICCR_RDMS_BIT)
#define __i2s_m2s_enable(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_M2S_MASK, AICCR_M2S_BIT)
#define __i2s_m2s_disable(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_M2S_MASK, AICCR_M2S_BIT)
#define __i2s_endsw_enable(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ENDSW_MASK, AICCR_ENDSW_BIT)
#define __i2s_endsw_disable(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ENDSW_MASK, AICCR_ENDSW_BIT)
#define __i2s_asvtsu_enable(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ASVTSU_MASK, AICCR_ASVTSU_BIT)
#define __i2s_asvtsu_disable(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ASVTSU_MASK, AICCR_ASVTSU_BIT)
#define __i2s_enable_replay(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ERPL_MASK, AICCR_ERPL_BIT)
#define __i2s_enable_record(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_EREC_MASK, AICCR_EREC_BIT)
#define __i2s_enable_loopback(parent) \
jz_aic_set_reg(parent, AICCR, 1, AICCR_ENLBF_MASK, AICCR_ENLBF_BIT)
#define __i2s_disable_replay(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ERPL_MASK, AICCR_ERPL_BIT)
#define __i2s_disable_record(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_EREC_MASK, AICCR_EREC_BIT)
#define __i2s_disable_loopback(parent) \
jz_aic_set_reg(parent, AICCR, 0, AICCR_ENLBF_MASK, AICCR_ENLBF_BIT)
/*i2scr*/
#define __i2s_select_i2s_fmt(parent) \
jz_aic_set_reg(parent, I2SCR, 0, I2SCR_AMSL_MASK, I2SCR_AMSL_BIT)
#define __i2s_select_msb_fmt(parent) \
jz_aic_set_reg(parent, I2SCR, 1, I2SCR_AMSL_MASK, I2SCR_AMSL_BIT)
#define __i2s_enable_sysclk_output(parent) \
jz_aic_set_reg(parent, I2SCR, 1, I2SCR_ESCLK_MASK, I2SCR_ESCLK_BIT)
#define __i2s_disable_sysclk_output(parent) \
jz_aic_set_reg(parent, I2SCR, 0, I2SCR_ESCLK_MASK, I2SCR_ESCLK_BIT)
#define __i2s_stop_bitclk(parent) \
jz_aic_set_reg(parent, I2SCR, 1, I2SCR_STPBK_MASK, I2SCR_STPBK_BIT)
#define __i2s_start_bitclk(parent) \
jz_aic_set_reg(parent, I2SCR, 0, I2SCR_STPBK_MASK, I2SCR_STPBK_BIT)
#define __i2s_select_packed_lrswap(parent) \
jz_aic_set_reg(parent, I2SCR, 1, I2SCR_SWLH_MASK, I2SCR_SWLH_BIT)
#define __i2s_select_packed_lrnorm(parent) \
jz_aic_set_reg(parent, I2SCR, 0, I2SCR_SWLH_MASK, I2SCR_SWLH_BIT)
#define __i2s_send_rfirst(parent) \
jz_aic_set_reg(parent, I2SCR, 1, I2SCR_RFIRST_MASK, I2SCR_RFIRST_BIT)
#define __i2s_send_lfirst(parent) \
jz_aic_set_reg(parent, I2SCR, 0, I2SCR_RFIRST_MASK, I2SCR_RFIRST_BIT)
/*i2ssr*/
#define __i2s_transmiter_is_busy(parent) \
(!!(jz_aic_read_reg(parent, I2SSR) & I2SSR_TBSY_MASK))
#define __i2s_receiver_is_busy(parent) \
(!!(jz_aic_read_reg(parent, I2SSR) & I2SSR_TBSY_MASK))
/*i2s_div*/
#define __i2s_set_idv(parent, div) \
jz_aic_set_reg(parent, I2SDIV, div, I2SDIV_IDV_MASK, I2SDIV_IDV_BIT)
#define __i2s_set_dv(parent, div) \
jz_aic_set_reg(parent, I2SDIV, div, I2SDIV_DV_MASK, I2SDIV_DV_BIT)
#endif /* _DRV_I2S_H_ */
|