/* * Purpose: Definitions for the Creative/Ensoniq AudioPCI driver */ /* * * This file is part of Open Sound System. * * Copyright (C) 4Front Technologies 1996-2008. * * This this source file is released under GPL v2 license (no other versions). * See the COPYING file included in the main directory of this source * distribution for the license terms and conditions. * */ /* CONCERT PCI-SIG defines */ #define CONC_PCI_VENDID 0x1274U #define CONC_PCI_DEVID 0x5000U /* used for the development board only!!*/ #define CONC_DEV_PCI_VENDID 0x1274U #define CONC_DEV_PCI_DEVID 0x5000U /* ** CONCERT Registers ** ** */ #define DAC_CLOCK_DIVIDE 22579200UL /* DAC2 (CODEC) clock divide */ /* Concert direct register offset defines */ #define CONC_bDEVCTL_OFF 0x00 /* Device control/enable */ /* Device Control defines */ #define CONC_DEVCTL_SERR_DISABLE 0x01 /* internal PCI serr bus enable */ #define CONC_DEVCTL_CODEC_EN 0x02 /* CoDec Enable */ #define CONC_DEVCTL_JSTICK_EN 0x04 /* Joystick Enable */ #define CONC_DEVCTL_UART_EN 0x08 /* UART Enable */ #define CONC_DEVCTL_ADC_EN 0x10 /* ADC Enable (record) */ #define CONC_DEVCTL_DAC2_EN 0x20 /* DAC2 Enable (playback) */ #define CONC_DEVCTL_DAC1_EN 0x40 /* DAC1 Enabale (synth) */ #define CONC_DEVCTL_MICBIAS 0x4000L /* mic bias switch */ #define CONC_bMISCCTL_OFF 0x01 /* Miscellaneous control */ /* Misc Control defines */ #define CONC_MISCTL_MUTE 0x01 /* XTL0 wired to mute */ #define CONC_MISCTL_CCB_INTRM 0x04 /* CCB interrupt mask */ #define CONC_MISCTL_DAC1FREQ_2205 0x20 /* synth frequency */ #define CONC_wDACRATE_OFF 0x02 /* CODEC clock divider for PLL */ #define CONC_dSTATUS_OFF 0x04 /* long status register */ #define CONC_bINTSTAT_OFF 0x04 /* Device interrupt status */ /* Interrupt Status defines */ #define CONC_INTSTAT_ADCINT 0x01 /* A/D interrupt pending bit */ #define CONC_INTSTAT_DAC2INT 0x02 /* DAC2 interrupt pending bit */ #define CONC_INTSTAT_DAC1INT 0x04 /* DAC1 interrupt pending bit */ #define CONC_INTSTAT_UARTINT 0x08 /* UART interrupt pending bit */ #define CONC_bCODECSTAT_OFF 0x05 /* CODEC interface status */ #define CONC_bINTSUMM_OFF 0x07 /* Interrupt summary status */ #define CONC_bUARTDATA_OFF 0x08 /* UART data R/W - read clears RX int */ #define CONC_bUARTCSTAT_OFF 0x09 /* UART control and status */ #define CONC_bMEMPAGE_OFF 0x0c /* Memory page select */ #define CONC_wCODECCTL_OFF 0x10 /* CODEC control - word-write-only */ #define CONC_wNMISTAT_OFF 0x18 /* Legacy NMI status */ #define CONC_bNMIENA_OFF 0x1a /* Legacy NMI enable */ #define CONC_bNMICTL_OFF 0x1b /* Legacy control */ #define CONC_bSERFMT_OFF 0x20 /* Serial device control */ /* SERFMT PCM format defines */ #define CONC_PCM_DAC1_STEREO 0x01 #define CONC_PCM_DAC1_16BIT 0x02 #define CONC_PCM_DAC1_MASK 0xfc #define CONC_PCM_DAC2_STEREO 0x04 #define CONC_PCM_DAC2_16BIT 0x08 #define CONC_PCM_DAC2_MASK 0xf3 #define CONC_PCM_ADC_STEREO 0x10 #define CONC_PCM_ADC_16BIT 0x20 #define CONC_PCM_ADC_MASK 0xcf #define CONC_bSERCTL_OFF 0x21 /* Serial device format */ /* Serial Control defines */ #define CONC_SERCTL_SYNIE 0x01 /* synth (DAC1) int enable */ #define CONC_SERCTL_SYNIE_MASK 0x0e /* synth interrupt mask */ #define CONC_SERCTL_DACIE 0x02 /* playback interrupt enable */ #define CONC_SERCTL_DACIE_MASK 0x0d /* playback interrupt mask */ #define CONC_SERCTL_ADCIE 0x04 /* record interrupt enable */ #define CONC_SERCTL_ADCIE_MASK 0x0b /* record interrupt mask */ #define CONC_SERCTL_DACPAUSE 0x10 /* playback pause */ #define CONC_bSKIPC_OFF 0x22 /* Start/end skip counts for DAC2 (wave) */ #define CONC_wSYNIC_OFF 0x24 /* Synth int count in sample frames */ #define CONC_wSYNCIC_OFF 0x26 /* Synth current int count */ #define CONC_wDACIC_OFF 0x28 /* DAC int count in sample frames */ #define CONC_wDACCIC_OFF 0x2a /* DAC current int count */ #define CONC_wADCIC_OFF 0x2c /* ADC int count in sample frames */ #define CONC_wADCCIC_OFF 0x2e /* ADC current int count */ #define CONC_MEMBASE_OFF 0x30 /* Memory window base - 16 bytes */ /* Concert memory page-banked register offset defines */ #define CONC_dSYNPADDR_OFF 0x30 /* Synth host frame PCI phys addr */ #define CONC_wSYNFC_OFF 0x34 /* Synth host frame count in DWORDS */ #define CONC_wSYNCFC_OFF 0x36 /* Synth host current frame count */ #define CONC_dDACPADDR_OFF 0x38 /* DAC host frame PCI phys addr */ #define CONC_wDACFC_OFF 0x3c /* DAC host frame count in DWORDS */ #define CONC_wDACCFC_OFF 0x3e /* DAC host current frame count */ #define CONC_dADCPADDR_OFF 0x30 /* ADC host frame PCI phys addr */ #define CONC_wADCFC_OFF 0x34 /* ADC host frame count in DWORDS */ #define CONC_wADCCFC_OFF 0x36 /* ADC host current frame count */ /* Concert memory page number defines */ #define CONC_SYNRAM_PAGE 0x00 /* Synth host/serial I/F RAM */ #define CONC_DACRAM_PAGE 0x04 /* DAC host/serial I/F RAM */ #define CONC_ADCRAM_PAGE 0x08 /* ADC host/serial I/F RAM */ #define CONC_SYNCTL_PAGE 0x0c /* Page bank for synth host control */ #define CONC_DACCTL_PAGE 0x0c /* Page bank for DAC host control */ #define CONC_ADCCTL_PAGE 0x0d /* Page bank for ADC host control */ #define CONC_FIFO0_PAGE 0x0e /* page 0 of UART "FIFO" (rx stash) */ #define CONC_FIFO1_PAGE 0x0f /* page 1 of UART "FIFO" (rx stash) */ /* UARTCSTAT register masks */ #define CONC_UART_RXRDY 0x01 #define CONC_UART_TXRDY 0x02 #define CONC_UART_TXINT 0x04 #define CONC_UART_RXINT 0x80 #define CONC_UART_CTL 0x03 #define CONC_UART_TXINTEN 0x20 #define CONC_UART_RXINTEN 0x80 /* ** CODEC register map ** */ #define NUMREGS 32 /* total number of registers */ #define NUMVOLS 16 /* number of vol regs */ /* Source and output volume control defines */ #define CODEC_VOL_MASTER_L 0x00U /* Master out, left */ #define CODEC_VOL_MASTER_R 0x01U /* Master out, right */ #define CODEC_VOL_WAVE_L 0x02U /* Wave DAC, left */ #define CODEC_VOL_WAVE_R 0x03U /* Wave DAC, right */ #define CODEC_VOL_SYNTH_L 0x04U /* Synth DAC, left */ #define CODEC_VOL_SYNTH_R 0x05U /* Synth DAC, right */ #define CODEC_VOL_CD_L 0x06U /* CD audio, left */ #define CODEC_VOL_CD_R 0x07U /* CD audio, right */ #define CODEC_VOL_AUX_L 0x08U /* Aux line source, left */ #define CODEC_VOL_AUX_R 0x09U /* Aux line source, right */ #define CODEC_VOL_TV_L 0x0aU /* TV Tuner, left */ #define CODEC_VOL_TV_R 0x0bU /* TV Tuner, right */ #define CODEC_VOL_TAD 0x0cU /* TAD monitor, mono */ #define CODEC_VOL_MONO2 0x0dU /* Unused MONO2 */ #define CODEC_VOL_MIC 0x0eU /* Mic, mono */ #define CODEC_VOL_MONO 0x0fU /* Mono out volume */ /* Input bus enable defines -SW1 */ #define CODEC_IN_ENABLE_MIC 0x01U /* Mic enable, mono */ #define CODEC_IN_ENABLE_CD_R 0x02U /* CD audio enable, right */ #define CODEC_IN_ENABLE_CD_L 0x04U /* CD audio enable, left */ #define CODEC_IN_ENABLE_AUX_R 0x08U /* Aux line source enable, right */ #define CODEC_IN_ENABLE_AUX_L 0x10U /* Aux line source enable, left */ #define CODEC_IN_ENABLE_SYNTH_R 0x20U /* Synth DAC enable, right */ #define CODEC_IN_ENABLE_SYNTH_L 0x40U /* Synth DAC enable, left */ /* Input bus enable defines - SW2 */ #define CODEC_IN_ENABLE_TAD 0x01U /* TAD monitor enable, mono */ #define CODEC_IN_ENABLE_MONO2 0x02U /* Unused MONO2 enable, mono */ #define CODEC_IN_ENABLE_WAVE 0x04U /* Wave DAC enable */ #define CODEC_IN_ENABLE_TV_R 0x08U /* TV Tuner enable, right */ #define CODEC_IN_ENABLE_TV_L 0x10U /* TV Tuner enable, left */ #define CODEC_IN_ENABLE_TMONO2 0x20U /* unboosted MONO2 */ #define CODEC_IN_ENABLE_TMONO1 0x40U /* unboosted MONO1 */ #define CODEC_IN_ENABLE_TMIC 0x80U /* unboosted MONO3 (mic) */ /* Output bus enable defines */ #define CODEC_OUT_ENABLE_MIC 0x0001U /* Mic enable, mono */ #define CODEC_OUT_ENABLE_CD 0x0006U /* CD audio enable, stereo */ #define CODEC_OUT_ENABLE_AUX 0x0018U /* Aux line source enable, stereo */ #define CODEC_OUT_ENABLE_SYNTH 0x0060U /* Synth DAC enable, stereo */ #define CODEC_OUT_ENABLE_TAD 0x0100U /* TAD monitor enable, mono */ #define CODEC_OUT_ENABLE_MONO2 0x0200U /* Unused MONO2 enable, mono */ #define CODEC_OUT_ENABLE_WAVE 0x0c00U /* Wave DAC enable, stereo */ #define CODEC_OUT_ENABLE_TV 0x3000U /* TV Tuner enable, stereo */ /* Volume setting constants */ #define CODEC_VOL_MUTE 0x80U #define CODEC_VOL_MAX 0x00U #define CODEC_VOL_MIN 0x1fU /* Control function defines */ #define CODEC_CTL_4SPKR 0x00U /* 4-spkr output mode enable */ #define CODEC_CTL_MICBOOST 0x01U /* Mic boost (+30 dB) enable */ /* Miscellaneous CODEC defines for internal use */ #define CODEC_OUT_SW1 0x10U #define CODEC_OUT_SW2 0x11U #define CODEC_LIN_SW1 0x12U #define CODEC_RIN_SW1 0x13U #define CODEC_LIN_SW2 0x14U #define CODEC_RIN_SW2 0x15U #define CODEC_RESET_PWRD 0x16U #define CODEC_CLKSELECT 0x17U #define CODEC_ADSELECT 0x18U #define CODEC_MICBOOST 0x19U /* PCM format defines */ #define CONC_PCM_DAC_STEREO 0x04 #define CONC_PCM_DAC_16BIT 0x08 #define CONC_PCM_DAC_MASK 0xf3 #define CONC_PCM_ADC_STEREO 0x10 #define CONC_PCM_ADC_16BIT 0x20 #define CONC_PCM_ADC_MASK 0xcf /* Logical index for each DMA controller on chip - used for */ /* generic routines that access all DMA controllers */ #define CONC_SYNTH_DAC 0 #define CONC_WAVE_DAC 1 #define CONC_WAVE_ADC 2 /************************ * Mixer definitions */ struct mixer_def { unsigned int regno; unsigned int polarity; /* 0=normal, 1=reversed */ unsigned int bitpos; unsigned int nbits; unsigned int mutepos; }; typedef struct mixer_def mixer_ent; typedef mixer_ent mixer_ents[2]; #define MIXER_DEVS (SOUND_MASK_LINE1 | SOUND_MASK_LINE2 | \ SOUND_MASK_MIC | SOUND_MASK_VOLUME | \ SOUND_MASK_LINE3 | SOUND_MASK_SPEAKER | \ SOUND_MASK_CD | SOUND_MASK_LINE | \ SOUND_MASK_PCM | SOUND_MASK_ALTPCM) #define REC_DEVS (SOUND_MASK_LINE1 | SOUND_MASK_LINE2 | \ SOUND_MASK_MIC | \ SOUND_MASK_LINE3 | \ SOUND_MASK_CD | SOUND_MASK_LINE) #define STEREO_DEVS (SOUND_MASK_LINE1 | \ SOUND_MASK_VOLUME | \ SOUND_MASK_CD | SOUND_MASK_LINE | \ SOUND_MASK_PCM | SOUND_MASK_ALTPCM) #define LEFT_CHN 0 #define RIGHT_CHN 1 #define MIX_ENT(name, reg_l, pola_l, pos_l, len_l, reg_r, pola_r, pos_r, len_r, mute_bit) \ {{reg_l, pola_l, pos_l, len_l}, {reg_r, pola_r, pos_r, len_r, mute_bit}} static mixer_ents ak_mix_devices[32] = { /* Name Reg p b l Reg p b l M */ MIX_ENT (SOUND_MIXER_VOLUME, 0x00, 1, 0, 5, 0x01, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_BASS, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_TREBLE, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_SYNTH, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_PCM, 0x02, 1, 0, 5, 0x03, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_SPEAKER, 0x0f, 1, 0, 3, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_LINE, 0x08, 1, 0, 5, 0x09, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_MIC, 0x0e, 1, 0, 5, 0xff, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_CD, 0x06, 1, 0, 5, 0x07, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_IMIX, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_ALTPCM, 0x04, 1, 0, 5, 0x05, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_RECLEV, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_IGAIN, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_OGAIN, 0xff, 0, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_LINE1, 0x0a, 1, 0, 5, 0x0b, 1, 0, 5, 7), MIX_ENT (SOUND_MIXER_LINE2, 0x0c, 1, 0, 5, 0xff, 0, 0, 5, 7), MIX_ENT (SOUND_MIXER_LINE3, 0x0d, 1, 0, 5, 0xff, 0, 0, 5, 7) }; static int default_mixer_levels[32] = { 0x3232, /* Master Volume */ 0x3232, /* Bass */ 0x3232, /* Treble */ 0x4b4b, /* FM */ 0x3232, /* PCM */ 0x1515, /* PC Speaker */ 0x2020, /* Ext Line */ 0x2020, /* Mic */ 0x4b4b, /* CD */ 0x0000, /* Recording monitor */ 0x4b4b, /* Second PCM */ 0x4b4b, /* Recording level */ 0x4b4b, /* Input gain */ 0x4b4b, /* Output gain */ 0x2020, /* Line1 */ 0x2020, /* Line2 */ 0x1515 /* Line3 (usually line in) */ };