Annotation of XNU/iokit/Drivers/audio/drvPPCAwacs/awacs_hw.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  *   AWACs - Audio Waveform Amplifier and Converter
                     24:  *
                     25:  *   Notes:
                     26:  *
                     27:  *   1. All values written to (or read from) hardware must be endian reversed
                     28:  *      when using the constants from this file.
                     29:  *   2. The hardware uses a serial-bus time multiplexed scheme to communicate
                     30:  *      with up to four addressable devices (subframes). AWACs currently only uses 
                     31:  *      'SubFrame 0'.  When a register field refers to a  subframe, then the SubFrame0 
                     32:  *      value  should be used.
                     33:  *   3. The CodecControlRegister is used to as a pointer/data reg to access four 12-bit
                     34:  *      registers. The kCodecCtlAddress* values indicate the 12-bit register to be
                     35:  *      written and the kCodecCtlDataMask indicates the 12-bits to be written. 
                     36:  *      kCodecCtlBusy is set/cleared by hardware when a pending value waiting to be
                     37:  *      written to one of the 12-bit registers. kCodecCtlEMSelect* indicates which
                     38:  *      SubFrame the data will go out on. (See Note 2)
                     39:  *  4.  The SoundControlRegister is used to set the data rate and indicates the input,
                     40:  *      output and status subframes. (See Note 2).
                     41:  *  5.  The CodecStatusRegister indicate when there was an error, or a change of input
                     42:  *      or output sources, i.e. a mic, line, or headphones were plugged in.
                     43:  *  6.  The ClippingCountRegister  is incremented on a left/right channel overflow. It
                     44:  *      is reset by reading its contents.
                     45:  *
                     46:  */
                     47: 
                     48: /*----------------------------- AWACs register mapping structure -------------------------*/
                     49: 
                     50: struct awacs_regmap_t
                     51: {
                     52:        volatile u_int32_t                      SoundControlRegister;
                     53:         u_int32_t                              pad0[3];
                     54:        volatile u_int32_t                      CodecControlRegister;
                     55:         u_int32_t                              pad1[3];
                     56:        volatile u_int32_t                      CodecStatusRegister;
                     57:         u_int32_t                              pad2[3];
                     58:        volatile u_int32_t                      ClippingCountRegister;
                     59:         u_int32_t                              pad3[3];
                     60:        volatile u_int32_t                      ByteSwappingRegister;
                     61: };
                     62: 
                     63: 
                     64: /*------------------------ AWACs CODEC Control register constants -----------------------*/
                     65: 
                     66: enum AWACsCODEC_ControlRegisterGeneralConstants 
                     67: {
                     68:        kCodecCtlDataMask       =       0x00000FFF,             /*CODEC control data bits*/
                     69: 
                     70:        kCodecCtlAddress0       =       0x00000000,             /*Select address 0*/
                     71:        kCodecCtlAddress1       =       0x00001000,             /*Select address 1*/
                     72:        kCodecCtlAddress2       =       0x00002000,             /*Select address 2*/
                     73:        kCodecCtlAddress4       =       0x00004000,             /*Select address 4*/
                     74:        kCodecCtlAddress5       =       0x00005000,             /*Select address 5 - Screamer only */
                     75:        kCodecCtlAddress6       =       0x00006000,             /*Select address 6 - Screamer only */
                     76:        kCodecCtlAddress7       =       0x00007000,             /*Select address 7 - Screamer only */
                     77:        
                     78:        kCodecCtlEMSelect0      =       0x00000000,             /*Select subframe 0*/
                     79:        kCodecCtlEMSelect1      =       0x00400000,             /*Select subframe 1*/
                     80:        kCodecCtlEMSelect2      =       0x00800000,             /*Select subframe 2*/
                     81:        kCodecCtlEMSelect4      =       0x00C00000,             /*Select subframe 4*/
                     82: 
                     83:        kCodecCtlBusy           =       0x01000000              /*AWACS busy bit */    
                     84: };
                     85: 
                     86: enum AWACsCODEC_ControlRegister0Constants 
                     87: {
                     88:        kLeftInputGainMask              =       0x000000F0,     /*Bits used for left input gain*/
                     89:         kLeftInputGainShift            =       4,
                     90:        kRightInputGainMask             =       0x0000000F,     /*Bits used for right input gain*/
                     91:         kRightInputGainShift           =       0,
                     92:        
                     93:        kDefaultMicGain                 =       0x000000CC,     /*Default right & left gain for a mic*/
                     94:        kDefaultCDGain                  =       0x000000BB,     /*Default right & left gain for a CD*/
                     95:        
                     96:        kNotMicPreamp                   =       0x00000100,     /*Select preamp on or off*/
                     97:        
                     98:        kInputMuxMask                   =       0x00000E00,     /*Bits used to set which input to use */
                     99:        kCDInput                        =       0x00000200,     /*Bit 9 = CD ROM audio input*/
                    100:        kMicInput                       =       0x00000400,     /*Bit 10 = external mic input*/
                    101:        kUnusedInput                    =       0x00000800,     /*Bit 11 = unused input*/
                    102:        kInitialAwacsR0Value            =       0x00000000      /*Initial value set on boot*/
                    103: };
                    104: 
                    105: 
                    106: enum AWACsCODEC_ControlRegister1Constants 
                    107: {
                    108:        kReservedR1Bit0                 =       0x00000001,     /*Reserved - always set to zero*/
                    109:        kReservedR1Bit1                 =       0x00000002,     /*Reserved - always set to zero*/
                    110:        kRecalibrate                    =       0x00000004,     /*Recalibrate AWACs*/
                    111:        kExtraSampleRateMask            =       0x00000038,     /*!!!Do these bits do anything???*/
                    112:        kLoopThruEnable                 =       0x00000040,     /*Loop thru enable*/
                    113:        kMuteInternalSpeaker            =       0x00000080,     /*Internal speaker mute*/
                    114:        kReservedR1Bit8                 =       0x00000100,     /*Reserved - always set to zero*/
                    115:        kMuteHeadphone                  =       0x00000200,     /*Headphone mute*/
                    116:         kOutputZero                    =       0x00000400,
                    117:        kOutputOne                      =       0x00000800,     /*Sometimes speaker enable*/
                    118:        kParallelOutputEnable           =       0x00000C00,     /*Parallel output port*/
                    119:        kInitialAwacsR1Value            =       0x00000000      /*Initial value set on boot*/
                    120: };
                    121: 
                    122: 
                    123: enum AWACsCODEC_ControlRegister2Constants 
                    124: {
                    125:        kRightHeadphoneAttenMask        =       0x0000000F,     /*Attenuation for right headphone speaker*/
                    126:        kRightHeadphoneAttenShift       =       0,              /*Bit shift from LSB position*/
                    127:        kReservedR2Bit4                 =       0x00000010,     /*Reserved - always set to zero*/
                    128:        kReservedR2Bit5                 =       0x00000020,     /*Reserved - always set to zero*/
                    129:        kLeftHeadphoneAttenMask         =       0x000003C0,     /*Attenuation for left headphone speaker*/
                    130:        kLeftHeadphoneAttenShift        =       6,              /*Bit shift from LSB position*/
                    131:        kReservedR2Bit10                =       0x00000400,     /*Reserved - always set to zero*/
                    132:        kReservedR2Bit11                =       0x00000800,     /*Reserved - always set to zero*/
                    133:        kHeadphoneAttenMask             =       (kRightHeadphoneAttenMask | kLeftHeadphoneAttenMask),
                    134:        kInitialAwacsR2Value            =       0x00000000      /*Initial value set on boot*/
                    135: };
                    136: 
                    137: 
                    138: enum AWACsCODEC_ControlRegister4Constants 
                    139: {
                    140:        kRightSpeakerAttenMask          =       0x0000000F,     /*Attenuation for right internal speaker*/
                    141:        kRightSpeakerAttenShift         =       0,              /*Bit shift from LSB position*/
                    142:        kReservedR4Bit4                 =       0x00000010,     /*Reserved - always set to zero*/
                    143:        kReservedR4Bit5                 =       0x00000020,     /*Reserved - always set to zero*/
                    144:        kLeftSpeakerAttenMask           =       0x000003C0,     /*Attenuation for left internal speaker*/
                    145:        kLeftSpeakerAttenShift          =       6,              /*Bit shift from LSB position*/
                    146:        kReservedR4Bit10                =       0x00000400,     /*Reserved - always set to zero*/
                    147:        kReservedR4Bit11                =       0x00000800,     /*Reserved - always set to zero*/
                    148:        kSpeakerAttenMask               =       (kRightSpeakerAttenMask | kLeftSpeakerAttenMask),
                    149:        kInitialAwacsR4Value            =       0x00000000      /*Initial value set on boot*/
                    150: };
                    151: 
                    152: /*---------------------- Screamer Extensions ----------------------------------------*/
                    153: 
                    154: enum AWACsVersions
                    155: {
                    156:        kAWACSMaxVersion                =       2
                    157: };
                    158: 
                    159: enum AWACsCODEC_ControlRegister5Constants 
                    160: {
                    161:        kRightLoopThruAttenMask         =       0x0000000F,
                    162:         kRightLoopThruAttenShift       =       0,
                    163:        kLeftLoopThruAttenMask          =       0x000003C0,
                    164:         kLeftLoopThruAttenShift         =       6
                    165: };
                    166: 
                    167: enum AWACsCODEC_ControlRegister6Constants
                    168: {
                    169:        kPowerModeDoze                  =       0x00000001,
                    170:        kPowerModeIdle                  =       0x00000002,
                    171:        kMicPreampBoostEnable           =       0x00000004,
                    172:        kPCMCIASpeakerAttenMask         =       0x00000038,
                    173:         kPowerModeAnalogShutdown       =       0x00000040,
                    174:        kLittleDischarge                =       0x00000080,
                    175:         kBigDischarge                          =       0x00000100
                    176: };
                    177: 
                    178: enum AWACsCODEC_ControlRegister7Constants
                    179: {
                    180:        kReadBackEnable                 =       0x00000001,
                    181:        kReadBackRegisterMask           =       0x0000000E,
                    182:        kReadBackRegisterShift          =       1
                    183: };
                    184: 
                    185: /*----------------- AWACs CODEC Status Register constants -------------------------------*/
                    186: 
                    187: enum AWACsCODEC_StatusRegisterConstants 
                    188: {
                    189:        kNotMicSense                    =       0x00000001,     /*This bit is 0 when a mic(input) is plugged in*/
                    190:         kNotMicShift                   =       0,
                    191: kLineInSense                   =       0x00000002,     /*This bit is 1, when a line(input) is pluggen in*/
                    192:         kLineInShft                    =       1,
                    193:         kAux1Sense                     =       0x00000004,     /*This bit is 1, when something is plugged into the Whisper line-out */
                    194:        kAux1Shft                       =       2,
                    195:        kHeadphoneSense                 =       0x00000008,     /*This bit is 1 when headphone is plugged in*/
                    196:        kHeadphoneShft                  =       3,
                    197:         kAllSense                      =       0x0000000F,
                    198:        kManufacturerIDMask             =       0x00000F00,     /*AWACS chip manufacturer ID bits*/
                    199:        kManufacturerIDShft             =       8,              /*Bits to shift right to get ID in LSB position*/
                    200:        kRevisionNumberMask             =       0x0000F000,     /*AWACS chip revision bits*/
                    201:        kRevisionNumberShft             =       12,             /*Bits to shift right to get rev in LSB position*/
                    202:        kAwacsErrorStatus               =       0x000F0000,     /*AWACS error status bits*/
                    203:        kOverflowRight                  =       0x00100000,
                    204:        kOverflowLeft                   =       0x00200000,
                    205:        kValidData                      =       0x00400000,
                    206:        kExtend                         =       0x00800000
                    207: };
                    208: 
                    209: /*--------------------- AWACs Sound Control register ------------------------------------*/
                    210:        
                    211: enum AWACsSoundControlRegisterConstants 
                    212: {
                    213:        kInSubFrameMask                 =       0x0000000F,     /*All of the input subframe bits*/
                    214:        kInSubFrame0                    =       0x00000001,     /*Input subframe 0*/
                    215:        kInSubFrame1                    =       0x00000002,     /*Input subframe 1*/
                    216:        kInSubFrame2                    =       0x00000004,     /*Input subframe 2*/
                    217:        kInSubFrame3                    =       0x00000008,     /*Input subframe 3*/
                    218:        
                    219:        kOutSubFrameMask                =       0x000000F0,     /*All of the output subframe bits*/
                    220:        kOutSubFrame0                   =       0x00000010,     /*Output subframe 0*/
                    221:        kOutSubFrame1                   =       0x00000020,     /*Output subframe 1*/
                    222:        kOutSubFrame2                   =       0x00000040,     /*Output subframe 2*/
                    223:        kOutSubFrame3                   =       0x00000080,     /*Output subframe 3*/
                    224:        
                    225:        kHWRateMask                     =       0x00000700,     /*All of the hardware sampling rate bits*/
                    226:        kHWRate44100                    =       0x00000000,     /*Hardware sampling bits for 44100 Hz*/
                    227:        kHWRate29400                    =       0x00000100,     /*Hardware sampling bits for 29400 Hz*/
                    228:        kHWRate22050                    =       0x00000200,     /*Hardware sampling bits for 22050 Hz*/
                    229:        kHWRate17640                    =       0x00000300,     /*Hardware sampling bits for 17640 Hz*/
                    230:        kHWRate14700                    =       0x00000400,     /*Hardware sampling bits for 14700 Hz*/
                    231:        kHWRate11025                    =       0x00000500,     /*Hardware sampling bits for 11025 Hz*/
                    232:        kHWRate08820                    =       0x00000600,     /*Hardware sampling bits for  8820 Hz*/
                    233:        kHWRate07350                    =       0x00000700,     /*Hardware sampling bits for  7350 Hz*/
                    234: 
                    235:        kHWRateShift                    =       8,
                    236: 
                    237:        kAWACSError                     =       0x00000800,     /*AWACs error indicator*/
                    238:        kPortChange                     =       0x00001000,     /*Port change indicator*/
                    239:        kEnableErrInt                   =       0x00002000,     /*Interrupt on error enable*/
                    240:        kEnablePortChangeInt            =       0x00004000,     /*Interrupt on port change enable*/
                    241:        
                    242:        kStatusSubFrmSel0               =       0x00000000,     /*Select subframe zero  status*/
                    243:        kStatusSubFrmSel1               =       0x00008000,     /*Select subframe one   status*/
                    244:        kStatusSubFrmSel2               =       0x00010000,     /*Select subframe twoo  status*/
                    245:        kStatusSubFrmSel3               =       0x00018000      /*Select subframe three status*/
                    246: };
                    247: 
                    248: /*--------------------- AWACs Clipping Count register ------------------------------------*/
                    249: 
                    250: enum AWACsClippingCountRegisterConstants 
                    251: {
                    252:        kRightClippingCount              =       0x000000FF,
                    253:        kLeftClippingCount               =       0x0000FF00
                    254: };
                    255: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.