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