xref: /freebsd/sys/dev/sound/pci/es137x.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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