www.pudn.com > scaling.rar > aic23.h
/* * Copyright 2003 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */ /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */ /* * ======== aic23.h ======== * * Header file for the AIC23 codec driver implementation specific to the * Spectrum Digital EVM5509 board. It contains * control word bit-definition macros and declaration of public functions. */ #ifndef AIC23_ #define AIC23_ #include#include /* * AIC23 Control registers * * There are 10 control registers (+the reset reg.) on AIC23, each 9 bits wide. * The address of a control register is 7 bits wide: together, * the address of a register and its content form a 16-bit control word, * the address occupying the uppermost 7 bits and the content lowermost 9. */ #define AIC23_NUMREGS 10 #define AIC23_RESET 15 /* * A macro that let us define 9-bit register values as array of zeroes/ones */ #define AIC23_9BITWORD( b8, b7, b6, b5, b4, b3, b2, b1, b0 ) \ ((Uns)( 1*(b0) + 2*(b1) + 4*(b2) + 8*(b3) + \ 16*(b4) + 32*(b5) + 64*(b6) + 128*(b7) + 256*(b8) )) #define AIC23_REG0_DEFAULT \ AIC23_9BITWORD( /* REG 0: left input ch. volume control */ \ 0, /* simultaneous left/right volume: disabled*/ \ 0, /* left line input mute: disabled */ \ 0,0, /* reserved */ \ 1,0,1,1,1 /* left line input volume: 0 dB */ \ ) #define AIC23_REG1_DEFAULT \ AIC23_9BITWORD( /* REG 1: right input ch. volume control*/ \ 0, /* simultaneous right/left volume: disabled*/ \ 0, /* right line input mute: disabled */ \ 0,0, /* reserved */ \ 1,0,1,1,1 /* right line input volume: 0 dB */ \ ) #define AIC23_REG2_DEFAULT \ AIC23_9BITWORD( /* REG 2: left ch. headphone volume control*/ \ 1, /* simultaneous left/right volume: enabled */ \ 1, /* left channel zero-cross detect: enabled */ \ 1,1,1,1,0,0,1 /* left headphone volume: 0 dB */ \ ) #define AIC23_REG3_DEFAULT \ AIC23_9BITWORD( /* REG 3: right ch. headphone volume ctrl */ \ 1, /* simultaneous right/left volume: enabled */ \ 1, /* right channel zero-cross detect: enabled*/ \ 1,1,1,1,0,0,1 /* right headphone volume: 0 dB */ \ ) #define AIC23_REG4_DEFAULT \ AIC23_9BITWORD( /* REG 4: analog audio path control */ \ 0, /* reserved */ \ 0,0, /* sidetone attenuation: 6 dB */ \ 0, /* sidetone: disabled */ \ 1, /* DAC: selected */ \ 0, /* bypass: off */ \ 0, /* input select for ADC: line */ \ 0, /* microphone mute: disabled */ \ 1 /* microphone boost: enabled */ \ ) #define AIC23_REG5_DEFAULT \ AIC23_9BITWORD( /* REG 5: digital audio path control */ \ 0,0,0,0,0, /* reserved */ \ 0, /* DAC soft mute: disabled */ \ 0,0, /* deemphasis control: 48khz */ \ 0 /* ADC high-pass filter: disabled */ \ ) #define AIC23_REG6_DEFAULT \ AIC23_9BITWORD( /* REG 6: power down control */ \ 0, /* reserved */ \ 0, /* device power: on (i.e. not off) */ \ 0, /* clock: on */ \ 0, /* oscillator: on */ \ 0, /* outputs: on */ \ 0, /* DAC: on */ \ 0, /* ADC: on */ \ 0, /* microphone: on */ \ 0 /* line input: on */ \ ) #define AIC23_REG7_DEFAULT \ AIC23_9BITWORD( /* REG 7: digital audio interf. format ctrl*/ \ 0,0, /* reserved */ \ 1, /* master/slave mode: master */ \ 0, /* DEC left/right swap: disabled */ \ 0, /* no delay before transmitting MSB */ \ 0,0, /* input bit length: 16 bit */ \ 1,1 /* data format: DSP format */ \ ) #define AIC23_REG8_8KHZ \ AIC23_9BITWORD( /* REG 8: sample rate control */ \ 0, /* reserved */ \ 0, /* clock output divider: 1 (MCLK) */ \ 0, /* clock input divider: 1 (MCLK) */ \ 0,0,1,1,0, /* sampling rate: ADC 8kHz DAC 8kHz */ \ 1 /* clock mode select (USB/normal): USB */ \ ) \ #define AIC23_REG8_32KHZ \ AIC23_9BITWORD( /* REG 8: sample rate control */ \ 0, /* reserved */ \ 0, /* clock output divider: 1 (MCLK) */ \ 0, /* clock input divider: 1 (MCLK) */ \ 0,1,1,0,0, /* sampling rate: ADC 32kHz DAC 32kHz */ \ 1 /* clock mode select (USB/normal): USB */ \ ) #define AIC23_REG8_44_1KHZ \ AIC23_9BITWORD( /* REG 8: sample rate control */ \ 0, /* reserved */ \ 0, /* clock output divider: 1 (MCLK) */ \ 0, /* clock input divider: 1 (MCLK) */ \ 1,0,0,0,1, /* sampling rate: ADC 44.1kHz DAC 44.1kHz */ \ 1 /* clock mode select (USB/normal): USB */ \ ) #define AIC23_REG8_48KHZ \ AIC23_9BITWORD( /* REG 8: sample rate control */ \ 0, /* reserved */ \ 0, /* clock output divider: 1 (MCLK) */ \ 0, /* clock input divider: 1 (MCLK) */ \ 0,0,0,0,0, /* sampling rate: ADC 48kHz DAC 48kHz */ \ 1 /* clock mode select (USB/normal): USB */ \ ) #define AIC23_REG8_96KHZ \ AIC23_9BITWORD( /* REG 8: sample rate control */ \ 0, /* reserved */ \ 0, /* clock output divider: 1 (MCLK) */ \ 0, /* clock input divider: 1 (MCLK) */ \ 0,1,1,1,0, /* sampling rate: ADC 96kHz DAC 96kHz */ \ 1 /* clock mode select (USB/normal): USB */ \ ) #define AIC23_REG8_DEFAULT AIC23_REG8_48KHZ #define AIC23_REG9_DEFAULT \ AIC23_9BITWORD( /* REG 9: digital interface activation */ \ 0,0,0,0,0,0,0,0, /* reserved */ \ 1 /* active */ \ ) /* * Codec registers are kept in an object of the structure below. */ typedef struct AIC23_Params { Uns regs[ AIC23_NUMREGS ]; } AIC23_Params; /* * define an AIC23_DEFAULTPARAMS with 10 default register values */ #define AIC23_DEFAULTPARAMS { \ AIC23_REG0_DEFAULT, \ AIC23_REG1_DEFAULT, \ AIC23_REG2_DEFAULT, \ AIC23_REG3_DEFAULT, \ AIC23_REG4_DEFAULT, \ AIC23_REG5_DEFAULT, \ AIC23_REG6_DEFAULT, \ AIC23_REG7_DEFAULT, \ AIC23_REG8_DEFAULT, \ AIC23_REG9_DEFAULT \ } /* * Declaration of public functions */ /* * ======== AIC23_init ======== * * Initializes codec module variables, if any. (There are none.) */ extern Void AIC23_init(); /* * ======== AIC23_setParams ======== * * This function takes a pointer to the object of type AIC23_Params, * and writes all 11 control words found in it to the codec. */ extern Int AIC23_setParams(AIC23_Params *params); extern Void AIC23_setSampleRate(Uint32 sampleRate); #endif