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