xref: /OK3568_Linux_fs/kernel/sound/ppc/snd_ps3_reg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Audio support for PS3
4*4882a593Smuzhiyun  * Copyright (C) 2007 Sony Computer Entertainment Inc.
5*4882a593Smuzhiyun  * Copyright 2006, 2007 Sony Corporation
6*4882a593Smuzhiyun  * All rights reserved.
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun /*
10*4882a593Smuzhiyun  * interrupt / configure registers
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0                 (0x00000100)
14*4882a593Smuzhiyun #define PS3_AUDIO_INTR_EN_0              (0x00000140)
15*4882a593Smuzhiyun #define PS3_AUDIO_CONFIG                 (0x00000200)
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * DMAC registers
19*4882a593Smuzhiyun  * n:0..9
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun #define PS3_AUDIO_DMAC_REGBASE(x)         (0x0000210 + 0x20 * (x))
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define PS3_AUDIO_KICK(n)                 (PS3_AUDIO_DMAC_REGBASE(n) + 0x00)
24*4882a593Smuzhiyun #define PS3_AUDIO_SOURCE(n)               (PS3_AUDIO_DMAC_REGBASE(n) + 0x04)
25*4882a593Smuzhiyun #define PS3_AUDIO_DEST(n)                 (PS3_AUDIO_DMAC_REGBASE(n) + 0x08)
26*4882a593Smuzhiyun #define PS3_AUDIO_DMASIZE(n)              (PS3_AUDIO_DMAC_REGBASE(n) + 0x0C)
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /*
29*4882a593Smuzhiyun  * mute control
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL                (0x00004000)
32*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP                 (0x00004004)
33*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP                 (0x00004008)
34*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC                   (0x00004010)
35*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE                   (0x00004014)
36*4882a593Smuzhiyun #define PS3_AUDIO_AX_IS                   (0x00004018)
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  * three wire serial
40*4882a593Smuzhiyun  * n:0..3
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL                (0x00006000)
43*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL              (0x00006004)
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL(n)            (0x00006200 + 0x200 * (n))
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /*
48*4882a593Smuzhiyun  * S/PDIF
49*4882a593Smuzhiyun  * n:0..1
50*4882a593Smuzhiyun  * x:0..11
51*4882a593Smuzhiyun  * y:0..5
52*4882a593Smuzhiyun  */
53*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPD_REGBASE(n)       (0x00007200 + 0x200 * (n))
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL(n) \
56*4882a593Smuzhiyun 	(PS3_AUDIO_AO_SPD_REGBASE(n) + 0x00)
57*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDUB(n, x) \
58*4882a593Smuzhiyun 	(PS3_AUDIO_AO_SPD_REGBASE(n) + 0x04 + 0x04 * (x))
59*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCS(n, y) \
60*4882a593Smuzhiyun 	(PS3_AUDIO_AO_SPD_REGBASE(n) + 0x34 + 0x04 * (y))
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /*
64*4882a593Smuzhiyun   PS3_AUDIO_INTR_0 register tells an interrupt handler which audio
65*4882a593Smuzhiyun   DMA channel triggered the interrupt.  The interrupt status for a channel
66*4882a593Smuzhiyun   can be cleared by writing a '1' to the corresponding bit.  A new interrupt
67*4882a593Smuzhiyun   cannot be generated until the previous interrupt has been cleared.
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun   Note that the status reported by PS3_AUDIO_INTR_0 is independent of the
70*4882a593Smuzhiyun   value of PS3_AUDIO_INTR_EN_0.
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
73*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
74*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0 0 0 0 0 0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C| INTR_0
75*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
76*4882a593Smuzhiyun */
77*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN(n)	(1 << ((n) * 2))
78*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN9     PS3_AUDIO_INTR_0_CHAN(9)
79*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN8     PS3_AUDIO_INTR_0_CHAN(8)
80*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN7     PS3_AUDIO_INTR_0_CHAN(7)
81*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN6     PS3_AUDIO_INTR_0_CHAN(6)
82*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN5     PS3_AUDIO_INTR_0_CHAN(5)
83*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN4     PS3_AUDIO_INTR_0_CHAN(4)
84*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN3     PS3_AUDIO_INTR_0_CHAN(3)
85*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN2     PS3_AUDIO_INTR_0_CHAN(2)
86*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN1     PS3_AUDIO_INTR_0_CHAN(1)
87*4882a593Smuzhiyun #define PS3_AUDIO_INTR_0_CHAN0     PS3_AUDIO_INTR_0_CHAN(0)
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /*
90*4882a593Smuzhiyun   The PS3_AUDIO_INTR_EN_0 register specifies which DMA channels can generate
91*4882a593Smuzhiyun   an interrupt to the PU.  Each bit of PS3_AUDIO_INTR_EN_0 is ANDed with the
92*4882a593Smuzhiyun   corresponding bit in PS3_AUDIO_INTR_0.  The resulting bits are OR'd together
93*4882a593Smuzhiyun   to generate the Audio interrupt.
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
96*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
97*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0 0 0 0 0 0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C|0|C| INTR_EN_0
98*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun   Bit assignments are same as PS3_AUDIO_INTR_0
101*4882a593Smuzhiyun */
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /*
104*4882a593Smuzhiyun   PS3_AUDIO_CONFIG
105*4882a593Smuzhiyun   31            24 23           16 15            8 7             0
106*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
107*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 C|0 0 0 0 0 0 0 0| CONFIG
108*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun */
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* The CLEAR field cancels all pending transfers, and stops any running DMA
113*4882a593Smuzhiyun    transfers.  Any interrupts associated with the canceled transfers
114*4882a593Smuzhiyun    will occur as if the transfer had finished.
115*4882a593Smuzhiyun    Since this bit is designed to recover from DMA related issues
116*4882a593Smuzhiyun    which are caused by unpredictable situations, it is preferred to wait
117*4882a593Smuzhiyun    for normal DMA transfer end without using this bit.
118*4882a593Smuzhiyun */
119*4882a593Smuzhiyun #define PS3_AUDIO_CONFIG_CLEAR          (1 << 8)  /* RWIVF */
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /*
122*4882a593Smuzhiyun   PS3_AUDIO_AX_MCTRL: Audio Port Mute Control Register
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
125*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
126*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|A|A|A|0 0 0 0 0 0 0|S|S|A|A|A|A| AX_MCTRL
127*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
128*4882a593Smuzhiyun */
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* 3 Wire Audio Serial Output Channel Mutes (0..3)  */
131*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASOMT(n)     (1 << (3 - (n)))  /* RWIVF */
132*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASO3MT       (1 << 0)          /* RWIVF */
133*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASO2MT       (1 << 1)          /* RWIVF */
134*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASO1MT       (1 << 2)          /* RWIVF */
135*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASO0MT       (1 << 3)          /* RWIVF */
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /* S/PDIF mutes (0,1)*/
138*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_SPOMT(n)     (1 << (5 - (n)))  /* RWIVF */
139*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_SPO1MT       (1 << 4)          /* RWIVF */
140*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_SPO0MT       (1 << 5)          /* RWIVF */
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* All 3 Wire Serial Outputs Mute */
143*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_AASOMT       (1 << 13)         /* RWIVF */
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /* All S/PDIF Mute */
146*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_ASPOMT       (1 << 14)         /* RWIVF */
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /* All Audio Outputs Mute */
149*4882a593Smuzhiyun #define PS3_AUDIO_AX_MCTRL_AAOMT        (1 << 15)         /* RWIVF */
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun /*
152*4882a593Smuzhiyun   S/PDIF Outputs Buffer Read/Write Pointer Register
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
155*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
156*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0|0|SPO0B|0|SPO1B|0 0 0 0 0 0 0 0|0|SPO0B|0|SPO1B| AX_ISBP
157*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun */
160*4882a593Smuzhiyun /*
161*4882a593Smuzhiyun  S/PDIF Output Channel Read Buffer Numbers
162*4882a593Smuzhiyun  Buffer number is  value of field.
163*4882a593Smuzhiyun  Indicates current read access buffer ID from Audio Data
164*4882a593Smuzhiyun  Transfer controller of S/PDIF Output
165*4882a593Smuzhiyun */
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPOBRN_MASK(n) (0x7 << 4 * (1 - (n))) /* R-IUF */
168*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPO1BRN_MASK		(0x7 << 0) /* R-IUF */
169*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPO0BRN_MASK		(0x7 << 4) /* R-IUF */
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun /*
172*4882a593Smuzhiyun S/PDIF Output Channel Buffer Write Numbers
173*4882a593Smuzhiyun Indicates current write access buffer ID from bus master.
174*4882a593Smuzhiyun */
175*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPOBWN_MASK(n) (0x7 <<  4 * (5 - (n))) /* R-IUF */
176*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPO1BWN_MASK		(0x7 << 16) /* R-IUF */
177*4882a593Smuzhiyun #define PS3_AUDIO_AX_ISBP_SPO0BWN_MASK		(0x7 << 20) /* R-IUF */
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun /*
180*4882a593Smuzhiyun   3 Wire Audio Serial Outputs Buffer Read/Write
181*4882a593Smuzhiyun   Pointer Register
182*4882a593Smuzhiyun   Buffer number is  value of field
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
185*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
186*4882a593Smuzhiyun  |0|ASO0B|0|ASO1B|0|ASO2B|0|ASO3B|0|ASO0B|0|ASO1B|0|ASO2B|0|ASO3B| AX_AOBP
187*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
188*4882a593Smuzhiyun */
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /*
191*4882a593Smuzhiyun 3 Wire Audio Serial Output Channel Buffer Read Numbers
192*4882a593Smuzhiyun Indicates current read access buffer Id from Audio Data Transfer
193*4882a593Smuzhiyun Controller of 3 Wire Audio Serial Output Channels
194*4882a593Smuzhiyun */
195*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASOBRN_MASK(n) (0x7 << 4 * (3 - (n))) /* R-IUF */
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO3BRN_MASK	(0x7 << 0) /* R-IUF */
198*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO2BRN_MASK	(0x7 << 4) /* R-IUF */
199*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO1BRN_MASK	(0x7 << 8) /* R-IUF */
200*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO0BRN_MASK	(0x7 << 12) /* R-IUF */
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /*
203*4882a593Smuzhiyun 3 Wire Audio Serial Output Channel Buffer Write Numbers
204*4882a593Smuzhiyun Indicates current write access buffer ID from bus master.
205*4882a593Smuzhiyun */
206*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASOBWN_MASK(n) (0x7 << 4 * (7 - (n))) /* R-IUF */
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO3BWN_MASK        (0x7 << 16) /* R-IUF */
209*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO2BWN_MASK        (0x7 << 20) /* R-IUF */
210*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO1BWN_MASK        (0x7 << 24) /* R-IUF */
211*4882a593Smuzhiyun #define PS3_AUDIO_AX_AOBP_ASO0BWN_MASK        (0x7 << 28) /* R-IUF */
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun /*
216*4882a593Smuzhiyun Audio Port Interrupt Condition Register
217*4882a593Smuzhiyun For the fields in this register, the following values apply:
218*4882a593Smuzhiyun 0 = Interrupt is generated every interrupt event.
219*4882a593Smuzhiyun 1 = Interrupt is generated every 2 interrupt events.
220*4882a593Smuzhiyun 2 = Interrupt is generated every 4 interrupt events.
221*4882a593Smuzhiyun 3 = Reserved
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
225*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
226*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0|0 0|SPO|0 0|SPO|0 0|AAS|0 0 0 0 0 0 0 0 0 0 0 0| AX_IC
227*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
228*4882a593Smuzhiyun */
229*4882a593Smuzhiyun /*
230*4882a593Smuzhiyun All 3-Wire Audio Serial Outputs Interrupt Mode
231*4882a593Smuzhiyun Configures the Interrupt and Signal Notification
232*4882a593Smuzhiyun condition of all 3-wire Audio Serial Outputs.
233*4882a593Smuzhiyun */
234*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_AASOIMD_MASK          (0x3 << 12) /* RWIVF */
235*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_AASOIMD_EVERY1        (0x0 << 12) /* RWI-V */
236*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_AASOIMD_EVERY2        (0x1 << 12) /* RW--V */
237*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_AASOIMD_EVERY4        (0x2 << 12) /* RW--V */
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun /*
240*4882a593Smuzhiyun S/PDIF Output Channel Interrupt Modes
241*4882a593Smuzhiyun Configures the Interrupt and signal Notification
242*4882a593Smuzhiyun conditions of S/PDIF output channels.
243*4882a593Smuzhiyun */
244*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO1IMD_MASK          (0x3 << 16) /* RWIVF */
245*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO1IMD_EVERY1        (0x0 << 16) /* RWI-V */
246*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO1IMD_EVERY2        (0x1 << 16) /* RW--V */
247*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO1IMD_EVERY4        (0x2 << 16) /* RW--V */
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO0IMD_MASK          (0x3 << 20) /* RWIVF */
250*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO0IMD_EVERY1        (0x0 << 20) /* RWI-V */
251*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO0IMD_EVERY2        (0x1 << 20) /* RW--V */
252*4882a593Smuzhiyun #define PS3_AUDIO_AX_IC_SPO0IMD_EVERY4        (0x2 << 20) /* RW--V */
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun /*
255*4882a593Smuzhiyun Audio Port interrupt Enable Register
256*4882a593Smuzhiyun Configures whether to enable or disable each Interrupt Generation.
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
260*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
261*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0|S|S|0 0|A|A|A|A|0 0 0 0|S|S|0 0|S|S|0 0|A|A|A|A| AX_IE
262*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun */
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun /*
267*4882a593Smuzhiyun 3 Wire Audio Serial Output Channel Buffer Underflow
268*4882a593Smuzhiyun Interrupt Enables
269*4882a593Smuzhiyun Select enable/disable of Buffer Underflow Interrupts for
270*4882a593Smuzhiyun 3-Wire Audio Serial Output Channels
271*4882a593Smuzhiyun DISABLED=Interrupt generation disabled.
272*4882a593Smuzhiyun */
273*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASOBUIE(n)      (1 << (3 - (n))) /* RWIVF */
274*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO3BUIE        (1 << 0) /* RWIVF */
275*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO2BUIE        (1 << 1) /* RWIVF */
276*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO1BUIE        (1 << 2) /* RWIVF */
277*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO0BUIE        (1 << 3) /* RWIVF */
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun /* S/PDIF Output Channel Buffer Underflow Interrupt Enables */
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPOBUIE(n)      (1 << (7 - (n))) /* RWIVF */
282*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO1BUIE        (1 << 6) /* RWIVF */
283*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO0BUIE        (1 << 7) /* RWIVF */
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun /* S/PDIF Output Channel One Block Transfer Completion Interrupt Enables */
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPOBTCIE(n)     (1 << (11 - (n))) /* RWIVF */
288*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO1BTCIE       (1 << 10) /* RWIVF */
289*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO0BTCIE       (1 << 11) /* RWIVF */
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* 3-Wire Audio Serial Output Channel Buffer Empty Interrupt Enables */
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASOBEIE(n)      (1 << (19 - (n))) /* RWIVF */
294*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO3BEIE        (1 << 16) /* RWIVF */
295*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO2BEIE        (1 << 17) /* RWIVF */
296*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO1BEIE        (1 << 18) /* RWIVF */
297*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_ASO0BEIE        (1 << 19) /* RWIVF */
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /* S/PDIF Output Channel Buffer Empty Interrupt Enables */
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPOBEIE(n)      (1 << (23 - (n))) /* RWIVF */
302*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO1BEIE        (1 << 22) /* RWIVF */
303*4882a593Smuzhiyun #define PS3_AUDIO_AX_IE_SPO0BEIE        (1 << 23) /* RWIVF */
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun /*
306*4882a593Smuzhiyun Audio Port Interrupt Status Register
307*4882a593Smuzhiyun Indicates Interrupt status, which interrupt has occurred, and can clear
308*4882a593Smuzhiyun each interrupt in this register.
309*4882a593Smuzhiyun Writing 1b to a field containing 1b clears field and de-asserts interrupt.
310*4882a593Smuzhiyun Writing 0b to a field has no effect.
311*4882a593Smuzhiyun Field vaules are the following:
312*4882a593Smuzhiyun 0 - Interrupt hasn't occurred.
313*4882a593Smuzhiyun 1 - Interrupt has occurred.
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
317*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
318*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0|S|S|0 0|A|A|A|A|0 0 0 0|S|S|0 0|S|S|0 0|A|A|A|A| AX_IS
319*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun  Bit assignment are same as AX_IE
322*4882a593Smuzhiyun */
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun /*
325*4882a593Smuzhiyun Audio Output Master Control Register
326*4882a593Smuzhiyun Configures Master Clock and other master Audio Output Settings
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
330*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
331*4882a593Smuzhiyun  |0|SCKSE|0|SCKSE|  MR0  |  MR1  |MCL|MCL|0 0 0 0|0 0 0 0 0 0 0 0| AO_MCTRL
332*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
333*4882a593Smuzhiyun */
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun /*
336*4882a593Smuzhiyun MCLK Output Control
337*4882a593Smuzhiyun Controls mclko[1] output.
338*4882a593Smuzhiyun 0 - Disable output (fixed at High)
339*4882a593Smuzhiyun 1 - Output clock produced by clock selected
340*4882a593Smuzhiyun with scksel1 by mr1
341*4882a593Smuzhiyun 2 - Reserved
342*4882a593Smuzhiyun 3 - Reserved
343*4882a593Smuzhiyun */
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC1_MASK		(0x3 << 12) /* RWIVF */
346*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC1_DISABLED	(0x0 << 12) /* RWI-V */
347*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC1_ENABLED	(0x1 << 12) /* RW--V */
348*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC1_RESVD2	(0x2 << 12) /* RW--V */
349*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC1_RESVD3	(0x3 << 12) /* RW--V */
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun /*
352*4882a593Smuzhiyun MCLK Output Control
353*4882a593Smuzhiyun Controls mclko[0] output.
354*4882a593Smuzhiyun 0 - Disable output (fixed at High)
355*4882a593Smuzhiyun 1 - Output clock produced by clock selected
356*4882a593Smuzhiyun with SCKSEL0 by MR0
357*4882a593Smuzhiyun 2 - Reserved
358*4882a593Smuzhiyun 3 - Reserved
359*4882a593Smuzhiyun */
360*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC0_MASK		(0x3 << 14) /* RWIVF */
361*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC0_DISABLED	(0x0 << 14) /* RWI-V */
362*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC0_ENABLED	(0x1 << 14) /* RW--V */
363*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC0_RESVD2	(0x2 << 14) /* RW--V */
364*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MCLKC0_RESVD3	(0x3 << 14) /* RW--V */
365*4882a593Smuzhiyun /*
366*4882a593Smuzhiyun Master Clock Rate 1
367*4882a593Smuzhiyun Sets the divide ration of Master Clock1 (clock output from
368*4882a593Smuzhiyun mclko[1] for the input clock selected by scksel1.
369*4882a593Smuzhiyun */
370*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MR1_MASK	(0xf << 16)
371*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MR1_DEFAULT	(0x0 << 16) /* RWI-V */
372*4882a593Smuzhiyun /*
373*4882a593Smuzhiyun Master Clock Rate 0
374*4882a593Smuzhiyun Sets the divide ratio of Master Clock0 (clock output from
375*4882a593Smuzhiyun mclko[0] for the input clock selected by scksel0).
376*4882a593Smuzhiyun */
377*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MR0_MASK	(0xf << 20) /* RWIVF */
378*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_MR0_DEFAULT	(0x0 << 20) /* RWI-V */
379*4882a593Smuzhiyun /*
380*4882a593Smuzhiyun System Clock Select 0/1
381*4882a593Smuzhiyun Selects the system clock to be used as Master Clock 0/1
382*4882a593Smuzhiyun Input the system clock that is appropriate for the sampling
383*4882a593Smuzhiyun rate.
384*4882a593Smuzhiyun */
385*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_SCKSEL1_MASK		(0x7 << 24) /* RWIVF */
386*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_SCKSEL1_DEFAULT	(0x2 << 24) /* RWI-V */
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_SCKSEL0_MASK		(0x7 << 28) /* RWIVF */
389*4882a593Smuzhiyun #define PS3_AUDIO_AO_MCTRL_SCKSEL0_DEFAULT	(0x2 << 28) /* RWI-V */
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun /*
393*4882a593Smuzhiyun 3-Wire Audio Output Master Control Register
394*4882a593Smuzhiyun Configures clock, 3-Wire Audio Serial Output Enable, and
395*4882a593Smuzhiyun other 3-Wire Audio Serial Output Master Settings
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
399*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
400*4882a593Smuzhiyun  |A|A|A|A|0 0 0|A| ASOSR |0 0 0 0|A|A|A|A|A|A|0|1|0 0 0 0 0 0 0 0| AO_3WMCTRL
401*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
402*4882a593Smuzhiyun */
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun /*
406*4882a593Smuzhiyun LRCKO Polarity
407*4882a593Smuzhiyun 0 - Reserved
408*4882a593Smuzhiyun 1 - default
409*4882a593Smuzhiyun */
410*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOPLRCK 		(1 << 8) /* RWIVF */
411*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOPLRCK_DEFAULT	(1 << 8) /* RW--V */
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun /* LRCK Output Disable */
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOLRCKD		(1 << 10) /* RWIVF */
416*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOLRCKD_ENABLED	(0 << 10) /* RW--V */
417*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOLRCKD_DISABLED	(1 << 10) /* RWI-V */
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun /* Bit Clock Output Disable */
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOBCLKD		(1 << 11) /* RWIVF */
422*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOBCLKD_ENABLED	(0 << 11) /* RW--V */
423*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOBCLKD_DISABLED	(1 << 11) /* RWI-V */
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun /*
426*4882a593Smuzhiyun 3-Wire Audio Serial Output Channel 0-3 Operational
427*4882a593Smuzhiyun Status.  Each bit becomes 1 after each 3-Wire Audio
428*4882a593Smuzhiyun Serial Output Channel N is in action by setting 1 to
429*4882a593Smuzhiyun asoen.
430*4882a593Smuzhiyun Each bit becomes 0 after each 3-Wire Audio Serial Output
431*4882a593Smuzhiyun Channel N is out of action by setting 0 to asoen.
432*4882a593Smuzhiyun */
433*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN(n)		(1 << (15 - (n))) /* R-IVF */
434*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN_STOPPED(n)	(0 << (15 - (n))) /* R-I-V */
435*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN_RUNNING(n)	(1 << (15 - (n))) /* R---V */
436*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN0		\
437*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN(0)
438*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN0_STOPPED	\
439*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_STOPPED(0)
440*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN0_RUNNING	\
441*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_RUNNING(0)
442*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN1		\
443*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN(1)
444*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN1_STOPPED	\
445*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_STOPPED(1)
446*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN1_RUNNING	\
447*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_RUNNING(1)
448*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN2		\
449*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN(2)
450*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN2_STOPPED	\
451*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_STOPPED(2)
452*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN2_RUNNING	\
453*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_RUNNING(2)
454*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN3		\
455*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN(3)
456*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN3_STOPPED	\
457*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_STOPPED(3)
458*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASORUN3_RUNNING	\
459*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASORUN_RUNNING(3)
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun /*
462*4882a593Smuzhiyun Sampling Rate
463*4882a593Smuzhiyun Specifies the divide ratio of the bit clock (clock output
464*4882a593Smuzhiyun from bclko) used by the 3-wire Audio Output Clock, which
465*4882a593Smuzhiyun is applied to the master clock selected by mcksel.
466*4882a593Smuzhiyun Data output is synchronized with this clock.
467*4882a593Smuzhiyun */
468*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOSR_MASK		(0xf << 20) /* RWIVF */
469*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOSR_DIV2		(0x1 << 20) /* RWI-V */
470*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOSR_DIV4		(0x2 << 20) /* RW--V */
471*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOSR_DIV8		(0x4 << 20) /* RW--V */
472*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOSR_DIV12	(0x6 << 20) /* RW--V */
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun /*
475*4882a593Smuzhiyun Master Clock Select
476*4882a593Smuzhiyun 0 - Master Clock 0
477*4882a593Smuzhiyun 1 - Master Clock 1
478*4882a593Smuzhiyun */
479*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOMCKSEL		(1 << 24) /* RWIVF */
480*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOMCKSEL_CLK0	(0 << 24) /* RWI-V */
481*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOMCKSEL_CLK1	(1 << 24) /* RW--V */
482*4882a593Smuzhiyun 
483*4882a593Smuzhiyun /*
484*4882a593Smuzhiyun Enables and disables 4ch 3-Wire Audio Serial Output
485*4882a593Smuzhiyun operation.  Each Bit from 0 to 3 corresponds to an
486*4882a593Smuzhiyun output channel, which means that each output channel
487*4882a593Smuzhiyun can be enabled or disabled individually.  When
488*4882a593Smuzhiyun multiple channels are enabled at the same time, output
489*4882a593Smuzhiyun operations are performed in synchronization.
490*4882a593Smuzhiyun Bit 0 - Output Channel 0 (SDOUT[0])
491*4882a593Smuzhiyun Bit 1 - Output Channel 1 (SDOUT[1])
492*4882a593Smuzhiyun Bit 2 - Output Channel 2 (SDOUT[2])
493*4882a593Smuzhiyun Bit 3 - Output Channel 3 (SDOUT[3])
494*4882a593Smuzhiyun */
495*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN(n)		(1 << (31 - (n))) /* RWIVF */
496*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN_DISABLED(n)	(0 << (31 - (n))) /* RWI-V */
497*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN_ENABLED(n)	(1 << (31 - (n))) /* RW--V */
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN0 \
500*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN(0) /* RWIVF */
501*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN0_DISABLED \
502*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_DISABLED(0) /* RWI-V */
503*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WMCTRL_ASOEN0_ENABLED \
504*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_ENABLED(0) /* RW--V */
505*4882a593Smuzhiyun #define PS3_AUDIO_A1_3WMCTRL_ASOEN0 \
506*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN(1) /* RWIVF */
507*4882a593Smuzhiyun #define PS3_AUDIO_A1_3WMCTRL_ASOEN0_DISABLED \
508*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_DISABLED(1) /* RWI-V */
509*4882a593Smuzhiyun #define PS3_AUDIO_A1_3WMCTRL_ASOEN0_ENABLED \
510*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_ENABLED(1) /* RW--V */
511*4882a593Smuzhiyun #define PS3_AUDIO_A2_3WMCTRL_ASOEN0 \
512*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN(2) /* RWIVF */
513*4882a593Smuzhiyun #define PS3_AUDIO_A2_3WMCTRL_ASOEN0_DISABLED \
514*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_DISABLED(2) /* RWI-V */
515*4882a593Smuzhiyun #define PS3_AUDIO_A2_3WMCTRL_ASOEN0_ENABLED \
516*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_ENABLED(2) /* RW--V */
517*4882a593Smuzhiyun #define PS3_AUDIO_A3_3WMCTRL_ASOEN0 \
518*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN(3) /* RWIVF */
519*4882a593Smuzhiyun #define PS3_AUDIO_A3_3WMCTRL_ASOEN0_DISABLED \
520*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_DISABLED(3) /* RWI-V */
521*4882a593Smuzhiyun #define PS3_AUDIO_A3_3WMCTRL_ASOEN0_ENABLED \
522*4882a593Smuzhiyun 	PS3_AUDIO_AO_3WMCTRL_ASOEN_ENABLED(3) /* RW--V */
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun /*
525*4882a593Smuzhiyun 3-Wire Audio Serial output Channel 0-3 Control Register
526*4882a593Smuzhiyun Configures settings for 3-Wire Serial Audio Output Channel 0-3
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
530*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
531*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|A|0 0 0 0|A|0|ASO|0 0 0|0|0|0|0|0| AO_3WCTRL
532*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun */
535*4882a593Smuzhiyun /*
536*4882a593Smuzhiyun Data Bit Mode
537*4882a593Smuzhiyun Specifies the number of data bits
538*4882a593Smuzhiyun 0 - 16 bits
539*4882a593Smuzhiyun 1 - reserved
540*4882a593Smuzhiyun 2 - 20 bits
541*4882a593Smuzhiyun 3 - 24 bits
542*4882a593Smuzhiyun */
543*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODB_MASK	(0x3 << 8) /* RWIVF */
544*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODB_16BIT	(0x0 << 8) /* RWI-V */
545*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODB_RESVD	(0x1 << 8) /* RWI-V */
546*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODB_20BIT	(0x2 << 8) /* RW--V */
547*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODB_24BIT	(0x3 << 8) /* RW--V */
548*4882a593Smuzhiyun /*
549*4882a593Smuzhiyun Data Format Mode
550*4882a593Smuzhiyun Specifies the data format where (LSB side or MSB) the data(in 20 bit
551*4882a593Smuzhiyun or 24 bit resolution mode) is put in a 32 bit field.
552*4882a593Smuzhiyun 0 - Data put on LSB side
553*4882a593Smuzhiyun 1 - Data put on MSB side
554*4882a593Smuzhiyun */
555*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODF 	(1 << 11) /* RWIVF */
556*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODF_LSB	(0 << 11) /* RWI-V */
557*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASODF_MSB	(1 << 11) /* RW--V */
558*4882a593Smuzhiyun /*
559*4882a593Smuzhiyun Buffer Reset
560*4882a593Smuzhiyun Performs buffer reset.  Writing 1 to this bit initializes the
561*4882a593Smuzhiyun corresponding 3-Wire Audio Output buffers(both L and R).
562*4882a593Smuzhiyun */
563*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASOBRST 		(1 << 16) /* CWIVF */
564*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASOBRST_IDLE	(0 << 16) /* -WI-V */
565*4882a593Smuzhiyun #define PS3_AUDIO_AO_3WCTRL_ASOBRST_RESET	(1 << 16) /* -W--T */
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun /*
568*4882a593Smuzhiyun S/PDIF Audio Output Channel 0/1 Control Register
569*4882a593Smuzhiyun Configures settings for S/PDIF Audio Output Channel 0/1.
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
572*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
573*4882a593Smuzhiyun  |S|0 0 0|S|0 0|S| SPOSR |0 0|SPO|0 0 0 0|S|0|SPO|0 0 0 0 0 0 0|S| AO_SPDCTRL
574*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
575*4882a593Smuzhiyun */
576*4882a593Smuzhiyun /*
577*4882a593Smuzhiyun Buffer reset.  Writing 1 to this bit initializes the
578*4882a593Smuzhiyun corresponding S/PDIF output buffer pointer.
579*4882a593Smuzhiyun */
580*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOBRST		(1 << 0) /* CWIVF */
581*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOBRST_IDLE	(0 << 0) /* -WI-V */
582*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOBRST_RESET	(1 << 0) /* -W--T */
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun /*
585*4882a593Smuzhiyun Data Bit Mode
586*4882a593Smuzhiyun Specifies number of data bits
587*4882a593Smuzhiyun 0 - 16 bits
588*4882a593Smuzhiyun 1 - Reserved
589*4882a593Smuzhiyun 2 - 20 bits
590*4882a593Smuzhiyun 3 - 24 bits
591*4882a593Smuzhiyun */
592*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODB_MASK		(0x3 << 8) /* RWIVF */
593*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODB_16BIT	(0x0 << 8) /* RWI-V */
594*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODB_RESVD	(0x1 << 8) /* RW--V */
595*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODB_20BIT	(0x2 << 8) /* RW--V */
596*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODB_24BIT	(0x3 << 8) /* RW--V */
597*4882a593Smuzhiyun /*
598*4882a593Smuzhiyun Data format Mode
599*4882a593Smuzhiyun Specifies the data format, where (LSB side or MSB)
600*4882a593Smuzhiyun the data(in 20 or 24 bit resolution) is put in the
601*4882a593Smuzhiyun 32 bit field.
602*4882a593Smuzhiyun 0 - LSB Side
603*4882a593Smuzhiyun 1 - MSB Side
604*4882a593Smuzhiyun */
605*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODF	(1 << 11) /* RWIVF */
606*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODF_LSB	(0 << 11) /* RWI-V */
607*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPODF_MSB	(1 << 11) /* RW--V */
608*4882a593Smuzhiyun /*
609*4882a593Smuzhiyun Source Select
610*4882a593Smuzhiyun Specifies the source of the S/PDIF output.  When 0, output
611*4882a593Smuzhiyun operation is controlled by 3wen[0] of AO_3WMCTRL register.
612*4882a593Smuzhiyun The SR must have the same setting as the a0_3wmctrl reg.
613*4882a593Smuzhiyun 0 - 3-Wire Audio OUT Ch0 Buffer
614*4882a593Smuzhiyun 1 - S/PDIF buffer
615*4882a593Smuzhiyun */
616*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSS_MASK		(0x3 << 16) /* RWIVF */
617*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSS_3WEN		(0x0 << 16) /* RWI-V */
618*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSS_SPDIF	(0x1 << 16) /* RW--V */
619*4882a593Smuzhiyun /*
620*4882a593Smuzhiyun Sampling Rate
621*4882a593Smuzhiyun Specifies the divide ratio of the bit clock (clock output
622*4882a593Smuzhiyun from bclko) used by the S/PDIF Output Clock, which
623*4882a593Smuzhiyun is applied to the master clock selected by mcksel.
624*4882a593Smuzhiyun */
625*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSR		(0xf << 20) /* RWIVF */
626*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSR_DIV2		(0x1 << 20) /* RWI-V */
627*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSR_DIV4		(0x2 << 20) /* RW--V */
628*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSR_DIV8		(0x4 << 20) /* RW--V */
629*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOSR_DIV12	(0x6 << 20) /* RW--V */
630*4882a593Smuzhiyun /*
631*4882a593Smuzhiyun Master Clock Select
632*4882a593Smuzhiyun 0 - Master Clock 0
633*4882a593Smuzhiyun 1 - Master Clock 1
634*4882a593Smuzhiyun */
635*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOMCKSEL		(1 << 24) /* RWIVF */
636*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOMCKSEL_CLK0	(0 << 24) /* RWI-V */
637*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOMCKSEL_CLK1	(1 << 24) /* RW--V */
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun /*
640*4882a593Smuzhiyun S/PDIF Output Channel Operational Status
641*4882a593Smuzhiyun This bit becomes 1 after S/PDIF Output Channel is in
642*4882a593Smuzhiyun action by setting 1 to spoen.  This bit becomes 0
643*4882a593Smuzhiyun after S/PDIF Output Channel is out of action by setting
644*4882a593Smuzhiyun 0 to spoen.
645*4882a593Smuzhiyun */
646*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPORUN		(1 << 27) /* R-IVF */
647*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPORUN_STOPPED	(0 << 27) /* R-I-V */
648*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPORUN_RUNNING	(1 << 27) /* R---V */
649*4882a593Smuzhiyun 
650*4882a593Smuzhiyun /*
651*4882a593Smuzhiyun S/PDIF Audio Output Channel Output Enable
652*4882a593Smuzhiyun Enables and disables output operation.  This bit is used
653*4882a593Smuzhiyun only when sposs = 1
654*4882a593Smuzhiyun */
655*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOEN		(1 << 31) /* RWIVF */
656*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOEN_DISABLED	(0 << 31) /* RWI-V */
657*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPDCTRL_SPOEN_ENABLED	(1 << 31) /* RW--V */
658*4882a593Smuzhiyun 
659*4882a593Smuzhiyun /*
660*4882a593Smuzhiyun S/PDIF Audio Output Channel Channel Status
661*4882a593Smuzhiyun Setting Registers.
662*4882a593Smuzhiyun Configures channel status bit settings for each block
663*4882a593Smuzhiyun (192 bits).
664*4882a593Smuzhiyun Output is performed from the MSB(AO_SPDCS0 register bit 31).
665*4882a593Smuzhiyun The same value is added for subframes within the same frame.
666*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
667*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
668*4882a593Smuzhiyun  |                             SPOCS                             | AO_SPDCS
669*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun S/PDIF Audio Output Channel User Bit Setting
672*4882a593Smuzhiyun Configures user bit settings for each block (384 bits).
673*4882a593Smuzhiyun Output is performed from the MSB(ao_spdub0 register bit 31).
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun 
676*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
677*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
678*4882a593Smuzhiyun  |                             SPOUB                             | AO_SPDUB
679*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
680*4882a593Smuzhiyun */
681*4882a593Smuzhiyun /*****************************************************************************
682*4882a593Smuzhiyun  *
683*4882a593Smuzhiyun  * DMAC register
684*4882a593Smuzhiyun  *
685*4882a593Smuzhiyun  *****************************************************************************/
686*4882a593Smuzhiyun /*
687*4882a593Smuzhiyun The PS3_AUDIO_KICK register is used to initiate a DMA transfer and monitor
688*4882a593Smuzhiyun its status
689*4882a593Smuzhiyun 
690*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
691*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
692*4882a593Smuzhiyun  |0 0 0 0 0|STATU|0 0 0|  EVENT  |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|R| KICK
693*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
694*4882a593Smuzhiyun */
695*4882a593Smuzhiyun /*
696*4882a593Smuzhiyun The REQUEST field is written to ACTIVE to initiate a DMA request when EVENT
697*4882a593Smuzhiyun occurs.
698*4882a593Smuzhiyun It will return to the DONE state when the request is completed.
699*4882a593Smuzhiyun The registers for a DMA channel should only be written if REQUEST is IDLE.
700*4882a593Smuzhiyun */
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun #define PS3_AUDIO_KICK_REQUEST                (1 << 0) /* RWIVF */
703*4882a593Smuzhiyun #define PS3_AUDIO_KICK_REQUEST_IDLE           (0 << 0) /* RWI-V */
704*4882a593Smuzhiyun #define PS3_AUDIO_KICK_REQUEST_ACTIVE         (1 << 0) /* -W--T */
705*4882a593Smuzhiyun 
706*4882a593Smuzhiyun /*
707*4882a593Smuzhiyun  *The EVENT field is used to set the event in which
708*4882a593Smuzhiyun  *the DMA request becomes active.
709*4882a593Smuzhiyun  */
710*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_MASK             (0x1f << 16) /* RWIVF */
711*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_ALWAYS           (0x00 << 16) /* RWI-V */
712*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT0_EMPTY (0x01 << 16) /* RW--V */
713*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT0_UNDERFLOW	(0x02 << 16) /* RW--V */
714*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT1_EMPTY		(0x03 << 16) /* RW--V */
715*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT1_UNDERFLOW	(0x04 << 16) /* RW--V */
716*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT2_EMPTY		(0x05 << 16) /* RW--V */
717*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT2_UNDERFLOW	(0x06 << 16) /* RW--V */
718*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT3_EMPTY		(0x07 << 16) /* RW--V */
719*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SERIALOUT3_UNDERFLOW	(0x08 << 16) /* RW--V */
720*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF0_BLOCKTRANSFERCOMPLETE \
721*4882a593Smuzhiyun 	(0x09 << 16) /* RW--V */
722*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF0_UNDERFLOW		(0x0A << 16) /* RW--V */
723*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF0_EMPTY		(0x0B << 16) /* RW--V */
724*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF1_BLOCKTRANSFERCOMPLETE \
725*4882a593Smuzhiyun 	(0x0C << 16) /* RW--V */
726*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF1_UNDERFLOW		(0x0D << 16) /* RW--V */
727*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_SPDIF1_EMPTY		(0x0E << 16) /* RW--V */
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA(n) \
730*4882a593Smuzhiyun 	((0x13 + (n)) << 16) /* RW--V */
731*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA0         (0x13 << 16) /* RW--V */
732*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA1         (0x14 << 16) /* RW--V */
733*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA2         (0x15 << 16) /* RW--V */
734*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA3         (0x16 << 16) /* RW--V */
735*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA4         (0x17 << 16) /* RW--V */
736*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA5         (0x18 << 16) /* RW--V */
737*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA6         (0x19 << 16) /* RW--V */
738*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA7         (0x1A << 16) /* RW--V */
739*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA8         (0x1B << 16) /* RW--V */
740*4882a593Smuzhiyun #define PS3_AUDIO_KICK_EVENT_AUDIO_DMA9         (0x1C << 16) /* RW--V */
741*4882a593Smuzhiyun 
742*4882a593Smuzhiyun /*
743*4882a593Smuzhiyun The STATUS field can be used to monitor the progress of a DMA request.
744*4882a593Smuzhiyun DONE indicates the previous request has completed.
745*4882a593Smuzhiyun EVENT indicates that the DMA engine is waiting for the EVENT to occur.
746*4882a593Smuzhiyun PENDING indicates that the DMA engine has not started processing this
747*4882a593Smuzhiyun request, but the EVENT has occurred.
748*4882a593Smuzhiyun DMA indicates that the data transfer is in progress.
749*4882a593Smuzhiyun NOTIFY indicates that the notifier signalling end of transfer is being written.
750*4882a593Smuzhiyun CLEAR indicated that the previous transfer was cleared.
751*4882a593Smuzhiyun ERROR indicates the previous transfer requested an unsupported
752*4882a593Smuzhiyun source/destination combination.
753*4882a593Smuzhiyun */
754*4882a593Smuzhiyun 
755*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_MASK	(0x7 << 24) /* R-IVF */
756*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_DONE	(0x0 << 24) /* R-I-V */
757*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_EVENT	(0x1 << 24) /* R---V */
758*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_PENDING	(0x2 << 24) /* R---V */
759*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_DMA	(0x3 << 24) /* R---V */
760*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_NOTIFY	(0x4 << 24) /* R---V */
761*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_CLEAR	(0x5 << 24) /* R---V */
762*4882a593Smuzhiyun #define PS3_AUDIO_KICK_STATUS_ERROR	(0x6 << 24) /* R---V */
763*4882a593Smuzhiyun 
764*4882a593Smuzhiyun /*
765*4882a593Smuzhiyun The PS3_AUDIO_SOURCE register specifies the source address for transfers.
766*4882a593Smuzhiyun 
767*4882a593Smuzhiyun 
768*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
769*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
770*4882a593Smuzhiyun  |                      START                      |0 0 0 0 0|TAR| SOURCE
771*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
772*4882a593Smuzhiyun */
773*4882a593Smuzhiyun 
774*4882a593Smuzhiyun /*
775*4882a593Smuzhiyun The Audio DMA engine uses 128-byte transfers, thus the address must be aligned
776*4882a593Smuzhiyun to a 128 byte boundary.  The low seven bits are assumed to be 0.
777*4882a593Smuzhiyun */
778*4882a593Smuzhiyun 
779*4882a593Smuzhiyun #define PS3_AUDIO_SOURCE_START_MASK	(0x01FFFFFF << 7) /* RWIUF */
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun /*
782*4882a593Smuzhiyun The TARGET field specifies the memory space containing the source address.
783*4882a593Smuzhiyun */
784*4882a593Smuzhiyun 
785*4882a593Smuzhiyun #define PS3_AUDIO_SOURCE_TARGET_MASK 		(3 << 0) /* RWIVF */
786*4882a593Smuzhiyun #define PS3_AUDIO_SOURCE_TARGET_SYSTEM_MEMORY	(2 << 0) /* RW--V */
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun /*
789*4882a593Smuzhiyun The PS3_AUDIO_DEST register specifies the destination address for transfers.
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun 
792*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
793*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
794*4882a593Smuzhiyun  |                      START                      |0 0 0 0 0|TAR| DEST
795*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
796*4882a593Smuzhiyun */
797*4882a593Smuzhiyun 
798*4882a593Smuzhiyun /*
799*4882a593Smuzhiyun The Audio DMA engine uses 128-byte transfers, thus the address must be aligned
800*4882a593Smuzhiyun to a 128 byte boundary.  The low seven bits are assumed to be 0.
801*4882a593Smuzhiyun */
802*4882a593Smuzhiyun 
803*4882a593Smuzhiyun #define PS3_AUDIO_DEST_START_MASK	(0x01FFFFFF << 7) /* RWIUF */
804*4882a593Smuzhiyun 
805*4882a593Smuzhiyun /*
806*4882a593Smuzhiyun The TARGET field specifies the memory space containing the destination address
807*4882a593Smuzhiyun AUDIOFIFO = Audio WriteData FIFO,
808*4882a593Smuzhiyun */
809*4882a593Smuzhiyun 
810*4882a593Smuzhiyun #define PS3_AUDIO_DEST_TARGET_MASK		(3 << 0) /* RWIVF */
811*4882a593Smuzhiyun #define PS3_AUDIO_DEST_TARGET_AUDIOFIFO		(1 << 0) /* RW--V */
812*4882a593Smuzhiyun 
813*4882a593Smuzhiyun /*
814*4882a593Smuzhiyun PS3_AUDIO_DMASIZE specifies the number of 128-byte blocks + 1 to transfer.
815*4882a593Smuzhiyun So a value of 0 means 128-bytes will get transferred.
816*4882a593Smuzhiyun 
817*4882a593Smuzhiyun 
818*4882a593Smuzhiyun  31            24 23           16 15            8 7             0
819*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
820*4882a593Smuzhiyun  |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|   BLOCKS    | DMASIZE
821*4882a593Smuzhiyun  +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
822*4882a593Smuzhiyun */
823*4882a593Smuzhiyun 
824*4882a593Smuzhiyun 
825*4882a593Smuzhiyun #define PS3_AUDIO_DMASIZE_BLOCKS_MASK 	(0x7f << 0) /* RWIUF */
826*4882a593Smuzhiyun 
827*4882a593Smuzhiyun /*
828*4882a593Smuzhiyun  * source/destination address for internal fifos
829*4882a593Smuzhiyun  */
830*4882a593Smuzhiyun #define PS3_AUDIO_AO_3W_LDATA(n)	(0x1000 + (0x100 * (n)))
831*4882a593Smuzhiyun #define PS3_AUDIO_AO_3W_RDATA(n)	(0x1080 + (0x100 * (n)))
832*4882a593Smuzhiyun 
833*4882a593Smuzhiyun #define PS3_AUDIO_AO_SPD_DATA(n)	(0x2000 + (0x400 * (n)))
834*4882a593Smuzhiyun 
835*4882a593Smuzhiyun 
836*4882a593Smuzhiyun /*
837*4882a593Smuzhiyun  * field attiribute
838*4882a593Smuzhiyun  *
839*4882a593Smuzhiyun  *	Read
840*4882a593Smuzhiyun  *	  ' ' = Other Information
841*4882a593Smuzhiyun  *	  '-' = Field is part of a write-only register
842*4882a593Smuzhiyun  *	  'C' = Value read is always the same, constant value line follows (C)
843*4882a593Smuzhiyun  *	  'R' = Value is read
844*4882a593Smuzhiyun  *
845*4882a593Smuzhiyun  *	Write
846*4882a593Smuzhiyun  *	  ' ' = Other Information
847*4882a593Smuzhiyun  *	  '-' = Must not be written (D), value ignored when written (R,A,F)
848*4882a593Smuzhiyun  *	  'W' = Can be written
849*4882a593Smuzhiyun  *
850*4882a593Smuzhiyun  *	Internal State
851*4882a593Smuzhiyun  *	  ' ' = Other Information
852*4882a593Smuzhiyun  *	  '-' = No internal state
853*4882a593Smuzhiyun  *	  'X' = Internal state, initial value is unknown
854*4882a593Smuzhiyun  *	  'I' = Internal state, initial value is known and follows (I)
855*4882a593Smuzhiyun  *
856*4882a593Smuzhiyun  *	Declaration/Size
857*4882a593Smuzhiyun  *	  ' ' = Other Information
858*4882a593Smuzhiyun  *	  '-' = Does Not Apply
859*4882a593Smuzhiyun  *	  'V' = Type is void
860*4882a593Smuzhiyun  *	  'U' = Type is unsigned integer
861*4882a593Smuzhiyun  *	  'S' = Type is signed integer
862*4882a593Smuzhiyun  *	  'F' = Type is IEEE floating point
863*4882a593Smuzhiyun  *	  '1' = Byte size (008)
864*4882a593Smuzhiyun  *	  '2' = Short size (016)
865*4882a593Smuzhiyun  *	  '3' = Three byte size (024)
866*4882a593Smuzhiyun  *	  '4' = Word size (032)
867*4882a593Smuzhiyun  *	  '8' = Double size (064)
868*4882a593Smuzhiyun  *
869*4882a593Smuzhiyun  *	Define Indicator
870*4882a593Smuzhiyun  *	  ' ' = Other Information
871*4882a593Smuzhiyun  *	  'D' = Device
872*4882a593Smuzhiyun  *	  'M' = Memory
873*4882a593Smuzhiyun  *	  'R' = Register
874*4882a593Smuzhiyun  *	  'A' = Array of Registers
875*4882a593Smuzhiyun  *	  'F' = Field
876*4882a593Smuzhiyun  *	  'V' = Value
877*4882a593Smuzhiyun  *	  'T' = Task
878*4882a593Smuzhiyun  */
879*4882a593Smuzhiyun 
880