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