struct awacsOW_regmap_t
{
volatile u_int32_t SoundControlRegister;
u_int32_t pad0[3];
volatile u_int32_t CodecControlRegister;
u_int32_t pad1[3];
volatile u_int32_t CodecStatusRegister;
u_int32_t pad2[3];
volatile u_int32_t ClippingCountRegister;
u_int32_t pad3[3];
volatile u_int32_t ByteSwappingRegister;
};
enum AWACsCODEC_ControlRegisterGeneralConstants
{
kCodecCtlDataMask = 0x00000FFF,
kCodecCtlAddress0 = 0x00000000,
kCodecCtlAddress1 = 0x00001000,
kCodecCtlAddress2 = 0x00002000,
kCodecCtlAddress4 = 0x00004000,
kCodecCtlAddress5 = 0x00005000,
kCodecCtlAddress6 = 0x00006000,
kCodecCtlAddress7 = 0x00007000,
kCodecCtlEMSelect0 = 0x00000000,
kCodecCtlEMSelect1 = 0x00400000,
kCodecCtlEMSelect2 = 0x00800000,
kCodecCtlEMSelect4 = 0x00C00000,
kCodecCtlBusy = 0x01000000
};
enum AWACsCODEC_ControlRegister0Constants
{
kLeftInputGainMask = 0x000000F0,
kLeftInputGainShift = 4,
kRightInputGainMask = 0x0000000F,
kRightInputGainShift = 0,
kDefaultMicGain = 0x000000CC,
kDefaultCDGain = 0x000000BB,
kNotMicPreamp = 0x00000100,
kInputMuxMask = 0x00000E00,
kCDInput = 0x00000200,
kMicInput = 0x00000400,
kUnusedInput = 0x00000800,
kInitialAwacsR0Value = 0x00000000
};
enum AWACsCODEC_ControlRegister1Constants
{
kReservedR1Bit0 = 0x00000001,
kReservedR1Bit1 = 0x00000002,
kRecalibrate = 0x00000004,
kExtraSampleRateMask = 0x00000038,
kLoopThruEnable = 0x00000040,
kMuteInternalSpeaker = 0x00000080,
kReservedR1Bit8 = 0x00000100,
kMuteHeadphone = 0x00000200,
kOutputZero = 0x00000400,
kOutputOne = 0x00000800,
kParallelOutputEnable = 0x00000C00,
kInitialAwacsR1Value = 0x00000000
};
enum AWACsCODEC_ControlRegister2Constants
{
kRightHeadphoneAttenMask = 0x0000000F,
kRightHeadphoneAttenShift = 0,
kReservedR2Bit4 = 0x00000010,
kReservedR2Bit5 = 0x00000020,
kLeftHeadphoneAttenMask = 0x000003C0,
kLeftHeadphoneAttenShift = 6,
kReservedR2Bit10 = 0x00000400,
kReservedR2Bit11 = 0x00000800,
kHeadphoneAttenMask = (kRightHeadphoneAttenMask | kLeftHeadphoneAttenMask),
kInitialAwacsR2Value = 0x00000000
};
enum AWACsCODEC_ControlRegister4Constants
{
kRightSpeakerAttenMask = 0x0000000F,
kRightSpeakerAttenShift = 0,
kReservedR4Bit4 = 0x00000010,
kReservedR4Bit5 = 0x00000020,
kLeftSpeakerAttenMask = 0x000003C0,
kLeftSpeakerAttenShift = 6,
kReservedR4Bit10 = 0x00000400,
kReservedR4Bit11 = 0x00000800,
kSpeakerAttenMask = (kRightSpeakerAttenMask | kLeftSpeakerAttenMask),
kInitialAwacsR4Value = 0x00000000
};
enum AWACsVersions
{
kAWACSMaxVersion = 2
};
enum AWACsCODEC_ControlRegister5Constants
{
kRightLoopThruAttenMask = 0x0000000F,
kRightLoopThruAttenShift = 0,
kLeftLoopThruAttenMask = 0x000003C0,
kLeftLoopThruAttenShift = 6
};
enum AWACsCODEC_ControlRegister6Constants
{
kPowerModeDoze = 0x00000001,
kPowerModeIdle = 0x00000002,
kMicPreampBoostEnable = 0x00000004,
kPCMCIASpeakerAttenMask = 0x00000038,
kPowerModeAnalogShutdown = 0x00000040,
kLittleDischarge = 0x00000080,
kBigDischarge = 0x00000100
};
enum AWACsCODEC_ControlRegister7Constants
{
kReadBackEnable = 0x00000001,
kReadBackRegisterMask = 0x0000000E,
kReadBackRegisterShift = 1
};
enum AWACsCODEC_StatusRegisterConstants
{
kNotMicSense = 0x00000001,
kNotMicShift = 0,
kLineInSense = 0x00000002,
kLineInShft = 1,
kAux1Sense = 0x00000004,
kAux1Shft = 2,
kHeadphoneSense = 0x00000008,
kHeadphoneShft = 3,
kAllSense = 0x0000000F,
kManufacturerIDMask = 0x00000F00,
kManufacturerIDShft = 8,
kRevisionNumberMask = 0x0000F000,
kRevisionNumberShft = 12,
kAwacsErrorStatus = 0x000F0000,
kOverflowRight = 0x00100000,
kOverflowLeft = 0x00200000,
kValidData = 0x00400000,
kExtend = 0x00800000
};
enum AWACsSoundControlRegisterConstants
{
kInSubFrameMask = 0x0000000F,
kInSubFrame0 = 0x00000001,
kInSubFrame1 = 0x00000002,
kInSubFrame2 = 0x00000004,
kInSubFrame3 = 0x00000008,
kOutSubFrameMask = 0x000000F0,
kOutSubFrame0 = 0x00000010,
kOutSubFrame1 = 0x00000020,
kOutSubFrame2 = 0x00000040,
kOutSubFrame3 = 0x00000080,
kHWRateMask = 0x00000700,
kHWRate44100 = 0x00000000,
kHWRate29400 = 0x00000100,
kHWRate22050 = 0x00000200,
kHWRate17640 = 0x00000300,
kHWRate14700 = 0x00000400,
kHWRate11025 = 0x00000500,
kHWRate08820 = 0x00000600,
kHWRate07350 = 0x00000700,
kHWRateShift = 8,
kAWACSError = 0x00000800,
kPortChange = 0x00001000,
kEnableErrInt = 0x00002000,
kEnablePortChangeInt = 0x00004000,
kStatusSubFrmSel0 = 0x00000000,
kStatusSubFrmSel1 = 0x00008000,
kStatusSubFrmSel2 = 0x00010000,
kStatusSubFrmSel3 = 0x00018000
};
enum AWACsClippingCountRegisterConstants
{
kRightClippingCount = 0x000000FF,
kLeftClippingCount = 0x0000FF00
};
#define kSGS7433Addr 0x8A // IIC address of the SGS tone chip
#define defSGSInSel 0x09 // The default input magic byte
#define kInFuncReg 0x00 // Input and global function reg
#define kVolReg 0x01 // Volume control register
#define kToneReg 0x02 // Bass and treble control register low nibble treble, hi nibble bass , 0xFF is flat)
#define kLFAttnReg 0x03 // Left Front (ie everything except the rear spkr jack)
#define kRFAttnReg 0x05 // Right Front
#define kLRAttnReg 0x04 // Left Rear (the rear speaker jack only)
#define kRRAttnReg 0x06 // Right Rear
#define kNumberOfRegs 7
#define SGSVolStepSize 2 // 1 dB steps (0x20 is 0 db gain. Values go from 0x6f ie (-79dB) to VolMaxVal)
#define SGSVolMaxVal 0x1D
#define SGSVolMinVal 0x6F
#define SCALER 256 // input range is...
#define SGSVolSteps (SGSVolMinVal-SGSVolMaxVal)/SGSVolStepSize
#define SGSVolDefaultVal ( ((SGSVolMinVal-SGSVolMaxVal)/4)*3 ) // default volume, 75%
#define SGSfSCALER 256.0 // absolute max val of short fixed volume param as a double
#define SGSfChipRange (double)(SGSVolMinVal-SGSVolMaxVal) // This is a double rep of the range
#define SGSfChipMax (double)SGSVolMinVal // This is the max chip attn val (in double format)
#define SGSChipMuteBit 0x02 // set to mute system. This actually switches to the second input, which is grounded.
#define TrebleSteps 15 // Number of treble steps
#define TrebleStepSize (SCALER/TrebleSteps)
#define TrebleLUTEntries 8
#define BassSteps 19 // Number of bass steps
#define BassStepSize (SCALER/BassSteps)
#define BassStupidBit 0x10
#define BassLUTEntries 10
#define ToneBoostBit 8 // bit 3 set is tone boost, else it's cut
#define TONECENTER (SCALER/2) // Balance, bass and treble go +/- around this point
#define SGSToneFlat 0xFF // Ye olde init value
#define BalanceStepSizeIndB .5 // .5 dB steps attn, from 0 to 37.5dB
#define BalanceSteps 0x1F // Number of balance steps
#define BalanceStepSize (SCALER/BalanceSteps)
#define sgsBalMuteBit 0x020 // When this bit is set in the output fader/ balance regs, the channel is muted
#define kNumSpkrDevs 4 // Number of different possible output devices
#define kCpuSpkr 1
#define kBoseSpkr 2
#define kExtPwrSpkr 3
#define kHeadPhoneSpkr 4
enum {
kAWACsInputReg = 0x00000000, kAWACsInputA = 0x00000800, kAWACsInputB = 0x00000400, kAWACsInputC = 0x00000200, kAWACsInputField = kAWACsInputA | kAWACsInputB | kAWACsInputC,
kAWACsPreampBReg = 0x00000000, kAWACsPreampB = 0x00000100,
kAWACsGainReg = 0x00000000, kAWACsGainLeft = 0x000000F0, kAWACsGainLeftShift = 0x00000004, kAWACsGainRight = 0x0000000F, kAWACsGainField = kAWACsGainLeft | kAWACsGainRight,
kAWACsProgOutputReg = 0x00000001, kAWACsOutputZero = 0x00000400, kAWACsOutputOne = 0x00000800, kAWACsProgOutputField = kAWACsOutputZero | kAWACsOutputOne, kAWACsProgOutputShift = 10,
kAWACsMuteReg = 0x00000001, kAWACsMuteOutputA = 0x00000200, kAWACsMuteOutputC = 0x00000080, kAWACsMuteField = kAWACsMuteOutputA | kAWACsMuteOutputC,
kAWACsLoopThruReg = 0x00000001, kAWACsLoopThruEnable = 0x00000040,
kAWACsRecalibrateReg = 0x00000001, kAWACsRecalibrate = 0x00000004,
kAWACsOutputAAttenReg = 0x00000002, kAWACsOutputCAttenReg = 0x00000004, kAWACsOutputLeftAtten = 0x000003C0, kAWACsOutputLeftShift = 0x00000006, kAWACsOutputRightAtten = 0x0000000F, kAWACsOutputAttenField = kAWACsOutputLeftAtten | kAWACsOutputRightAtten,
kAWACsPlayThruAttenReg = 0x00000005,
kAWACsPowerReg = 0x00000006, kAWACsSettlingTimeField = 0x00000180, kAWACsSettlingTimeLong = 0x00000100, kAWACsSettlingTimeShort = 0x00000080, kAWACsAnalogShutdown = 0x00000040,
kAWACsPCMCIAAttenReg = 0x00000006, kAWACsPCMCIAAttenField = 0x00000038, kAWACsPCMCIAOn = 0x00000008, kAWACsPCMCIAOff = 0x00000000,
kAWACsPreampAReg = 0x00000006, kAWACsPreampA = 0x00000004,
kAWACsPowerStateField = 0x00000003, kAWACsPowerStateIdle = 0x00000002, kAWACsPowerStateDoze = 0x00000001, kAWACsPowerStateRun = 0x00000000,
kAWACsMinHardwareGain = 0,
kAWACsMaxHardwareGain = 15,
kAWACsMaxHardwareGainPreAmp = 31,
kAWACsHWdBStepSize = 0x00018000,
kAWACsMinVolume = 15,
kAWACsInvalidVolumeMask = 0xFE00FE00,
kAWACsMaxVolumeA = 2,
kAWACsMaxVolumeC = 0
};
enum AwacsSndHWCtrl {
kAWACsCtlAddressMask = 0x003FF000, kAWACsCtlAddressShift = 12,
kAWACsReadbackRegister = 7, kAWACsReadbackRegAddrMask = 0x0000000E, kAWACsReadbackRegAddrShift = 1, kAWACsReadbackEnable = 0x00000001, kAWACsReadbackMask = 0x0000000F, kAWACsReadbackDataShift = 4, kAWACsReadbackDataMask = 0x00000FFF };
enum AwacsSndHWStatus {
kAWACsManufacturerIDMask = 0x00000F00, kAWACsManfCrystal = 0x00000100, kAWACsManfNational = 0x00000200, kAWACsManfTI = 0x00000300,
kAWACsRevisionNumberMask = 0x0000F000, kAWACsRevisionShift = 12, kAWACsValidData = 0x00400000, kAWACsRecalTimeOut = 1000,
kAWACsStatusMask = 0x00FFFFFF, kAWACsStatusInSenseMask = 0x0000000F,
kAWACsAwacsRevision = 2, kAWACsScreamerRevision = 3,
kAWACsInSenseMask = 0x0000000F, kAWACsInSense0 = 0x00000008, kAWACsInSense1 = 0x00000004, kAWACsInSense2 = 0x00000002, kAWACsInSense3 = 0x00000001,
kScreamerRunState1 = 0, kScreamerRunState2 = 3, kScreamerDozeState = 1, kScreamerIdleState = 2, kScreamerStateField = 3 };