linux-brain/sound/pci/oxygen/oxygen_regs.h
Greg Kroah-Hartman b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.

By default all files without license information are under the default
license of the kernel, which is GPL version 2.

Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier.  The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.

This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.

How this work was done:

Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
 - file had no licensing information it it.
 - file was a */uapi/* one with no licensing information in it,
 - file was a */uapi/* one with existing licensing information,

Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.

The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne.  Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.

The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed.  Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.

Criteria used to select files for SPDX license identifier tagging was:
 - Files considered eligible had to be source code files.
 - Make and config files were included as candidates if they contained >5
   lines of source
 - File already had some variant of a license header in it (even if <5
   lines).

All documentation files were explicitly excluded.

The following heuristics were used to determine which SPDX license
identifiers to apply.

 - when both scanners couldn't find any license traces, file was
   considered to have no license information in it, and the top level
   COPYING file license applied.

   For non */uapi/* files that summary was:

   SPDX license identifier                            # files
   ---------------------------------------------------|-------
   GPL-2.0                                              11139

   and resulted in the first patch in this series.

   If that file was a */uapi/* path one, it was "GPL-2.0 WITH
   Linux-syscall-note" otherwise it was "GPL-2.0".  Results of that was:

   SPDX license identifier                            # files
   ---------------------------------------------------|-------
   GPL-2.0 WITH Linux-syscall-note                        930

   and resulted in the second patch in this series.

 - if a file had some form of licensing information in it, and was one
   of the */uapi/* ones, it was denoted with the Linux-syscall-note if
   any GPL family license was found in the file or had no licensing in
   it (per prior point).  Results summary:

   SPDX license identifier                            # files
   ---------------------------------------------------|------
   GPL-2.0 WITH Linux-syscall-note                       270
   GPL-2.0+ WITH Linux-syscall-note                      169
   ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause)    21
   ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)    17
   LGPL-2.1+ WITH Linux-syscall-note                      15
   GPL-1.0+ WITH Linux-syscall-note                       14
   ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause)    5
   LGPL-2.0+ WITH Linux-syscall-note                       4
   LGPL-2.1 WITH Linux-syscall-note                        3
   ((GPL-2.0 WITH Linux-syscall-note) OR MIT)              3
   ((GPL-2.0 WITH Linux-syscall-note) AND MIT)             1

   and that resulted in the third patch in this series.

 - when the two scanners agreed on the detected license(s), that became
   the concluded license(s).

 - when there was disagreement between the two scanners (one detected a
   license but the other didn't, or they both detected different
   licenses) a manual inspection of the file occurred.

 - In most cases a manual inspection of the information in the file
   resulted in a clear resolution of the license that should apply (and
   which scanner probably needed to revisit its heuristics).

 - When it was not immediately clear, the license identifier was
   confirmed with lawyers working with the Linux Foundation.

 - If there was any question as to the appropriate license identifier,
   the file was flagged for further research and to be revisited later
   in time.

In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.

Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights.  The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.

Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.

In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.

Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
 - a full scancode scan run, collecting the matched texts, detected
   license ids and scores
 - reviewing anything where there was a license detected (about 500+
   files) to ensure that the applied SPDX license was correct
 - reviewing anything where there was no detection but the patch license
   was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
   SPDX license was correct

This produced a worksheet with 20 files needing minor correction.  This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.

These .csv files were then reviewed by Greg.  Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected.  This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.)  Finally Greg ran the script using the .csv files to
generate the patches.

Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-02 11:10:55 +01:00

460 lines
16 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef OXYGEN_REGS_H_INCLUDED
#define OXYGEN_REGS_H_INCLUDED
/* recording channel A */
#define OXYGEN_DMA_A_ADDRESS 0x00 /* 32-bit base address */
#define OXYGEN_DMA_A_COUNT 0x04 /* buffer counter (dwords) */
#define OXYGEN_DMA_A_TCOUNT 0x06 /* interrupt counter (dwords) */
/* recording channel B */
#define OXYGEN_DMA_B_ADDRESS 0x08
#define OXYGEN_DMA_B_COUNT 0x0c
#define OXYGEN_DMA_B_TCOUNT 0x0e
/* recording channel C */
#define OXYGEN_DMA_C_ADDRESS 0x10
#define OXYGEN_DMA_C_COUNT 0x14
#define OXYGEN_DMA_C_TCOUNT 0x16
/* SPDIF playback channel */
#define OXYGEN_DMA_SPDIF_ADDRESS 0x18
#define OXYGEN_DMA_SPDIF_COUNT 0x1c
#define OXYGEN_DMA_SPDIF_TCOUNT 0x1e
/* multichannel playback channel */
#define OXYGEN_DMA_MULTICH_ADDRESS 0x20
#define OXYGEN_DMA_MULTICH_COUNT 0x24 /* 24 bits */
#define OXYGEN_DMA_MULTICH_TCOUNT 0x28 /* 24 bits */
/* AC'97 (front panel) playback channel */
#define OXYGEN_DMA_AC97_ADDRESS 0x30
#define OXYGEN_DMA_AC97_COUNT 0x34
#define OXYGEN_DMA_AC97_TCOUNT 0x36
/* all registers 0x00..0x36 return current position on read */
#define OXYGEN_DMA_STATUS 0x40 /* 1 = running, 0 = stop */
#define OXYGEN_CHANNEL_A 0x01
#define OXYGEN_CHANNEL_B 0x02
#define OXYGEN_CHANNEL_C 0x04
#define OXYGEN_CHANNEL_SPDIF 0x08
#define OXYGEN_CHANNEL_MULTICH 0x10
#define OXYGEN_CHANNEL_AC97 0x20
#define OXYGEN_DMA_PAUSE 0x41 /* 1 = pause */
/* OXYGEN_CHANNEL_* */
#define OXYGEN_DMA_RESET 0x42
/* OXYGEN_CHANNEL_* */
#define OXYGEN_PLAY_CHANNELS 0x43
#define OXYGEN_PLAY_CHANNELS_MASK 0x03
#define OXYGEN_PLAY_CHANNELS_2 0x00
#define OXYGEN_PLAY_CHANNELS_4 0x01
#define OXYGEN_PLAY_CHANNELS_6 0x02
#define OXYGEN_PLAY_CHANNELS_8 0x03
#define OXYGEN_DMA_A_BURST_MASK 0x04
#define OXYGEN_DMA_A_BURST_8 0x00 /* dwords */
#define OXYGEN_DMA_A_BURST_16 0x04
#define OXYGEN_DMA_MULTICH_BURST_MASK 0x08
#define OXYGEN_DMA_MULTICH_BURST_8 0x00
#define OXYGEN_DMA_MULTICH_BURST_16 0x08
#define OXYGEN_INTERRUPT_MASK 0x44
/* OXYGEN_CHANNEL_* */
#define OXYGEN_INT_SPDIF_IN_DETECT 0x0100
#define OXYGEN_INT_MCU 0x0200
#define OXYGEN_INT_2WIRE 0x0400
#define OXYGEN_INT_GPIO 0x0800
#define OXYGEN_INT_MCB 0x2000
#define OXYGEN_INT_AC97 0x4000
#define OXYGEN_INTERRUPT_STATUS 0x46
/* OXYGEN_CHANNEL_* amd OXYGEN_INT_* */
#define OXYGEN_INT_MIDI 0x1000
#define OXYGEN_MISC 0x48
#define OXYGEN_MISC_WRITE_PCI_SUBID 0x01
#define OXYGEN_MISC_LATENCY_3F 0x02
#define OXYGEN_MISC_REC_C_FROM_SPDIF 0x04
#define OXYGEN_MISC_REC_B_FROM_AC97 0x08
#define OXYGEN_MISC_REC_A_FROM_MULTICH 0x10
#define OXYGEN_MISC_PCI_MEM_W_1_CLOCK 0x20
#define OXYGEN_MISC_MIDI 0x40
#define OXYGEN_MISC_CRYSTAL_MASK 0x80
#define OXYGEN_MISC_CRYSTAL_24576 0x00
#define OXYGEN_MISC_CRYSTAL_27 0x80 /* MHz */
#define OXYGEN_REC_FORMAT 0x4a
#define OXYGEN_REC_FORMAT_A_MASK 0x03
#define OXYGEN_REC_FORMAT_A_SHIFT 0
#define OXYGEN_REC_FORMAT_B_MASK 0x0c
#define OXYGEN_REC_FORMAT_B_SHIFT 2
#define OXYGEN_REC_FORMAT_C_MASK 0x30
#define OXYGEN_REC_FORMAT_C_SHIFT 4
#define OXYGEN_FORMAT_16 0x00
#define OXYGEN_FORMAT_24 0x01
#define OXYGEN_FORMAT_32 0x02
#define OXYGEN_PLAY_FORMAT 0x4b
#define OXYGEN_SPDIF_FORMAT_MASK 0x03
#define OXYGEN_SPDIF_FORMAT_SHIFT 0
#define OXYGEN_MULTICH_FORMAT_MASK 0x0c
#define OXYGEN_MULTICH_FORMAT_SHIFT 2
/* OXYGEN_FORMAT_* */
#define OXYGEN_REC_CHANNELS 0x4c
#define OXYGEN_REC_CHANNELS_MASK 0x07
#define OXYGEN_REC_CHANNELS_2_2_2 0x00 /* DMA A, B, C */
#define OXYGEN_REC_CHANNELS_4_2_2 0x01
#define OXYGEN_REC_CHANNELS_6_0_2 0x02
#define OXYGEN_REC_CHANNELS_6_2_0 0x03
#define OXYGEN_REC_CHANNELS_8_0_0 0x04
#define OXYGEN_FUNCTION 0x50
#define OXYGEN_FUNCTION_CLOCK_MASK 0x01
#define OXYGEN_FUNCTION_CLOCK_PLL 0x00
#define OXYGEN_FUNCTION_CLOCK_CRYSTAL 0x01
#define OXYGEN_FUNCTION_RESET_CODEC 0x02
#define OXYGEN_FUNCTION_RESET_POL 0x04
#define OXYGEN_FUNCTION_PWDN 0x08
#define OXYGEN_FUNCTION_PWDN_EN 0x10
#define OXYGEN_FUNCTION_PWDN_POL 0x20
#define OXYGEN_FUNCTION_2WIRE_SPI_MASK 0x40
#define OXYGEN_FUNCTION_SPI 0x00
#define OXYGEN_FUNCTION_2WIRE 0x40
#define OXYGEN_FUNCTION_ENABLE_SPI_4_5 0x80 /* 0 = EEPROM */
#define OXYGEN_I2S_MULTICH_FORMAT 0x60
#define OXYGEN_I2S_RATE_MASK 0x0007 /* LRCK */
#define OXYGEN_RATE_32000 0x0000
#define OXYGEN_RATE_44100 0x0001
#define OXYGEN_RATE_48000 0x0002
#define OXYGEN_RATE_64000 0x0003
#define OXYGEN_RATE_88200 0x0004
#define OXYGEN_RATE_96000 0x0005
#define OXYGEN_RATE_176400 0x0006
#define OXYGEN_RATE_192000 0x0007
#define OXYGEN_I2S_FORMAT_MASK 0x0008
#define OXYGEN_I2S_FORMAT_I2S 0x0000
#define OXYGEN_I2S_FORMAT_LJUST 0x0008
#define OXYGEN_I2S_MCLK_MASK 0x0030 /* MCLK/LRCK */
#define OXYGEN_I2S_MCLK_SHIFT 4
#define MCLK_128 0
#define MCLK_256 1
#define MCLK_512 2
#define OXYGEN_I2S_MCLK(f) (((f) & 3) << OXYGEN_I2S_MCLK_SHIFT)
#define OXYGEN_I2S_BITS_MASK 0x00c0
#define OXYGEN_I2S_BITS_16 0x0000
#define OXYGEN_I2S_BITS_20 0x0040
#define OXYGEN_I2S_BITS_24 0x0080
#define OXYGEN_I2S_BITS_32 0x00c0
#define OXYGEN_I2S_MASTER 0x0100
#define OXYGEN_I2S_BCLK_MASK 0x0600 /* BCLK/LRCK */
#define OXYGEN_I2S_BCLK_64 0x0000
#define OXYGEN_I2S_BCLK_128 0x0200
#define OXYGEN_I2S_BCLK_256 0x0400
#define OXYGEN_I2S_MUTE_MCLK 0x0800
#define OXYGEN_I2S_A_FORMAT 0x62
#define OXYGEN_I2S_B_FORMAT 0x64
#define OXYGEN_I2S_C_FORMAT 0x66
/* like OXYGEN_I2S_MULTICH_FORMAT */
#define OXYGEN_SPDIF_CONTROL 0x70
#define OXYGEN_SPDIF_OUT_ENABLE 0x00000002
#define OXYGEN_SPDIF_LOOPBACK 0x00000004 /* in to out */
#define OXYGEN_SPDIF_SENSE_MASK 0x00000008
#define OXYGEN_SPDIF_LOCK_MASK 0x00000010
#define OXYGEN_SPDIF_RATE_MASK 0x00000020
#define OXYGEN_SPDIF_SPDVALID 0x00000040
#define OXYGEN_SPDIF_SENSE_PAR 0x00000200
#define OXYGEN_SPDIF_LOCK_PAR 0x00000400
#define OXYGEN_SPDIF_SENSE_STATUS 0x00000800
#define OXYGEN_SPDIF_LOCK_STATUS 0x00001000
#define OXYGEN_SPDIF_SENSE_INT 0x00002000 /* r/wc */
#define OXYGEN_SPDIF_LOCK_INT 0x00004000 /* r/wc */
#define OXYGEN_SPDIF_RATE_INT 0x00008000 /* r/wc */
#define OXYGEN_SPDIF_IN_CLOCK_MASK 0x00010000
#define OXYGEN_SPDIF_IN_CLOCK_96 0x00000000 /* <= 96 kHz */
#define OXYGEN_SPDIF_IN_CLOCK_192 0x00010000 /* > 96 kHz */
#define OXYGEN_SPDIF_OUT_RATE_MASK 0x07000000
#define OXYGEN_SPDIF_OUT_RATE_SHIFT 24
/* OXYGEN_RATE_* << OXYGEN_SPDIF_OUT_RATE_SHIFT */
#define OXYGEN_SPDIF_OUTPUT_BITS 0x74
#define OXYGEN_SPDIF_NONAUDIO 0x00000002
#define OXYGEN_SPDIF_C 0x00000004
#define OXYGEN_SPDIF_PREEMPHASIS 0x00000008
#define OXYGEN_SPDIF_CATEGORY_MASK 0x000007f0
#define OXYGEN_SPDIF_CATEGORY_SHIFT 4
#define OXYGEN_SPDIF_ORIGINAL 0x00000800
#define OXYGEN_SPDIF_CS_RATE_MASK 0x0000f000
#define OXYGEN_SPDIF_CS_RATE_SHIFT 12
#define OXYGEN_SPDIF_V 0x00010000 /* 0 = valid */
#define OXYGEN_SPDIF_INPUT_BITS 0x78
/* 32 bits, IEC958_AES_* */
#define OXYGEN_EEPROM_CONTROL 0x80
#define OXYGEN_EEPROM_ADDRESS_MASK 0x7f
#define OXYGEN_EEPROM_DIR_MASK 0x80
#define OXYGEN_EEPROM_DIR_READ 0x00
#define OXYGEN_EEPROM_DIR_WRITE 0x80
#define OXYGEN_EEPROM_STATUS 0x81
#define OXYGEN_EEPROM_VALID 0x40
#define OXYGEN_EEPROM_BUSY 0x80
#define OXYGEN_EEPROM_DATA 0x82 /* 16 bits */
#define OXYGEN_2WIRE_CONTROL 0x90
#define OXYGEN_2WIRE_DIR_MASK 0x01
#define OXYGEN_2WIRE_DIR_WRITE 0x00
#define OXYGEN_2WIRE_DIR_READ 0x01
#define OXYGEN_2WIRE_ADDRESS_MASK 0xfe /* slave device address */
#define OXYGEN_2WIRE_ADDRESS_SHIFT 1
#define OXYGEN_2WIRE_MAP 0x91 /* address, 8 bits */
#define OXYGEN_2WIRE_DATA 0x92 /* data, 16 bits */
#define OXYGEN_2WIRE_BUS_STATUS 0x94
#define OXYGEN_2WIRE_BUSY 0x0001
#define OXYGEN_2WIRE_LENGTH_MASK 0x0002
#define OXYGEN_2WIRE_LENGTH_8 0x0000
#define OXYGEN_2WIRE_LENGTH_16 0x0002
#define OXYGEN_2WIRE_MANUAL_READ 0x0004 /* 0 = auto read */
#define OXYGEN_2WIRE_WRITE_MAP_ONLY 0x0008
#define OXYGEN_2WIRE_SLAVE_AD_MASK 0x0030 /* AD0, AD1 */
#define OXYGEN_2WIRE_INTERRUPT_MASK 0x0040 /* 0 = int. if not responding */
#define OXYGEN_2WIRE_SLAVE_NO_RESPONSE 0x0080
#define OXYGEN_2WIRE_SPEED_MASK 0x0100
#define OXYGEN_2WIRE_SPEED_STANDARD 0x0000
#define OXYGEN_2WIRE_SPEED_FAST 0x0100
#define OXYGEN_2WIRE_CLOCK_SYNC 0x0200
#define OXYGEN_2WIRE_BUS_RESET 0x0400
#define OXYGEN_SPI_CONTROL 0x98
#define OXYGEN_SPI_BUSY 0x01 /* read */
#define OXYGEN_SPI_TRIGGER 0x01 /* write */
#define OXYGEN_SPI_DATA_LENGTH_MASK 0x02
#define OXYGEN_SPI_DATA_LENGTH_2 0x00
#define OXYGEN_SPI_DATA_LENGTH_3 0x02
#define OXYGEN_SPI_CLOCK_MASK 0x0c
#define OXYGEN_SPI_CLOCK_160 0x00 /* ns */
#define OXYGEN_SPI_CLOCK_320 0x04
#define OXYGEN_SPI_CLOCK_640 0x08
#define OXYGEN_SPI_CLOCK_1280 0x0c
#define OXYGEN_SPI_CODEC_MASK 0x70 /* 0..5 */
#define OXYGEN_SPI_CODEC_SHIFT 4
#define OXYGEN_SPI_CEN_MASK 0x80
#define OXYGEN_SPI_CEN_LATCH_CLOCK_LO 0x00
#define OXYGEN_SPI_CEN_LATCH_CLOCK_HI 0x80
#define OXYGEN_SPI_DATA1 0x99
#define OXYGEN_SPI_DATA2 0x9a
#define OXYGEN_SPI_DATA3 0x9b
#define OXYGEN_MPU401 0xa0
#define OXYGEN_MPU401_CONTROL 0xa2
#define OXYGEN_MPU401_LOOPBACK 0x01 /* TXD to RXD */
#define OXYGEN_GPI_DATA 0xa4
/* bits 0..5 = pin XGPI0..XGPI5 */
#define OXYGEN_GPI_INTERRUPT_MASK 0xa5
/* bits 0..5, 1 = enable */
#define OXYGEN_GPIO_DATA 0xa6
/* bits 0..9 */
#define OXYGEN_GPIO_CONTROL 0xa8
/* bits 0..9, 0 = input, 1 = output */
#define OXYGEN_GPIO1_XSLAVE_RDY 0x8000
#define OXYGEN_GPIO_INTERRUPT_MASK 0xaa
/* bits 0..9, 1 = enable */
#define OXYGEN_DEVICE_SENSE 0xac
#define OXYGEN_HEAD_PHONE_DETECT 0x01
#define OXYGEN_HEAD_PHONE_MASK 0x06
#define OXYGEN_HEAD_PHONE_PASSIVE_SPK 0x00
#define OXYGEN_HEAD_PHONE_HP 0x02
#define OXYGEN_HEAD_PHONE_ACTIVE_SPK 0x04
#define OXYGEN_MCU_2WIRE_DATA 0xb0
#define OXYGEN_MCU_2WIRE_MAP 0xb2
#define OXYGEN_MCU_2WIRE_STATUS 0xb3
#define OXYGEN_MCU_2WIRE_BUSY 0x01
#define OXYGEN_MCU_2WIRE_LENGTH_MASK 0x06
#define OXYGEN_MCU_2WIRE_LENGTH_1 0x00
#define OXYGEN_MCU_2WIRE_LENGTH_2 0x02
#define OXYGEN_MCU_2WIRE_LENGTH_3 0x04
#define OXYGEN_MCU_2WIRE_WRITE 0x08 /* r/wc */
#define OXYGEN_MCU_2WIRE_READ 0x10 /* r/wc */
#define OXYGEN_MCU_2WIRE_DRV_XACT_FAIL 0x20 /* r/wc */
#define OXYGEN_MCU_2WIRE_RESET 0x40
#define OXYGEN_MCU_2WIRE_CONTROL 0xb4
#define OXYGEN_MCU_2WIRE_DRV_ACK 0x01
#define OXYGEN_MCU_2WIRE_DRV_XACT 0x02
#define OXYGEN_MCU_2WIRE_INT_MASK 0x04
#define OXYGEN_MCU_2WIRE_SYNC_MASK 0x08
#define OXYGEN_MCU_2WIRE_SYNC_RDY_PIN 0x00
#define OXYGEN_MCU_2WIRE_SYNC_DATA 0x08
#define OXYGEN_MCU_2WIRE_ADDRESS_MASK 0x30
#define OXYGEN_MCU_2WIRE_ADDRESS_10 0x00
#define OXYGEN_MCU_2WIRE_ADDRESS_12 0x10
#define OXYGEN_MCU_2WIRE_ADDRESS_14 0x20
#define OXYGEN_MCU_2WIRE_ADDRESS_16 0x30
#define OXYGEN_MCU_2WIRE_INT_POL 0x40
#define OXYGEN_MCU_2WIRE_SYNC_ENABLE 0x80
#define OXYGEN_PLAY_ROUTING 0xc0
#define OXYGEN_PLAY_MUTE01 0x0001
#define OXYGEN_PLAY_MUTE23 0x0002
#define OXYGEN_PLAY_MUTE45 0x0004
#define OXYGEN_PLAY_MUTE67 0x0008
#define OXYGEN_PLAY_MUTE_MASK 0x000f
#define OXYGEN_PLAY_MULTICH_MASK 0x0010
#define OXYGEN_PLAY_MULTICH_I2S_DAC 0x0000
#define OXYGEN_PLAY_MULTICH_AC97 0x0010
#define OXYGEN_PLAY_SPDIF_MASK 0x00e0
#define OXYGEN_PLAY_SPDIF_SPDIF 0x0000
#define OXYGEN_PLAY_SPDIF_MULTICH_01 0x0020
#define OXYGEN_PLAY_SPDIF_MULTICH_23 0x0040
#define OXYGEN_PLAY_SPDIF_MULTICH_45 0x0060
#define OXYGEN_PLAY_SPDIF_MULTICH_67 0x0080
#define OXYGEN_PLAY_SPDIF_REC_A 0x00a0
#define OXYGEN_PLAY_SPDIF_REC_B 0x00c0
#define OXYGEN_PLAY_SPDIF_I2S_ADC_3 0x00e0
#define OXYGEN_PLAY_DAC0_SOURCE_MASK 0x0300
#define OXYGEN_PLAY_DAC0_SOURCE_SHIFT 8
#define OXYGEN_PLAY_DAC1_SOURCE_MASK 0x0c00
#define OXYGEN_PLAY_DAC1_SOURCE_SHIFT 10
#define OXYGEN_PLAY_DAC2_SOURCE_MASK 0x3000
#define OXYGEN_PLAY_DAC2_SOURCE_SHIFT 12
#define OXYGEN_PLAY_DAC3_SOURCE_MASK 0xc000
#define OXYGEN_PLAY_DAC3_SOURCE_SHIFT 14
#define OXYGEN_REC_ROUTING 0xc2
#define OXYGEN_MUTE_I2S_ADC_1 0x01
#define OXYGEN_MUTE_I2S_ADC_2 0x02
#define OXYGEN_MUTE_I2S_ADC_3 0x04
#define OXYGEN_REC_A_ROUTE_MASK 0x08
#define OXYGEN_REC_A_ROUTE_I2S_ADC_1 0x00
#define OXYGEN_REC_A_ROUTE_AC97_0 0x08
#define OXYGEN_REC_B_ROUTE_MASK 0x10
#define OXYGEN_REC_B_ROUTE_I2S_ADC_2 0x00
#define OXYGEN_REC_B_ROUTE_AC97_1 0x10
#define OXYGEN_REC_C_ROUTE_MASK 0x20
#define OXYGEN_REC_C_ROUTE_SPDIF 0x00
#define OXYGEN_REC_C_ROUTE_I2S_ADC_3 0x20
#define OXYGEN_ADC_MONITOR 0xc3
#define OXYGEN_ADC_MONITOR_A 0x01
#define OXYGEN_ADC_MONITOR_A_HALF_VOL 0x02
#define OXYGEN_ADC_MONITOR_B 0x04
#define OXYGEN_ADC_MONITOR_B_HALF_VOL 0x08
#define OXYGEN_ADC_MONITOR_C 0x10
#define OXYGEN_ADC_MONITOR_C_HALF_VOL 0x20
#define OXYGEN_A_MONITOR_ROUTING 0xc4
#define OXYGEN_A_MONITOR_ROUTE_0_MASK 0x03
#define OXYGEN_A_MONITOR_ROUTE_0_SHIFT 0
#define OXYGEN_A_MONITOR_ROUTE_1_MASK 0x0c
#define OXYGEN_A_MONITOR_ROUTE_1_SHIFT 2
#define OXYGEN_A_MONITOR_ROUTE_2_MASK 0x30
#define OXYGEN_A_MONITOR_ROUTE_2_SHIFT 4
#define OXYGEN_A_MONITOR_ROUTE_3_MASK 0xc0
#define OXYGEN_A_MONITOR_ROUTE_3_SHIFT 6
#define OXYGEN_AC97_CONTROL 0xd0
#define OXYGEN_AC97_COLD_RESET 0x0001
#define OXYGEN_AC97_SUSPENDED 0x0002 /* read */
#define OXYGEN_AC97_RESUME 0x0002 /* write */
#define OXYGEN_AC97_CLOCK_DISABLE 0x0004
#define OXYGEN_AC97_NO_CODEC_0 0x0008
#define OXYGEN_AC97_CODEC_0 0x0010
#define OXYGEN_AC97_CODEC_1 0x0020
#define OXYGEN_AC97_INTERRUPT_MASK 0xd2
#define OXYGEN_AC97_INT_READ_DONE 0x01
#define OXYGEN_AC97_INT_WRITE_DONE 0x02
#define OXYGEN_AC97_INT_CODEC_0 0x10
#define OXYGEN_AC97_INT_CODEC_1 0x20
#define OXYGEN_AC97_INTERRUPT_STATUS 0xd3
/* OXYGEN_AC97_INT_* */
#define OXYGEN_AC97_OUT_CONFIG 0xd4
#define OXYGEN_AC97_CODEC1_SLOT3 0x00000001
#define OXYGEN_AC97_CODEC1_SLOT3_VSR 0x00000002
#define OXYGEN_AC97_CODEC1_SLOT4 0x00000010
#define OXYGEN_AC97_CODEC1_SLOT4_VSR 0x00000020
#define OXYGEN_AC97_CODEC0_FRONTL 0x00000100
#define OXYGEN_AC97_CODEC0_FRONTR 0x00000200
#define OXYGEN_AC97_CODEC0_SIDEL 0x00000400
#define OXYGEN_AC97_CODEC0_SIDER 0x00000800
#define OXYGEN_AC97_CODEC0_CENTER 0x00001000
#define OXYGEN_AC97_CODEC0_BASE 0x00002000
#define OXYGEN_AC97_CODEC0_REARL 0x00004000
#define OXYGEN_AC97_CODEC0_REARR 0x00008000
#define OXYGEN_AC97_IN_CONFIG 0xd8
#define OXYGEN_AC97_CODEC1_LINEL 0x00000001
#define OXYGEN_AC97_CODEC1_LINEL_VSR 0x00000002
#define OXYGEN_AC97_CODEC1_LINEL_16 0x00000000
#define OXYGEN_AC97_CODEC1_LINEL_18 0x00000004
#define OXYGEN_AC97_CODEC1_LINEL_20 0x00000008
#define OXYGEN_AC97_CODEC1_LINER 0x00000010
#define OXYGEN_AC97_CODEC1_LINER_VSR 0x00000020
#define OXYGEN_AC97_CODEC1_LINER_16 0x00000000
#define OXYGEN_AC97_CODEC1_LINER_18 0x00000040
#define OXYGEN_AC97_CODEC1_LINER_20 0x00000080
#define OXYGEN_AC97_CODEC0_LINEL 0x00000100
#define OXYGEN_AC97_CODEC0_LINER 0x00000200
#define OXYGEN_AC97_REGS 0xdc
#define OXYGEN_AC97_REG_DATA_MASK 0x0000ffff
#define OXYGEN_AC97_REG_ADDR_MASK 0x007f0000
#define OXYGEN_AC97_REG_ADDR_SHIFT 16
#define OXYGEN_AC97_REG_DIR_MASK 0x00800000
#define OXYGEN_AC97_REG_DIR_WRITE 0x00000000
#define OXYGEN_AC97_REG_DIR_READ 0x00800000
#define OXYGEN_AC97_REG_CODEC_MASK 0x01000000
#define OXYGEN_AC97_REG_CODEC_SHIFT 24
#define OXYGEN_TEST 0xe0
#define OXYGEN_TEST_RAM_SUCCEEDED 0x01
#define OXYGEN_TEST_PLAYBACK_RAM 0x02
#define OXYGEN_TEST_RECORD_RAM 0x04
#define OXYGEN_TEST_PLL 0x08
#define OXYGEN_TEST_2WIRE_LOOPBACK 0x10
#define OXYGEN_DMA_FLUSH 0xe1
/* OXYGEN_CHANNEL_* */
#define OXYGEN_CODEC_VERSION 0xe4
#define OXYGEN_CODEC_ID_MASK 0x07
#define OXYGEN_REVISION 0xe6
#define OXYGEN_PACKAGE_ID_MASK 0x0007
#define OXYGEN_PACKAGE_ID_8786 0x0004
#define OXYGEN_PACKAGE_ID_8787 0x0006
#define OXYGEN_PACKAGE_ID_8788 0x0007
#define OXYGEN_REVISION_MASK 0xfff8
#define OXYGEN_REVISION_2 0x0008
#define OXYGEN_OFFSIN_48K 0xe8
#define OXYGEN_OFFSBASE_48K 0xe9
#define OXYGEN_OFFSBASE_MASK 0x0fff
#define OXYGEN_OFFSIN_44K 0xec
#define OXYGEN_OFFSBASE_44K 0xed
#endif