#ifndef SYS_DEV_PCI_ENVYREG_H
#define SYS_DEV_PCI_ENVYREG_H
#define ENVY_CTL_BAR 0x10
#define ENVY_MT_BAR(isht) ((isht) ? 0x14 : 0x1c)
#define ENVY_CONF 0x60
#define ENVY_CTL 0x00
#define ENVY_CTL_RESET 0x80
#define ENVY_CTL_NATIVE 0x01
#define ENVY_CCS_INTMASK 0x01
#define ENVY_CCS_INT_MT 0x10
#define ENVY_CCS_INT_MIDI0 0x80
#define ENVY_CCS_INT_MIDI1 0x20
#define ENVY_CCS_INTSTAT 0x02
#define ENVY_CCS_CONF 0x04
#define ENVY_CCS_ACLINK 0x05
#define ENVY_CCS_I2S 0x06
#define ENVY_CCS_SPDIF 0x07
#define ENVY_CCS_MIDIDATA0 0x0c
#define ENVY_CCS_MIDISTAT0 0x0d
#define ENVY_CCS_MIDIDATA1 0x1c
#define ENVY_CCS_MIDISTAT1 0x1d
#define ENVY_CCS_MIDIWAT 0x0e
#define ENVY_CCS_MIDIWAT_RX 0x20
#define ENVY_CCS_MIDIDATA1 0x1c
#define ENVY_CCS_MIDISTAT1 0x1d
#define ENVY_CCS_GPIODATA0 0x14
#define ENVY_CCS_GPIODATA1 0x15
#define ENVY_CCS_GPIODATA2 0x1e
#define ENVY_CCS_GPIOMASK0 0x16
#define ENVY_CCS_GPIOMASK1 0x17
#define ENVY_CCS_GPIOMASK2 0x1f
#define ENVY_CCS_GPIODIR0 0x18
#define ENVY_CCS_GPIODIR1 0x19
#define ENVY_CCS_GPIODIR2 0x1a
#define ENVY_CCI_INDEX 0x3
#define ENVY_CCI_DATA 0x4
#define ENVY_I2C_DEV 0x10
#define ENVY_I2C_DEV_SHIFT 0x01
#define ENVY_I2C_DEV_WRITE 0x01
#define ENVY_I2C_DEV_EEPROM 0x50
#define ENVY_I2C_ADDR 0x11
#define ENVY_I2C_DATA 0x12
#define ENVY_I2C_CTL 0x13
#define ENVY_I2C_CTL_BUSY 0x1
#define ENVY_CCI_GPIODATA 0x20
#define ENVY_CCI_GPIOMASK 0x21
#define ENVY_CCI_GPIODIR 0x22
#define ENVY_EEPROM_CONF 6
#define ENVY_CONF_MIDI 0x20
#define ENVY_EEPROM_ACLINK 7
#define ENVY_EEPROM_I2S 8
#define ENVY_EEPROM_SPDIF 9
#define ENVY_EEPROM_GPIOMASK(s) ((s)->isht ? 13 : 10)
#define ENVY_EEPROM_GPIOST(s) ((s)->isht ? 16 : 11)
#define ENVY_EEPROM_GPIODIR(s) ((s)->isht ? 10 : 12)
#define ENVY_MIDISTAT_IEMPTY(s) ((s)->isht ? 0x8 : 0x80)
#define ENVY_MIDISTAT_OBUSY(s) ((s)->isht ? 0x4 : 0x40)
#define ENVY_MIDISTAT_RESET 0xff
#define ENVY_MIDISTAT_UART 0x3f
#define ENVY_MT_INTR 0
#define ENVY_MT_INTR_PACK 0x01
#define ENVY_MT_INTR_RACK 0x02
#define ENVY_MT_INTR_ERR 0x08
#define ENVY_MT_INTR_ALL 0x0b
#define ENVY_MT_INTR_PMASK 0x40
#define ENVY_MT_INTR_RMASK 0x80
#define ENVY_MT_RATE 1
#define ENVY_MT_RATEMASK 0x0f
#define ENVY_MT_FMT 2
#define ENVY_MT_FMT_128X 0x08
#define ENVY_MT_IMASK 3
#define ENVY_MT_IMASK_PDMA0 0x1
#define ENVY_MT_IMASK_RDMA0 0x2
#define ENVY_MT_IMASK_ERR 0x8
#define ENVY_MT_AC97_IDX 4
#define ENVY_MT_AC97_CMD 5
#define ENVY_MT_AC97_READY 0x08
#define ENVY_MT_AC97_CMD_MASK 0x30
#define ENVY_MT_AC97_CMD_RD 0x10
#define ENVY_MT_AC97_CMD_WR 0x20
#define ENVY_MT_AC97_CMD_RST 0x80
#define ENVY_MT_AC97_DATA 6
#define ENVY_MT_PADDR 0x10
#define ENVY_MT_PBUFSZ 0x14
#define ENVY_MT_PBLKSZ(s) ((s)->isht ? 0x1c : 0x16)
#define ENVY_MT_CTL 0x18
#define ENVY_MT_CTL_PSTART 0x01
#define ENVY_MT_CTL_RSTART(s) ((s)->isht ? 0x02 : 0x04)
#define ENVY_MT_NSTREAM 0x19
#define ENVY_MT_ERR 0x1a
#define ENVY_MT_RADDR 0x20
#define ENVY_MT_RBUFSZ 0x24
#define ENVY_MT_RBLKSZ 0x26
#define ENVY_MT_MONDATA 0x38
#define ENVY_MT_MONVAL_BITS 7
#define ENVY_MT_MONVAL_MASK ((1 << ENVY_MT_MONVAL_BITS) - 1)
#define ENVY_MT_MONIDX 0x3a
#define ENVY_MT_OUTSRC 0x30
#define ENVY_MT_OUTSRC_DMA 0x00
#define ENVY_MT_OUTSRC_MON 0x01
#define ENVY_MT_OUTSRC_LINE 0x02
#define ENVY_MT_OUTSRC_SPD 0x03
#define ENVY_MT_OUTSRC_MASK 0x03
#define ENVY_MT_SPDROUTE 0x32
#define ENVY_MT_SPDSRC_DMA 0x00
#define ENVY_MT_SPDSRC_MON 0x01
#define ENVY_MT_SPDSRC_LINE 0x02
#define ENVY_MT_SPDSRC_SPD 0x03
#define ENVY_MT_SPDSRC_BITS 0x02
#define ENVY_MT_SPDSRC_MASK ((1 << ENVY_MT_SPDSRC_BITS) - 1)
#define ENVY_MT_SPDSEL_BITS 0x4
#define ENVY_MT_SPDSEL_MASK ((1 << ENVY_MT_SPDSEL_BITS) - 1)
#define ENVY_MT_INSEL 0x34
#define ENVY_MT_INSEL_BITS 0x4
#define ENVY_MT_INSEL_MASK ((1 << ENVY_MT_INSEL_BITS) - 1)
#define ENVY_MT_HTSRC 0x2c
#define ENVY_MT_HTSRC_DMA 0x00
#define ENVY_MT_HTSRC_LINE 0x02
#define ENVY_MT_HTSRC_SPD 0x04
#define ENVY_MT_HTSRC_MASK 0x07
#define AK4524_PWR 0x00
#define AK4524_PWR_DA 0x01
#define AK4524_PWR_AD 0x02
#define AK4524_PWR_VREF 0x04
#define AK4524_RST 0x01
#define AK4524_RST_DA 0x01
#define AK4524_RST_AD 0x02
#define AK4524_FMT 0x02
#define AK4524_FMT_NORM 0
#define AK4524_FMT_DBL 0x01
#define AK4524_FMT_QUA 0x02
#define AK4524_FMT_QAUDFILT 0x04
#define AK4524_FMT_256 0
#define AK4524_FMT_512 0x04
#define AK4524_FMT_1024 0x08
#define AK4524_FMT_384 0x10
#define AK4524_FMT_768 0x14
#define AK4524_FMT_LSB16 0
#define AK4524_FMT_LSB20 0x20
#define AK4524_FMT_MSB24 0x40
#define AK4524_FMT_IIS24 0x60
#define AK4524_FMT_LSB24 0x80
#define AK4524_DEEMVOL 0x03
#define AK4524_DEEM_44K1 0x00
#define AK4524_DEEM_OFF 0x01
#define AK4524_DEEM_48K 0x02
#define AK4524_DEEM_32K 0x03
#define AK4524_MUTE 0x80
#define AK4524_ADC_GAIN0 0x04
#define AK4524_ADC_GAIN1 0x05
#define AK4524_DAC_GAIN0 0x06
#define AK4524_DAC_GAIN1 0x07
#define AK4358_ATT(chan) ((chan) <= 5 ? 0x4 + (chan) : 0xb - 6 + (chan))
#define AK4358_ATT_EN 0x80
#define AK4358_SPEED 2
#define AK4358_SPEED_RSTN 0x01
#define AK4358_SPEED_PW1 0x02
#define AK4358_SPEED_PW2 0x04
#define AK4358_SPEED_PW3 0x08
#define AK4358_SPEED_DFS0 0x10
#define AK4358_SPEED_DFS1 0x20
#define AK4358_SPEED_PW4 0x40
#define AK4358_SPEED_DEFAULT 0x4f
#define AK5365_RST 0x00
#define AK5365_RST_NORM 0x01
#define AK5365_SRC 0x01
#define AK5365_SRC_MASK 0x07
#define AK5365_CTRL 0x02
#define AK5365_CTRL_MUTE 0x01
#define AK5365_CTRL_I2S 0x08
#define AK5365_ATT(chan) (0x4 + (chan))
#define ENVY_RCHANS 12
#define ENVY_PCHANS 10
#define ENVY_RFRAME_SIZE (4 * ENVY_RCHANS)
#define ENVY_PFRAME_SIZE (4 * ENVY_PCHANS)
#endif