xref: /dflybsd-src/sys/dev/sound/pci/envy24ht.h (revision 2a1ad637466621af45d5a17185b33f3dcaaa1b1c)
1*2a1ad637SFrançois Tigeot /*-
24886ec58SHasso Tepper  * Copyright (c) 2006 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
34886ec58SHasso Tepper  * Copyright (c) 2001 Katsurajima Naoto <raven@katsurajima.seya.yokohama.jp>
44886ec58SHasso Tepper  * All rights reserved.
54886ec58SHasso Tepper  *
64886ec58SHasso Tepper  * Redistribution and use in source and binary forms, with or without
74886ec58SHasso Tepper  * modification, are permitted provided that the following conditions
84886ec58SHasso Tepper  * are met:
94886ec58SHasso Tepper  * 1. Redistributions of source code must retain the above copyright
104886ec58SHasso Tepper  *    notice, this list of conditions and the following disclaimer.
114886ec58SHasso Tepper  * 2. Redistributions in binary form must reproduce the above copyright
124886ec58SHasso Tepper  *    notice, this list of conditions and the following disclaimer in the
134886ec58SHasso Tepper  *    documentation and/or other materials provided with the distribution.
144886ec58SHasso Tepper  *
154886ec58SHasso Tepper  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
164886ec58SHasso Tepper  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
174886ec58SHasso Tepper  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
184886ec58SHasso Tepper  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
194886ec58SHasso Tepper  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
204886ec58SHasso Tepper  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
214886ec58SHasso Tepper  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
224886ec58SHasso Tepper  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHERIN CONTRACT, STRICT
234886ec58SHasso Tepper  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
244886ec58SHasso Tepper  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF
254886ec58SHasso Tepper  * SUCH DAMAGE.
264886ec58SHasso Tepper  *
27*2a1ad637SFrançois Tigeot  * $FreeBSD: head/sys/dev/sound/pci/envy24ht.h 250286 2013-05-05 19:09:34Z mav $
284886ec58SHasso Tepper  */
294886ec58SHasso Tepper 
304886ec58SHasso Tepper 
314886ec58SHasso Tepper /* -------------------------------------------------------------------- */
324886ec58SHasso Tepper 
334886ec58SHasso Tepper /* PCI device ID */
344886ec58SHasso Tepper #define PCIV_ENVY24 0x1412
354886ec58SHasso Tepper #define PCID_ENVY24HT 0x1724
364886ec58SHasso Tepper 
374886ec58SHasso Tepper #define PCIR_CCS		0x10 /* Controller I/O Base Address */
384886ec58SHasso Tepper #define ENVY24HT_PCIR_MT   	0x14 /* Multi-Track I/O Base Address */
394886ec58SHasso Tepper 
404886ec58SHasso Tepper /* Controller Registers */
414886ec58SHasso Tepper 
424886ec58SHasso Tepper #define ENVY24HT_CCS_CTL      0x00 /* Control/Status Register */
434886ec58SHasso Tepper #define ENVY24HT_CCS_CTL_RESET   0x80 /* Entire Chip soft reset */
444886ec58SHasso Tepper 
454886ec58SHasso Tepper #define ENVY24HT_CCS_IMASK    0x01 /* Interrupt Mask Register */
464886ec58SHasso Tepper #define ENVY24HT_CCS_IMASK_PMT   0x10 /* Professional Multi-track */
474886ec58SHasso Tepper 
484886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDEV   0x10 /* I2C Port Device Address Register */
494886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDEV_ADDR 0xfe /* I2C device address */
504886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDEV_ROM  0xa0 /* reserved for the external I2C E2PROM */
514886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDEV_WR   0x01 /* write */
524886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDEV_RD   0x00 /* read */
534886ec58SHasso Tepper 
544886ec58SHasso Tepper #define ENVY24HT_CCS_I2CADDR  0x11 /* I2C Port Byte Address Register */
554886ec58SHasso Tepper #define ENVY24HT_CCS_I2CDATA  0x12 /* I2C Port Read/Write Data Register */
564886ec58SHasso Tepper 
574886ec58SHasso Tepper #define ENVY24HT_CCS_I2CSTAT  0x13 /* I2C Port Control and Status Register */
584886ec58SHasso Tepper #define ENVY24HT_CCS_I2CSTAT_ROM 0x80 /* external E2PROM exists */
594886ec58SHasso Tepper #define ENVY24HT_CCS_I2CSTAT_BSY 0x01 /* I2C port read/write status busy */
604886ec58SHasso Tepper 
614886ec58SHasso Tepper #define ENVY24HT_CCS_SCFG  0x04 /* System Configuration Register */
624886ec58SHasso Tepper #define ENVY24HT_CCSM_SCFG_XIN2      0xc0 /* XIN2 Clock Source Configuration */
634886ec58SHasso Tepper                                  	  /* 00: 24.576MHz(96kHz*256) */
644886ec58SHasso Tepper                                  	  /* 01: 49.152MHz(192kHz*256) */
654886ec58SHasso Tepper                                  	  /* 1x: Reserved */
664886ec58SHasso Tepper #define ENVY24HT_CCSM_SCFG_MPU       0x20 /* 0(not implemented)/1(1) MPU-401 UART */
674886ec58SHasso Tepper #define ENVY24HT_CCSM_SCFG_ADC       0x0c /* 1-2 stereo ADC connected, S/PDIF receiver connected */
684886ec58SHasso Tepper #define ENVY24HT_CCSM_SCFG_DAC       0x03 /* 1-4 stereo DAC connected */
694886ec58SHasso Tepper 
704886ec58SHasso Tepper #define ENVY24HT_CCS_ACL   0x05 /* AC-Link Configuration Register */
714886ec58SHasso Tepper #define ENVY24HT_CCSM_ACL_MTC        0x80 /* Multi-track converter type: 0:AC'97 1:I2S */
724886ec58SHasso Tepper #define ENVY24HT_CCSM_ACL_OMODE      0x02 /* AC 97 codec SDATA_OUT 0:split 1:packed */
734886ec58SHasso Tepper 
744886ec58SHasso Tepper #define ENVY24HT_CCS_I2S   0x06 /* I2S Converters Features Register */
754886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_VOL        0x80 /* I2S codec Volume and mute */
764886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_96KHZ      0x40 /* I2S converter 96kHz sampling rate support */
774886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_192KHZ     0x08 /* I2S converter 192kHz sampling rate support */
784886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_RES        0x30 /* Converter resolution */
794886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_16BIT      0x00 /* 16bit */
804886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_18BIT      0x10 /* 18bit */
814886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_20BIT      0x20 /* 20bit */
824886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_24BIT      0x30 /* 24bit */
834886ec58SHasso Tepper #define ENVY24HT_CCSM_I2S_ID         0x07 /* Other I2S IDs */
844886ec58SHasso Tepper 
854886ec58SHasso Tepper #define ENVY24HT_CCS_SPDIF 0x07 /* S/PDIF Configuration Register */
864886ec58SHasso Tepper #define ENVY24HT_CCSM_SPDIF_INT_EN   0x80 /* Enable integrated S/PDIF transmitter */
874886ec58SHasso Tepper #define ENVY24HT_CCSM_SPDIF_INT_OUT  0x40 /* Internal S/PDIF Out implemented */
884886ec58SHasso Tepper #define ENVY24HT_CCSM_SPDIF_ID       0x3c /* S/PDIF chip ID */
894886ec58SHasso Tepper #define ENVY24HT_CCSM_SPDIF_IN       0x02 /* S/PDIF Stereo In is present */
904886ec58SHasso Tepper #define ENVY24HT_CCSM_SPDIF_OUT      0x01 /* External S/PDIF Out implemented */
914886ec58SHasso Tepper 
924886ec58SHasso Tepper /* Professional Multi-Track Control Registers */
934886ec58SHasso Tepper 
944886ec58SHasso Tepper #define ENVY24HT_MT_INT_STAT    0x00 /* DMA Interrupt Mask and Status Register */
954886ec58SHasso Tepper #define ENVY24HT_MT_INT_RSTAT   0x02 /* Multi-track record interrupt status */
964886ec58SHasso Tepper #define ENVY24HT_MT_INT_PSTAT   0x01 /* Multi-track playback interrupt status */
974886ec58SHasso Tepper #define ENVY24HT_MT_INT_MASK	0x03
984886ec58SHasso Tepper #define ENVY24HT_MT_INT_RMASK   0x02 /* Multi-track record interrupt mask */
994886ec58SHasso Tepper #define ENVY24HT_MT_INT_PMASK   0x01 /* Multi-track playback interrupt mask */
1004886ec58SHasso Tepper 
1014886ec58SHasso Tepper #define ENVY24HT_MT_RATE     0x01 /* Sampling Rate Select Register */
1024886ec58SHasso Tepper #define ENVY24HT_MT_RATE_SPDIF  0x10 /* S/PDIF input clock as the master */
1034886ec58SHasso Tepper #define ENVY24HT_MT_RATE_48000  0x00
1044886ec58SHasso Tepper #define ENVY24HT_MT_RATE_24000  0x01
1054886ec58SHasso Tepper #define ENVY24HT_MT_RATE_12000  0x02
1064886ec58SHasso Tepper #define ENVY24HT_MT_RATE_9600   0x03
1074886ec58SHasso Tepper #define ENVY24HT_MT_RATE_32000  0x04
1084886ec58SHasso Tepper #define ENVY24HT_MT_RATE_16000  0x05
1094886ec58SHasso Tepper #define ENVY24HT_MT_RATE_8000   0x06
1104886ec58SHasso Tepper #define ENVY24HT_MT_RATE_96000  0x07
1114886ec58SHasso Tepper #define ENVY24HT_MT_RATE_192000 0x0e
1124886ec58SHasso Tepper #define ENVY24HT_MT_RATE_64000  0x0f
1134886ec58SHasso Tepper #define ENVY24HT_MT_RATE_44100  0x08
1144886ec58SHasso Tepper #define ENVY24HT_MT_RATE_22050  0x09
1154886ec58SHasso Tepper #define ENVY24HT_MT_RATE_11025  0x0a
1164886ec58SHasso Tepper #define ENVY24HT_MT_RATE_88200  0x0b
1174886ec58SHasso Tepper #define ENVY24HT_MT_RATE_176400 0x0c
1184886ec58SHasso Tepper #define ENVY24HT_MT_RATE_MASK   0x0f
1194886ec58SHasso Tepper 
1204886ec58SHasso Tepper #define ENVY24HT_MT_I2S      0x02 /* I2S Data Format Register */
1214886ec58SHasso Tepper #define ENVY24HT_MT_I2S_MLR128  0x08 /* MCLK/LRCLK ratio 128x (or 256x) */
1224886ec58SHasso Tepper 
1234886ec58SHasso Tepper #define ENVY24HT_MT_PADDR    0x10 /* Playback DMA Current/Base Address Register */
1244886ec58SHasso Tepper #define ENVY24HT_MT_PCNT     0x14 /* Playback DMA Current/Base Count Register */
1254886ec58SHasso Tepper #define ENVY24HT_MT_PTERM    0x1C /* Playback Current/Base Terminal Count Register */
1264886ec58SHasso Tepper 
1274886ec58SHasso Tepper #define ENVY24HT_MT_PCTL     0x18 /* Global Playback and Record DMA Start/Stop Register */
1284886ec58SHasso Tepper #define ENVY24HT_MT_PCTL_RSTART 0x02 /* 1: Record start; 0: Record stop */
1294886ec58SHasso Tepper #define ENVY24HT_MT_PCTL_PSTART 0x01 /* 1: Playback start; 0: Playback stop */
1304886ec58SHasso Tepper 
1314886ec58SHasso Tepper #define ENVY24HT_MT_RADDR    0x20 /* Record DMA Current/Base Address Register */
1324886ec58SHasso Tepper #define ENVY24HT_MT_RCNT     0x24 /* Record DMA Current/Base Count Register */
1334886ec58SHasso Tepper #define ENVY24HT_MT_RTERM    0x26 /* Record Current/Base Terminal Count Register */
1344886ec58SHasso Tepper 
1354886ec58SHasso Tepper /*
1364886ec58SHasso Tepper   These map values are refferd from ALSA sound driver.
1374886ec58SHasso Tepper */
1384886ec58SHasso Tepper /* ENVY24 configuration E2PROM map */
1394886ec58SHasso Tepper #define ENVY24HT_E2PROM_SUBVENDOR  0x02
1404886ec58SHasso Tepper #define ENVY24HT_E2PROM_SUBDEVICE  0x00
1414886ec58SHasso Tepper #define ENVY24HT_E2PROM_SIZE       0x04
1424886ec58SHasso Tepper #define ENVY24HT_E2PROM_VERSION    0x05
1434886ec58SHasso Tepper #define ENVY24HT_E2PROM_SCFG       0x06
1444886ec58SHasso Tepper #define ENVY24HT_E2PROM_ACL        0x07
1454886ec58SHasso Tepper #define ENVY24HT_E2PROM_I2S        0x08
1464886ec58SHasso Tepper #define ENVY24HT_E2PROM_SPDIF      0x09
1474886ec58SHasso Tepper #define ENVY24HT_E2PROM_GPIOMASK   0x0d
1484886ec58SHasso Tepper #define ENVY24HT_E2PROM_GPIOSTATE  0x10
1494886ec58SHasso Tepper #define ENVY24HT_E2PROM_GPIODIR    0x0a
1504886ec58SHasso Tepper 
1514886ec58SHasso Tepper /* ENVY24 mixer channel defines */
1524886ec58SHasso Tepper /*
1534886ec58SHasso Tepper   ENVY24 mixer has original line matrix. So, general mixer command is not
1544886ec58SHasso Tepper   able to use for this. If system has consumer AC'97 output, AC'97 line is
1554886ec58SHasso Tepper   used as master mixer, and it is able to control.
1564886ec58SHasso Tepper */
1574886ec58SHasso Tepper #define ENVY24HT_CHAN_NUM  11 /* Play * 5 + Record * 5 + Mix * 1 */
1584886ec58SHasso Tepper 
1594886ec58SHasso Tepper #define ENVY24HT_CHAN_PLAY_DAC1  0
1604886ec58SHasso Tepper #define ENVY24HT_CHAN_PLAY_DAC2  1
1614886ec58SHasso Tepper #define ENVY24HT_CHAN_PLAY_DAC3  2
1624886ec58SHasso Tepper #define ENVY24HT_CHAN_PLAY_DAC4  3
1634886ec58SHasso Tepper #define ENVY24HT_CHAN_PLAY_SPDIF 4
1644886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_ADC1   5
1654886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_ADC2   6
1664886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_ADC3   7
1674886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_ADC4   8
1684886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_SPDIF  9
1694886ec58SHasso Tepper #define ENVY24HT_CHAN_REC_MIX   10
1704886ec58SHasso Tepper 
1714886ec58SHasso Tepper #define ENVY24HT_MIX_MASK     0x3fd
1724886ec58SHasso Tepper #define ENVY24HT_MIX_REC_MASK 0x3e0
1734886ec58SHasso Tepper 
1744886ec58SHasso Tepper /* volume value constants */
1754886ec58SHasso Tepper #define ENVY24HT_VOL_MAX    0 /* 0db(negate) */
1764886ec58SHasso Tepper #define ENVY24HT_VOL_MIN   96 /* -144db(negate) */
1774886ec58SHasso Tepper #define ENVY24HT_VOL_MUTE 127 /* mute */
1784886ec58SHasso Tepper 
1794886ec58SHasso Tepper #define BUS_SPACE_MAXSIZE_ENVY24 0x3fffc /* 64k x 4byte(1dword) */
1804886ec58SHasso Tepper 
1814886ec58SHasso Tepper #define ENVY24HT_CCS_GPIO_HDATA 0x1E
1824886ec58SHasso Tepper #define ENVY24HT_CCS_GPIO_LDATA 0x14
1834886ec58SHasso Tepper #define ENVY24HT_CCS_GPIO_LMASK 0x16
1844886ec58SHasso Tepper #define ENVY24HT_CCS_GPIO_HMASK 0x1F
1854886ec58SHasso Tepper #define ENVY24HT_CCS_GPIO_CTLDIR 0x18
1864886ec58SHasso Tepper 
187