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