1*2a1ad637SFrançois Tigeot /*- 24886ec58SHasso Tepper * Copyright (c) 2001 Katsurajima Naoto <raven@katsurajima.seya.yokohama.jp> 34886ec58SHasso Tepper * All rights reserved. 44886ec58SHasso Tepper * 54886ec58SHasso Tepper * Redistribution and use in source and binary forms, with or without 64886ec58SHasso Tepper * modification, are permitted provided that the following conditions 74886ec58SHasso Tepper * are met: 84886ec58SHasso Tepper * 1. Redistributions of source code must retain the above copyright 94886ec58SHasso Tepper * notice, this list of conditions and the following disclaimer. 104886ec58SHasso Tepper * 2. Redistributions in binary form must reproduce the above copyright 114886ec58SHasso Tepper * notice, this list of conditions and the following disclaimer in the 124886ec58SHasso Tepper * documentation and/or other materials provided with the distribution. 134886ec58SHasso Tepper * 144886ec58SHasso Tepper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 154886ec58SHasso Tepper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 164886ec58SHasso Tepper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 174886ec58SHasso Tepper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 184886ec58SHasso Tepper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 194886ec58SHasso Tepper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 204886ec58SHasso Tepper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 214886ec58SHasso Tepper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHERIN CONTRACT, STRICT 224886ec58SHasso Tepper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 234886ec58SHasso Tepper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF 244886ec58SHasso Tepper * SUCH DAMAGE. 254886ec58SHasso Tepper * 26*2a1ad637SFrançois Tigeot * $FreeBSD: head/sys/dev/sound/pci/envy24.h 205859 2010-03-29 20:27:17Z joel $ 274886ec58SHasso Tepper */ 284886ec58SHasso Tepper 294886ec58SHasso Tepper 304886ec58SHasso Tepper /* -------------------------------------------------------------------- */ 314886ec58SHasso Tepper 324886ec58SHasso Tepper /* PCI device ID */ 334886ec58SHasso Tepper #define PCIV_ENVY24 0x1412 344886ec58SHasso Tepper #define PCID_ENVY24 0x1712 354886ec58SHasso Tepper 364886ec58SHasso Tepper /* PCI Registers */ 374886ec58SHasso Tepper 384886ec58SHasso Tepper #define PCIR_CCS 0x10 /* Controller I/O Base Address */ 394886ec58SHasso Tepper #define PCIR_DDMA 0x14 /* DDMA I/O Base Address */ 404886ec58SHasso Tepper #define PCIR_DS 0x18 /* DMA Path Registers I/O Base Address */ 414886ec58SHasso Tepper #define PCIR_MT 0x1c /* Professional Multi-Track I/O Base Address */ 424886ec58SHasso Tepper 434886ec58SHasso Tepper #define PCIR_LAC 0x40 /* Legacy Audio Control */ 444886ec58SHasso Tepper #define PCIM_LAC_DISABLE 0x8000 /* Legacy Audio Hardware disabled */ 454886ec58SHasso Tepper #define PCIM_LAC_SBDMA0 0x0000 /* SB DMA Channel Select: 0 */ 464886ec58SHasso Tepper #define PCIM_LAC_SBDMA1 0x0040 /* SB DMA Channel Select: 1 */ 474886ec58SHasso Tepper #define PCIM_LAC_SBDMA3 0x00c0 /* SB DMA Channel Select: 3 */ 484886ec58SHasso Tepper #define PCIM_LAC_IOADDR10 0x0020 /* I/O Address Alias Control */ 494886ec58SHasso Tepper #define PCIM_LAC_MPU401 0x0008 /* MPU-401 I/O enable */ 504886ec58SHasso Tepper #define PCIM_LAC_GAME 0x0004 /* Game Port enable (200h) */ 514886ec58SHasso Tepper #define PCIM_LAC_FM 0x0002 /* FM I/O enable (AdLib 388h base) */ 524886ec58SHasso Tepper #define PCIM_LAC_SB 0x0001 /* SB I/O enable */ 534886ec58SHasso Tepper 544886ec58SHasso Tepper #define PCIR_LCC 0x42 /* Legacy Configuration Control */ 554886ec58SHasso Tepper #define PCIM_LCC_VINT 0xff00 /* Interrupt vector to be snooped */ 564886ec58SHasso Tepper #define PCIM_LCC_SVIDRW 0x0080 /* SVID read/write enable */ 574886ec58SHasso Tepper #define PCIM_LCC_SNPSB 0x0040 /* snoop SB 22C/24Ch I/O write cycle */ 584886ec58SHasso Tepper #define PCIM_LCC_SNPPIC 0x0020 /* snoop PIC I/O R/W cycle */ 594886ec58SHasso Tepper #define PCIM_LCC_SNPPCI 0x0010 /* snoop PCI bus interrupt acknowledge cycle */ 604886ec58SHasso Tepper #define PCIM_LCC_SBBASE 0x0008 /* SB base 240h(1)/220h(0) */ 614886ec58SHasso Tepper #define PCIM_LCC_MPUBASE 0x0006 /* MPU-401 base 300h-330h */ 624886ec58SHasso Tepper #define PCIM_LCC_LDMA 0x0001 /* Legacy DMA enable */ 634886ec58SHasso Tepper 644886ec58SHasso Tepper #define PCIR_SCFG 0x60 /* System Configuration Register */ 654886ec58SHasso Tepper #define PCIM_SCFG_XIN2 0xc0 /* XIN2 Clock Source Configuration */ 664886ec58SHasso Tepper /* 00: 22.5792MHz(44.1kHz*512) */ 674886ec58SHasso Tepper /* 01: 16.9344MHz(44.1kHz*384) */ 684886ec58SHasso Tepper /* 10: from external clock synthesizer chip */ 694886ec58SHasso Tepper #define PCIM_SCFG_MPU 0x20 /* 1(0)/2(1) MPU-401 UART(s) */ 704886ec58SHasso Tepper #define PCIM_SCFG_AC97 0x10 /* 0: AC'97 codec exist */ 714886ec58SHasso Tepper /* 1: AC'97 codec not exist */ 724886ec58SHasso Tepper #define PCIM_SCFG_ADC 0x0c /* 1-4 stereo ADC connected */ 734886ec58SHasso Tepper #define PCIM_SCFG_DAC 0x03 /* 1-4 stereo DAC connected */ 744886ec58SHasso Tepper 754886ec58SHasso Tepper #define PCIR_ACL 0x61 /* AC-Link Configuration Register */ 764886ec58SHasso Tepper #define PCIM_ACL_MTC 0x80 /* Multi-track converter type: 0:AC'97 1:I2S */ 774886ec58SHasso Tepper #define PCIM_ACL_OMODE 0x02 /* AC 97 codec SDATA_OUT 0:split 1:packed */ 784886ec58SHasso Tepper #define PCIM_ACL_IMODE 0x01 /* AC 97 codec SDATA_IN 0:split 1:packed */ 794886ec58SHasso Tepper 804886ec58SHasso Tepper #define PCIR_I2S 0x62 /* I2S Converters Features Register */ 814886ec58SHasso Tepper #define PCIM_I2S_VOL 0x80 /* I2S codec Volume and mute */ 824886ec58SHasso Tepper #define PCIM_I2S_96KHZ 0x40 /* I2S converter 96kHz sampling rate support */ 834886ec58SHasso Tepper #define PCIM_I2S_RES 0x30 /* Converter resolution */ 844886ec58SHasso Tepper #define PCIM_I2S_16BIT 0x00 /* 16bit */ 854886ec58SHasso Tepper #define PCIM_I2S_18BIT 0x10 /* 18bit */ 864886ec58SHasso Tepper #define PCIM_I2S_20BIT 0x20 /* 20bit */ 874886ec58SHasso Tepper #define PCIM_I2S_24BIT 0x30 /* 24bit */ 884886ec58SHasso Tepper #define PCIM_I2S_ID 0x0f /* Other I2S IDs */ 894886ec58SHasso Tepper 904886ec58SHasso Tepper #define PCIR_SPDIF 0x63 /* S/PDIF Configuration Register */ 914886ec58SHasso Tepper #define PCIM_SPDIF_ID 0xfc /* S/PDIF chip ID */ 924886ec58SHasso Tepper #define PCIM_SPDIF_IN 0x02 /* S/PDIF Stereo In is present */ 934886ec58SHasso Tepper #define PCIM_SPDIF_OUT 0x01 /* S/PDIF Stereo Out is present */ 944886ec58SHasso Tepper 954886ec58SHasso Tepper #define PCIR_POWER_STAT 0x84 /* Power Management Control and Status */ 964886ec58SHasso Tepper 974886ec58SHasso Tepper /* Controller Registers */ 984886ec58SHasso Tepper 994886ec58SHasso Tepper #define ENVY24_CCS_CTL 0x00 /* Control/Status Register */ 1004886ec58SHasso Tepper #define ENVY24_CCS_CTL_RESET 0x80 /* Entire Chip soft reset */ 1014886ec58SHasso Tepper #define ENVY24_CCS_CTL_DMAINT 0x40 /* DS DMA Channel-C interrupt */ 1024886ec58SHasso Tepper #define ENVY24_CCS_CTL_DOSVOL 0x10 /* set the DOS WT volume control */ 1034886ec58SHasso Tepper #define ENVY24_CCS_CTL_EDGE 0x08 /* SERR# edge (only one PCI clock width) */ 1044886ec58SHasso Tepper #define ENVY24_CCS_CTL_SBINT 0x02 /* SERR# assertion for SB interrupt */ 1054886ec58SHasso Tepper #define ENVY24_CCS_CTL_NATIVE 0x01 /* Mode select: 0:SB mode 1:native mode */ 1064886ec58SHasso Tepper 1074886ec58SHasso Tepper #define ENVY24_CCS_IMASK 0x01 /* Interrupt Mask Register */ 1084886ec58SHasso Tepper #define ENVY24_CCS_IMASK_PMIDI 0x80 /* Primary MIDI */ 1094886ec58SHasso Tepper #define ENVY24_CCS_IMASK_TIMER 0x40 /* Timer */ 1104886ec58SHasso Tepper #define ENVY24_CCS_IMASK_SMIDI 0x20 /* Secondary MIDI */ 1114886ec58SHasso Tepper #define ENVY24_CCS_IMASK_PMT 0x10 /* Professional Multi-track */ 1124886ec58SHasso Tepper #define ENVY24_CCS_IMASK_FM 0x08 /* FM/MIDI trapping */ 1134886ec58SHasso Tepper #define ENVY24_CCS_IMASK_PDMA 0x04 /* Playback DS DMA */ 1144886ec58SHasso Tepper #define ENVY24_CCS_IMASK_RDMA 0x02 /* Consumer record DMA */ 1154886ec58SHasso Tepper #define ENVY24_CCS_IMASK_SB 0x01 /* Consumer/SB mode playback */ 1164886ec58SHasso Tepper 1174886ec58SHasso Tepper #define ENVY24_CCS_ISTAT 0x02 /* Interrupt Status Register */ 1184886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_PMIDI 0x80 /* Primary MIDI */ 1194886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_TIMER 0x40 /* Timer */ 1204886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_SMIDI 0x20 /* Secondary MIDI */ 1214886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_PMT 0x10 /* Professional Multi-track */ 1224886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_FM 0x08 /* FM/MIDI trapping */ 1234886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_PDMA 0x04 /* Playback DS DMA */ 1244886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_RDMA 0x02 /* Consumer record DMA */ 1254886ec58SHasso Tepper #define ENVY24_CCS_ISTAT_SB 0x01 /* Consumer/SB mode playback */ 1264886ec58SHasso Tepper 1274886ec58SHasso Tepper #define ENVY24_CCS_INDEX 0x03 /* Envy24 Index Register */ 1284886ec58SHasso Tepper #define ENVY24_CCS_DATA 0x04 /* Envy24 Data Register */ 1294886ec58SHasso Tepper 1304886ec58SHasso Tepper #define ENVY24_CCS_NMI1 0x05 /* NMI Status Register 1 */ 1314886ec58SHasso Tepper #define ENVY24_CCS_NMI1_PCI 0x80 /* PCI I/O read/write cycle */ 1324886ec58SHasso Tepper #define ENVY24_CCS_NMI1_SB 0x40 /* SB 22C/24C write */ 1334886ec58SHasso Tepper #define ENVY24_CCS_NMI1_SBDMA 0x10 /* SB interrupt (SB DMA/SB F2 command) */ 1344886ec58SHasso Tepper #define ENVY24_CCS_NMI1_DSDMA 0x08 /* DS channel C DMA interrupt */ 1354886ec58SHasso Tepper #define ENVY24_CCS_NMI1_MIDI 0x04 /* MIDI 330h or [PCI_10]h+Ch write */ 1364886ec58SHasso Tepper #define ENVY24_CCS_NMI1_FM 0x01 /* FM data register write */ 1374886ec58SHasso Tepper 1384886ec58SHasso Tepper #define ENVY24_CCS_NMIDAT 0x06 /* NMI Data Register */ 1394886ec58SHasso Tepper #define ENVY24_CCS_NMIIDX 0x07 /* NMI Index Register */ 1404886ec58SHasso Tepper #define ENVY24_CCS_AC97IDX 0x08 /* Consumer AC'97 Index Register */ 1414886ec58SHasso Tepper 1424886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD 0x09 /* Consumer AC'97 Command/Status Register */ 1434886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_COLD 0x80 /* Cold reset */ 1444886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_WARM 0x40 /* Warm reset */ 1454886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_WRCODEC 0x20 /* Write to AC'97 codec registers */ 1464886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_RDCODEC 0x10 /* Read from AC'97 codec registers */ 1474886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_READY 0x08 /* AC'97 codec ready status bit */ 1484886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_PVSR 0x02 /* VSR for Playback */ 1494886ec58SHasso Tepper #define ENVY24_CCS_AC97CMD_RVSR 0x01 /* VSR for Record */ 1504886ec58SHasso Tepper 1514886ec58SHasso Tepper #define ENVY24_CCS_AC97DAT 0x0a /* Consumer AC'97 Data Port Register */ 1524886ec58SHasso Tepper #define ENVY24_CCS_PMIDIDAT 0x0c /* Primary MIDI UART Data Register */ 1534886ec58SHasso Tepper #define ENVY24_CCS_PMIDICMD 0x0d /* Primary MIDI UART Command/Status Register */ 1544886ec58SHasso Tepper 1554886ec58SHasso Tepper #define ENVY24_CCS_NMI2 0x0e /* NMI Status Register 2 */ 1564886ec58SHasso Tepper #define ENVY24_CCS_NMI2_FMBANK 0x30 /* FM bank indicator */ 1574886ec58SHasso Tepper #define ENVY24_CCS_NMI2_FM0 0x10 /* FM bank 0 (388h/220h/228h) */ 1584886ec58SHasso Tepper #define ENVY24_CCS_NMI2_FM1 0x20 /* FM bank 1 (38ah/222h) */ 1594886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PICIO 0x0f /* PIC I/O cycle */ 1604886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PIC20W 0x01 /* 20h write */ 1614886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PICA0W 0x02 /* a0h write */ 1624886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PIC21W 0x05 /* 21h write */ 1634886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PICA1W 0x06 /* a1h write */ 1644886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PIC20R 0x09 /* 20h read */ 1654886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PICA0R 0x0a /* a0h read */ 1664886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PIC21R 0x0d /* 21h read */ 1674886ec58SHasso Tepper #define ENVY24_CCS_NMI2_PICA1R 0x0e /* a1h read */ 1684886ec58SHasso Tepper 1694886ec58SHasso Tepper #define ENVY24_CCS_JOY 0x0f /* Game port register */ 1704886ec58SHasso Tepper 1714886ec58SHasso Tepper #define ENVY24_CCS_I2CDEV 0x10 /* I2C Port Device Address Register */ 1724886ec58SHasso Tepper #define ENVY24_CCS_I2CDEV_ADDR 0xfe /* I2C device address */ 1734886ec58SHasso Tepper #define ENVY24_CCS_I2CDEV_ROM 0xa0 /* reserved for the external I2C E2PROM */ 1744886ec58SHasso Tepper #define ENVY24_CCS_I2CDEV_WR 0x01 /* write */ 1754886ec58SHasso Tepper #define ENVY24_CCS_I2CDEV_RD 0x00 /* read */ 1764886ec58SHasso Tepper 1774886ec58SHasso Tepper #define ENVY24_CCS_I2CADDR 0x11 /* I2C Port Byte Address Register */ 1784886ec58SHasso Tepper #define ENVY24_CCS_I2CDATA 0x12 /* I2C Port Read/Write Data Register */ 1794886ec58SHasso Tepper 1804886ec58SHasso Tepper #define ENVY24_CCS_I2CSTAT 0x13 /* I2C Port Control and Status Register */ 1814886ec58SHasso Tepper #define ENVY24_CCS_I2CSTAT_ROM 0x80 /* external E2PROM exists */ 1824886ec58SHasso Tepper #define ENVY24_CCS_I2CSTAT_BSY 0x01 /* I2C port read/write status busy */ 1834886ec58SHasso Tepper 1844886ec58SHasso Tepper #define ENVY24_CCS_CDMABASE 0x14 /* Consumer Record DMA Current/Base Address Register */ 1854886ec58SHasso Tepper #define ENVY24_CCS_CDMACNT 0x18 /* Consumer Record DMA Current/Base Count Register */ 1864886ec58SHasso Tepper #define ENVY24_CCS_SERR 0x1b /* PCI Configuration SERR# Shadow Register */ 1874886ec58SHasso Tepper #define ENVY24_CCS_SMIDIDAT 0x1c /* Secondary MIDI UART Data Register */ 1884886ec58SHasso Tepper #define ENVY24_CCS_SMIDICMD 0x1d /* Secondary MIDI UART Command/Status Register */ 1894886ec58SHasso Tepper 1904886ec58SHasso Tepper #define ENVY24_CCS_TIMER 0x1e /* Timer Register */ 1914886ec58SHasso Tepper #define ENVY24_CCS_TIMER_EN 0x8000 /* Timer count enable */ 1924886ec58SHasso Tepper #define ENVY24_CCS_TIMER_MASK 0x7fff /* Timer counter mask */ 1934886ec58SHasso Tepper 1944886ec58SHasso Tepper /* Controller Indexed Registers */ 1954886ec58SHasso Tepper 1964886ec58SHasso Tepper #define ENVY24_CCI_PTCHIGH 0x00 /* Playback Terminal Count Register (High Byte) */ 1974886ec58SHasso Tepper #define ENVY24_CCI_PTCLOW 0x01 /* Playback Terminal Count Register (Low Byte) */ 1984886ec58SHasso Tepper 1994886ec58SHasso Tepper #define ENVY24_CCI_PCTL 0x02 /* Playback Control Register */ 2004886ec58SHasso Tepper #define ENVY24_CCI_PCTL_TURBO 0x80 /* 4x up sampling in the host by software */ 2014886ec58SHasso Tepper #define ENVY24_CCI_PCTL_U8 0x10 /* 8 bits unsigned */ 2024886ec58SHasso Tepper #define ENVY24_CCI_PCTL_S16 0x00 /* 16 bits signed */ 2034886ec58SHasso Tepper #define ENVY24_CCI_PCTL_STEREO 0x08 /* stereo */ 2044886ec58SHasso Tepper #define ENVY24_CCI_PCTL_MONO 0x00 /* mono */ 2054886ec58SHasso Tepper #define ENVY24_CCI_PCTL_FLUSH 0x04 /* FIFO flush (sticky bit. Requires toggling) */ 2064886ec58SHasso Tepper #define ENVY24_CCI_PCTL_PAUSE 0x02 /* Pause */ 2074886ec58SHasso Tepper #define ENVY24_CCI_PCTL_ENABLE 0x01 /* Playback enable */ 2084886ec58SHasso Tepper 2094886ec58SHasso Tepper #define ENVY24_CCI_PLVOL 0x03 /* Playback Left Volume/Pan Register */ 2104886ec58SHasso Tepper #define ENVY24_CCI_PRVOL 0x04 /* Playback Right Volume/Pan Register */ 2114886ec58SHasso Tepper #define ENVY24_CCI_VOL_MASK 0x3f /* Volume value mask */ 2124886ec58SHasso Tepper 2134886ec58SHasso Tepper #define ENVY24_CCI_SOFTVOL 0x05 /* Soft Volume/Mute Control Register */ 2144886ec58SHasso Tepper #define ENVY24_CCI_PSRLOW 0x06 /* Playback Sampling Rate Register (Low Byte) */ 2154886ec58SHasso Tepper #define ENVY24_CCI_PSRMID 0x07 /* Playback Sampling Rate Register (Middle Byte) */ 2164886ec58SHasso Tepper #define ENVY24_CCI_PSRHIGH 0x08 /* Playback Sampling Rate Register (High Byte) */ 2174886ec58SHasso Tepper #define ENVY24_CCI_RTCHIGH 0x10 /* Record Terminal Count Register (High Byte) */ 2184886ec58SHasso Tepper #define ENVY24_CCI_RTCLOW 0x11 /* Record Terminal Count Register (Low Byte) */ 2194886ec58SHasso Tepper 2204886ec58SHasso Tepper #define ENVY24_CCI_RCTL 0x12 /* Record Control Register */ 2214886ec58SHasso Tepper #define ENVY24_CCI_RCTL_DRTN 0x80 /* Digital return enable */ 2224886ec58SHasso Tepper #define ENVY24_CCI_RCTL_U8 0x04 /* 8 bits unsigned */ 2234886ec58SHasso Tepper #define ENVY24_CCI_RCTL_S16 0x00 /* 16 bits signed */ 2244886ec58SHasso Tepper #define ENVY24_CCI_RCTL_STEREO 0x00 /* stereo */ 2254886ec58SHasso Tepper #define ENVY24_CCI_RCTL_MONO 0x02 /* mono */ 2264886ec58SHasso Tepper #define ENVY24_CCI_RCTL_ENABLE 0x01 /* Record enable */ 2274886ec58SHasso Tepper 2284886ec58SHasso Tepper #define ENVY24_CCI_GPIODAT 0x20 /* GPIO Data Register */ 2294886ec58SHasso Tepper #define ENVY24_CCI_GPIOMASK 0x21 /* GPIO Write Mask Register */ 2304886ec58SHasso Tepper 2314886ec58SHasso Tepper #define ENVY24_CCI_GPIOCTL 0x22 /* GPIO Direction Control Register */ 2324886ec58SHasso Tepper #define ENVY24_CCI_GPIO_OUT 1 /* output */ 2334886ec58SHasso Tepper #define ENVY24_CCI_GPIO_IN 0 /* input */ 2344886ec58SHasso Tepper 2354886ec58SHasso Tepper #define ENVY24_CCI_CPDWN 0x30 /* Consumer Section Power Down Register */ 2364886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_XTAL 0x80 /* Crystal clock generation power down for XTAL_1 */ 2374886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_GAME 0x40 /* Game port analog power down */ 2384886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_I2C 0x10 /* I2C port clock */ 2394886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_MIDI 0x08 /* MIDI clock */ 2404886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_AC97 0x04 /* AC'97 clock */ 2414886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_DS 0x02 /* DS Block clock */ 2424886ec58SHasso Tepper #define ENVY24_CCI_CPDWN_PCI 0x01 /* PCI clock for SB, DMA controller */ 2434886ec58SHasso Tepper 2444886ec58SHasso Tepper #define ENVY24_CCI_MTPDWN 0x31 /* Multi-Track Section Power Down Register */ 2454886ec58SHasso Tepper #define ENVY24_CCI_MTPDWN_XTAL 0x80 /* Crystal clock generation power down for XTAL_2 */ 2464886ec58SHasso Tepper #define ENVY24_CCI_MTPDWN_SPDIF 0x04 /* S/PDIF clock */ 2474886ec58SHasso Tepper #define ENVY24_CCI_MTPDWN_MIX 0x02 /* Professional digital mixer clock */ 2484886ec58SHasso Tepper #define ENVY24_CCI_MTPDWN_I2S 0x01 /* Multi-track I2S serial interface clock */ 2494886ec58SHasso Tepper 2504886ec58SHasso Tepper /* DDMA Registers */ 2514886ec58SHasso Tepper 2524886ec58SHasso Tepper #define ENVY24_DDMA_ADDR0 0x00 /* DMA Base and Current Address bit 0-7 */ 2534886ec58SHasso Tepper #define ENVY24_DDMA_ADDR8 0x01 /* DMA Base and Current Address bit 8-15 */ 2544886ec58SHasso Tepper #define ENVY24_DDMA_ADDR16 0x02 /* DMA Base and Current Address bit 16-23 */ 2554886ec58SHasso Tepper #define ENVY24_DDMA_ADDR24 0x03 /* DMA Base and Current Address bit 24-31 */ 2564886ec58SHasso Tepper #define ENVY24_DDMA_CNT0 0x04 /* DMA Base and Current Count 0-7 */ 2574886ec58SHasso Tepper #define ENVY24_DDMA_CNT8 0x05 /* DMA Base and Current Count 8-15 */ 2584886ec58SHasso Tepper #define ENVY24_DDMA_CNT16 0x06 /* (not supported) */ 2594886ec58SHasso Tepper #define ENVY24_DDMA_CMD 0x08 /* Status and Command */ 2604886ec58SHasso Tepper #define ENVY24_DDMA_MODE 0x0b /* Mode */ 2614886ec58SHasso Tepper #define ENVY24_DDMA_RESET 0x0c /* Master reset */ 2624886ec58SHasso Tepper #define ENVY24_DDMA_CHAN 0x0f /* Channel Mask */ 2634886ec58SHasso Tepper 2644886ec58SHasso Tepper /* Consumer Section DMA Channel Registers */ 2654886ec58SHasso Tepper 2664886ec58SHasso Tepper #define ENVY24_CS_INTMASK 0x00 /* DirectSound DMA Interrupt Mask Register */ 2674886ec58SHasso Tepper #define ENVY24_CS_INTSTAT 0x02 /* DirectSound DMA Interrupt Status Register */ 2684886ec58SHasso Tepper #define ENVY24_CS_CHDAT 0x04 /* Channel Data register */ 2694886ec58SHasso Tepper 2704886ec58SHasso Tepper #define ENVY24_CS_CHIDX 0x08 /* Channel Index Register */ 2714886ec58SHasso Tepper #define ENVY24_CS_CHIDX_NUM 0xf0 /* Channel number */ 2724886ec58SHasso Tepper #define ENVY24_CS_CHIDX_ADDR0 0x00 /* Buffer_0 DMA base address */ 2734886ec58SHasso Tepper #define ENVY24_CS_CHIDX_CNT0 0x01 /* Buffer_0 DMA base count */ 2744886ec58SHasso Tepper #define ENVY24_CS_CHIDX_ADDR1 0x02 /* Buffer_1 DMA base address */ 2754886ec58SHasso Tepper #define ENVY24_CS_CHIDX_CNT1 0x03 /* Buffer_1 DMA base count */ 2764886ec58SHasso Tepper #define ENVY24_CS_CHIDX_CTL 0x04 /* Channel Control and Status register */ 2774886ec58SHasso Tepper #define ENVY24_CS_CHIDX_RATE 0x05 /* Channel Sampling Rate */ 2784886ec58SHasso Tepper #define ENVY24_CS_CHIDX_VOL 0x06 /* Channel left and right volume/pan control */ 2794886ec58SHasso Tepper /* Channel Control and Status Register at Index 4h */ 2804886ec58SHasso Tepper #define ENVY24_CS_CTL_BUF 0x80 /* indicating that the current active buffer */ 2814886ec58SHasso Tepper #define ENVY24_CS_CTL_AUTO1 0x40 /* Buffer_1 auto init. enable */ 2824886ec58SHasso Tepper #define ENVY24_CS_CTL_AUTO0 0x20 /* Buffer_0 auto init. enable */ 2834886ec58SHasso Tepper #define ENVY24_CS_CTL_FLUSH 0x10 /* Flush FIFO */ 2844886ec58SHasso Tepper #define ENVY24_CS_CTL_STEREO 0x08 /* stereo(or mono) */ 2854886ec58SHasso Tepper #define ENVY24_CS_CTL_U8 0x04 /* 8-bit unsigned(or 16-bit signed) */ 2864886ec58SHasso Tepper #define ENVY24_CS_CTL_PAUSE 0x02 /* DMA request 1:pause */ 2874886ec58SHasso Tepper #define ENVY24_CS_CTL_START 0x01 /* DMA request 1: start, 0:stop */ 2884886ec58SHasso Tepper /* Consumer mode Left/Right Volume Register at Index 06h */ 2894886ec58SHasso Tepper #define ENVY24_CS_VOL_RIGHT 0x3f00 2904886ec58SHasso Tepper #define ENVY24_CS_VOL_LEFT 0x003f 2914886ec58SHasso Tepper 2924886ec58SHasso Tepper /* Professional Multi-Track Control Registers */ 2934886ec58SHasso Tepper 2944886ec58SHasso Tepper #define ENVY24_MT_INT 0x00 /* DMA Interrupt Mask and Status Register */ 2954886ec58SHasso Tepper #define ENVY24_MT_INT_RMASK 0x80 /* Multi-track record interrupt mask */ 2964886ec58SHasso Tepper #define ENVY24_MT_INT_PMASK 0x40 /* Multi-track playback interrupt mask */ 2974886ec58SHasso Tepper #define ENVY24_MT_INT_RSTAT 0x02 /* Multi-track record interrupt status */ 2984886ec58SHasso Tepper #define ENVY24_MT_INT_PSTAT 0x01 /* Multi-track playback interrupt status */ 2994886ec58SHasso Tepper 3004886ec58SHasso Tepper #define ENVY24_MT_RATE 0x01 /* Sampling Rate Select Register */ 3014886ec58SHasso Tepper #define ENVY24_MT_RATE_SPDIF 0x10 /* S/PDIF input clock as the master */ 3024886ec58SHasso Tepper #define ENVY24_MT_RATE_48000 0x00 3034886ec58SHasso Tepper #define ENVY24_MT_RATE_24000 0x01 3044886ec58SHasso Tepper #define ENVY24_MT_RATE_12000 0x02 3054886ec58SHasso Tepper #define ENVY24_MT_RATE_9600 0x03 3064886ec58SHasso Tepper #define ENVY24_MT_RATE_32000 0x04 3074886ec58SHasso Tepper #define ENVY24_MT_RATE_16000 0x05 3084886ec58SHasso Tepper #define ENVY24_MT_RATE_8000 0x06 3094886ec58SHasso Tepper #define ENVY24_MT_RATE_96000 0x07 3104886ec58SHasso Tepper #define ENVY24_MT_RATE_64000 0x0f 3114886ec58SHasso Tepper #define ENVY24_MT_RATE_44100 0x08 3124886ec58SHasso Tepper #define ENVY24_MT_RATE_22050 0x09 3134886ec58SHasso Tepper #define ENVY24_MT_RATE_11025 0x0a 3144886ec58SHasso Tepper #define ENVY24_MT_RATE_88200 0x0b 3154886ec58SHasso Tepper #define ENVY24_MT_RATE_MASK 0x0f 3164886ec58SHasso Tepper 3174886ec58SHasso Tepper #define ENVY24_MT_I2S 0x02 /* I2S Data Format Register */ 3184886ec58SHasso Tepper #define ENVY24_MT_I2S_MLR128 0x08 /* MCLK/LRCLK ratio 128x(or 256x) */ 3194886ec58SHasso Tepper #define ENVY24_MT_I2S_SLR48 0x04 /* SCLK/LRCLK ratio 48bpf(or 64bpf) */ 3204886ec58SHasso Tepper #define ENVY24_MT_I2S_FORM 0x00 /* I2S data format */ 3214886ec58SHasso Tepper 3224886ec58SHasso Tepper #define ENVY24_MT_AC97IDX 0x04 /* Index Register for AC'97 Codecs */ 3234886ec58SHasso Tepper 3244886ec58SHasso Tepper #define ENVY24_MT_AC97CMD 0x05 /* Command and Status Register for AC'97 Codecs */ 3254886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_CLD 0x80 /* Cold reset */ 3264886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_WRM 0x40 /* Warm reset */ 3274886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_WR 0x20 /* write to AC'97 codec register */ 3284886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_RD 0x10 /* read AC'97 CODEC register */ 3294886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_RDY 0x08 /* AC'97 codec ready status bit */ 3304886ec58SHasso Tepper #define ENVY24_MT_AC97CMD_ID 0x03 /* ID(0-3) for external AC 97 registers */ 3314886ec58SHasso Tepper 3324886ec58SHasso Tepper #define ENVY24_MT_AC97DLO 0x06 /* AC'97 codec register data low byte */ 3334886ec58SHasso Tepper #define ENVY24_MT_AC97DHI 0x07 /* AC'97 codec register data high byte */ 3344886ec58SHasso Tepper #define ENVY24_MT_PADDR 0x10 /* Playback DMA Current/Base Address Register */ 3354886ec58SHasso Tepper #define ENVY24_MT_PCNT 0x14 /* Playback DMA Current/Base Count Register */ 3364886ec58SHasso Tepper #define ENVY24_MT_PTERM 0x16 /* Playback Current/Base Terminal Count Register */ 3374886ec58SHasso Tepper #define ENVY24_MT_PCTL 0x18 /* Playback and Record Control Register */ 3384886ec58SHasso Tepper #define ENVY24_MT_PCTL_RSTART 0x04 /* 1: Record start; 0: Record stop */ 3394886ec58SHasso Tepper #define ENVY24_MT_PCTL_PAUSE 0x02 /* 1: Pause; 0: Resume */ 3404886ec58SHasso Tepper #define ENVY24_MT_PCTL_PSTART 0x01 /* 1: Playback start; 0: Playback stop */ 3414886ec58SHasso Tepper 3424886ec58SHasso Tepper #define ENVY24_MT_RADDR 0x20 /* Record DMA Current/Base Address Register */ 3434886ec58SHasso Tepper #define ENVY24_MT_RCNT 0x24 /* Record DMA Current/Base Count Register */ 3444886ec58SHasso Tepper #define ENVY24_MT_RTERM 0x26 /* Record Current/Base Terminal Count Register */ 3454886ec58SHasso Tepper #define ENVY24_MT_RCTL 0x28 /* Record Control Register */ 3464886ec58SHasso Tepper #define ENVY24_MT_RCTL_RSTART 0x01 /* 1: Record start; 0: Record stop */ 3474886ec58SHasso Tepper 3484886ec58SHasso Tepper #define ENVY24_MT_PSDOUT 0x30 /* Routing Control Register for Data to PSDOUT[0:3] */ 3494886ec58SHasso Tepper #define ENVY24_MT_SPDOUT 0x32 /* Routing Control Register for SPDOUT */ 3504886ec58SHasso Tepper #define ENVY24_MT_RECORD 0x34 /* Captured (Recorded) data Routing Selection Register */ 3514886ec58SHasso Tepper 3524886ec58SHasso Tepper #define BUS_SPACE_MAXADDR_ENVY24 0x0fffffff /* Address space beyond 256MB is not supported */ 3534886ec58SHasso Tepper #define BUS_SPACE_MAXSIZE_ENVY24 0x3fffc /* 64k x 4byte(1dword) */ 3544886ec58SHasso Tepper 3554886ec58SHasso Tepper #define ENVY24_MT_VOLUME 0x38 /* Left/Right Volume Control Data Register */ 3564886ec58SHasso Tepper #define ENVY24_MT_VOLUME_L 0x007f /* Left Volume Mask */ 3574886ec58SHasso Tepper #define ENVY24_MT_VOLUME_R 0x7f00 /* Right Volume Mask */ 3584886ec58SHasso Tepper 3594886ec58SHasso Tepper #define ENVY24_MT_VOLIDX 0x3a /* Volume Control Stream Index Register */ 3604886ec58SHasso Tepper #define ENVY24_MT_VOLRATE 0x3b /* Volume Control Rate Register */ 3614886ec58SHasso Tepper #define ENVY24_MT_MONAC97 0x3c /* Digital Mixer Monitor Routing Control Register */ 3624886ec58SHasso Tepper #define ENVY24_MT_PEAKIDX 0x3e /* Peak Meter Index Register */ 3634886ec58SHasso Tepper #define ENVY24_MT_PEAKDAT 0x3f /* Peak Meter Data Register */ 3644886ec58SHasso Tepper 3654886ec58SHasso Tepper /* -------------------------------------------------------------------- */ 3664886ec58SHasso Tepper 3674886ec58SHasso Tepper /* ENVY24 mixer channel defines */ 3684886ec58SHasso Tepper /* 3694886ec58SHasso Tepper ENVY24 mixer has original line matrix. So, general mixer command is not 3704886ec58SHasso Tepper able to use for this. If system has consumer AC'97 output, AC'97 line is 3714886ec58SHasso Tepper used as master mixer, and it is able to control. 3724886ec58SHasso Tepper */ 3734886ec58SHasso Tepper #define ENVY24_CHAN_NUM 11 /* Play * 5 + Record * 5 + Mix * 1 */ 3744886ec58SHasso Tepper 3754886ec58SHasso Tepper #define ENVY24_CHAN_PLAY_DAC1 0 3764886ec58SHasso Tepper #define ENVY24_CHAN_PLAY_DAC2 1 3774886ec58SHasso Tepper #define ENVY24_CHAN_PLAY_DAC3 2 3784886ec58SHasso Tepper #define ENVY24_CHAN_PLAY_DAC4 3 3794886ec58SHasso Tepper #define ENVY24_CHAN_PLAY_SPDIF 4 3804886ec58SHasso Tepper #define ENVY24_CHAN_REC_ADC1 5 3814886ec58SHasso Tepper #define ENVY24_CHAN_REC_ADC2 6 3824886ec58SHasso Tepper #define ENVY24_CHAN_REC_ADC3 7 3834886ec58SHasso Tepper #define ENVY24_CHAN_REC_ADC4 8 3844886ec58SHasso Tepper #define ENVY24_CHAN_REC_SPDIF 9 3854886ec58SHasso Tepper #define ENVY24_CHAN_REC_MIX 10 3864886ec58SHasso Tepper 3874886ec58SHasso Tepper #define ENVY24_MIX_MASK 0x3ff 3884886ec58SHasso Tepper #define ENVY24_MIX_REC_MASK 0x3e0 3894886ec58SHasso Tepper 3904886ec58SHasso Tepper /* volume value constants */ 3914886ec58SHasso Tepper #define ENVY24_VOL_MAX 0 /* 0db(negate) */ 3924886ec58SHasso Tepper #define ENVY24_VOL_MIN 96 /* -144db(negate) */ 3934886ec58SHasso Tepper #define ENVY24_VOL_MUTE 127 /* mute */ 3944886ec58SHasso Tepper 3954886ec58SHasso Tepper /* -------------------------------------------------------------------- */ 3964886ec58SHasso Tepper 3974886ec58SHasso Tepper /* ENVY24 routing control defines */ 3984886ec58SHasso Tepper /* 3994886ec58SHasso Tepper ENVY24 has input->output data routing matrix switch. But original ENVY24 4004886ec58SHasso Tepper matrix control is so complex. So, in this driver, matrix control is 4014886ec58SHasso Tepper defined 4 parameters. 4024886ec58SHasso Tepper 4034886ec58SHasso Tepper 1: output DAC channels (include S/PDIF output) 4044886ec58SHasso Tepper 2: output data classes 4054886ec58SHasso Tepper a. direct output from DMA 4064886ec58SHasso Tepper b. MIXER output which mixed the DMA outputs and input channels 4074886ec58SHasso Tepper (NOTICE: this class is able to set only DAC-1 and S/PDIF output) 4084886ec58SHasso Tepper c. direct input from ADC 4094886ec58SHasso Tepper d. direct input from S/PDIF 4104886ec58SHasso Tepper 3: input ADC channel selection(when 2:c. is selected) 4114886ec58SHasso Tepper 4: left/right reverse 4124886ec58SHasso Tepper 4134886ec58SHasso Tepper These parameters matrix is bit reduced from original ENVY24 matrix 4144886ec58SHasso Tepper pattern(ex. route different ADC input to one DAC). But almost case 4154886ec58SHasso Tepper this is enough to use. 4164886ec58SHasso Tepper */ 4174886ec58SHasso Tepper #define ENVY24_ROUTE_DAC_1 0 4184886ec58SHasso Tepper #define ENVY24_ROUTE_DAC_2 1 4194886ec58SHasso Tepper #define ENVY24_ROUTE_DAC_3 2 4204886ec58SHasso Tepper #define ENVY24_ROUTE_DAC_4 3 4214886ec58SHasso Tepper #define ENVY24_ROUTE_DAC_SPDIF 4 4224886ec58SHasso Tepper 4234886ec58SHasso Tepper #define ENVY24_ROUTE_CLASS_DMA 0 4244886ec58SHasso Tepper #define ENVY24_ROUTE_CLASS_MIX 1 4254886ec58SHasso Tepper #define ENVY24_ROUTE_CLASS_ADC 2 4264886ec58SHasso Tepper #define ENVY24_ROUTE_CLASS_SPDIF 3 4274886ec58SHasso Tepper 4284886ec58SHasso Tepper #define ENVY24_ROUTE_ADC_1 0 4294886ec58SHasso Tepper #define ENVY24_ROUTE_ADC_2 1 4304886ec58SHasso Tepper #define ENVY24_ROUTE_ADC_3 2 4314886ec58SHasso Tepper #define ENVY24_ROUTE_ADC_4 3 4324886ec58SHasso Tepper 4334886ec58SHasso Tepper #define ENVY24_ROUTE_NORMAL 0 4344886ec58SHasso Tepper #define ENVY24_ROUTE_REVERSE 1 4354886ec58SHasso Tepper #define ENVY24_ROUTE_LEFT 0 4364886ec58SHasso Tepper #define ENVY24_ROUTE_RIGHT 1 4374886ec58SHasso Tepper 4384886ec58SHasso Tepper /* -------------------------------------------------------------------- */ 4394886ec58SHasso Tepper 4404886ec58SHasso Tepper /* 4414886ec58SHasso Tepper These map values are refferd from ALSA sound driver. 4424886ec58SHasso Tepper */ 4434886ec58SHasso Tepper /* ENVY24 configuration E2PROM map */ 4444886ec58SHasso Tepper #define ENVY24_E2PROM_SUBVENDOR 0x00 4454886ec58SHasso Tepper #define ENVY24_E2PROM_SUBDEVICE 0x02 4464886ec58SHasso Tepper #define ENVY24_E2PROM_SIZE 0x04 4474886ec58SHasso Tepper #define ENVY24_E2PROM_VERSION 0x05 4484886ec58SHasso Tepper #define ENVY24_E2PROM_SCFG 0x06 4494886ec58SHasso Tepper #define ENVY24_E2PROM_ACL 0x07 4504886ec58SHasso Tepper #define ENVY24_E2PROM_I2S 0x08 4514886ec58SHasso Tepper #define ENVY24_E2PROM_SPDIF 0x09 4524886ec58SHasso Tepper #define ENVY24_E2PROM_GPIOMASK 0x0a 4534886ec58SHasso Tepper #define ENVY24_E2PROM_GPIOSTATE 0x0b 4544886ec58SHasso Tepper #define ENVY24_E2PROM_GPIODIR 0x0c 4554886ec58SHasso Tepper #define ENVY24_E2PROM_AC97MAIN 0x0d 4564886ec58SHasso Tepper #define ENVY24_E2PROM_AC97PCM 0x0f 4574886ec58SHasso Tepper #define ENVY24_E2PROM_AC97REC 0x11 4584886ec58SHasso Tepper #define ENVY24_E2PROM_AC97RECSRC 0x13 4594886ec58SHasso Tepper #define ENVY24_E2PROM_DACID 0x14 4604886ec58SHasso Tepper #define ENVY24_E2PROM_ADCID 0x18 4614886ec58SHasso Tepper #define ENVY24_E2PROM_EXTRA 0x1c 4624886ec58SHasso Tepper 4634886ec58SHasso Tepper /* GPIO connect map of M-Audio Delta series */ 4644886ec58SHasso Tepper #define ENVY24_GPIO_CS84X4_PRO 0x01 4654886ec58SHasso Tepper #define ENVY24_GPIO_CS8414_STATUS 0x02 4664886ec58SHasso Tepper #define ENVY24_GPIO_CS84X4_CLK 0x04 4674886ec58SHasso Tepper #define ENVY24_GPIO_CS84X4_DATA 0x08 4684886ec58SHasso Tepper #define ENVY24_GPIO_AK4524_CDTI 0x10 /* this value is duplicated to input select */ 4694886ec58SHasso Tepper #define ENVY24_GPIO_AK4524_CCLK 0x20 4704886ec58SHasso Tepper #define ENVY24_GPIO_AK4524_CS0 0x40 4714886ec58SHasso Tepper #define ENVY24_GPIO_AK4524_CS1 0x80 4724886ec58SHasso Tepper 4734886ec58SHasso Tepper /* M-Audio Delta series S/PDIF(CS84[01]4) control pin values */ 4744886ec58SHasso Tepper #define ENVY24_CS8404_PRO_RATE 0x18 4754886ec58SHasso Tepper #define ENVY24_CS8404_PRO_RATE32 0x00 4764886ec58SHasso Tepper #define ENVY24_CS8404_PRO_RATE441 0x10 4774886ec58SHasso Tepper #define ENVY24_CS8404_PRO_RATE48 0x08 4784886ec58SHasso Tepper 4794886ec58SHasso Tepper /* M-Audio Delta series parameter */ 4804886ec58SHasso Tepper #define ENVY24_DELTA_AK4524_CIF 0 4814886ec58SHasso Tepper 4824886ec58SHasso Tepper #define I2C_DELAY 1000 4834886ec58SHasso Tepper 4844886ec58SHasso Tepper /* PCA9554 registers */ 4854886ec58SHasso Tepper #define PCA9554_I2CDEV 0x40 /* I2C device address */ 4864886ec58SHasso Tepper #define PCA9554_IN 0x00 /* input port */ 4874886ec58SHasso Tepper #define PCA9554_OUT 0x01 /* output port */ 4884886ec58SHasso Tepper #define PCA9554_INVERT 0x02 /* polarity invert */ 4894886ec58SHasso Tepper #define PCA9554_DIR 0x03 /* port directions */ 4904886ec58SHasso Tepper 4914886ec58SHasso Tepper /* PCF8574 registers */ 4924886ec58SHasso Tepper #define PCF8574_I2CDEV_DAC 0x48 4934886ec58SHasso Tepper #define PCF8574_SENSE_MASK 0x40 4944886ec58SHasso Tepper 4954886ec58SHasso Tepper /* end of file */ 496