1098ca2bdSWarner Losh /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro F. Giffuni * 42ee4e98cSJoel Dahl * Copyright (c) 1998 Joachim Kuebart <joachim.kuebart@gmx.net> 5987e5972SCameron Grant * All rights reserved. 6987e5972SCameron Grant * 7987e5972SCameron Grant * Redistribution and use in source and binary forms, with or without 8987e5972SCameron Grant * modification, are permitted provided that the following conditions 9987e5972SCameron Grant * are met: 10987e5972SCameron Grant * 1. Redistributions of source code must retain the above copyright 112ee4e98cSJoel Dahl * notice, this list of conditions and the following disclaimer. 12987e5972SCameron Grant * 2. Redistributions in binary form must reproduce the above copyright 13987e5972SCameron Grant * notice, this list of conditions and the following disclaimer in the 14987e5972SCameron Grant * documentation and/or other materials provided with the distribution. 15987e5972SCameron Grant * 164260c127SJoel Dahl * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 174260c127SJoel Dahl * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 184260c127SJoel Dahl * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 194260c127SJoel Dahl * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 204260c127SJoel Dahl * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 214260c127SJoel Dahl * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 224260c127SJoel Dahl * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 234260c127SJoel Dahl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 244260c127SJoel Dahl * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 254260c127SJoel Dahl * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 264260c127SJoel Dahl * SUCH DAMAGE. 27987e5972SCameron Grant */ 28987e5972SCameron Grant 292ee4e98cSJoel Dahl /* This supports the ENSONIQ AudioPCI board based on the ES1370. */ 302ee4e98cSJoel Dahl 31987e5972SCameron Grant #ifndef _ES1370_REG_H 32987e5972SCameron Grant #define _ES1370_REG_H 33987e5972SCameron Grant 34987e5972SCameron Grant #define ES1370_REG_CONTROL 0x00 35987e5972SCameron Grant #define ES1370_REG_STATUS 0x04 36987e5972SCameron Grant #define ES1370_REG_UART_DATA 0x08 37987e5972SCameron Grant #define ES1370_REG_UART_STATUS 0x09 38987e5972SCameron Grant #define ES1370_REG_UART_CONTROL 0x09 39987e5972SCameron Grant #define ES1370_REG_UART_TEST 0x0a 40987e5972SCameron Grant #define ES1370_REG_MEMPAGE 0x0c 41987e5972SCameron Grant #define ES1370_REG_CODEC 0x10 42987e5972SCameron Grant #define CODEC_INDEX_SHIFT 8 43987e5972SCameron Grant #define ES1370_REG_SERIAL_CONTROL 0x20 44987e5972SCameron Grant #define ES1370_REG_DAC1_SCOUNT 0x24 45987e5972SCameron Grant #define ES1370_REG_DAC2_SCOUNT 0x28 46987e5972SCameron Grant #define ES1370_REG_ADC_SCOUNT 0x2c 47987e5972SCameron Grant 48987e5972SCameron Grant #define ES1370_REG_DAC1_FRAMEADR 0xc30 49987e5972SCameron Grant #define ES1370_REG_DAC1_FRAMECNT 0xc34 50987e5972SCameron Grant #define ES1370_REG_DAC2_FRAMEADR 0xc38 51987e5972SCameron Grant #define ES1370_REG_DAC2_FRAMECNT 0xc3c 52987e5972SCameron Grant #define ES1370_REG_ADC_FRAMEADR 0xd30 53987e5972SCameron Grant #define ES1370_REG_ADC_FRAMECNT 0xd34 54987e5972SCameron Grant 55987e5972SCameron Grant #define DAC2_SRTODIV(x) (((1411200 + (x) / 2) / (x) - 2) & 0x1fff) 56987e5972SCameron Grant #define DAC2_DIVTOSR(x) (1411200 / ((x) + 2)) 57987e5972SCameron Grant 58987e5972SCameron Grant #define CTRL_ADC_STOP 0x80000000 /* 1 = ADC stopped */ 59987e5972SCameron Grant #define CTRL_XCTL1 0x40000000 /* SERR pin if enabled */ 60987e5972SCameron Grant #define CTRL_OPEN 0x20000000 /* no function, can be read and 61987e5972SCameron Grant * written */ 62987e5972SCameron Grant #define CTRL_PCLKDIV 0x1fff0000 /* ADC/DAC2 clock divider */ 63987e5972SCameron Grant #define CTRL_SH_PCLKDIV 16 64987e5972SCameron Grant #define CTRL_MSFMTSEL 0x00008000 /* MPEG serial data fmt: 0 = Sony, 1 65987e5972SCameron Grant * = I2S */ 66987e5972SCameron Grant #define CTRL_M_SBB 0x00004000 /* DAC2 clock: 0 = PCLKDIV, 1 = MPEG */ 67987e5972SCameron Grant #define CTRL_WTSRSEL 0x00003000 /* DAC1 clock freq: 0=5512, 1=11025, 68987e5972SCameron Grant * 2=22050, 3=44100 */ 69987e5972SCameron Grant #define CTRL_SH_WTSRSEL 12 70987e5972SCameron Grant #define CTRL_DAC_SYNC 0x00000800 /* 1 = DAC2 runs off DAC1 clock */ 71987e5972SCameron Grant #define CTRL_CCB_INTRM 0x00000400 /* 1 = CCB "voice" ints enabled */ 72987e5972SCameron Grant #define CTRL_M_CB 0x00000200 /* recording source: 0 = ADC, 1 = 73987e5972SCameron Grant * MPEG */ 74987e5972SCameron Grant #define CTRL_XCTL0 0x00000100 /* 0 = Line in, 1 = Line out */ 75987e5972SCameron Grant #define CTRL_BREQ 0x00000080 /* 1 = test mode (internal mem test) */ 76987e5972SCameron Grant #define CTRL_DAC1_EN 0x00000040 /* enable DAC1 */ 77987e5972SCameron Grant #define CTRL_DAC2_EN 0x00000020 /* enable DAC2 */ 78987e5972SCameron Grant #define CTRL_ADC_EN 0x00000010 /* enable ADC */ 79987e5972SCameron Grant #define CTRL_UART_EN 0x00000008 /* enable MIDI uart */ 80987e5972SCameron Grant #define CTRL_JYSTK_EN 0x00000004 /* enable Joystick port (presumably 81987e5972SCameron Grant * at address 0x200) */ 82987e5972SCameron Grant #define CTRL_CDC_EN 0x00000002 /* enable serial (CODEC) interface */ 83987e5972SCameron Grant #define CTRL_SERR_DIS 0x00000001 /* 1 = disable PCI SERR signal */ 84987e5972SCameron Grant 85987e5972SCameron Grant #define SCTRL_P2ENDINC 0x00380000 /* */ 86987e5972SCameron Grant #define SCTRL_SH_P2ENDINC 19 87987e5972SCameron Grant #define SCTRL_P2STINC 0x00070000 /* */ 88987e5972SCameron Grant #define SCTRL_SH_P2STINC 16 89987e5972SCameron Grant #define SCTRL_R1LOOPSEL 0x00008000 /* 0 = loop mode */ 90987e5972SCameron Grant #define SCTRL_P2LOOPSEL 0x00004000 /* 0 = loop mode */ 91987e5972SCameron Grant #define SCTRL_P1LOOPSEL 0x00002000 /* 0 = loop mode */ 92987e5972SCameron Grant #define SCTRL_P2PAUSE 0x00001000 /* 1 = pause mode */ 93987e5972SCameron Grant #define SCTRL_P1PAUSE 0x00000800 /* 1 = pause mode */ 94987e5972SCameron Grant #define SCTRL_R1INTEN 0x00000400 /* enable interrupt */ 95987e5972SCameron Grant #define SCTRL_P2INTEN 0x00000200 /* enable interrupt */ 96987e5972SCameron Grant #define SCTRL_P1INTEN 0x00000100 /* enable interrupt */ 97987e5972SCameron Grant #define SCTRL_P1SCTRLD 0x00000080 /* reload sample count register for 98987e5972SCameron Grant * DAC1 */ 99987e5972SCameron Grant #define SCTRL_P2DACSEN 0x00000040 /* 1 = DAC2 play back last sample 100987e5972SCameron Grant * when disabled */ 101987e5972SCameron Grant #define SCTRL_R1SEB 0x00000020 /* 1 = 16bit */ 102987e5972SCameron Grant #define SCTRL_R1SMB 0x00000010 /* 1 = stereo */ 103987e5972SCameron Grant #define SCTRL_R1FMT 0x00000030 /* format mask */ 104987e5972SCameron Grant #define SCTRL_SH_R1FMT 4 105987e5972SCameron Grant #define SCTRL_P2SEB 0x00000008 /* 1 = 16bit */ 106987e5972SCameron Grant #define SCTRL_P2SMB 0x00000004 /* 1 = stereo */ 107987e5972SCameron Grant #define SCTRL_P2FMT 0x0000000c /* format mask */ 108987e5972SCameron Grant #define SCTRL_SH_P2FMT 2 109987e5972SCameron Grant #define SCTRL_P1SEB 0x00000002 /* 1 = 16bit */ 110987e5972SCameron Grant #define SCTRL_P1SMB 0x00000001 /* 1 = stereo */ 111987e5972SCameron Grant #define SCTRL_P1FMT 0x00000003 /* format mask */ 112987e5972SCameron Grant #define SCTRL_SH_P1FMT 0 113987e5972SCameron Grant 114987e5972SCameron Grant #define STAT_INTR 0x80000000 /* wired or of all interrupt bits */ 115987e5972SCameron Grant #define STAT_CSTAT 0x00000400 /* 1 = codec busy or codec write in 116987e5972SCameron Grant * progress */ 117987e5972SCameron Grant #define STAT_CBUSY 0x00000200 /* 1 = codec busy */ 118987e5972SCameron Grant #define STAT_CWRIP 0x00000100 /* 1 = codec write in progress */ 119987e5972SCameron Grant #define STAT_VC 0x00000060 /* CCB int source, 0=DAC1, 1=DAC2, 120987e5972SCameron Grant * 2=ADC, 3=undef */ 121987e5972SCameron Grant #define STAT_SH_VC 5 122987e5972SCameron Grant #define STAT_MCCB 0x00000010 /* CCB int pending */ 123987e5972SCameron Grant #define STAT_UART 0x00000008 /* UART int pending */ 124987e5972SCameron Grant #define STAT_DAC1 0x00000004 /* DAC1 int pending */ 125987e5972SCameron Grant #define STAT_DAC2 0x00000002 /* DAC2 int pending */ 126987e5972SCameron Grant #define STAT_ADC 0x00000001 /* ADC int pending */ 127987e5972SCameron Grant 128987e5972SCameron Grant #define CODEC_OMIX1 0x10 129987e5972SCameron Grant #define CODEC_OMIX2 0x11 130987e5972SCameron Grant #define CODEC_LIMIX1 0x12 131987e5972SCameron Grant #define CODEC_RIMIX1 0x13 132987e5972SCameron Grant #define CODEC_LIMIX2 0x14 133987e5972SCameron Grant #define CODEC_RIMIX2 0x15 134987e5972SCameron Grant #define CODEC_RES_PD 0x16 135987e5972SCameron Grant #define CODEC_CSEL 0x17 136987e5972SCameron Grant #define CODEC_ADSEL 0x18 137987e5972SCameron Grant #define CODEC_MGAIN 0x19 138987e5972SCameron Grant 139d37a380dSCameron Grant /* ES1371 specific */ 140d37a380dSCameron Grant 141d37a380dSCameron Grant #define CODEC_ID_SESHIFT 10 142d37a380dSCameron Grant #define CODEC_ID_SEMASK 0x1f 143d37a380dSCameron Grant 144d37a380dSCameron Grant #define CODEC_PIRD 0x00800000 /* 0 = write AC97 register */ 145d37a380dSCameron Grant #define CODEC_PIADD_MASK 0x007f0000 146d37a380dSCameron Grant #define CODEC_PIADD_SHIFT 16 147d37a380dSCameron Grant #define CODEC_PIDAT_MASK 0x0000ffff 148d37a380dSCameron Grant #define CODEC_PIDAT_SHIFT 0 149d37a380dSCameron Grant 150d37a380dSCameron Grant #define CODEC_PORD 0x00800000 /* 0 = write AC97 register */ 151d37a380dSCameron Grant #define CODEC_POADD_MASK 0x007f0000 152d37a380dSCameron Grant #define CODEC_POADD_SHIFT 16 153d37a380dSCameron Grant #define CODEC_PODAT_MASK 0x0000ffff 154d37a380dSCameron Grant #define CODEC_PODAT_SHIFT 0 155d37a380dSCameron Grant 156d37a380dSCameron Grant #define CODEC_RDY 0x80000000 /* AC97 read data valid */ 157d37a380dSCameron Grant #define CODEC_WIP 0x40000000 /* AC97 write in progress */ 158d37a380dSCameron Grant 159d37a380dSCameron Grant #define ES1370_REG_CONTROL 0x00 160d37a380dSCameron Grant #define ES1370_REG_SERIAL_CONTROL 0x20 161d37a380dSCameron Grant #define ES1371_REG_CODEC 0x14 162d37a380dSCameron Grant #define ES1371_REG_LEGACY 0x18 /* W/R: Legacy control/status register */ 163d37a380dSCameron Grant #define ES1371_REG_SMPRATE 0x10 /* W/R: Codec rate converter interface register */ 164d37a380dSCameron Grant 165d37a380dSCameron Grant #define ES1371_SYNC_RES (1<<14) /* Warm AC97 reset */ 166d37a380dSCameron Grant #define ES1371_DIS_R1 (1<<19) /* record channel accumulator update disable */ 167d37a380dSCameron Grant #define ES1371_DIS_P2 (1<<20) /* playback channel 2 accumulator update disable */ 168d37a380dSCameron Grant #define ES1371_DIS_P1 (1<<21) /* playback channel 1 accumulator update disable */ 169d37a380dSCameron Grant #define ES1371_DIS_SRC (1<<22) /* sample rate converter disable */ 170d37a380dSCameron Grant #define ES1371_SRC_RAM_BUSY (1<<23) /* R/O: sample rate memory is busy */ 171d37a380dSCameron Grant #define ES1371_SRC_RAM_WE (1<<24) /* R/W: read/write control for sample rate converter */ 172d37a380dSCameron Grant #define ES1371_SRC_RAM_ADDRO(o) (((o)&0x7f)<<25) /* address of the sample rate converter */ 173d37a380dSCameron Grant #define ES1371_SRC_RAM_DATAO(o) (((o)&0xffff)<<0) /* current value of the sample rate converter */ 174d37a380dSCameron Grant #define ES1371_SRC_RAM_DATAI(i) (((i)>>0)&0xffff) /* current value of the sample rate converter */ 175d37a380dSCameron Grant 176d37a380dSCameron Grant /* 177ae93e580SAlexander Leidinger * S/PDIF specific 178ae93e580SAlexander Leidinger */ 179ae93e580SAlexander Leidinger 180ae93e580SAlexander Leidinger /* Use ES1370_REG_CONTROL */ 181ae93e580SAlexander Leidinger #define RECEN_B 0x08000000 /* Used to control mixing of analog with digital data */ 182ae93e580SAlexander Leidinger #define SPDIFEN_B 0x04000000 /* Reset to switch digital output mux to "THRU" mode */ 183ae93e580SAlexander Leidinger /* Use ES1370_REG_STATUS */ 184ae93e580SAlexander Leidinger #define ENABLE_SPDIF 0x00040000 /* Used to enable the S/PDIF circuitry */ 185ae93e580SAlexander Leidinger #define TEST_SPDIF 0x00020000 /* Used to put the S/PDIF module in "test mode" */ 186ae93e580SAlexander Leidinger 187ae93e580SAlexander Leidinger /* 188d37a380dSCameron Grant * Sample rate converter addresses 189d37a380dSCameron Grant */ 190d37a380dSCameron Grant 191d37a380dSCameron Grant #define ES_SMPREG_DAC1 0x70 192d37a380dSCameron Grant #define ES_SMPREG_DAC2 0x74 193d37a380dSCameron Grant #define ES_SMPREG_ADC 0x78 194d37a380dSCameron Grant #define ES_SMPREG_TRUNC_N 0x00 195d37a380dSCameron Grant #define ES_SMPREG_INT_REGS 0x01 196d37a380dSCameron Grant #define ES_SMPREG_VFREQ_FRAC 0x03 197d37a380dSCameron Grant #define ES_SMPREG_VOL_ADC 0x6c 198d37a380dSCameron Grant #define ES_SMPREG_VOL_DAC1 0x7c 199d37a380dSCameron Grant #define ES_SMPREG_VOL_DAC2 0x7e 200987e5972SCameron Grant 201987e5972SCameron Grant #endif 202