162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef OXYGEN_REGS_H_INCLUDED 362306a36Sopenharmony_ci#define OXYGEN_REGS_H_INCLUDED 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci/* recording channel A */ 662306a36Sopenharmony_ci#define OXYGEN_DMA_A_ADDRESS 0x00 /* 32-bit base address */ 762306a36Sopenharmony_ci#define OXYGEN_DMA_A_COUNT 0x04 /* buffer counter (dwords) */ 862306a36Sopenharmony_ci#define OXYGEN_DMA_A_TCOUNT 0x06 /* interrupt counter (dwords) */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/* recording channel B */ 1162306a36Sopenharmony_ci#define OXYGEN_DMA_B_ADDRESS 0x08 1262306a36Sopenharmony_ci#define OXYGEN_DMA_B_COUNT 0x0c 1362306a36Sopenharmony_ci#define OXYGEN_DMA_B_TCOUNT 0x0e 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* recording channel C */ 1662306a36Sopenharmony_ci#define OXYGEN_DMA_C_ADDRESS 0x10 1762306a36Sopenharmony_ci#define OXYGEN_DMA_C_COUNT 0x14 1862306a36Sopenharmony_ci#define OXYGEN_DMA_C_TCOUNT 0x16 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* SPDIF playback channel */ 2162306a36Sopenharmony_ci#define OXYGEN_DMA_SPDIF_ADDRESS 0x18 2262306a36Sopenharmony_ci#define OXYGEN_DMA_SPDIF_COUNT 0x1c 2362306a36Sopenharmony_ci#define OXYGEN_DMA_SPDIF_TCOUNT 0x1e 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* multichannel playback channel */ 2662306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_ADDRESS 0x20 2762306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_COUNT 0x24 /* 24 bits */ 2862306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_TCOUNT 0x28 /* 24 bits */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/* AC'97 (front panel) playback channel */ 3162306a36Sopenharmony_ci#define OXYGEN_DMA_AC97_ADDRESS 0x30 3262306a36Sopenharmony_ci#define OXYGEN_DMA_AC97_COUNT 0x34 3362306a36Sopenharmony_ci#define OXYGEN_DMA_AC97_TCOUNT 0x36 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* all registers 0x00..0x36 return current position on read */ 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define OXYGEN_DMA_STATUS 0x40 /* 1 = running, 0 = stop */ 3862306a36Sopenharmony_ci#define OXYGEN_CHANNEL_A 0x01 3962306a36Sopenharmony_ci#define OXYGEN_CHANNEL_B 0x02 4062306a36Sopenharmony_ci#define OXYGEN_CHANNEL_C 0x04 4162306a36Sopenharmony_ci#define OXYGEN_CHANNEL_SPDIF 0x08 4262306a36Sopenharmony_ci#define OXYGEN_CHANNEL_MULTICH 0x10 4362306a36Sopenharmony_ci#define OXYGEN_CHANNEL_AC97 0x20 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#define OXYGEN_DMA_PAUSE 0x41 /* 1 = pause */ 4662306a36Sopenharmony_ci/* OXYGEN_CHANNEL_* */ 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#define OXYGEN_DMA_RESET 0x42 4962306a36Sopenharmony_ci/* OXYGEN_CHANNEL_* */ 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS 0x43 5262306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS_MASK 0x03 5362306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS_2 0x00 5462306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS_4 0x01 5562306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS_6 0x02 5662306a36Sopenharmony_ci#define OXYGEN_PLAY_CHANNELS_8 0x03 5762306a36Sopenharmony_ci#define OXYGEN_DMA_A_BURST_MASK 0x04 5862306a36Sopenharmony_ci#define OXYGEN_DMA_A_BURST_8 0x00 /* dwords */ 5962306a36Sopenharmony_ci#define OXYGEN_DMA_A_BURST_16 0x04 6062306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_BURST_MASK 0x08 6162306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_BURST_8 0x00 6262306a36Sopenharmony_ci#define OXYGEN_DMA_MULTICH_BURST_16 0x08 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#define OXYGEN_INTERRUPT_MASK 0x44 6562306a36Sopenharmony_ci/* OXYGEN_CHANNEL_* */ 6662306a36Sopenharmony_ci#define OXYGEN_INT_SPDIF_IN_DETECT 0x0100 6762306a36Sopenharmony_ci#define OXYGEN_INT_MCU 0x0200 6862306a36Sopenharmony_ci#define OXYGEN_INT_2WIRE 0x0400 6962306a36Sopenharmony_ci#define OXYGEN_INT_GPIO 0x0800 7062306a36Sopenharmony_ci#define OXYGEN_INT_MCB 0x2000 7162306a36Sopenharmony_ci#define OXYGEN_INT_AC97 0x4000 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci#define OXYGEN_INTERRUPT_STATUS 0x46 7462306a36Sopenharmony_ci/* OXYGEN_CHANNEL_* amd OXYGEN_INT_* */ 7562306a36Sopenharmony_ci#define OXYGEN_INT_MIDI 0x1000 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#define OXYGEN_MISC 0x48 7862306a36Sopenharmony_ci#define OXYGEN_MISC_WRITE_PCI_SUBID 0x01 7962306a36Sopenharmony_ci#define OXYGEN_MISC_LATENCY_3F 0x02 8062306a36Sopenharmony_ci#define OXYGEN_MISC_REC_C_FROM_SPDIF 0x04 8162306a36Sopenharmony_ci#define OXYGEN_MISC_REC_B_FROM_AC97 0x08 8262306a36Sopenharmony_ci#define OXYGEN_MISC_REC_A_FROM_MULTICH 0x10 8362306a36Sopenharmony_ci#define OXYGEN_MISC_PCI_MEM_W_1_CLOCK 0x20 8462306a36Sopenharmony_ci#define OXYGEN_MISC_MIDI 0x40 8562306a36Sopenharmony_ci#define OXYGEN_MISC_CRYSTAL_MASK 0x80 8662306a36Sopenharmony_ci#define OXYGEN_MISC_CRYSTAL_24576 0x00 8762306a36Sopenharmony_ci#define OXYGEN_MISC_CRYSTAL_27 0x80 /* MHz */ 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT 0x4a 9062306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_A_MASK 0x03 9162306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_A_SHIFT 0 9262306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_B_MASK 0x0c 9362306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_B_SHIFT 2 9462306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_C_MASK 0x30 9562306a36Sopenharmony_ci#define OXYGEN_REC_FORMAT_C_SHIFT 4 9662306a36Sopenharmony_ci#define OXYGEN_FORMAT_16 0x00 9762306a36Sopenharmony_ci#define OXYGEN_FORMAT_24 0x01 9862306a36Sopenharmony_ci#define OXYGEN_FORMAT_32 0x02 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#define OXYGEN_PLAY_FORMAT 0x4b 10162306a36Sopenharmony_ci#define OXYGEN_SPDIF_FORMAT_MASK 0x03 10262306a36Sopenharmony_ci#define OXYGEN_SPDIF_FORMAT_SHIFT 0 10362306a36Sopenharmony_ci#define OXYGEN_MULTICH_FORMAT_MASK 0x0c 10462306a36Sopenharmony_ci#define OXYGEN_MULTICH_FORMAT_SHIFT 2 10562306a36Sopenharmony_ci/* OXYGEN_FORMAT_* */ 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS 0x4c 10862306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_MASK 0x07 10962306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_2_2_2 0x00 /* DMA A, B, C */ 11062306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_4_2_2 0x01 11162306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_6_0_2 0x02 11262306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_6_2_0 0x03 11362306a36Sopenharmony_ci#define OXYGEN_REC_CHANNELS_8_0_0 0x04 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#define OXYGEN_FUNCTION 0x50 11662306a36Sopenharmony_ci#define OXYGEN_FUNCTION_CLOCK_MASK 0x01 11762306a36Sopenharmony_ci#define OXYGEN_FUNCTION_CLOCK_PLL 0x00 11862306a36Sopenharmony_ci#define OXYGEN_FUNCTION_CLOCK_CRYSTAL 0x01 11962306a36Sopenharmony_ci#define OXYGEN_FUNCTION_RESET_CODEC 0x02 12062306a36Sopenharmony_ci#define OXYGEN_FUNCTION_RESET_POL 0x04 12162306a36Sopenharmony_ci#define OXYGEN_FUNCTION_PWDN 0x08 12262306a36Sopenharmony_ci#define OXYGEN_FUNCTION_PWDN_EN 0x10 12362306a36Sopenharmony_ci#define OXYGEN_FUNCTION_PWDN_POL 0x20 12462306a36Sopenharmony_ci#define OXYGEN_FUNCTION_2WIRE_SPI_MASK 0x40 12562306a36Sopenharmony_ci#define OXYGEN_FUNCTION_SPI 0x00 12662306a36Sopenharmony_ci#define OXYGEN_FUNCTION_2WIRE 0x40 12762306a36Sopenharmony_ci#define OXYGEN_FUNCTION_ENABLE_SPI_4_5 0x80 /* 0 = EEPROM */ 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci#define OXYGEN_I2S_MULTICH_FORMAT 0x60 13062306a36Sopenharmony_ci#define OXYGEN_I2S_RATE_MASK 0x0007 /* LRCK */ 13162306a36Sopenharmony_ci#define OXYGEN_RATE_32000 0x0000 13262306a36Sopenharmony_ci#define OXYGEN_RATE_44100 0x0001 13362306a36Sopenharmony_ci#define OXYGEN_RATE_48000 0x0002 13462306a36Sopenharmony_ci#define OXYGEN_RATE_64000 0x0003 13562306a36Sopenharmony_ci#define OXYGEN_RATE_88200 0x0004 13662306a36Sopenharmony_ci#define OXYGEN_RATE_96000 0x0005 13762306a36Sopenharmony_ci#define OXYGEN_RATE_176400 0x0006 13862306a36Sopenharmony_ci#define OXYGEN_RATE_192000 0x0007 13962306a36Sopenharmony_ci#define OXYGEN_I2S_FORMAT_MASK 0x0008 14062306a36Sopenharmony_ci#define OXYGEN_I2S_FORMAT_I2S 0x0000 14162306a36Sopenharmony_ci#define OXYGEN_I2S_FORMAT_LJUST 0x0008 14262306a36Sopenharmony_ci#define OXYGEN_I2S_MCLK_MASK 0x0030 /* MCLK/LRCK */ 14362306a36Sopenharmony_ci#define OXYGEN_I2S_MCLK_SHIFT 4 14462306a36Sopenharmony_ci#define MCLK_128 0 14562306a36Sopenharmony_ci#define MCLK_256 1 14662306a36Sopenharmony_ci#define MCLK_512 2 14762306a36Sopenharmony_ci#define OXYGEN_I2S_MCLK(f) (((f) & 3) << OXYGEN_I2S_MCLK_SHIFT) 14862306a36Sopenharmony_ci#define OXYGEN_I2S_BITS_MASK 0x00c0 14962306a36Sopenharmony_ci#define OXYGEN_I2S_BITS_16 0x0000 15062306a36Sopenharmony_ci#define OXYGEN_I2S_BITS_20 0x0040 15162306a36Sopenharmony_ci#define OXYGEN_I2S_BITS_24 0x0080 15262306a36Sopenharmony_ci#define OXYGEN_I2S_BITS_32 0x00c0 15362306a36Sopenharmony_ci#define OXYGEN_I2S_MASTER 0x0100 15462306a36Sopenharmony_ci#define OXYGEN_I2S_BCLK_MASK 0x0600 /* BCLK/LRCK */ 15562306a36Sopenharmony_ci#define OXYGEN_I2S_BCLK_64 0x0000 15662306a36Sopenharmony_ci#define OXYGEN_I2S_BCLK_128 0x0200 15762306a36Sopenharmony_ci#define OXYGEN_I2S_BCLK_256 0x0400 15862306a36Sopenharmony_ci#define OXYGEN_I2S_MUTE_MCLK 0x0800 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci#define OXYGEN_I2S_A_FORMAT 0x62 16162306a36Sopenharmony_ci#define OXYGEN_I2S_B_FORMAT 0x64 16262306a36Sopenharmony_ci#define OXYGEN_I2S_C_FORMAT 0x66 16362306a36Sopenharmony_ci/* like OXYGEN_I2S_MULTICH_FORMAT */ 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci#define OXYGEN_SPDIF_CONTROL 0x70 16662306a36Sopenharmony_ci#define OXYGEN_SPDIF_OUT_ENABLE 0x00000002 16762306a36Sopenharmony_ci#define OXYGEN_SPDIF_LOOPBACK 0x00000004 /* in to out */ 16862306a36Sopenharmony_ci#define OXYGEN_SPDIF_SENSE_MASK 0x00000008 16962306a36Sopenharmony_ci#define OXYGEN_SPDIF_LOCK_MASK 0x00000010 17062306a36Sopenharmony_ci#define OXYGEN_SPDIF_RATE_MASK 0x00000020 17162306a36Sopenharmony_ci#define OXYGEN_SPDIF_SPDVALID 0x00000040 17262306a36Sopenharmony_ci#define OXYGEN_SPDIF_SENSE_PAR 0x00000200 17362306a36Sopenharmony_ci#define OXYGEN_SPDIF_LOCK_PAR 0x00000400 17462306a36Sopenharmony_ci#define OXYGEN_SPDIF_SENSE_STATUS 0x00000800 17562306a36Sopenharmony_ci#define OXYGEN_SPDIF_LOCK_STATUS 0x00001000 17662306a36Sopenharmony_ci#define OXYGEN_SPDIF_SENSE_INT 0x00002000 /* r/wc */ 17762306a36Sopenharmony_ci#define OXYGEN_SPDIF_LOCK_INT 0x00004000 /* r/wc */ 17862306a36Sopenharmony_ci#define OXYGEN_SPDIF_RATE_INT 0x00008000 /* r/wc */ 17962306a36Sopenharmony_ci#define OXYGEN_SPDIF_IN_CLOCK_MASK 0x00010000 18062306a36Sopenharmony_ci#define OXYGEN_SPDIF_IN_CLOCK_96 0x00000000 /* <= 96 kHz */ 18162306a36Sopenharmony_ci#define OXYGEN_SPDIF_IN_CLOCK_192 0x00010000 /* > 96 kHz */ 18262306a36Sopenharmony_ci#define OXYGEN_SPDIF_OUT_RATE_MASK 0x07000000 18362306a36Sopenharmony_ci#define OXYGEN_SPDIF_OUT_RATE_SHIFT 24 18462306a36Sopenharmony_ci/* OXYGEN_RATE_* << OXYGEN_SPDIF_OUT_RATE_SHIFT */ 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci#define OXYGEN_SPDIF_OUTPUT_BITS 0x74 18762306a36Sopenharmony_ci#define OXYGEN_SPDIF_NONAUDIO 0x00000002 18862306a36Sopenharmony_ci#define OXYGEN_SPDIF_C 0x00000004 18962306a36Sopenharmony_ci#define OXYGEN_SPDIF_PREEMPHASIS 0x00000008 19062306a36Sopenharmony_ci#define OXYGEN_SPDIF_CATEGORY_MASK 0x000007f0 19162306a36Sopenharmony_ci#define OXYGEN_SPDIF_CATEGORY_SHIFT 4 19262306a36Sopenharmony_ci#define OXYGEN_SPDIF_ORIGINAL 0x00000800 19362306a36Sopenharmony_ci#define OXYGEN_SPDIF_CS_RATE_MASK 0x0000f000 19462306a36Sopenharmony_ci#define OXYGEN_SPDIF_CS_RATE_SHIFT 12 19562306a36Sopenharmony_ci#define OXYGEN_SPDIF_V 0x00010000 /* 0 = valid */ 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci#define OXYGEN_SPDIF_INPUT_BITS 0x78 19862306a36Sopenharmony_ci/* 32 bits, IEC958_AES_* */ 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci#define OXYGEN_EEPROM_CONTROL 0x80 20162306a36Sopenharmony_ci#define OXYGEN_EEPROM_ADDRESS_MASK 0x7f 20262306a36Sopenharmony_ci#define OXYGEN_EEPROM_DIR_MASK 0x80 20362306a36Sopenharmony_ci#define OXYGEN_EEPROM_DIR_READ 0x00 20462306a36Sopenharmony_ci#define OXYGEN_EEPROM_DIR_WRITE 0x80 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci#define OXYGEN_EEPROM_STATUS 0x81 20762306a36Sopenharmony_ci#define OXYGEN_EEPROM_VALID 0x40 20862306a36Sopenharmony_ci#define OXYGEN_EEPROM_BUSY 0x80 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci#define OXYGEN_EEPROM_DATA 0x82 /* 16 bits */ 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci#define OXYGEN_2WIRE_CONTROL 0x90 21362306a36Sopenharmony_ci#define OXYGEN_2WIRE_DIR_MASK 0x01 21462306a36Sopenharmony_ci#define OXYGEN_2WIRE_DIR_WRITE 0x00 21562306a36Sopenharmony_ci#define OXYGEN_2WIRE_DIR_READ 0x01 21662306a36Sopenharmony_ci#define OXYGEN_2WIRE_ADDRESS_MASK 0xfe /* slave device address */ 21762306a36Sopenharmony_ci#define OXYGEN_2WIRE_ADDRESS_SHIFT 1 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci#define OXYGEN_2WIRE_MAP 0x91 /* address, 8 bits */ 22062306a36Sopenharmony_ci#define OXYGEN_2WIRE_DATA 0x92 /* data, 16 bits */ 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci#define OXYGEN_2WIRE_BUS_STATUS 0x94 22362306a36Sopenharmony_ci#define OXYGEN_2WIRE_BUSY 0x0001 22462306a36Sopenharmony_ci#define OXYGEN_2WIRE_LENGTH_MASK 0x0002 22562306a36Sopenharmony_ci#define OXYGEN_2WIRE_LENGTH_8 0x0000 22662306a36Sopenharmony_ci#define OXYGEN_2WIRE_LENGTH_16 0x0002 22762306a36Sopenharmony_ci#define OXYGEN_2WIRE_MANUAL_READ 0x0004 /* 0 = auto read */ 22862306a36Sopenharmony_ci#define OXYGEN_2WIRE_WRITE_MAP_ONLY 0x0008 22962306a36Sopenharmony_ci#define OXYGEN_2WIRE_SLAVE_AD_MASK 0x0030 /* AD0, AD1 */ 23062306a36Sopenharmony_ci#define OXYGEN_2WIRE_INTERRUPT_MASK 0x0040 /* 0 = int. if not responding */ 23162306a36Sopenharmony_ci#define OXYGEN_2WIRE_SLAVE_NO_RESPONSE 0x0080 23262306a36Sopenharmony_ci#define OXYGEN_2WIRE_SPEED_MASK 0x0100 23362306a36Sopenharmony_ci#define OXYGEN_2WIRE_SPEED_STANDARD 0x0000 23462306a36Sopenharmony_ci#define OXYGEN_2WIRE_SPEED_FAST 0x0100 23562306a36Sopenharmony_ci#define OXYGEN_2WIRE_CLOCK_SYNC 0x0200 23662306a36Sopenharmony_ci#define OXYGEN_2WIRE_BUS_RESET 0x0400 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci#define OXYGEN_SPI_CONTROL 0x98 23962306a36Sopenharmony_ci#define OXYGEN_SPI_BUSY 0x01 /* read */ 24062306a36Sopenharmony_ci#define OXYGEN_SPI_TRIGGER 0x01 /* write */ 24162306a36Sopenharmony_ci#define OXYGEN_SPI_DATA_LENGTH_MASK 0x02 24262306a36Sopenharmony_ci#define OXYGEN_SPI_DATA_LENGTH_2 0x00 24362306a36Sopenharmony_ci#define OXYGEN_SPI_DATA_LENGTH_3 0x02 24462306a36Sopenharmony_ci#define OXYGEN_SPI_CLOCK_MASK 0x0c 24562306a36Sopenharmony_ci#define OXYGEN_SPI_CLOCK_160 0x00 /* ns */ 24662306a36Sopenharmony_ci#define OXYGEN_SPI_CLOCK_320 0x04 24762306a36Sopenharmony_ci#define OXYGEN_SPI_CLOCK_640 0x08 24862306a36Sopenharmony_ci#define OXYGEN_SPI_CLOCK_1280 0x0c 24962306a36Sopenharmony_ci#define OXYGEN_SPI_CODEC_MASK 0x70 /* 0..5 */ 25062306a36Sopenharmony_ci#define OXYGEN_SPI_CODEC_SHIFT 4 25162306a36Sopenharmony_ci#define OXYGEN_SPI_CEN_MASK 0x80 25262306a36Sopenharmony_ci#define OXYGEN_SPI_CEN_LATCH_CLOCK_LO 0x00 25362306a36Sopenharmony_ci#define OXYGEN_SPI_CEN_LATCH_CLOCK_HI 0x80 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci#define OXYGEN_SPI_DATA1 0x99 25662306a36Sopenharmony_ci#define OXYGEN_SPI_DATA2 0x9a 25762306a36Sopenharmony_ci#define OXYGEN_SPI_DATA3 0x9b 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci#define OXYGEN_MPU401 0xa0 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci#define OXYGEN_MPU401_CONTROL 0xa2 26262306a36Sopenharmony_ci#define OXYGEN_MPU401_LOOPBACK 0x01 /* TXD to RXD */ 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci#define OXYGEN_GPI_DATA 0xa4 26562306a36Sopenharmony_ci/* bits 0..5 = pin XGPI0..XGPI5 */ 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci#define OXYGEN_GPI_INTERRUPT_MASK 0xa5 26862306a36Sopenharmony_ci/* bits 0..5, 1 = enable */ 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci#define OXYGEN_GPIO_DATA 0xa6 27162306a36Sopenharmony_ci/* bits 0..9 */ 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ci#define OXYGEN_GPIO_CONTROL 0xa8 27462306a36Sopenharmony_ci/* bits 0..9, 0 = input, 1 = output */ 27562306a36Sopenharmony_ci#define OXYGEN_GPIO1_XSLAVE_RDY 0x8000 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci#define OXYGEN_GPIO_INTERRUPT_MASK 0xaa 27862306a36Sopenharmony_ci/* bits 0..9, 1 = enable */ 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci#define OXYGEN_DEVICE_SENSE 0xac 28162306a36Sopenharmony_ci#define OXYGEN_HEAD_PHONE_DETECT 0x01 28262306a36Sopenharmony_ci#define OXYGEN_HEAD_PHONE_MASK 0x06 28362306a36Sopenharmony_ci#define OXYGEN_HEAD_PHONE_PASSIVE_SPK 0x00 28462306a36Sopenharmony_ci#define OXYGEN_HEAD_PHONE_HP 0x02 28562306a36Sopenharmony_ci#define OXYGEN_HEAD_PHONE_ACTIVE_SPK 0x04 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_DATA 0xb0 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_MAP 0xb2 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_STATUS 0xb3 29262306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_BUSY 0x01 29362306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_LENGTH_MASK 0x06 29462306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_LENGTH_1 0x00 29562306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_LENGTH_2 0x02 29662306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_LENGTH_3 0x04 29762306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_WRITE 0x08 /* r/wc */ 29862306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_READ 0x10 /* r/wc */ 29962306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_DRV_XACT_FAIL 0x20 /* r/wc */ 30062306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_RESET 0x40 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_CONTROL 0xb4 30362306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_DRV_ACK 0x01 30462306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_DRV_XACT 0x02 30562306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_INT_MASK 0x04 30662306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_SYNC_MASK 0x08 30762306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_SYNC_RDY_PIN 0x00 30862306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_SYNC_DATA 0x08 30962306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_ADDRESS_MASK 0x30 31062306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_ADDRESS_10 0x00 31162306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_ADDRESS_12 0x10 31262306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_ADDRESS_14 0x20 31362306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_ADDRESS_16 0x30 31462306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_INT_POL 0x40 31562306a36Sopenharmony_ci#define OXYGEN_MCU_2WIRE_SYNC_ENABLE 0x80 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci#define OXYGEN_PLAY_ROUTING 0xc0 31862306a36Sopenharmony_ci#define OXYGEN_PLAY_MUTE01 0x0001 31962306a36Sopenharmony_ci#define OXYGEN_PLAY_MUTE23 0x0002 32062306a36Sopenharmony_ci#define OXYGEN_PLAY_MUTE45 0x0004 32162306a36Sopenharmony_ci#define OXYGEN_PLAY_MUTE67 0x0008 32262306a36Sopenharmony_ci#define OXYGEN_PLAY_MUTE_MASK 0x000f 32362306a36Sopenharmony_ci#define OXYGEN_PLAY_MULTICH_MASK 0x0010 32462306a36Sopenharmony_ci#define OXYGEN_PLAY_MULTICH_I2S_DAC 0x0000 32562306a36Sopenharmony_ci#define OXYGEN_PLAY_MULTICH_AC97 0x0010 32662306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_MASK 0x00e0 32762306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_SPDIF 0x0000 32862306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_MULTICH_01 0x0020 32962306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_MULTICH_23 0x0040 33062306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_MULTICH_45 0x0060 33162306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_MULTICH_67 0x0080 33262306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_REC_A 0x00a0 33362306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_REC_B 0x00c0 33462306a36Sopenharmony_ci#define OXYGEN_PLAY_SPDIF_I2S_ADC_3 0x00e0 33562306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC0_SOURCE_MASK 0x0300 33662306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC0_SOURCE_SHIFT 8 33762306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC1_SOURCE_MASK 0x0c00 33862306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC1_SOURCE_SHIFT 10 33962306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC2_SOURCE_MASK 0x3000 34062306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC2_SOURCE_SHIFT 12 34162306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC3_SOURCE_MASK 0xc000 34262306a36Sopenharmony_ci#define OXYGEN_PLAY_DAC3_SOURCE_SHIFT 14 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ci#define OXYGEN_REC_ROUTING 0xc2 34562306a36Sopenharmony_ci#define OXYGEN_MUTE_I2S_ADC_1 0x01 34662306a36Sopenharmony_ci#define OXYGEN_MUTE_I2S_ADC_2 0x02 34762306a36Sopenharmony_ci#define OXYGEN_MUTE_I2S_ADC_3 0x04 34862306a36Sopenharmony_ci#define OXYGEN_REC_A_ROUTE_MASK 0x08 34962306a36Sopenharmony_ci#define OXYGEN_REC_A_ROUTE_I2S_ADC_1 0x00 35062306a36Sopenharmony_ci#define OXYGEN_REC_A_ROUTE_AC97_0 0x08 35162306a36Sopenharmony_ci#define OXYGEN_REC_B_ROUTE_MASK 0x10 35262306a36Sopenharmony_ci#define OXYGEN_REC_B_ROUTE_I2S_ADC_2 0x00 35362306a36Sopenharmony_ci#define OXYGEN_REC_B_ROUTE_AC97_1 0x10 35462306a36Sopenharmony_ci#define OXYGEN_REC_C_ROUTE_MASK 0x20 35562306a36Sopenharmony_ci#define OXYGEN_REC_C_ROUTE_SPDIF 0x00 35662306a36Sopenharmony_ci#define OXYGEN_REC_C_ROUTE_I2S_ADC_3 0x20 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR 0xc3 35962306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_A 0x01 36062306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_A_HALF_VOL 0x02 36162306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_B 0x04 36262306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_B_HALF_VOL 0x08 36362306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_C 0x10 36462306a36Sopenharmony_ci#define OXYGEN_ADC_MONITOR_C_HALF_VOL 0x20 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTING 0xc4 36762306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_0_MASK 0x03 36862306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_0_SHIFT 0 36962306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_1_MASK 0x0c 37062306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_1_SHIFT 2 37162306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_2_MASK 0x30 37262306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_2_SHIFT 4 37362306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_3_MASK 0xc0 37462306a36Sopenharmony_ci#define OXYGEN_A_MONITOR_ROUTE_3_SHIFT 6 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci#define OXYGEN_AC97_CONTROL 0xd0 37762306a36Sopenharmony_ci#define OXYGEN_AC97_COLD_RESET 0x0001 37862306a36Sopenharmony_ci#define OXYGEN_AC97_SUSPENDED 0x0002 /* read */ 37962306a36Sopenharmony_ci#define OXYGEN_AC97_RESUME 0x0002 /* write */ 38062306a36Sopenharmony_ci#define OXYGEN_AC97_CLOCK_DISABLE 0x0004 38162306a36Sopenharmony_ci#define OXYGEN_AC97_NO_CODEC_0 0x0008 38262306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC_0 0x0010 38362306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC_1 0x0020 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci#define OXYGEN_AC97_INTERRUPT_MASK 0xd2 38662306a36Sopenharmony_ci#define OXYGEN_AC97_INT_READ_DONE 0x01 38762306a36Sopenharmony_ci#define OXYGEN_AC97_INT_WRITE_DONE 0x02 38862306a36Sopenharmony_ci#define OXYGEN_AC97_INT_CODEC_0 0x10 38962306a36Sopenharmony_ci#define OXYGEN_AC97_INT_CODEC_1 0x20 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci#define OXYGEN_AC97_INTERRUPT_STATUS 0xd3 39262306a36Sopenharmony_ci/* OXYGEN_AC97_INT_* */ 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci#define OXYGEN_AC97_OUT_CONFIG 0xd4 39562306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_SLOT3 0x00000001 39662306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_SLOT3_VSR 0x00000002 39762306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_SLOT4 0x00000010 39862306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_SLOT4_VSR 0x00000020 39962306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_FRONTL 0x00000100 40062306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_FRONTR 0x00000200 40162306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_SIDEL 0x00000400 40262306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_SIDER 0x00000800 40362306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_CENTER 0x00001000 40462306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_BASE 0x00002000 40562306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_REARL 0x00004000 40662306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_REARR 0x00008000 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_ci#define OXYGEN_AC97_IN_CONFIG 0xd8 40962306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINEL 0x00000001 41062306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINEL_VSR 0x00000002 41162306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINEL_16 0x00000000 41262306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINEL_18 0x00000004 41362306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINEL_20 0x00000008 41462306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINER 0x00000010 41562306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINER_VSR 0x00000020 41662306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINER_16 0x00000000 41762306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINER_18 0x00000040 41862306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC1_LINER_20 0x00000080 41962306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_LINEL 0x00000100 42062306a36Sopenharmony_ci#define OXYGEN_AC97_CODEC0_LINER 0x00000200 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci#define OXYGEN_AC97_REGS 0xdc 42362306a36Sopenharmony_ci#define OXYGEN_AC97_REG_DATA_MASK 0x0000ffff 42462306a36Sopenharmony_ci#define OXYGEN_AC97_REG_ADDR_MASK 0x007f0000 42562306a36Sopenharmony_ci#define OXYGEN_AC97_REG_ADDR_SHIFT 16 42662306a36Sopenharmony_ci#define OXYGEN_AC97_REG_DIR_MASK 0x00800000 42762306a36Sopenharmony_ci#define OXYGEN_AC97_REG_DIR_WRITE 0x00000000 42862306a36Sopenharmony_ci#define OXYGEN_AC97_REG_DIR_READ 0x00800000 42962306a36Sopenharmony_ci#define OXYGEN_AC97_REG_CODEC_MASK 0x01000000 43062306a36Sopenharmony_ci#define OXYGEN_AC97_REG_CODEC_SHIFT 24 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ci#define OXYGEN_TEST 0xe0 43362306a36Sopenharmony_ci#define OXYGEN_TEST_RAM_SUCCEEDED 0x01 43462306a36Sopenharmony_ci#define OXYGEN_TEST_PLAYBACK_RAM 0x02 43562306a36Sopenharmony_ci#define OXYGEN_TEST_RECORD_RAM 0x04 43662306a36Sopenharmony_ci#define OXYGEN_TEST_PLL 0x08 43762306a36Sopenharmony_ci#define OXYGEN_TEST_2WIRE_LOOPBACK 0x10 43862306a36Sopenharmony_ci 43962306a36Sopenharmony_ci#define OXYGEN_DMA_FLUSH 0xe1 44062306a36Sopenharmony_ci/* OXYGEN_CHANNEL_* */ 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci#define OXYGEN_CODEC_VERSION 0xe4 44362306a36Sopenharmony_ci#define OXYGEN_CODEC_ID_MASK 0x07 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_ci#define OXYGEN_REVISION 0xe6 44662306a36Sopenharmony_ci#define OXYGEN_PACKAGE_ID_MASK 0x0007 44762306a36Sopenharmony_ci#define OXYGEN_PACKAGE_ID_8786 0x0004 44862306a36Sopenharmony_ci#define OXYGEN_PACKAGE_ID_8787 0x0006 44962306a36Sopenharmony_ci#define OXYGEN_PACKAGE_ID_8788 0x0007 45062306a36Sopenharmony_ci#define OXYGEN_REVISION_MASK 0xfff8 45162306a36Sopenharmony_ci#define OXYGEN_REVISION_2 0x0008 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci#define OXYGEN_OFFSIN_48K 0xe8 45462306a36Sopenharmony_ci#define OXYGEN_OFFSBASE_48K 0xe9 45562306a36Sopenharmony_ci#define OXYGEN_OFFSBASE_MASK 0x0fff 45662306a36Sopenharmony_ci#define OXYGEN_OFFSIN_44K 0xec 45762306a36Sopenharmony_ci#define OXYGEN_OFFSBASE_44K 0xed 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_ci#endif 460