xref: /nrf52832-nimble/rt-thread/libcpu/mips/x1000/x1000_aic.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /**
2*10465441SEvalZero   ******************************************************************************
3*10465441SEvalZero   * @file    x1000_aic.h
4*10465441SEvalZero   * @author  Urey
5*10465441SEvalZero   * @version V1.0.0
6*10465441SEvalZero   * @date    2017��2��20��
7*10465441SEvalZero   * @brief   TODO
8*10465441SEvalZero   ******************************************************************************
9*10465441SEvalZero **/
10*10465441SEvalZero 
11*10465441SEvalZero 
12*10465441SEvalZero #ifndef _X1000_AIC_H_
13*10465441SEvalZero #define _X1000_AIC_H_
14*10465441SEvalZero 
15*10465441SEvalZero #ifdef __cplusplus
16*10465441SEvalZero extern "C" {
17*10465441SEvalZero #endif
18*10465441SEvalZero 
19*10465441SEvalZero #define AIC_FR      (AIC_BASE + 0x00)
20*10465441SEvalZero #define AIC_CR      (AIC_BASE + 0x04)
21*10465441SEvalZero #define AIC_ACCR1   (AIC_BASE + 0x08)
22*10465441SEvalZero #define AIC_ACCR2   (AIC_BASE + 0x0c)
23*10465441SEvalZero #define AIC_I2SCR   (AIC_BASE + 0x10)
24*10465441SEvalZero #define AIC_SR      (AIC_BASE + 0x14)
25*10465441SEvalZero #define AIC_ACSR    (AIC_BASE + 0x18)
26*10465441SEvalZero #define AIC_I2SSR   (AIC_BASE + 0x1c)
27*10465441SEvalZero #define AIC_ACCAR   (AIC_BASE + 0x20)
28*10465441SEvalZero #define AIC_ACCDR   (AIC_BASE + 0x24)
29*10465441SEvalZero #define AIC_ACSAR   (AIC_BASE + 0x28)
30*10465441SEvalZero #define AIC_ACSDR   (AIC_BASE + 0x2c)
31*10465441SEvalZero #define AIC_I2SDIV  (AIC_BASE + 0x30)
32*10465441SEvalZero #define AIC_DR      (AIC_BASE + 0x34)
33*10465441SEvalZero 
34*10465441SEvalZero #define SPDIF_ENA   (AIC_BASE + 0x80)
35*10465441SEvalZero #define SPDIF_CTRL  (AIC_BASE + 0x84)
36*10465441SEvalZero #define SPDIF_STATE (AIC_BASE + 0x88)
37*10465441SEvalZero #define SPDIF_CFG1  (AIC_BASE + 0x8c)
38*10465441SEvalZero #define SPDIF_CFG2  (AIC_BASE + 0x90)
39*10465441SEvalZero #define SPDIF_FIFO  (AIC_BASE + 0x94)
40*10465441SEvalZero 
41*10465441SEvalZero #define ICDC_CKCFG  (AIC_BASE + 0xa0)
42*10465441SEvalZero #define ICDC_RGADW  (AIC_BASE + 0xa4)
43*10465441SEvalZero #define ICDC_RGDATA (AIC_BASE + 0xa8)
44*10465441SEvalZero 
45*10465441SEvalZero 
46*10465441SEvalZero /* AIC_FR definition */
47*10465441SEvalZero #define AIC_FR_RFTH_LSB     24
48*10465441SEvalZero #define AIC_FR_RFTH(x)  ( ( (x)/2 - 1 ) << AIC_FR_RFTH_LSB)     // 2, 4, ..., 32
49*10465441SEvalZero #define AIC_FR_RFTH_MASK    BITS_H2L(27, AIC_FR_RFTH_LSB)
50*10465441SEvalZero 
51*10465441SEvalZero #define AIC_FR_TFTH_LSB     16
52*10465441SEvalZero #define AIC_FR_TFTH(x)      ( ( (x)/2 ) << AIC_FR_TFTH_LSB)     // 2, 4, ..., 32
53*10465441SEvalZero #define AIC_FR_TFTH_MASK    BITS_H2L(20, AIC_FR_TFTH_LSB)
54*10465441SEvalZero 
55*10465441SEvalZero /* new@4770 */
56*10465441SEvalZero #define AIC_FR_IBCKD        BIT10
57*10465441SEvalZero 
58*10465441SEvalZero /* new@4770 */
59*10465441SEvalZero #define AIC_FR_ISYNCD       BIT9
60*10465441SEvalZero 
61*10465441SEvalZero /* new@4770 */
62*10465441SEvalZero #define IC_FR_DMODE     BIT8
63*10465441SEvalZero 
64*10465441SEvalZero #define AIC_FR_LSMP     BIT6
65*10465441SEvalZero #define AIC_FR_ICDC     BIT5
66*10465441SEvalZero #define AIC_FR_AUSEL        BIT4
67*10465441SEvalZero #define AIC_FR_RST      BIT3
68*10465441SEvalZero #define AIC_FR_BCKD     BIT2
69*10465441SEvalZero #define AIC_FR_SYNCD        BIT1
70*10465441SEvalZero #define AIC_FR_ENB      BIT0
71*10465441SEvalZero 
72*10465441SEvalZero 
73*10465441SEvalZero /* AIC_CR definition */
74*10465441SEvalZero #define AIC_CR_PACK16       BIT28
75*10465441SEvalZero 
76*10465441SEvalZero #define AIC_CR_CHANNEL_LSB  24
77*10465441SEvalZero #define AIC_CR_CHANNEL_MASK BITS_H2L(26, 24)
78*10465441SEvalZero #define AIC_CR_CHANNEL_MONO   (0x0 << AIC_CR_CHANNEL_LSB)
79*10465441SEvalZero #define AIC_CR_CHANNEL_STEREO (0x1 << AIC_CR_CHANNEL_LSB)
80*10465441SEvalZero #define AIC_CR_CHANNEL_4CHNL  (0x3 << AIC_CR_CHANNEL_LSB)
81*10465441SEvalZero #define AIC_CR_CHANNEL_6CHNL  (0x5 << AIC_CR_CHANNEL_LSB)
82*10465441SEvalZero #define AIC_CR_CHANNEL_8CHNL  (0x7 << AIC_CR_CHANNEL_LSB)
83*10465441SEvalZero 
84*10465441SEvalZero #define AIC_CR_OSS_LSB      19
85*10465441SEvalZero #define AIC_CR_OSS_MASK     BITS_H2L(21, AIC_CR_OSS_LSB)
86*10465441SEvalZero #define AIC_CR_OSS(n)       (((n) > 18 ? (n)/6 : (n)/9) << AIC_CR_OSS_LSB)  /* n = 8, 16, 18, 20, 24 */
87*10465441SEvalZero 
88*10465441SEvalZero #define AIC_CR_ISS_LSB      16
89*10465441SEvalZero #define AIC_CR_ISS_MASK     BITS_H2L(18, AIC_CR_ISS_LSB)
90*10465441SEvalZero #define AIC_CR_ISS(n)       (((n) > 18 ? (n)/6 : (n)/9) << AIC_CR_ISS_LSB)  /* n = 8, 16, 18, 20, 24 */
91*10465441SEvalZero 
92*10465441SEvalZero #define AIC_CR_RDMS     BIT15
93*10465441SEvalZero #define AIC_CR_TDMS     BIT14
94*10465441SEvalZero #define AIC_CR_M2S      BIT11
95*10465441SEvalZero #define AIC_CR_ENDSW        BIT10
96*10465441SEvalZero #define AIC_CR_AVSTSU       BIT9
97*10465441SEvalZero #define AIC_CR_TFLUSH       BIT8
98*10465441SEvalZero #define AIC_CR_RFLUSH       BIT7
99*10465441SEvalZero #define AIC_CR_EROR     BIT6
100*10465441SEvalZero #define AIC_CR_ETUR     BIT5
101*10465441SEvalZero #define AIC_CR_ERFS     BIT4
102*10465441SEvalZero #define AIC_CR_ETFS     BIT3
103*10465441SEvalZero #define AIC_CR_ENLBF        BIT2
104*10465441SEvalZero #define AIC_CR_ERPL     BIT1
105*10465441SEvalZero #define AIC_CR_EREC     BIT0
106*10465441SEvalZero 
107*10465441SEvalZero /* AIC controller AC-link control register 1(ACCR1) */
108*10465441SEvalZero #define AIC_ACCR1_RS_LSB    16
109*10465441SEvalZero #define AIC_ACCR1_RS_MASK   BITS_H2L(25, AIC_ACCR1_RS_LSB)
110*10465441SEvalZero #define AIC_ACCR1_RS_SLOT(n)    ((1 << ((n) - 3)) << AIC_ACCR1_RS_LSB)  /* n = 3 .. 12 */
111*10465441SEvalZero 
112*10465441SEvalZero #define AIC_ACCR1_XS_LSB    0
113*10465441SEvalZero #define AIC_ACCR1_XS_MASK   BITS_H2L(9, AIC_ACCR1_XS_LSB)
114*10465441SEvalZero #define AIC_ACCR1_XS_SLOT(n)    ((1 << ((n) - 3)) << AIC_ACCR1_XS_LSB)  /* n = 3 .. 12 */
115*10465441SEvalZero 
116*10465441SEvalZero /* AIC controller AC-link control register 2 (ACCR2) */
117*10465441SEvalZero #define AIC_ACCR2_ERSTO     BIT18
118*10465441SEvalZero #define AIC_ACCR2_ESADR     BIT17
119*10465441SEvalZero #define AIC_ACCR2_ECADT     BIT16
120*10465441SEvalZero #define AIC_ACCR2_SO        BIT3
121*10465441SEvalZero #define AIC_ACCR2_SR        BIT2
122*10465441SEvalZero #define AIC_ACCR2_SS        BIT1
123*10465441SEvalZero #define AIC_ACCR2_SA        BIT0
124*10465441SEvalZero 
125*10465441SEvalZero /* AIC controller i2s/msb-justified control register (I2SCR) */
126*10465441SEvalZero #define AIC_I2SCR_RFIRST    BIT17
127*10465441SEvalZero #define AIC_I2SCR_SWLH      BIT16
128*10465441SEvalZero #define AIC_I2SCR_ISTPBK    BIT13
129*10465441SEvalZero #define AIC_I2SCR_STPBK     BIT12
130*10465441SEvalZero #define AIC_I2SCR_ESCLK     BIT4
131*10465441SEvalZero #define AIC_I2SCR_AMSL      BIT0
132*10465441SEvalZero 
133*10465441SEvalZero /* AIC controller FIFO status register (AICSR) */
134*10465441SEvalZero #define AIC_SR_RFL_LSB      24
135*10465441SEvalZero #define AIC_SR_RFL_MASK     BITS_H2L(29, AIC_SR_RFL_LSB)
136*10465441SEvalZero 
137*10465441SEvalZero #define AIC_SR_TFL_LSB      8
138*10465441SEvalZero #define AIC_SR_TFL_MASK     BITS_H2L(13, AIC_SR_TFL_LSB)
139*10465441SEvalZero 
140*10465441SEvalZero #define AIC_SR_ROR      BIT6
141*10465441SEvalZero #define AIC_SR_TUR      BIT5
142*10465441SEvalZero #define AIC_SR_RFS      BIT4
143*10465441SEvalZero #define AIC_SR_TFS      BIT3
144*10465441SEvalZero 
145*10465441SEvalZero /* AIC controller AC-link status register (ACSR) */
146*10465441SEvalZero #define AIC_ACSR_SLTERR     BIT21
147*10465441SEvalZero #define AIC_ACSR_CRDY       BIT20
148*10465441SEvalZero #define AIC_ACSR_CLPM       BIT19
149*10465441SEvalZero #define AIC_ACSR_RSTO       BIT18
150*10465441SEvalZero #define AIC_ACSR_SADR       BIT17
151*10465441SEvalZero #define AIC_ACSR_CADT       BIT16
152*10465441SEvalZero 
153*10465441SEvalZero /* AIC controller I2S/MSB-justified status register (I2SSR) */
154*10465441SEvalZero #define AIC_I2SSR_CHBSY     BIT5
155*10465441SEvalZero #define AIC_I2SSR_TBSY      BIT4
156*10465441SEvalZero #define AIC_I2SSR_RBSY      BIT3
157*10465441SEvalZero #define AIC_I2SSR_BSY       BIT2
158*10465441SEvalZero 
159*10465441SEvalZero /* AIC controller AC97 codec command address register (ACCAR) */
160*10465441SEvalZero #define AIC_ACCAR_CAR_LSB   0
161*10465441SEvalZero #define AIC_ACCAR_CAR_MASK  BITS_H2L(19, AIC_ACCAR_CAR_LSB)
162*10465441SEvalZero 
163*10465441SEvalZero 
164*10465441SEvalZero /* AIC controller AC97 codec command data register (ACCDR) */
165*10465441SEvalZero #define AIC_ACCDR_CDR_LSB   0
166*10465441SEvalZero #define AIC_ACCDR_CDR_MASK  BITS_H2L(19, AIC_ACCDR_CDR_LSB)
167*10465441SEvalZero 
168*10465441SEvalZero /* AC97 read and write macro based on ACCAR and ACCDR */
169*10465441SEvalZero #define AC97_READ_CMD       BIT19
170*10465441SEvalZero #define AC97_WRITE_CMD      (BIT19 & ~BIT19)
171*10465441SEvalZero 
172*10465441SEvalZero #define AC97_INDEX_LSB      12
173*10465441SEvalZero #define AC97_INDEX_MASK     BITS_H2L(18, AC97_INDEX_LSB)
174*10465441SEvalZero 
175*10465441SEvalZero #define AC97_DATA_LSB       4
176*10465441SEvalZero #define AC97_DATA_MASK      BITS_H2L(19, AC97_DATA_LSB)
177*10465441SEvalZero 
178*10465441SEvalZero /* AIC controller AC97 codec status address register (ACSAR) */
179*10465441SEvalZero #define AIC_ACSAR_SAR_LSB   0
180*10465441SEvalZero #define AIC_ACSAR_SAR_MASK  BITS_H2L(19, AIC_ACSAR_SAR_LSB)
181*10465441SEvalZero 
182*10465441SEvalZero /* AIC controller AC97 codec status data register (ACSDR) */
183*10465441SEvalZero #define AIC_ACSDR_SDR_LSB   0
184*10465441SEvalZero #define AIC_ACSDR_SDR_MASK  BITS_H2L(19, AIC_ACSDR_SDR_LSB)
185*10465441SEvalZero 
186*10465441SEvalZero /* AIC controller I2S/MSB-justified clock divider register (I2SDIV) */
187*10465441SEvalZero #define AIC_I2SDIV_IDIV_LSB 16
188*10465441SEvalZero #define AIC_I2SDIV_IDIV_MASK    BITS_H2L(24, AIC_I2SDIV_IDIV_LSB)
189*10465441SEvalZero #define AIC_I2SDIV_DIV_LSB  0
190*10465441SEvalZero #define AIC_I2SDIV_DIV_MASK BITS_H2L(8, AIC_I2SDIV_DIV_LSB)
191*10465441SEvalZero 
192*10465441SEvalZero /* SPDIF enable register (SPDIF_ENA) */
193*10465441SEvalZero #define SPDIF_ENA_SPEN      BIT0
194*10465441SEvalZero 
195*10465441SEvalZero /* SPDIF control register (SPDIF_CTRL) */
196*10465441SEvalZero #define SPDIF_CTRL_DMAEN        BIT15
197*10465441SEvalZero #define SPDIF_CTRL_DTYPE        BIT14
198*10465441SEvalZero #define SPDIF_CTRL_SIGN         BIT13
199*10465441SEvalZero #define SPDIF_CTRL_INVALID      BIT12
200*10465441SEvalZero #define SPDIF_CTRL_RST          BIT11
201*10465441SEvalZero #define SPDIF_CTRL_SPDIFI2S     BIT10
202*10465441SEvalZero #define SPDIF_CTRL_MTRIG        BIT1
203*10465441SEvalZero #define SPDIF_CTRL_MFFUR        BIT0
204*10465441SEvalZero 
205*10465441SEvalZero /* SPDIF state register (SPDIF_STAT) */
206*10465441SEvalZero #define SPDIF_STAT_BUSY     BIT7
207*10465441SEvalZero #define SPDIF_STAT_FTRIG    BIT1
208*10465441SEvalZero #define SPDIF_STAT_FUR      BIT0
209*10465441SEvalZero 
210*10465441SEvalZero #define SPDIF_STAT_FLVL_LSB 8
211*10465441SEvalZero #define SPDIF_STAT_FLVL_MASK    BITS_H2L(14, SPDIF_STAT_FLVL_LSB)
212*10465441SEvalZero 
213*10465441SEvalZero /* SPDIF configure 1 register (SPDIF_CFG1) */
214*10465441SEvalZero #define SPDIF_CFG1_INITLVL  BIT17
215*10465441SEvalZero #define SPDIF_CFG1_ZROVLD   BIT16
216*10465441SEvalZero 
217*10465441SEvalZero #define SPDIF_CFG1_TRIG_LSB 12
218*10465441SEvalZero #define SPDIF_CFG1_TRIG_MASK    BITS_H2L(13, SPDIF_CFG1_TRIG_LSB)
219*10465441SEvalZero #define SPDIF_CFG1_TRIG(n)  (((n) > 16 ? 3 : (n)/8) << SPDIF_CFG1_TRIG_LSB) /* n = 4, 8, 16, 32 */
220*10465441SEvalZero 
221*10465441SEvalZero #define SPDIF_CFG1_SRCNUM_LSB   8
222*10465441SEvalZero #define SPDIF_CFG1_SRCNUM_MASK  BITS_H2L(11, SPDIF_CFG1_SRCNUM_LSB)
223*10465441SEvalZero 
224*10465441SEvalZero #define SPDIF_CFG1_CH1NUM_LSB   4
225*10465441SEvalZero #define SPDIF_CFG1_CH1NUM_MASK  BITS_H2L(7, SPDIF_CFG1_CH1NUM_LSB)
226*10465441SEvalZero 
227*10465441SEvalZero #define SPDIF_CFG1_CH2NUM_LSB   0
228*10465441SEvalZero #define SPDIF_CFG1_CH2NUM_MASK  BITS_H2L(3, SPDIF_CFG1_CH2NUM_LSB)
229*10465441SEvalZero 
230*10465441SEvalZero /* SPDIF configure 2 register (SPDIF_CFG2) */
231*10465441SEvalZero #define SPDIF_CFG2_MAXWL    BIT18
232*10465441SEvalZero #define SPDIF_CFG2_PRE      BIT3
233*10465441SEvalZero #define SPDIF_CFG2_COPYN    BIT2
234*10465441SEvalZero #define SPDIF_CFG2_AUDION   BIT1
235*10465441SEvalZero #define SPDIF_CFG2_CONPRO   BIT0
236*10465441SEvalZero 
237*10465441SEvalZero #define SPDIF_CFG2_FS_LSB   26
238*10465441SEvalZero #define SPDIF_CFG2_FS_MASK  BITS_H2L(29, SPDIF_CFG2_FS_LSB)
239*10465441SEvalZero 
240*10465441SEvalZero #define SPDIF_CFG2_ORGFRQ_LSB   22
241*10465441SEvalZero #define SPDIF_CFG2_ORGFRQ_MASK  BITS_H2L(25, SPDIF_CFG2_ORGFRQ_LSB)
242*10465441SEvalZero 
243*10465441SEvalZero #define SPDIF_CFG2_SAMWL_LSB    19
244*10465441SEvalZero #define SPDIF_CFG2_SAMWL_MASK   BITS_H2L(21, SPDIF_CFG2_SAMWL_LSB)
245*10465441SEvalZero 
246*10465441SEvalZero #define SPDIF_CFG2_CLKACU_LSB   16
247*10465441SEvalZero #define SPDIF_CFG2_CLKACU_MASK  BITS_H2L(17, SPDIF_CFG2_CLKACU_LSB)
248*10465441SEvalZero 
249*10465441SEvalZero #define SPDIF_CFG2_CATCODE_LSB  8
250*10465441SEvalZero #define SPDIF_CFG2_CATCODE_MASK BITS_H2L(15, SPDIF_CFG2_CATCODE_LSB)
251*10465441SEvalZero 
252*10465441SEvalZero #define SPDIF_CFG2_CHMD_LSB 6
253*10465441SEvalZero #define SPDIF_CFG2_CHMD_MASK    BITS_H2L(7, SPDIF_CFG2_CHMD_LSB)
254*10465441SEvalZero 
255*10465441SEvalZero /* ICDC internal register access control register(RGADW) */
256*10465441SEvalZero #define ICDC_RGADW_RGWR     BIT16
257*10465441SEvalZero 
258*10465441SEvalZero #define ICDC_RGADW_RGADDR_LSB   8
259*10465441SEvalZero #define ICDC_RGADW_RGADDR_MASK  BITS_H2L(14, ICDC_RGADW_RGADDR_LSB)
260*10465441SEvalZero 
261*10465441SEvalZero #define ICDC_RGADW_RGDIN_LSB    0
262*10465441SEvalZero #define ICDC_RGADW_RGDIN_MASK   BITS_H2L(7, ICDC_RGADW_RGDIN_LSB)
263*10465441SEvalZero 
264*10465441SEvalZero 
265*10465441SEvalZero /* ICDC internal register data output register (RGDATA)*/
266*10465441SEvalZero #define ICDC_RGDATA_IRQ     BIT8
267*10465441SEvalZero 
268*10465441SEvalZero #define ICDC_RGDATA_RGDOUT_LSB  0
269*10465441SEvalZero #define ICDC_RGDATA_RGDOUT_MASK BITS_H2L(7, ICDC_RGDATA_RGDOUT_LSB)
270*10465441SEvalZero 
271*10465441SEvalZero 
272*10465441SEvalZero #ifndef __MIPS_ASSEMBLER
273*10465441SEvalZero 
274*10465441SEvalZero 
275*10465441SEvalZero #define REG_AIC_FR      REG32(AIC_FR)
276*10465441SEvalZero #define REG_AIC0_FR     REG32(AIC0_FR)
277*10465441SEvalZero #define REG_AIC_CR      REG32(AIC_CR)
278*10465441SEvalZero #define REG_AIC_ACCR1       REG32(AIC_ACCR1)
279*10465441SEvalZero #define REG_AIC_ACCR2       REG32(AIC_ACCR2)
280*10465441SEvalZero #define REG_AIC_I2SCR       REG32(AIC_I2SCR)
281*10465441SEvalZero #define REG_AIC_SR      REG32(AIC_SR)
282*10465441SEvalZero #define REG_AIC_ACSR        REG32(AIC_ACSR)
283*10465441SEvalZero #define REG_AIC_I2SSR       REG32(AIC_I2SSR)
284*10465441SEvalZero #define REG_AIC_ACCAR       REG32(AIC_ACCAR)
285*10465441SEvalZero #define REG_AIC_ACCDR       REG32(AIC_ACCDR)
286*10465441SEvalZero #define REG_AIC_ACSAR       REG32(AIC_ACSAR)
287*10465441SEvalZero #define REG_AIC_ACSDR       REG32(AIC_ACSDR)
288*10465441SEvalZero #define REG_AIC_I2SDIV      REG32(AIC_I2SDIV)
289*10465441SEvalZero #define REG_AIC_DR      REG32(AIC_DR)
290*10465441SEvalZero 
291*10465441SEvalZero #define REG_SPDIF_ENA       REG32(SPDIF_ENA)
292*10465441SEvalZero #define REG_SPDIF_CTRL      REG32(SPDIF_CTRL)
293*10465441SEvalZero #define REG_SPDIF_STATE     REG32(SPDIF_STATE)
294*10465441SEvalZero #define REG_SPDIF_CFG1      REG32(SPDIF_CFG1)
295*10465441SEvalZero #define REG_SPDIF_CFG2      REG32(SPDIF_CFG2)
296*10465441SEvalZero #define REG_SPDIF_FIFO      REG32(SPDIF_FIFO)
297*10465441SEvalZero 
298*10465441SEvalZero #define REG_ICDC_RGADW      REG32(ICDC_RGADW)
299*10465441SEvalZero #define REG_ICDC_RGDATA     REG32(ICDC_RGDATA)
300*10465441SEvalZero 
301*10465441SEvalZero #if 0
302*10465441SEvalZero #define __aic_enable()      ( REG_AIC_FR |= AIC_FR_ENB )
303*10465441SEvalZero #define __aic_disable()     ( REG_AIC_FR &= ~AIC_FR_ENB )
304*10465441SEvalZero 
305*10465441SEvalZero #define __aic_select_ac97() ( REG_AIC_FR &= ~AIC_FR_AUSEL )
306*10465441SEvalZero #define __aic_select_i2s()  ( REG_AIC_FR |= AIC_FR_AUSEL )
307*10465441SEvalZero 
308*10465441SEvalZero #define __aic_play_zero()   ( REG_AIC_FR &= ~AIC_FR_LSMP )
309*10465441SEvalZero #define __aic_play_lastsample() ( REG_AIC_FR |= AIC_FR_LSMP )
310*10465441SEvalZero 
311*10465441SEvalZero #define __i2s_as_master()   ( REG_AIC_FR |= AIC_FR_BCKD | AIC_FR_SYNCD )
312*10465441SEvalZero #define __i2s_as_slave()    ( REG_AIC_FR &= ~(AIC_FR_BCKD | AIC_FR_SYNCD) )
313*10465441SEvalZero 
314*10465441SEvalZero #define jz_aic_ibck_in      (CLRREG32(AIC_FR, AIC_FR_IBCKD))
315*10465441SEvalZero #define jz_aic_ibck_out     (SETREG32(AIC_FR, AIC_FR_IBCKD))
316*10465441SEvalZero 
317*10465441SEvalZero #define jz_aic_isync_in     (CLRREG32(AIC_FR, AIC_FR_ISYNCD))
318*10465441SEvalZero #define jz_aic_isync_out    (SETREG32(AIC_FR, AIC_FR_ISYNCD))
319*10465441SEvalZero 
320*10465441SEvalZero #define jz_aic_enable_dmode (SETREG32(AIC_FR, AIC_FR_DMODE))
321*10465441SEvalZero #define jz_aic_disable_dmode    (CLRREG32(AIC_FR, AIC_FR_DMODE))
322*10465441SEvalZero 
323*10465441SEvalZero #define __aic_reset_status()          ( REG_AIC_FR & AIC_FR_RST )
324*10465441SEvalZero 
325*10465441SEvalZero #define __aic_reset()                                   \
326*10465441SEvalZero do {                                                    \
327*10465441SEvalZero         REG_AIC_FR |= AIC_FR_RST;                       \
328*10465441SEvalZero } while(0)
329*10465441SEvalZero 
330*10465441SEvalZero 
331*10465441SEvalZero #define __aic_set_transmit_trigger(n)           \
332*10465441SEvalZero do {                            \
333*10465441SEvalZero     REG_AIC_FR &= ~AIC_FR_TFTH_MASK;        \
334*10465441SEvalZero     REG_AIC_FR |= ((n) << AIC_FR_TFTH_LSB);     \
335*10465441SEvalZero } while(0)
336*10465441SEvalZero 
337*10465441SEvalZero #define __aic_set_receive_trigger(n)            \
338*10465441SEvalZero do {                            \
339*10465441SEvalZero     REG_AIC_FR &= ~AIC_FR_RFTH_MASK;        \
340*10465441SEvalZero     REG_AIC_FR |= ((n) << AIC_FR_RFTH_LSB);     \
341*10465441SEvalZero } while(0)
342*10465441SEvalZero 
343*10465441SEvalZero #define __aic_enable_oldstyle()
344*10465441SEvalZero #define __aic_enable_newstyle()
345*10465441SEvalZero #define __aic_enable_pack16()   ( REG_AIC_CR |= AIC_CR_PACK16 )
346*10465441SEvalZero #define __aic_enable_unpack16() ( REG_AIC_CR &= ~AIC_CR_PACK16)
347*10465441SEvalZero 
348*10465441SEvalZero #define jz_aic_set_channel(n)                       \
349*10465441SEvalZero     do {                                \
350*10465441SEvalZero         switch((n)) {                       \
351*10465441SEvalZero         case 1:                         \
352*10465441SEvalZero         case 2:                         \
353*10465441SEvalZero         case 4:                         \
354*10465441SEvalZero         case 6:                         \
355*10465441SEvalZero         case 8:                         \
356*10465441SEvalZero             CLRREG32(AIC_CR, AIC_CR_CHANNEL_MASK);      \
357*10465441SEvalZero             SETREG32(AIC_CR, ((((n) - 1) << 24) & AIC_CR_CHANNEL_MASK)); \
358*10465441SEvalZero             break;                      \
359*10465441SEvalZero         default:                        \
360*10465441SEvalZero             printk("invalid aic channel, must be 1, 2, 4, 6, or 8\n"); \
361*10465441SEvalZero             break;                      \
362*10465441SEvalZero         }                           \
363*10465441SEvalZero     } while(0)
364*10465441SEvalZero 
365*10465441SEvalZero /* n = AIC_CR_CHANNEL_MONO,AIC_CR_CHANNEL_STEREO ... */
366*10465441SEvalZero #define __aic_out_channel_select(n)                    \
367*10465441SEvalZero do {                                                   \
368*10465441SEvalZero     REG_AIC_CR &= ~AIC_CR_CHANNEL_MASK;            \
369*10465441SEvalZero         REG_AIC_CR |= ((n) << AIC_CR_CHANNEL_LSB );                \
370*10465441SEvalZero } while(0)
371*10465441SEvalZero 
372*10465441SEvalZero #define __aic_enable_record()   ( REG_AIC_CR |= AIC_CR_EREC )
373*10465441SEvalZero #define __aic_disable_record()  ( REG_AIC_CR &= ~AIC_CR_EREC )
374*10465441SEvalZero #define __aic_enable_replay()   ( REG_AIC_CR |= AIC_CR_ERPL )
375*10465441SEvalZero #define __aic_disable_replay()  ( REG_AIC_CR &= ~AIC_CR_ERPL )
376*10465441SEvalZero #define __aic_enable_loopback() ( REG_AIC_CR |= AIC_CR_ENLBF )
377*10465441SEvalZero #define __aic_disable_loopback() ( REG_AIC_CR &= ~AIC_CR_ENLBF )
378*10465441SEvalZero 
379*10465441SEvalZero #define __aic_flush_tfifo() ( REG_AIC_CR |= AIC_CR_TFLUSH )
380*10465441SEvalZero #define __aic_unflush_tfifo()   ( REG_AIC_CR &= ~AIC_CR_TFLUSH )
381*10465441SEvalZero #define __aic_flush_rfifo() ( REG_AIC_CR |= AIC_CR_RFLUSH )
382*10465441SEvalZero #define __aic_unflush_rfifo()   ( REG_AIC_CR &= ~AIC_CR_RFLUSH )
383*10465441SEvalZero 
384*10465441SEvalZero #define __aic_enable_transmit_intr() \
385*10465441SEvalZero   ( REG_AIC_CR |= (AIC_CR_ETFS | AIC_CR_ETUR) )
386*10465441SEvalZero #define __aic_disable_transmit_intr() \
387*10465441SEvalZero   ( REG_AIC_CR &= ~(AIC_CR_ETFS | AIC_CR_ETUR) )
388*10465441SEvalZero #define __aic_enable_receive_intr() \
389*10465441SEvalZero   ( REG_AIC_CR |= (AIC_CR_ERFS | AIC_CR_EROR) )
390*10465441SEvalZero #define __aic_disable_receive_intr() \
391*10465441SEvalZero   ( REG_AIC_CR &= ~(AIC_CR_ERFS | AIC_CR_EROR) )
392*10465441SEvalZero 
393*10465441SEvalZero #define __aic_enable_transmit_dma()  ( REG_AIC_CR |= AIC_CR_TDMS )
394*10465441SEvalZero #define __aic_disable_transmit_dma() ( REG_AIC_CR &= ~AIC_CR_TDMS )
395*10465441SEvalZero #define __aic_enable_receive_dma()   ( REG_AIC_CR |= AIC_CR_RDMS )
396*10465441SEvalZero #define __aic_disable_receive_dma()  ( REG_AIC_CR &= ~AIC_CR_RDMS )
397*10465441SEvalZero 
398*10465441SEvalZero #define __aic_enable_mono2stereo()   ( REG_AIC_CR |= AIC_CR_M2S )
399*10465441SEvalZero #define __aic_disable_mono2stereo()  ( REG_AIC_CR &= ~AIC_CR_M2S )
400*10465441SEvalZero #define __aic_enable_byteswap()      ( REG_AIC_CR |= AIC_CR_ENDSW )
401*10465441SEvalZero #define __aic_disable_byteswap()     ( REG_AIC_CR &= ~AIC_CR_ENDSW )
402*10465441SEvalZero #define __aic_enable_unsignadj()     ( REG_AIC_CR |= AIC_CR_AVSTSU )
403*10465441SEvalZero #define __aic_disable_unsignadj()    ( REG_AIC_CR &= ~AIC_CR_AVSTSU )
404*10465441SEvalZero 
405*10465441SEvalZero #define AC97_PCM_XS_L_FRONT     AIC_ACCR1_XS_SLOT(3)
406*10465441SEvalZero #define AC97_PCM_XS_R_FRONT     AIC_ACCR1_XS_SLOT(4)
407*10465441SEvalZero #define AC97_PCM_XS_CENTER      AIC_ACCR1_XS_SLOT(6)
408*10465441SEvalZero #define AC97_PCM_XS_L_SURR      AIC_ACCR1_XS_SLOT(7)
409*10465441SEvalZero #define AC97_PCM_XS_R_SURR      AIC_ACCR1_XS_SLOT(8)
410*10465441SEvalZero #define AC97_PCM_XS_LFE         AIC_ACCR1_XS_SLOT(9)
411*10465441SEvalZero 
412*10465441SEvalZero #define AC97_PCM_RS_L_FRONT     AIC_ACCR1_RS_SLOT(3)
413*10465441SEvalZero #define AC97_PCM_RS_R_FRONT     AIC_ACCR1_RS_SLOT(4)
414*10465441SEvalZero #define AC97_PCM_RS_CENTER      AIC_ACCR1_RS_SLOT(6)
415*10465441SEvalZero #define AC97_PCM_RS_L_SURR      AIC_ACCR1_RS_SLOT(7)
416*10465441SEvalZero #define AC97_PCM_RS_R_SURR      AIC_ACCR1_RS_SLOT(8)
417*10465441SEvalZero #define AC97_PCM_RS_LFE         AIC_ACCR1_RS_SLOT(9)
418*10465441SEvalZero 
419*10465441SEvalZero #define __ac97_set_xs_none()    ( REG_AIC_ACCR1 &= ~AIC_ACCR1_XS_MASK )
420*10465441SEvalZero #define __ac97_set_xs_mono()                        \
421*10465441SEvalZero do {                                    \
422*10465441SEvalZero     REG_AIC_ACCR1 &= ~AIC_ACCR1_XS_MASK;                \
423*10465441SEvalZero     REG_AIC_ACCR1 |= AC97_PCM_XS_R_FRONT;               \
424*10465441SEvalZero } while(0)
425*10465441SEvalZero #define __ac97_set_xs_stereo()                      \
426*10465441SEvalZero do {                                    \
427*10465441SEvalZero     REG_AIC_ACCR1 &= ~AIC_ACCR1_XS_MASK;                \
428*10465441SEvalZero     REG_AIC_ACCR1 |= AC97_PCM_XS_L_FRONT | AC97_PCM_XS_R_FRONT; \
429*10465441SEvalZero } while(0)
430*10465441SEvalZero 
431*10465441SEvalZero /* In fact, only stereo is support now. */
432*10465441SEvalZero #define __ac97_set_rs_none()    ( REG_AIC_ACCR1 &= ~AIC_ACCR1_RS_MASK )
433*10465441SEvalZero #define __ac97_set_rs_mono()                        \
434*10465441SEvalZero do {                                    \
435*10465441SEvalZero     REG_AIC_ACCR1 &= ~AIC_ACCR1_RS_MASK;                \
436*10465441SEvalZero     REG_AIC_ACCR1 |= AC97_PCM_RS_R_FRONT;               \
437*10465441SEvalZero } while(0)
438*10465441SEvalZero #define __ac97_set_rs_stereo()                      \
439*10465441SEvalZero do {                                    \
440*10465441SEvalZero     REG_AIC_ACCR1 &= ~AIC_ACCR1_RS_MASK;                \
441*10465441SEvalZero     REG_AIC_ACCR1 |= AC97_PCM_RS_L_FRONT | AC97_PCM_RS_R_FRONT; \
442*10465441SEvalZero } while(0)
443*10465441SEvalZero 
444*10465441SEvalZero #define __ac97_warm_reset_codec()       \
445*10465441SEvalZero  do {                       \
446*10465441SEvalZero     REG_AIC_ACCR2 |= AIC_ACCR2_SA;      \
447*10465441SEvalZero     REG_AIC_ACCR2 |= AIC_ACCR2_SS;      \
448*10465441SEvalZero     udelay(2);              \
449*10465441SEvalZero     REG_AIC_ACCR2 &= ~AIC_ACCR2_SS;     \
450*10465441SEvalZero     REG_AIC_ACCR2 &= ~AIC_ACCR2_SA;     \
451*10465441SEvalZero  } while (0)
452*10465441SEvalZero 
453*10465441SEvalZero #define __ac97_cold_reset_codec()       \
454*10465441SEvalZero  do {                       \
455*10465441SEvalZero     REG_AIC_ACCR2 |=  AIC_ACCR2_SR;     \
456*10465441SEvalZero     udelay(2);              \
457*10465441SEvalZero     REG_AIC_ACCR2 &= ~AIC_ACCR2_SR;     \
458*10465441SEvalZero  } while (0)
459*10465441SEvalZero 
460*10465441SEvalZero /* n=8,16,18,20 */
461*10465441SEvalZero #define __ac97_set_iass(n) \
462*10465441SEvalZero  ( REG_AIC_ACCR2 = (REG_AIC_ACCR2 & ~AIC_ACCR2_IASS_MASK) | AIC_ACCR2_IASS_##n##BIT )
463*10465441SEvalZero #define __ac97_set_oass(n) \
464*10465441SEvalZero  ( REG_AIC_ACCR2 = (REG_AIC_ACCR2 & ~AIC_ACCR2_OASS_MASK) | AIC_ACCR2_OASS_##n##BIT )
465*10465441SEvalZero 
466*10465441SEvalZero /* This bit should only be set in 2 channels configuration */
467*10465441SEvalZero #define __i2s_send_rfirst()   ( REG_AIC_I2SCR |= AIC_I2SCR_RFIRST )  /* RL */
468*10465441SEvalZero #define __i2s_send_lfirst()   ( REG_AIC_I2SCR &= ~AIC_I2SCR_RFIRST ) /* LR */
469*10465441SEvalZero 
470*10465441SEvalZero /* This bit should only be set in 2 channels configuration and 16bit-packed mode */
471*10465441SEvalZero #define __i2s_switch_lr()     ( REG_AIC_I2SCR |= AIC_I2SCR_SWLH )
472*10465441SEvalZero #define __i2s_unswitch_lr()   ( REG_AIC_I2SCR &= ~AIC_I2SCR_SWLH )
473*10465441SEvalZero 
474*10465441SEvalZero #define __i2s_select_i2s()            ( REG_AIC_I2SCR &= ~AIC_I2SCR_AMSL )
475*10465441SEvalZero #define __i2s_select_msbjustified()   ( REG_AIC_I2SCR |= AIC_I2SCR_AMSL )
476*10465441SEvalZero 
477*10465441SEvalZero /* n=8,16,18,20,24 */
478*10465441SEvalZero /*#define __i2s_set_sample_size(n) \
479*10465441SEvalZero  ( REG_AIC_I2SCR |= (REG_AIC_I2SCR & ~AIC_I2SCR_WL_MASK) | AIC_I2SCR_WL_##n##BIT )*/
480*10465441SEvalZero 
481*10465441SEvalZero #define __i2s_out_channel_select(n) __aic_out_channel_select(n)
482*10465441SEvalZero 
483*10465441SEvalZero #define __i2s_set_oss_sample_size(n) \
484*10465441SEvalZero  ( REG_AIC_CR = (REG_AIC_CR & ~AIC_CR_OSS_MASK) | AIC_CR_OSS(n))
485*10465441SEvalZero #define __i2s_set_iss_sample_size(n) \
486*10465441SEvalZero  ( REG_AIC_CR = (REG_AIC_CR & ~AIC_CR_ISS_MASK) | AIC_CR_ISS(n))
487*10465441SEvalZero 
488*10465441SEvalZero #define __i2s_stop_bitclk()   ( REG_AIC_I2SCR |= AIC_I2SCR_STPBK )
489*10465441SEvalZero #define __i2s_start_bitclk()  ( REG_AIC_I2SCR &= ~AIC_I2SCR_STPBK )
490*10465441SEvalZero 
491*10465441SEvalZero #define __i2s_stop_ibitclk()   ( REG_AIC_I2SCR |= AIC_I2SCR_ISTPBK )
492*10465441SEvalZero #define __i2s_start_ibitclk()  ( REG_AIC_I2SCR &= ~AIC_I2SCR_ISTPBK )
493*10465441SEvalZero 
494*10465441SEvalZero #define __aic_transmit_request()  ( REG_AIC_SR & AIC_SR_TFS )
495*10465441SEvalZero #define __aic_receive_request()   ( REG_AIC_SR & AIC_SR_RFS )
496*10465441SEvalZero #define __aic_transmit_underrun() ( REG_AIC_SR & AIC_SR_TUR )
497*10465441SEvalZero #define __aic_receive_overrun()   ( REG_AIC_SR & AIC_SR_ROR )
498*10465441SEvalZero 
499*10465441SEvalZero #define __aic_clear_errors()      ( REG_AIC_SR &= ~(AIC_SR_TUR | AIC_SR_ROR) )
500*10465441SEvalZero 
501*10465441SEvalZero #define __aic_get_transmit_resident() \
502*10465441SEvalZero   ( (REG_AIC_SR & AIC_SR_TFL_MASK) >> AIC_SR_TFL_LSB )
503*10465441SEvalZero #define __aic_get_receive_count() \
504*10465441SEvalZero   ( (REG_AIC_SR & AIC_SR_RFL_MASK) >> AIC_SR_RFL_LSB )
505*10465441SEvalZero 
506*10465441SEvalZero #define __ac97_command_transmitted()     ( REG_AIC_ACSR & AIC_ACSR_CADT )
507*10465441SEvalZero #define __ac97_status_received()         ( REG_AIC_ACSR & AIC_ACSR_SADR )
508*10465441SEvalZero #define __ac97_status_receive_timeout()  ( REG_AIC_ACSR & AIC_ACSR_RSTO )
509*10465441SEvalZero #define __ac97_codec_is_low_power_mode() ( REG_AIC_ACSR & AIC_ACSR_CLPM )
510*10465441SEvalZero #define __ac97_codec_is_ready()          ( REG_AIC_ACSR & AIC_ACSR_CRDY )
511*10465441SEvalZero #define __ac97_slot_error_detected()     ( REG_AIC_ACSR & AIC_ACSR_SLTERR )
512*10465441SEvalZero #define __ac97_clear_slot_error()        ( REG_AIC_ACSR &= ~AIC_ACSR_SLTERR )
513*10465441SEvalZero 
514*10465441SEvalZero #define __i2s_is_busy()         ( REG_AIC_I2SSR & AIC_I2SSR_BSY )
515*10465441SEvalZero 
516*10465441SEvalZero #define __ac97_out_rcmd_addr(reg)                   \
517*10465441SEvalZero do {                                    \
518*10465441SEvalZero     REG_AIC_ACCAR = AC97_READ_CMD | ((reg) << AC97_INDEX_LSB);  \
519*10465441SEvalZero } while (0)
520*10465441SEvalZero 
521*10465441SEvalZero #define __ac97_out_wcmd_addr(reg)                   \
522*10465441SEvalZero do {                                    \
523*10465441SEvalZero     REG_AIC_ACCAR = AC97_WRITE_CMD | ((reg) << AC97_INDEX_LSB);     \
524*10465441SEvalZero } while (0)
525*10465441SEvalZero 
526*10465441SEvalZero #define __ac97_out_data(value)                      \
527*10465441SEvalZero do {                                    \
528*10465441SEvalZero     REG_AIC_ACCDR = ((value) << AC97_DATA_LSB);             \
529*10465441SEvalZero } while (0)
530*10465441SEvalZero 
531*10465441SEvalZero #define __ac97_in_data() \
532*10465441SEvalZero  ( (REG_AIC_ACSDR & CODEC_REG_DATA_MASK) >> AC97_DATA_LSB )
533*10465441SEvalZero 
534*10465441SEvalZero #define __ac97_in_status_addr() \
535*10465441SEvalZero  ( (REG_AIC_ACSAR & AC97_INDEX_MASK) >> AC97_INDEX_LSB )
536*10465441SEvalZero 
537*10465441SEvalZero #define __i2s_set_sample_rate(i2sclk, sync) \
538*10465441SEvalZero   ( REG_AIC_I2SDIV = ((i2sclk) / (4*64)) / (sync) )
539*10465441SEvalZero 
540*10465441SEvalZero #define __aic_write_tfifo(v)  ( REG_AIC_DR = (v) )
541*10465441SEvalZero #define __aic_read_rfifo()    ( REG_AIC_DR )
542*10465441SEvalZero 
543*10465441SEvalZero #define __aic_internal_codec()  ( REG_AIC_FR |= AIC_FR_ICDC )
544*10465441SEvalZero #define __aic_external_codec()  ( REG_AIC_FR &= ~AIC_FR_ICDC )
545*10465441SEvalZero #define __aic0_internal_codec()  ( REG_AIC0_FR |= AIC_FR_ICDC )
546*10465441SEvalZero #define __aic0_external_codec()  ( REG_AIC0_FR &= ~AIC_FR_ICDC )
547*10465441SEvalZero 
548*10465441SEvalZero //
549*10465441SEvalZero // Define next ops for AC97 compatible
550*10465441SEvalZero //
551*10465441SEvalZero 
552*10465441SEvalZero #define AC97_ACSR   AIC_ACSR
553*10465441SEvalZero 
554*10465441SEvalZero #define __ac97_enable()     __aic_enable(); __aic_select_ac97()
555*10465441SEvalZero #define __ac97_disable()    __aic_disable()
556*10465441SEvalZero #define __ac97_reset()      __aic_reset()
557*10465441SEvalZero 
558*10465441SEvalZero #define __ac97_set_transmit_trigger(n)  __aic_set_transmit_trigger(n)
559*10465441SEvalZero #define __ac97_set_receive_trigger(n)   __aic_set_receive_trigger(n)
560*10465441SEvalZero 
561*10465441SEvalZero #define __ac97_enable_record()      __aic_enable_record()
562*10465441SEvalZero #define __ac97_disable_record()     __aic_disable_record()
563*10465441SEvalZero #define __ac97_enable_replay()      __aic_enable_replay()
564*10465441SEvalZero #define __ac97_disable_replay()     __aic_disable_replay()
565*10465441SEvalZero #define __ac97_enable_loopback()    __aic_enable_loopback()
566*10465441SEvalZero #define __ac97_disable_loopback()   __aic_disable_loopback()
567*10465441SEvalZero 
568*10465441SEvalZero #define __ac97_enable_transmit_dma()    __aic_enable_transmit_dma()
569*10465441SEvalZero #define __ac97_disable_transmit_dma()   __aic_disable_transmit_dma()
570*10465441SEvalZero #define __ac97_enable_receive_dma() __aic_enable_receive_dma()
571*10465441SEvalZero #define __ac97_disable_receive_dma()    __aic_disable_receive_dma()
572*10465441SEvalZero 
573*10465441SEvalZero #define __ac97_transmit_request()   __aic_transmit_request()
574*10465441SEvalZero #define __ac97_receive_request()    __aic_receive_request()
575*10465441SEvalZero #define __ac97_transmit_underrun()  __aic_transmit_underrun()
576*10465441SEvalZero #define __ac97_receive_overrun()    __aic_receive_overrun()
577*10465441SEvalZero 
578*10465441SEvalZero #define __ac97_clear_errors()       __aic_clear_errors()
579*10465441SEvalZero 
580*10465441SEvalZero #define __ac97_get_transmit_resident()  __aic_get_transmit_resident()
581*10465441SEvalZero #define __ac97_get_receive_count()  __aic_get_receive_count()
582*10465441SEvalZero 
583*10465441SEvalZero #define __ac97_enable_transmit_intr()   __aic_enable_transmit_intr()
584*10465441SEvalZero #define __ac97_disable_transmit_intr()  __aic_disable_transmit_intr()
585*10465441SEvalZero #define __ac97_enable_receive_intr()    __aic_enable_receive_intr()
586*10465441SEvalZero #define __ac97_disable_receive_intr()   __aic_disable_receive_intr()
587*10465441SEvalZero 
588*10465441SEvalZero #define __ac97_write_tfifo(v)       __aic_write_tfifo(v)
589*10465441SEvalZero #define __ac97_read_rfifo()     __aic_read_rfifo()
590*10465441SEvalZero 
591*10465441SEvalZero //
592*10465441SEvalZero // Define next ops for I2S compatible
593*10465441SEvalZero //
594*10465441SEvalZero 
595*10465441SEvalZero #define I2S_ACSR    AIC_I2SSR
596*10465441SEvalZero 
597*10465441SEvalZero #define __i2s_enable()       __aic_enable(); __aic_select_i2s()
598*10465441SEvalZero #define __i2s_disable()     __aic_disable()
599*10465441SEvalZero #define __i2s_reset()       __aic_reset()
600*10465441SEvalZero 
601*10465441SEvalZero #define __i2s_set_transmit_trigger(n)   __aic_set_transmit_trigger(n)
602*10465441SEvalZero #define __i2s_set_receive_trigger(n)    __aic_set_receive_trigger(n)
603*10465441SEvalZero 
604*10465441SEvalZero #define __i2s_enable_record()       __aic_enable_record()
605*10465441SEvalZero #define __i2s_disable_record()      __aic_disable_record()
606*10465441SEvalZero #define __i2s_enable_replay()       __aic_enable_replay()
607*10465441SEvalZero #define __i2s_disable_replay()      __aic_disable_replay()
608*10465441SEvalZero #define __i2s_enable_loopback()     __aic_enable_loopback()
609*10465441SEvalZero #define __i2s_disable_loopback()    __aic_disable_loopback()
610*10465441SEvalZero 
611*10465441SEvalZero #define __i2s_enable_transmit_dma() __aic_enable_transmit_dma()
612*10465441SEvalZero #define __i2s_disable_transmit_dma()    __aic_disable_transmit_dma()
613*10465441SEvalZero #define __i2s_enable_receive_dma()  __aic_enable_receive_dma()
614*10465441SEvalZero #define __i2s_disable_receive_dma() __aic_disable_receive_dma()
615*10465441SEvalZero 
616*10465441SEvalZero #define __i2s_transmit_request()    __aic_transmit_request()
617*10465441SEvalZero #define __i2s_receive_request()     __aic_receive_request()
618*10465441SEvalZero #define __i2s_transmit_underrun()   __aic_transmit_underrun()
619*10465441SEvalZero #define __i2s_receive_overrun()     __aic_receive_overrun()
620*10465441SEvalZero 
621*10465441SEvalZero #define __i2s_clear_errors()        __aic_clear_errors()
622*10465441SEvalZero 
623*10465441SEvalZero #define __i2s_get_transmit_resident()   __aic_get_transmit_resident()
624*10465441SEvalZero #define __i2s_get_receive_count()   __aic_get_receive_count()
625*10465441SEvalZero 
626*10465441SEvalZero #define __i2s_enable_transmit_intr()    __aic_enable_transmit_intr()
627*10465441SEvalZero #define __i2s_disable_transmit_intr()   __aic_disable_transmit_intr()
628*10465441SEvalZero #define __i2s_enable_receive_intr() __aic_enable_receive_intr()
629*10465441SEvalZero #define __i2s_disable_receive_intr()    __aic_disable_receive_intr()
630*10465441SEvalZero 
631*10465441SEvalZero #define __i2s_write_tfifo(v)        __aic_write_tfifo(v)
632*10465441SEvalZero #define __i2s_read_rfifo()      __aic_read_rfifo()
633*10465441SEvalZero 
634*10465441SEvalZero #define __i2s_reset_codec()         \
635*10465441SEvalZero  do {                       \
636*10465441SEvalZero  } while (0)
637*10465441SEvalZero 
638*10465441SEvalZero 
639*10465441SEvalZero /*************************************************************************
640*10465441SEvalZero  * SPDIF INTERFACE in AIC Controller
641*10465441SEvalZero  *************************************************************************/
642*10465441SEvalZero 
643*10465441SEvalZero #define __spdif_enable()        ( REG_SPDIF_ENA |= SPDIF_ENA_SPEN )
644*10465441SEvalZero #define __spdif_disable()       ( REG_SPDIF_ENA &= ~SPDIF_ENA_SPEN )
645*10465441SEvalZero 
646*10465441SEvalZero #define __spdif_enable_transmit_dma()     ( REG_SPDIF_CTRL |= SPDIF_CTRL_DMAEN )
647*10465441SEvalZero #define __spdif_disable_transmit_dma()    ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_DMAEN )
648*10465441SEvalZero #define __spdif_enable_dtype()            ( REG_SPDIF_CTRL |= SPDIF_CTRL_DTYPE )
649*10465441SEvalZero #define __spdif_disable_dtype()           ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_DTYPE )
650*10465441SEvalZero #define __spdif_enable_sign()             ( REG_SPDIF_CTRL |= SPDIF_CTRL_SIGN )
651*10465441SEvalZero #define __spdif_disable_sign()            ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_SIGN )
652*10465441SEvalZero #define __spdif_enable_invalid()          ( REG_SPDIF_CTRL |= SPDIF_CTRL_INVALID )
653*10465441SEvalZero #define __spdif_disable_invalid()         ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_INVALID )
654*10465441SEvalZero #define __spdif_enable_reset()            ( REG_SPDIF_CTRL |= SPDIF_CTRL_RST )
655*10465441SEvalZero #define __spdif_select_spdif()            ( REG_SPDIF_CTRL |= SPDIF_CTRL_SPDIFI2S )
656*10465441SEvalZero #define __spdif_select_i2s()              ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_SPDIFI2S )
657*10465441SEvalZero #define __spdif_enable_MTRIGmask()        ( REG_SPDIF_CTRL |= SPDIF_CTRL_MTRIG )
658*10465441SEvalZero #define __spdif_disable_MTRIGmask()       ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_MTRIG )
659*10465441SEvalZero #define __spdif_enable_MFFURmask()        ( REG_SPDIF_CTRL |= SPDIF_CTRL_MFFUR )
660*10465441SEvalZero #define __spdif_disable_MFFURmask()       ( REG_SPDIF_CTRL &= ~SPDIF_CTRL_MFFUR )
661*10465441SEvalZero 
662*10465441SEvalZero #define __spdif_enable_initlvl_high()     ( REG_SPDIF_CFG1 |=  SPDIF_CFG1_INITLVL )
663*10465441SEvalZero #define __spdif_enable_initlvl_low()      ( REG_SPDIF_CFG1 &=  ~SPDIF_CFG1_INITLVL )
664*10465441SEvalZero #define __spdif_enable_zrovld_invald()    ( REG_SPDIF_CFG1 |=  SPDIF_CFG1_ZROVLD )
665*10465441SEvalZero #define __spdif_enable_zrovld_vald()      ( REG_SPDIF_CFG1 &=  ~SPDIF_CFG1_ZROVLD )
666*10465441SEvalZero 
667*10465441SEvalZero /* 0, 1, 2, 3 */
668*10465441SEvalZero #define __spdif_set_transmit_trigger(n)         \
669*10465441SEvalZero do {                            \
670*10465441SEvalZero     REG_SPDIF_CFG1 &= ~SPDIF_CFG1_TRIG_MASK;    \
671*10465441SEvalZero     REG_SPDIF_CFG1 |= SPDIF_CFG1_TRIG(n);   \
672*10465441SEvalZero } while(0)
673*10465441SEvalZero 
674*10465441SEvalZero /* 1 ~ 15 */
675*10465441SEvalZero #define __spdif_set_srcnum(n)               \
676*10465441SEvalZero do {                            \
677*10465441SEvalZero     REG_SPDIF_CFG1 &= ~SPDIF_CFG1_SRCNUM_MASK;  \
678*10465441SEvalZero     REG_SPDIF_CFG1 |= ((n) << SPDIF_CFG1_SRCNUM_LSB);   \
679*10465441SEvalZero } while(0)
680*10465441SEvalZero 
681*10465441SEvalZero /* 1 ~ 15 */
682*10465441SEvalZero #define __spdif_set_ch1num(n)               \
683*10465441SEvalZero do {                            \
684*10465441SEvalZero     REG_SPDIF_CFG1 &= ~SPDIF_CFG1_CH1NUM_MASK;  \
685*10465441SEvalZero     REG_SPDIF_CFG1 |= ((n) << SPDIF_CFG1_CH1NUM_LSB);   \
686*10465441SEvalZero } while(0)
687*10465441SEvalZero 
688*10465441SEvalZero /* 1 ~ 15 */
689*10465441SEvalZero #define __spdif_set_ch2num(n)               \
690*10465441SEvalZero do {                            \
691*10465441SEvalZero     REG_SPDIF_CFG1 &= ~SPDIF_CFG1_CH2NUM_MASK;  \
692*10465441SEvalZero     REG_SPDIF_CFG1 |= ((n) << SPDIF_CFG1_CH2NUM_LSB);   \
693*10465441SEvalZero } while(0)
694*10465441SEvalZero 
695*10465441SEvalZero /* 0x0, 0x2, 0x3, 0xa, 0xe */
696*10465441SEvalZero #define __spdif_set_fs(n)               \
697*10465441SEvalZero do {                            \
698*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_FS_MASK;      \
699*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_FS_LSB);   \
700*10465441SEvalZero } while(0)
701*10465441SEvalZero 
702*10465441SEvalZero /* 0xd, 0xc, 0x5, 0x1 */
703*10465441SEvalZero #define __spdif_set_orgfrq(n)               \
704*10465441SEvalZero do {                            \
705*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_ORGFRQ_MASK;      \
706*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_ORGFRQ_LSB);   \
707*10465441SEvalZero } while(0)
708*10465441SEvalZero 
709*10465441SEvalZero /* 0x1, 0x6, 0x2, 0x4, 0x5 */
710*10465441SEvalZero #define __spdif_set_samwl(n)                \
711*10465441SEvalZero do {                            \
712*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_SAMWL_MASK;       \
713*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_SAMWL_LSB);    \
714*10465441SEvalZero } while(0)
715*10465441SEvalZero 
716*10465441SEvalZero #define __spdif_enable_samwl_24()    ( REG_SPDIF_CFG2 |= SPDIF_CFG2_MAXWL )
717*10465441SEvalZero #define __spdif_enable_samwl_20()    ( REG_SPDIF_CFG1 &= ~SPDIF_CFG2_MAXWL )
718*10465441SEvalZero 
719*10465441SEvalZero /* 0x1, 0x1, 0x2, 0x3 */
720*10465441SEvalZero #define __spdif_set_clkacu(n)               \
721*10465441SEvalZero do {                            \
722*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_CLKACU_MASK;      \
723*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_CLKACU_LSB);   \
724*10465441SEvalZero } while(0)
725*10465441SEvalZero 
726*10465441SEvalZero /* see IEC60958-3 */
727*10465441SEvalZero #define __spdif_set_catcode(n)              \
728*10465441SEvalZero do {                            \
729*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_CATCODE_MASK;     \
730*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_CATCODE_LSB);  \
731*10465441SEvalZero } while(0)
732*10465441SEvalZero 
733*10465441SEvalZero /* n = 0x0, */
734*10465441SEvalZero #define __spdif_set_chmode(n)               \
735*10465441SEvalZero do {                            \
736*10465441SEvalZero     REG_SPDIF_CFG2 &= ~SPDIF_CFG2_CHMD_MASK;    \
737*10465441SEvalZero     REG_SPDIF_CFG2 |= ((n) << SPDIF_CFG2_CHMD_LSB); \
738*10465441SEvalZero } while(0)
739*10465441SEvalZero 
740*10465441SEvalZero #define __spdif_enable_pre()       ( REG_SPDIF_CFG2 |= SPDIF_CFG2_PRE )
741*10465441SEvalZero #define __spdif_disable_pre()      ( REG_SPDIF_CFG2 &= ~SPDIF_CFG2_PRE )
742*10465441SEvalZero #define __spdif_enable_copyn()     ( REG_SPDIF_CFG2 |= SPDIF_CFG2_COPYN )
743*10465441SEvalZero #define __spdif_disable_copyn()    ( REG_SPDIF_CFG2 &= ~SPDIF_CFG2_COPYN )
744*10465441SEvalZero /* audio sample word represents linear PCM samples */
745*10465441SEvalZero #define __spdif_enable_audion()    ( REG_SPDIF_CFG2 &= ~SPDIF_CFG2_AUDION )
746*10465441SEvalZero /* udio sample word used for other purpose */
747*10465441SEvalZero #define __spdif_disable_audion()   ( REG_SPDIF_CFG2 |= SPDIF_CFG2_AUDION )
748*10465441SEvalZero #define __spdif_enable_conpro()    ( REG_SPDIF_CFG2 &= ~SPDIF_CFG2_CONPRO )
749*10465441SEvalZero #define __spdif_disable_conpro()   ( REG_SPDIF_CFG2 |= SPDIF_CFG2_CONPRO )
750*10465441SEvalZero 
751*10465441SEvalZero /***************************************************************************
752*10465441SEvalZero  * ICDC
753*10465441SEvalZero  ***************************************************************************/
754*10465441SEvalZero #define __i2s_internal_codec()         __aic_internal_codec()
755*10465441SEvalZero #define __i2s_external_codec()         __aic_external_codec()
756*10465441SEvalZero 
757*10465441SEvalZero #define __icdc_clk_ready()             ( REG_ICDC_CKCFG & ICDC_CKCFG_CKRDY )
758*10465441SEvalZero #define __icdc_sel_adc()               ( REG_ICDC_CKCFG |= ICDC_CKCFG_SELAD )
759*10465441SEvalZero #define __icdc_sel_dac()               ( REG_ICDC_CKCFG &= ~ICDC_CKCFG_SELAD )
760*10465441SEvalZero 
761*10465441SEvalZero #define __icdc_set_rgwr()              ( REG_ICDC_RGADW |= ICDC_RGADW_RGWR )
762*10465441SEvalZero #define __icdc_clear_rgwr()            ( REG_ICDC_RGADW &= ~ICDC_RGADW_RGWR )
763*10465441SEvalZero #define __icdc_rgwr_ready()            ( REG_ICDC_RGADW & ICDC_RGADW_RGWR )
764*10465441SEvalZero 
765*10465441SEvalZero #define AIC_RW_CODEC_START()        while (INREG32(ICDC_RGADW) & ICDC_RGADW_RGWR)
766*10465441SEvalZero #define AIC_RW_CODEC_STOP()     while (INREG32(ICDC_RGADW) & ICDC_RGADW_RGWR)
767*10465441SEvalZero 
768*10465441SEvalZero 
769*10465441SEvalZero #define __icdc_set_addr(n)              \
770*10465441SEvalZero do {                                \
771*10465441SEvalZero     REG_ICDC_RGADW &= ~ICDC_RGADW_RGADDR_MASK;  \
772*10465441SEvalZero     REG_ICDC_RGADW |= (n) << ICDC_RGADW_RGADDR_LSB; \
773*10465441SEvalZero } while(0)
774*10465441SEvalZero 
775*10465441SEvalZero #define __icdc_set_cmd(n)               \
776*10465441SEvalZero do {                                \
777*10465441SEvalZero     REG_ICDC_RGADW &= ~ICDC_RGADW_RGDIN_MASK;   \
778*10465441SEvalZero     REG_ICDC_RGADW |= (n) << ICDC_RGADW_RGDIN_LSB;  \
779*10465441SEvalZero } while(0)
780*10465441SEvalZero 
781*10465441SEvalZero #define __icdc_irq_pending()            ( REG_ICDC_RGDATA & ICDC_RGDATA_IRQ )
782*10465441SEvalZero #define __icdc_get_value()              ( REG_ICDC_RGDATA & ICDC_RGDATA_RGDOUT_MASK )
783*10465441SEvalZero 
784*10465441SEvalZero 
785*10465441SEvalZero 
786*10465441SEvalZero #endif /* __MIPS_ASSEMBLER */
787*10465441SEvalZero 
788*10465441SEvalZero #endif
789*10465441SEvalZero 
790*10465441SEvalZero #ifdef __cplusplus
791*10465441SEvalZero }
792*10465441SEvalZero #endif
793*10465441SEvalZero 
794*10465441SEvalZero #endif /* _X1000_AIC_H_ */
795