Annotation of XNU/iokit/Drivers/audio/drvPPCAwacs/awacs_hw.h, revision 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.