aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-01-11 10:24:58 -0500
committerTakashi Iwai <tiwai@suse.de>2016-01-11 11:50:15 -0500
commit815ad8623695c7f2aafc216b923b131f1ee12df6 (patch)
treef66eeed2a0dfd011a6207360b81c18e3ffabb583 /sound
parent56f27013482c0803d978b667fe85de04ce9357cd (diff)
parentd0021d3bdfe9d551859bca1f58da0e6be8e26043 (diff)
Merge tag 'asoc-v4.4-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next
ASoC: Last updates for v4.5 A bunch more updates for v4.5, mainly driver work: - More topology API enhancements from Mengdong Lin working towards making everything more component based and being able to specify PCM links via topology. - Large sets driver updates from Cirrus, Intel (mainly more Skylake support) and Renesas. - New driver for AMD ACP - Rename PCM1792a driver to be generic pcm179x
Diffstat (limited to 'sound')
-rw-r--r--sound/hda/ext/hdac_ext_controller.c29
-rw-r--r--sound/hda/ext/hdac_ext_stream.c72
-rw-r--r--sound/soc/Kconfig1
-rw-r--r--sound/soc/Makefile1
-rw-r--r--sound/soc/amd/Kconfig4
-rw-r--r--sound/soc/amd/Makefile3
-rw-r--r--sound/soc/amd/acp-pcm-dma.c1043
-rw-r--r--sound/soc/amd/acp.h118
-rw-r--r--sound/soc/amd/include/acp_2_2_d.h609
-rw-r--r--sound/soc/amd/include/acp_2_2_enum.h1068
-rw-r--r--sound/soc/amd/include/acp_2_2_sh_mask.h2292
-rw-r--r--sound/soc/bcm/bcm2835-i2s.c12
-rw-r--r--sound/soc/codecs/Kconfig6
-rw-r--r--sound/soc/codecs/Makefile4
-rw-r--r--sound/soc/codecs/arizona.c3
-rw-r--r--sound/soc/codecs/da7218.c47
-rw-r--r--sound/soc/codecs/da7219.c74
-rw-r--r--sound/soc/codecs/hdac_hdmi.c180
-rw-r--r--sound/soc/codecs/pcm1792a.c271
-rw-r--r--sound/soc/codecs/pcm179x.c271
-rw-r--r--sound/soc/codecs/pcm179x.h (renamed from sound/soc/codecs/pcm1792a.h)6
-rw-r--r--sound/soc/codecs/rt5640.c103
-rw-r--r--sound/soc/codecs/rt5640.h17
-rw-r--r--sound/soc/codecs/rt5645.c30
-rw-r--r--sound/soc/codecs/rt5651.c31
-rw-r--r--sound/soc/codecs/twl6040.c3
-rw-r--r--sound/soc/codecs/wm5110.c46
-rw-r--r--sound/soc/codecs/wm8960.c24
-rw-r--r--sound/soc/codecs/wm_adsp.c326
-rw-r--r--sound/soc/codecs/wm_adsp.h5
-rw-r--r--sound/soc/dwc/designware_i2s.c4
-rw-r--r--sound/soc/fsl/fsl_asrc.c7
-rw-r--r--sound/soc/fsl/fsl_asrc.h7
-rw-r--r--sound/soc/fsl/fsl_ssi.c24
-rw-r--r--sound/soc/fsl/mpc8610_hpcd.c3
-rw-r--r--sound/soc/fsl/p1022_ds.c3
-rw-r--r--sound/soc/fsl/p1022_rdk.c3
-rw-r--r--sound/soc/intel/Kconfig12
-rw-r--r--sound/soc/intel/atom/sst/sst_acpi.c23
-rw-r--r--sound/soc/intel/boards/Makefile2
-rw-r--r--sound/soc/intel/boards/bytcr_rt5640.c25
-rw-r--r--sound/soc/intel/boards/bytcr_rt5651.c332
-rw-r--r--sound/soc/intel/common/Makefile5
-rw-r--r--sound/soc/intel/skylake/skl-pcm.c56
-rw-r--r--sound/soc/intel/skylake/skl-sst-ipc.c15
-rw-r--r--sound/soc/intel/skylake/skl-sst-ipc.h5
-rw-r--r--sound/soc/intel/skylake/skl.c61
-rw-r--r--sound/soc/intel/skylake/skl.h3
-rw-r--r--sound/soc/rockchip/rockchip_i2s.c9
-rw-r--r--sound/soc/sh/rcar/ssi.c27
-rw-r--r--sound/soc/sh/rcar/ssiu.c2
-rw-r--r--sound/soc/soc-compress.c23
-rw-r--r--sound/soc/soc-core.c274
-rw-r--r--sound/soc/soc-pcm.c28
54 files changed, 7092 insertions, 560 deletions
diff --git a/sound/hda/ext/hdac_ext_controller.c b/sound/hda/ext/hdac_ext_controller.c
index 63215b17247c..548cc1e4114b 100644
--- a/sound/hda/ext/hdac_ext_controller.c
+++ b/sound/hda/ext/hdac_ext_controller.c
@@ -77,6 +77,12 @@ int snd_hdac_ext_bus_parse_capabilities(struct hdac_ext_bus *ebus)
77 ebus->spbcap = bus->remap_addr + offset; 77 ebus->spbcap = bus->remap_addr + offset;
78 break; 78 break;
79 79
80 case AZX_DRSM_CAP_ID:
81 /* DMA resume capability found, handler function */
82 dev_dbg(bus->dev, "Found DRSM capability\n");
83 ebus->drsmcap = bus->remap_addr + offset;
84 break;
85
80 default: 86 default:
81 dev_dbg(bus->dev, "Unknown capability %d\n", cur_cap); 87 dev_dbg(bus->dev, "Unknown capability %d\n", cur_cap);
82 break; 88 break;
@@ -240,7 +246,7 @@ static int check_hdac_link_power_active(struct hdac_ext_link *link, bool enable)
240 int mask = (1 << AZX_MLCTL_CPA); 246 int mask = (1 << AZX_MLCTL_CPA);
241 247
242 udelay(3); 248 udelay(3);
243 timeout = 50; 249 timeout = 150;
244 250
245 do { 251 do {
246 val = readl(link->ml_addr + AZX_REG_ML_LCTL); 252 val = readl(link->ml_addr + AZX_REG_ML_LCTL);
@@ -282,6 +288,27 @@ int snd_hdac_ext_bus_link_power_down(struct hdac_ext_link *link)
282EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down); 288EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down);
283 289
284/** 290/**
291 * snd_hdac_ext_bus_link_power_up_all -power up all hda link
292 * @ebus: HD-audio extended bus
293 */
294int snd_hdac_ext_bus_link_power_up_all(struct hdac_ext_bus *ebus)
295{
296 struct hdac_ext_link *hlink = NULL;
297 int ret;
298
299 list_for_each_entry(hlink, &ebus->hlink_list, list) {
300 snd_hdac_updatel(hlink->ml_addr,
301 AZX_REG_ML_LCTL, 0, AZX_MLCTL_SPA);
302 ret = check_hdac_link_power_active(hlink, true);
303 if (ret < 0)
304 return ret;
305 }
306
307 return 0;
308}
309EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_up_all);
310
311/**
285 * snd_hdac_ext_bus_link_power_down_all -power down all hda link 312 * snd_hdac_ext_bus_link_power_down_all -power down all hda link
286 * @ebus: HD-audio extended bus 313 * @ebus: HD-audio extended bus
287 */ 314 */
diff --git a/sound/hda/ext/hdac_ext_stream.c b/sound/hda/ext/hdac_ext_stream.c
index cb89ec7c8147..023cc4cad5c1 100644
--- a/sound/hda/ext/hdac_ext_stream.c
+++ b/sound/hda/ext/hdac_ext_stream.c
@@ -59,6 +59,10 @@ void snd_hdac_ext_stream_init(struct hdac_ext_bus *ebus,
59 AZX_SPB_MAXFIFO; 59 AZX_SPB_MAXFIFO;
60 } 60 }
61 61
62 if (ebus->drsmcap)
63 stream->dpibr_addr = ebus->drsmcap + AZX_DRSM_BASE +
64 AZX_DRSM_INTERVAL * idx;
65
62 stream->decoupled = false; 66 stream->decoupled = false;
63 snd_hdac_stream_init(bus, &stream->hstream, idx, direction, tag); 67 snd_hdac_stream_init(bus, &stream->hstream, idx, direction, tag);
64} 68}
@@ -107,6 +111,7 @@ void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus)
107 while (!list_empty(&bus->stream_list)) { 111 while (!list_empty(&bus->stream_list)) {
108 s = list_first_entry(&bus->stream_list, struct hdac_stream, list); 112 s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
109 stream = stream_to_hdac_ext_stream(s); 113 stream = stream_to_hdac_ext_stream(s);
114 snd_hdac_ext_stream_decouple(ebus, stream, false);
110 list_del(&s->list); 115 list_del(&s->list);
111 kfree(stream); 116 kfree(stream);
112 } 117 }
@@ -497,3 +502,70 @@ void snd_hdac_ext_stop_streams(struct hdac_ext_bus *ebus)
497 } 502 }
498} 503}
499EXPORT_SYMBOL_GPL(snd_hdac_ext_stop_streams); 504EXPORT_SYMBOL_GPL(snd_hdac_ext_stop_streams);
505
506/**
507 * snd_hdac_ext_stream_drsm_enable - enable DMA resume for a stream
508 * @ebus: HD-audio ext core bus
509 * @enable: flag to enable/disable DRSM
510 * @index: stream index for which DRSM need to be enabled
511 */
512void snd_hdac_ext_stream_drsm_enable(struct hdac_ext_bus *ebus,
513 bool enable, int index)
514{
515 u32 mask = 0;
516 u32 register_mask = 0;
517 struct hdac_bus *bus = &ebus->bus;
518
519 if (!ebus->drsmcap) {
520 dev_err(bus->dev, "Address of DRSM capability is NULL");
521 return;
522 }
523
524 mask |= (1 << index);
525
526 register_mask = readl(ebus->drsmcap + AZX_REG_SPB_SPBFCCTL);
527
528 mask |= register_mask;
529
530 if (enable)
531 snd_hdac_updatel(ebus->drsmcap, AZX_REG_DRSM_CTL, 0, mask);
532 else
533 snd_hdac_updatel(ebus->drsmcap, AZX_REG_DRSM_CTL, mask, 0);
534}
535EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_drsm_enable);
536
537/**
538 * snd_hdac_ext_stream_set_dpibr - sets the dpibr value of a stream
539 * @ebus: HD-audio ext core bus
540 * @stream: hdac_ext_stream
541 * @value: dpib value to set
542 */
543int snd_hdac_ext_stream_set_dpibr(struct hdac_ext_bus *ebus,
544 struct hdac_ext_stream *stream, u32 value)
545{
546 struct hdac_bus *bus = &ebus->bus;
547
548 if (!ebus->drsmcap) {
549 dev_err(bus->dev, "Address of DRSM capability is NULL");
550 return -EINVAL;
551 }
552
553 writel(value, stream->dpibr_addr);
554
555 return 0;
556}
557EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_dpibr);
558
559/**
560 * snd_hdac_ext_stream_set_lpib - sets the lpib value of a stream
561 * @ebus: HD-audio ext core bus
562 * @stream: hdac_ext_stream
563 * @value: lpib value to set
564 */
565int snd_hdac_ext_stream_set_lpib(struct hdac_ext_stream *stream, u32 value)
566{
567 snd_hdac_stream_writel(&stream->hstream, SD_LPIB, value);
568
569 return 0;
570}
571EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_lpib);
diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
index a012b2655e84..7ea66ee3653f 100644
--- a/sound/soc/Kconfig
+++ b/sound/soc/Kconfig
@@ -38,6 +38,7 @@ config SND_SOC_TOPOLOGY
38 38
39# All the supported SoCs 39# All the supported SoCs
40source "sound/soc/adi/Kconfig" 40source "sound/soc/adi/Kconfig"
41source "sound/soc/amd/Kconfig"
41source "sound/soc/atmel/Kconfig" 42source "sound/soc/atmel/Kconfig"
42source "sound/soc/au1x/Kconfig" 43source "sound/soc/au1x/Kconfig"
43source "sound/soc/bcm/Kconfig" 44source "sound/soc/bcm/Kconfig"
diff --git a/sound/soc/Makefile b/sound/soc/Makefile
index 78625fae78d6..9a30f21d16ee 100644
--- a/sound/soc/Makefile
+++ b/sound/soc/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_SND_SOC) += snd-soc-core.o
18obj-$(CONFIG_SND_SOC) += codecs/ 18obj-$(CONFIG_SND_SOC) += codecs/
19obj-$(CONFIG_SND_SOC) += generic/ 19obj-$(CONFIG_SND_SOC) += generic/
20obj-$(CONFIG_SND_SOC) += adi/ 20obj-$(CONFIG_SND_SOC) += adi/
21obj-$(CONFIG_SND_SOC) += amd/
21obj-$(CONFIG_SND_SOC) += atmel/ 22obj-$(CONFIG_SND_SOC) += atmel/
22obj-$(CONFIG_SND_SOC) += au1x/ 23obj-$(CONFIG_SND_SOC) += au1x/
23obj-$(CONFIG_SND_SOC) += bcm/ 24obj-$(CONFIG_SND_SOC) += bcm/
diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig
new file mode 100644
index 000000000000..78187eb24f56
--- /dev/null
+++ b/sound/soc/amd/Kconfig
@@ -0,0 +1,4 @@
1config SND_SOC_AMD_ACP
2 tristate "AMD Audio Coprocessor support"
3 help
4 This option enables ACP DMA support on AMD platform.
diff --git a/sound/soc/amd/Makefile b/sound/soc/amd/Makefile
new file mode 100644
index 000000000000..1a66ec0366b2
--- /dev/null
+++ b/sound/soc/amd/Makefile
@@ -0,0 +1,3 @@
1snd-soc-acp-pcm-objs := acp-pcm-dma.o
2
3obj-$(CONFIG_SND_SOC_AMD_ACP) += snd-soc-acp-pcm.o
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
new file mode 100644
index 000000000000..3191e0a7d273
--- /dev/null
+++ b/sound/soc/amd/acp-pcm-dma.c
@@ -0,0 +1,1043 @@
1/*
2 * AMD ALSA SoC PCM Driver for ACP 2.x
3 *
4 * Copyright 2014-2015 Advanced Micro Devices, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 */
15
16#include <linux/module.h>
17#include <linux/delay.h>
18#include <linux/io.h>
19#include <linux/sizes.h>
20#include <linux/pm_runtime.h>
21
22#include <sound/soc.h>
23
24#include "acp.h"
25
26#define PLAYBACK_MIN_NUM_PERIODS 2
27#define PLAYBACK_MAX_NUM_PERIODS 2
28#define PLAYBACK_MAX_PERIOD_SIZE 16384
29#define PLAYBACK_MIN_PERIOD_SIZE 1024
30#define CAPTURE_MIN_NUM_PERIODS 2
31#define CAPTURE_MAX_NUM_PERIODS 2
32#define CAPTURE_MAX_PERIOD_SIZE 16384
33#define CAPTURE_MIN_PERIOD_SIZE 1024
34
35#define MAX_BUFFER (PLAYBACK_MAX_PERIOD_SIZE * PLAYBACK_MAX_NUM_PERIODS)
36#define MIN_BUFFER MAX_BUFFER
37
38static const struct snd_pcm_hardware acp_pcm_hardware_playback = {
39 .info = SNDRV_PCM_INFO_INTERLEAVED |
40 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP |
41 SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BATCH |
42 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME,
43 .formats = SNDRV_PCM_FMTBIT_S16_LE |
44 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE,
45 .channels_min = 1,
46 .channels_max = 8,
47 .rates = SNDRV_PCM_RATE_8000_96000,
48 .rate_min = 8000,
49 .rate_max = 96000,
50 .buffer_bytes_max = PLAYBACK_MAX_NUM_PERIODS * PLAYBACK_MAX_PERIOD_SIZE,
51 .period_bytes_min = PLAYBACK_MIN_PERIOD_SIZE,
52 .period_bytes_max = PLAYBACK_MAX_PERIOD_SIZE,
53 .periods_min = PLAYBACK_MIN_NUM_PERIODS,
54 .periods_max = PLAYBACK_MAX_NUM_PERIODS,
55};
56
57static const struct snd_pcm_hardware acp_pcm_hardware_capture = {
58 .info = SNDRV_PCM_INFO_INTERLEAVED |
59 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP |
60 SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BATCH |
61 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME,
62 .formats = SNDRV_PCM_FMTBIT_S16_LE |
63 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE,
64 .channels_min = 1,
65 .channels_max = 2,
66 .rates = SNDRV_PCM_RATE_8000_48000,
67 .rate_min = 8000,
68 .rate_max = 48000,
69 .buffer_bytes_max = CAPTURE_MAX_NUM_PERIODS * CAPTURE_MAX_PERIOD_SIZE,
70 .period_bytes_min = CAPTURE_MIN_PERIOD_SIZE,
71 .period_bytes_max = CAPTURE_MAX_PERIOD_SIZE,
72 .periods_min = CAPTURE_MIN_NUM_PERIODS,
73 .periods_max = CAPTURE_MAX_NUM_PERIODS,
74};
75
76struct audio_drv_data {
77 struct snd_pcm_substream *play_stream;
78 struct snd_pcm_substream *capture_stream;
79 void __iomem *acp_mmio;
80};
81
82static u32 acp_reg_read(void __iomem *acp_mmio, u32 reg)
83{
84 return readl(acp_mmio + (reg * 4));
85}
86
87static void acp_reg_write(u32 val, void __iomem *acp_mmio, u32 reg)
88{
89 writel(val, acp_mmio + (reg * 4));
90}
91
92/* Configure a given dma channel parameters - enable/disble,
93 * number of descriptors, priority
94 */
95static void config_acp_dma_channel(void __iomem *acp_mmio, u8 ch_num,
96 u16 dscr_strt_idx, u16 num_dscrs,
97 enum acp_dma_priority_level priority_level)
98{
99 u32 dma_ctrl;
100
101 /* disable the channel run field */
102 dma_ctrl = acp_reg_read(acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
103 dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChRun_MASK;
104 acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
105
106 /* program a DMA channel with first descriptor to be processed. */
107 acp_reg_write((ACP_DMA_DSCR_STRT_IDX_0__DMAChDscrStrtIdx_MASK
108 & dscr_strt_idx),
109 acp_mmio, mmACP_DMA_DSCR_STRT_IDX_0 + ch_num);
110
111 /* program a DMA channel with the number of descriptors to be
112 * processed in the transfer
113 */
114 acp_reg_write(ACP_DMA_DSCR_CNT_0__DMAChDscrCnt_MASK & num_dscrs,
115 acp_mmio, mmACP_DMA_DSCR_CNT_0 + ch_num);
116
117 /* set DMA channel priority */
118 acp_reg_write(priority_level, acp_mmio, mmACP_DMA_PRIO_0 + ch_num);
119}
120
121/* Initialize a dma descriptor in SRAM based on descritor information passed */
122static void config_dma_descriptor_in_sram(void __iomem *acp_mmio,
123 u16 descr_idx,
124 acp_dma_dscr_transfer_t *descr_info)
125{
126 u32 sram_offset;
127
128 sram_offset = (descr_idx * sizeof(acp_dma_dscr_transfer_t));
129
130 /* program the source base address. */
131 acp_reg_write(sram_offset, acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
132 acp_reg_write(descr_info->src, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
133 /* program the destination base address. */
134 acp_reg_write(sram_offset + 4, acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
135 acp_reg_write(descr_info->dest, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
136
137 /* program the number of bytes to be transferred for this descriptor. */
138 acp_reg_write(sram_offset + 8, acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
139 acp_reg_write(descr_info->xfer_val, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
140}
141
142/* Initialize the DMA descriptor information for transfer between
143 * system memory <-> ACP SRAM
144 */
145static void set_acp_sysmem_dma_descriptors(void __iomem *acp_mmio,
146 u32 size, int direction,
147 u32 pte_offset)
148{
149 u16 i;
150 u16 dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH12;
151 acp_dma_dscr_transfer_t dmadscr[NUM_DSCRS_PER_CHANNEL];
152
153 for (i = 0; i < NUM_DSCRS_PER_CHANNEL; i++) {
154 dmadscr[i].xfer_val = 0;
155 if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
156 dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH12 + i;
157 dmadscr[i].dest = ACP_SHARED_RAM_BANK_1_ADDRESS +
158 (size / 2) - (i * (size/2));
159 dmadscr[i].src = ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS
160 + (pte_offset * SZ_4K) + (i * (size/2));
161 dmadscr[i].xfer_val |=
162 (ACP_DMA_ATTRIBUTES_DAGB_ONION_TO_SHAREDMEM << 16) |
163 (size / 2);
164 } else {
165 dma_dscr_idx = CAPTURE_START_DMA_DESCR_CH14 + i;
166 dmadscr[i].src = ACP_SHARED_RAM_BANK_5_ADDRESS +
167 (i * (size/2));
168 dmadscr[i].dest = ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS
169 + (pte_offset * SZ_4K) +
170 (i * (size/2));
171 dmadscr[i].xfer_val |=
172 BIT(22) |
173 (ACP_DMA_ATTRIBUTES_SHAREDMEM_TO_DAGB_ONION << 16) |
174 (size / 2);
175 }
176 config_dma_descriptor_in_sram(acp_mmio, dma_dscr_idx,
177 &dmadscr[i]);
178 }
179 if (direction == SNDRV_PCM_STREAM_PLAYBACK)
180 config_acp_dma_channel(acp_mmio, SYSRAM_TO_ACP_CH_NUM,
181 PLAYBACK_START_DMA_DESCR_CH12,
182 NUM_DSCRS_PER_CHANNEL,
183 ACP_DMA_PRIORITY_LEVEL_NORMAL);
184 else
185 config_acp_dma_channel(acp_mmio, ACP_TO_SYSRAM_CH_NUM,
186 CAPTURE_START_DMA_DESCR_CH14,
187 NUM_DSCRS_PER_CHANNEL,
188 ACP_DMA_PRIORITY_LEVEL_NORMAL);
189}
190
191/* Initialize the DMA descriptor information for transfer between
192 * ACP SRAM <-> I2S
193 */
194static void set_acp_to_i2s_dma_descriptors(void __iomem *acp_mmio,
195 u32 size, int direction)
196{
197
198 u16 i;
199 u16 dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH13;
200 acp_dma_dscr_transfer_t dmadscr[NUM_DSCRS_PER_CHANNEL];
201
202 for (i = 0; i < NUM_DSCRS_PER_CHANNEL; i++) {
203 dmadscr[i].xfer_val = 0;
204 if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
205 dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH13 + i;
206 dmadscr[i].src = ACP_SHARED_RAM_BANK_1_ADDRESS +
207 (i * (size/2));
208 /* dmadscr[i].dest is unused by hardware. */
209 dmadscr[i].dest = 0;
210 dmadscr[i].xfer_val |= BIT(22) | (TO_ACP_I2S_1 << 16) |
211 (size / 2);
212 } else {
213 dma_dscr_idx = CAPTURE_START_DMA_DESCR_CH15 + i;
214 /* dmadscr[i].src is unused by hardware. */
215 dmadscr[i].src = 0;
216 dmadscr[i].dest = ACP_SHARED_RAM_BANK_5_ADDRESS +
217 (i * (size / 2));
218 dmadscr[i].xfer_val |= BIT(22) |
219 (FROM_ACP_I2S_1 << 16) | (size / 2);
220 }
221 config_dma_descriptor_in_sram(acp_mmio, dma_dscr_idx,
222 &dmadscr[i]);
223 }
224 /* Configure the DMA channel with the above descriptore */
225 if (direction == SNDRV_PCM_STREAM_PLAYBACK)
226 config_acp_dma_channel(acp_mmio, ACP_TO_I2S_DMA_CH_NUM,
227 PLAYBACK_START_DMA_DESCR_CH13,
228 NUM_DSCRS_PER_CHANNEL,
229 ACP_DMA_PRIORITY_LEVEL_NORMAL);
230 else
231 config_acp_dma_channel(acp_mmio, I2S_TO_ACP_DMA_CH_NUM,
232 CAPTURE_START_DMA_DESCR_CH15,
233 NUM_DSCRS_PER_CHANNEL,
234 ACP_DMA_PRIORITY_LEVEL_NORMAL);
235}
236
237/* Create page table entries in ACP SRAM for the allocated memory */
238static void acp_pte_config(void __iomem *acp_mmio, struct page *pg,
239 u16 num_of_pages, u32 pte_offset)
240{
241 u16 page_idx;
242 u64 addr;
243 u32 low;
244 u32 high;
245 u32 offset;
246
247 offset = ACP_DAGB_GRP_SRBM_SRAM_BASE_OFFSET + (pte_offset * 8);
248 for (page_idx = 0; page_idx < (num_of_pages); page_idx++) {
249 /* Load the low address of page int ACP SRAM through SRBM */
250 acp_reg_write((offset + (page_idx * 8)),
251 acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
252 addr = page_to_phys(pg);
253
254 low = lower_32_bits(addr);
255 high = upper_32_bits(addr);
256
257 acp_reg_write(low, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
258
259 /* Load the High address of page int ACP SRAM through SRBM */
260 acp_reg_write((offset + (page_idx * 8) + 4),
261 acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
262
263 /* page enable in ACP */
264 high |= BIT(31);
265 acp_reg_write(high, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
266
267 /* Move to next physically contiguos page */
268 pg++;
269 }
270}
271
272static void config_acp_dma(void __iomem *acp_mmio,
273 struct audio_substream_data *audio_config)
274{
275 u32 pte_offset;
276
277 if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK)
278 pte_offset = ACP_PLAYBACK_PTE_OFFSET;
279 else
280 pte_offset = ACP_CAPTURE_PTE_OFFSET;
281
282 acp_pte_config(acp_mmio, audio_config->pg, audio_config->num_of_pages,
283 pte_offset);
284
285 /* Configure System memory <-> ACP SRAM DMA descriptors */
286 set_acp_sysmem_dma_descriptors(acp_mmio, audio_config->size,
287 audio_config->direction, pte_offset);
288
289 /* Configure ACP SRAM <-> I2S DMA descriptors */
290 set_acp_to_i2s_dma_descriptors(acp_mmio, audio_config->size,
291 audio_config->direction);
292}
293
294/* Start a given DMA channel transfer */
295static void acp_dma_start(void __iomem *acp_mmio,
296 u16 ch_num, bool is_circular)
297{
298 u32 dma_ctrl;
299
300 /* read the dma control register and disable the channel run field */
301 dma_ctrl = acp_reg_read(acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
302
303 /* Invalidating the DAGB cache */
304 acp_reg_write(1, acp_mmio, mmACP_DAGB_ATU_CTRL);
305
306 /* configure the DMA channel and start the DMA transfer
307 * set dmachrun bit to start the transfer and enable the
308 * interrupt on completion of the dma transfer
309 */
310 dma_ctrl |= ACP_DMA_CNTL_0__DMAChRun_MASK;
311
312 switch (ch_num) {
313 case ACP_TO_I2S_DMA_CH_NUM:
314 case ACP_TO_SYSRAM_CH_NUM:
315 case I2S_TO_ACP_DMA_CH_NUM:
316 dma_ctrl |= ACP_DMA_CNTL_0__DMAChIOCEn_MASK;
317 break;
318 default:
319 dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChIOCEn_MASK;
320 break;
321 }
322
323 /* enable for ACP SRAM to/from I2S DMA channel */
324 if (is_circular == true)
325 dma_ctrl |= ACP_DMA_CNTL_0__Circular_DMA_En_MASK;
326 else
327 dma_ctrl &= ~ACP_DMA_CNTL_0__Circular_DMA_En_MASK;
328
329 acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
330}
331
332/* Stop a given DMA channel transfer */
333static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num)
334{
335 u32 dma_ctrl;
336 u32 dma_ch_sts;
337 u32 count = ACP_DMA_RESET_TIME;
338
339 dma_ctrl = acp_reg_read(acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
340
341 /* clear the dma control register fields before writing zero
342 * in reset bit
343 */
344 dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChRun_MASK;
345 dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChIOCEn_MASK;
346
347 acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
348 dma_ch_sts = acp_reg_read(acp_mmio, mmACP_DMA_CH_STS);
349
350 if (dma_ch_sts & BIT(ch_num)) {
351 /* set the reset bit for this channel to stop the dma
352 * transfer
353 */
354 dma_ctrl |= ACP_DMA_CNTL_0__DMAChRst_MASK;
355 acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
356 }
357
358 /* check the channel status bit for some time and return the status */
359 while (true) {
360 dma_ch_sts = acp_reg_read(acp_mmio, mmACP_DMA_CH_STS);
361 if (!(dma_ch_sts & BIT(ch_num))) {
362 /* clear the reset flag after successfully stopping
363 * the dma transfer and break from the loop
364 */
365 dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChRst_MASK;
366
367 acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0
368 + ch_num);
369 break;
370 }
371 if (--count == 0) {
372 pr_err("Failed to stop ACP DMA channel : %d\n", ch_num);
373 return -ETIMEDOUT;
374 }
375 udelay(100);
376 }
377 return 0;
378}
379
380static void acp_set_sram_bank_state(void __iomem *acp_mmio, u16 bank,
381 bool power_on)
382{
383 u32 val, req_reg, sts_reg, sts_reg_mask;
384 u32 loops = 1000;
385
386 if (bank < 32) {
387 req_reg = mmACP_MEM_SHUT_DOWN_REQ_LO;
388 sts_reg = mmACP_MEM_SHUT_DOWN_STS_LO;
389 sts_reg_mask = 0xFFFFFFFF;
390
391 } else {
392 bank -= 32;
393 req_reg = mmACP_MEM_SHUT_DOWN_REQ_HI;
394 sts_reg = mmACP_MEM_SHUT_DOWN_STS_HI;
395 sts_reg_mask = 0x0000FFFF;
396 }
397
398 val = acp_reg_read(acp_mmio, req_reg);
399 if (val & (1 << bank)) {
400 /* bank is in off state */
401 if (power_on == true)
402 /* request to on */
403 val &= ~(1 << bank);
404 else
405 /* request to off */
406 return;
407 } else {
408 /* bank is in on state */
409 if (power_on == false)
410 /* request to off */
411 val |= 1 << bank;
412 else
413 /* request to on */
414 return;
415 }
416 acp_reg_write(val, acp_mmio, req_reg);
417
418 while (acp_reg_read(acp_mmio, sts_reg) != sts_reg_mask) {
419 if (!loops--) {
420 pr_err("ACP SRAM bank %d state change failed\n", bank);
421 break;
422 }
423 cpu_relax();
424 }
425}
426
427/* Initialize and bring ACP hardware to default state. */
428static int acp_init(void __iomem *acp_mmio)
429{
430 u16 bank;
431 u32 val, count, sram_pte_offset;
432
433 /* Assert Soft reset of ACP */
434 val = acp_reg_read(acp_mmio, mmACP_SOFT_RESET);
435
436 val |= ACP_SOFT_RESET__SoftResetAud_MASK;
437 acp_reg_write(val, acp_mmio, mmACP_SOFT_RESET);
438
439 count = ACP_SOFT_RESET_DONE_TIME_OUT_VALUE;
440 while (true) {
441 val = acp_reg_read(acp_mmio, mmACP_SOFT_RESET);
442 if (ACP_SOFT_RESET__SoftResetAudDone_MASK ==
443 (val & ACP_SOFT_RESET__SoftResetAudDone_MASK))
444 break;
445 if (--count == 0) {
446 pr_err("Failed to reset ACP\n");
447 return -ETIMEDOUT;
448 }
449 udelay(100);
450 }
451
452 /* Enable clock to ACP and wait until the clock is enabled */
453 val = acp_reg_read(acp_mmio, mmACP_CONTROL);
454 val = val | ACP_CONTROL__ClkEn_MASK;
455 acp_reg_write(val, acp_mmio, mmACP_CONTROL);
456
457 count = ACP_CLOCK_EN_TIME_OUT_VALUE;
458
459 while (true) {
460 val = acp_reg_read(acp_mmio, mmACP_STATUS);
461 if (val & (u32) 0x1)
462 break;
463 if (--count == 0) {
464 pr_err("Failed to reset ACP\n");
465 return -ETIMEDOUT;
466 }
467 udelay(100);
468 }
469
470 /* Deassert the SOFT RESET flags */
471 val = acp_reg_read(acp_mmio, mmACP_SOFT_RESET);
472 val &= ~ACP_SOFT_RESET__SoftResetAud_MASK;
473 acp_reg_write(val, acp_mmio, mmACP_SOFT_RESET);
474
475 /* initiailize Onion control DAGB register */
476 acp_reg_write(ACP_ONION_CNTL_DEFAULT, acp_mmio,
477 mmACP_AXI2DAGB_ONION_CNTL);
478
479 /* initiailize Garlic control DAGB registers */
480 acp_reg_write(ACP_GARLIC_CNTL_DEFAULT, acp_mmio,
481 mmACP_AXI2DAGB_GARLIC_CNTL);
482
483 sram_pte_offset = ACP_DAGB_GRP_SRAM_BASE_ADDRESS |
484 ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBSnoopSel_MASK |
485 ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBTargetMemSel_MASK |
486 ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBGrpEnable_MASK;
487 acp_reg_write(sram_pte_offset, acp_mmio, mmACP_DAGB_BASE_ADDR_GRP_1);
488 acp_reg_write(ACP_PAGE_SIZE_4K_ENABLE, acp_mmio,
489 mmACP_DAGB_PAGE_SIZE_GRP_1);
490
491 acp_reg_write(ACP_SRAM_BASE_ADDRESS, acp_mmio,
492 mmACP_DMA_DESC_BASE_ADDR);
493
494 /* Num of descriptiors in SRAM 0x4, means 256 descriptors;(64 * 4) */
495 acp_reg_write(0x4, acp_mmio, mmACP_DMA_DESC_MAX_NUM_DSCR);
496 acp_reg_write(ACP_EXTERNAL_INTR_CNTL__DMAIOCMask_MASK,
497 acp_mmio, mmACP_EXTERNAL_INTR_CNTL);
498
499 /* When ACP_TILE_P1 is turned on, all SRAM banks get turned on.
500 * Now, turn off all of them. This can't be done in 'poweron' of
501 * ACP pm domain, as this requires ACP to be initialized.
502 */
503 for (bank = 1; bank < 48; bank++)
504 acp_set_sram_bank_state(acp_mmio, bank, false);
505
506 return 0;
507}
508
509/* Deintialize ACP */
510static int acp_deinit(void __iomem *acp_mmio)
511{
512 u32 val;
513 u32 count;
514
515 /* Assert Soft reset of ACP */
516 val = acp_reg_read(acp_mmio, mmACP_SOFT_RESET);
517
518 val |= ACP_SOFT_RESET__SoftResetAud_MASK;
519 acp_reg_write(val, acp_mmio, mmACP_SOFT_RESET);
520
521 count = ACP_SOFT_RESET_DONE_TIME_OUT_VALUE;
522 while (true) {
523 val = acp_reg_read(acp_mmio, mmACP_SOFT_RESET);
524 if (ACP_SOFT_RESET__SoftResetAudDone_MASK ==
525 (val & ACP_SOFT_RESET__SoftResetAudDone_MASK))
526 break;
527 if (--count == 0) {
528 pr_err("Failed to reset ACP\n");
529 return -ETIMEDOUT;
530 }
531 udelay(100);
532 }
533 /** Disable ACP clock */
534 val = acp_reg_read(acp_mmio, mmACP_CONTROL);
535 val &= ~ACP_CONTROL__ClkEn_MASK;
536 acp_reg_write(val, acp_mmio, mmACP_CONTROL);
537
538 count = ACP_CLOCK_EN_TIME_OUT_VALUE;
539
540 while (true) {
541 val = acp_reg_read(acp_mmio, mmACP_STATUS);
542 if (!(val & (u32) 0x1))
543 break;
544 if (--count == 0) {
545 pr_err("Failed to reset ACP\n");
546 return -ETIMEDOUT;
547 }
548 udelay(100);
549 }
550 return 0;
551}
552
553/* ACP DMA irq handler routine for playback, capture usecases */
554static irqreturn_t dma_irq_handler(int irq, void *arg)
555{
556 u16 dscr_idx;
557 u32 intr_flag, ext_intr_status;
558 struct audio_drv_data *irq_data;
559 void __iomem *acp_mmio;
560 struct device *dev = arg;
561 bool valid_irq = false;
562
563 irq_data = dev_get_drvdata(dev);
564 acp_mmio = irq_data->acp_mmio;
565
566 ext_intr_status = acp_reg_read(acp_mmio, mmACP_EXTERNAL_INTR_STAT);
567 intr_flag = (((ext_intr_status &
568 ACP_EXTERNAL_INTR_STAT__DMAIOCStat_MASK) >>
569 ACP_EXTERNAL_INTR_STAT__DMAIOCStat__SHIFT));
570
571 if ((intr_flag & BIT(ACP_TO_I2S_DMA_CH_NUM)) != 0) {
572 valid_irq = true;
573 if (acp_reg_read(acp_mmio, mmACP_DMA_CUR_DSCR_13) ==
574 PLAYBACK_START_DMA_DESCR_CH13)
575 dscr_idx = PLAYBACK_START_DMA_DESCR_CH12;
576 else
577 dscr_idx = PLAYBACK_END_DMA_DESCR_CH12;
578 config_acp_dma_channel(acp_mmio, SYSRAM_TO_ACP_CH_NUM, dscr_idx,
579 1, 0);
580 acp_dma_start(acp_mmio, SYSRAM_TO_ACP_CH_NUM, false);
581
582 snd_pcm_period_elapsed(irq_data->play_stream);
583
584 acp_reg_write((intr_flag & BIT(ACP_TO_I2S_DMA_CH_NUM)) << 16,
585 acp_mmio, mmACP_EXTERNAL_INTR_STAT);
586 }
587
588 if ((intr_flag & BIT(I2S_TO_ACP_DMA_CH_NUM)) != 0) {
589 valid_irq = true;
590 if (acp_reg_read(acp_mmio, mmACP_DMA_CUR_DSCR_15) ==
591 CAPTURE_START_DMA_DESCR_CH15)
592 dscr_idx = CAPTURE_END_DMA_DESCR_CH14;
593 else
594 dscr_idx = CAPTURE_START_DMA_DESCR_CH14;
595 config_acp_dma_channel(acp_mmio, ACP_TO_SYSRAM_CH_NUM, dscr_idx,
596 1, 0);
597 acp_dma_start(acp_mmio, ACP_TO_SYSRAM_CH_NUM, false);
598
599 acp_reg_write((intr_flag & BIT(I2S_TO_ACP_DMA_CH_NUM)) << 16,
600 acp_mmio, mmACP_EXTERNAL_INTR_STAT);
601 }
602
603 if ((intr_flag & BIT(ACP_TO_SYSRAM_CH_NUM)) != 0) {
604 valid_irq = true;
605 snd_pcm_period_elapsed(irq_data->capture_stream);
606 acp_reg_write((intr_flag & BIT(ACP_TO_SYSRAM_CH_NUM)) << 16,
607 acp_mmio, mmACP_EXTERNAL_INTR_STAT);
608 }
609
610 if (valid_irq)
611 return IRQ_HANDLED;
612 else
613 return IRQ_NONE;
614}
615
616static int acp_dma_open(struct snd_pcm_substream *substream)
617{
618 u16 bank;
619 int ret = 0;
620 struct snd_pcm_runtime *runtime = substream->runtime;
621 struct snd_soc_pcm_runtime *prtd = substream->private_data;
622 struct audio_drv_data *intr_data = dev_get_drvdata(prtd->platform->dev);
623
624 struct audio_substream_data *adata =
625 kzalloc(sizeof(struct audio_substream_data), GFP_KERNEL);
626 if (adata == NULL)
627 return -ENOMEM;
628
629 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
630 runtime->hw = acp_pcm_hardware_playback;
631 else
632 runtime->hw = acp_pcm_hardware_capture;
633
634 ret = snd_pcm_hw_constraint_integer(runtime,
635 SNDRV_PCM_HW_PARAM_PERIODS);
636 if (ret < 0) {
637 dev_err(prtd->platform->dev, "set integer constraint failed\n");
638 return ret;
639 }
640
641 adata->acp_mmio = intr_data->acp_mmio;
642 runtime->private_data = adata;
643
644 /* Enable ACP irq, when neither playback or capture streams are
645 * active by the time when a new stream is being opened.
646 * This enablement is not required for another stream, if current
647 * stream is not closed
648 */
649 if (!intr_data->play_stream && !intr_data->capture_stream)
650 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
651
652 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
653 intr_data->play_stream = substream;
654 for (bank = 1; bank <= 4; bank++)
655 acp_set_sram_bank_state(intr_data->acp_mmio, bank,
656 true);
657 } else {
658 intr_data->capture_stream = substream;
659 for (bank = 5; bank <= 8; bank++)
660 acp_set_sram_bank_state(intr_data->acp_mmio, bank,
661 true);
662 }
663
664 return 0;
665}
666
667static int acp_dma_hw_params(struct snd_pcm_substream *substream,
668 struct snd_pcm_hw_params *params)
669{
670 int status;
671 uint64_t size;
672 struct snd_dma_buffer *dma_buffer;
673 struct page *pg;
674 struct snd_pcm_runtime *runtime;
675 struct audio_substream_data *rtd;
676
677 dma_buffer = &substream->dma_buffer;
678
679 runtime = substream->runtime;
680 rtd = runtime->private_data;
681
682 if (WARN_ON(!rtd))
683 return -EINVAL;
684
685 size = params_buffer_bytes(params);
686 status = snd_pcm_lib_malloc_pages(substream, size);
687 if (status < 0)
688 return status;
689
690 memset(substream->runtime->dma_area, 0, params_buffer_bytes(params));
691 pg = virt_to_page(substream->dma_buffer.area);
692
693 if (pg != NULL) {
694 acp_set_sram_bank_state(rtd->acp_mmio, 0, true);
695 /* Save for runtime private data */
696 rtd->pg = pg;
697 rtd->order = get_order(size);
698
699 /* Fill the page table entries in ACP SRAM */
700 rtd->pg = pg;
701 rtd->size = size;
702 rtd->num_of_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
703 rtd->direction = substream->stream;
704
705 config_acp_dma(rtd->acp_mmio, rtd);
706 status = 0;
707 } else {
708 status = -ENOMEM;
709 }
710 return status;
711}
712
713static int acp_dma_hw_free(struct snd_pcm_substream *substream)
714{
715 return snd_pcm_lib_free_pages(substream);
716}
717
718static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream)
719{
720 u16 dscr;
721 u32 mul, dma_config, period_bytes;
722 u32 pos = 0;
723
724 struct snd_pcm_runtime *runtime = substream->runtime;
725 struct audio_substream_data *rtd = runtime->private_data;
726
727 period_bytes = frames_to_bytes(runtime, runtime->period_size);
728 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
729 dscr = acp_reg_read(rtd->acp_mmio, mmACP_DMA_CUR_DSCR_13);
730
731 if (dscr == PLAYBACK_START_DMA_DESCR_CH13)
732 mul = 0;
733 else
734 mul = 1;
735 pos = (mul * period_bytes);
736 } else {
737 dma_config = acp_reg_read(rtd->acp_mmio, mmACP_DMA_CNTL_14);
738 if (dma_config != 0) {
739 dscr = acp_reg_read(rtd->acp_mmio,
740 mmACP_DMA_CUR_DSCR_14);
741 if (dscr == CAPTURE_START_DMA_DESCR_CH14)
742 mul = 1;
743 else
744 mul = 2;
745 pos = (mul * period_bytes);
746 }
747
748 if (pos >= (2 * period_bytes))
749 pos = 0;
750
751 }
752 return bytes_to_frames(runtime, pos);
753}
754
755static int acp_dma_mmap(struct snd_pcm_substream *substream,
756 struct vm_area_struct *vma)
757{
758 return snd_pcm_lib_default_mmap(substream, vma);
759}
760
761static int acp_dma_prepare(struct snd_pcm_substream *substream)
762{
763 struct snd_pcm_runtime *runtime = substream->runtime;
764 struct audio_substream_data *rtd = runtime->private_data;
765
766 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
767 config_acp_dma_channel(rtd->acp_mmio, SYSRAM_TO_ACP_CH_NUM,
768 PLAYBACK_START_DMA_DESCR_CH12,
769 NUM_DSCRS_PER_CHANNEL, 0);
770 config_acp_dma_channel(rtd->acp_mmio, ACP_TO_I2S_DMA_CH_NUM,
771 PLAYBACK_START_DMA_DESCR_CH13,
772 NUM_DSCRS_PER_CHANNEL, 0);
773 /* Fill ACP SRAM (2 periods) with zeros from System RAM
774 * which is zero-ed in hw_params
775 */
776 acp_dma_start(rtd->acp_mmio, SYSRAM_TO_ACP_CH_NUM, false);
777
778 /* ACP SRAM (2 periods of buffer size) is intially filled with
779 * zeros. Before rendering starts, 2nd half of SRAM will be
780 * filled with valid audio data DMA'ed from first half of system
781 * RAM and 1st half of SRAM will be filled with Zeros. This is
782 * the initial scenario when redering starts from SRAM. Later
783 * on, 2nd half of system memory will be DMA'ed to 1st half of
784 * SRAM, 1st half of system memory will be DMA'ed to 2nd half of
785 * SRAM in ping-pong way till rendering stops.
786 */
787 config_acp_dma_channel(rtd->acp_mmio, SYSRAM_TO_ACP_CH_NUM,
788 PLAYBACK_START_DMA_DESCR_CH12,
789 1, 0);
790 } else {
791 config_acp_dma_channel(rtd->acp_mmio, ACP_TO_SYSRAM_CH_NUM,
792 CAPTURE_START_DMA_DESCR_CH14,
793 NUM_DSCRS_PER_CHANNEL, 0);
794 config_acp_dma_channel(rtd->acp_mmio, I2S_TO_ACP_DMA_CH_NUM,
795 CAPTURE_START_DMA_DESCR_CH15,
796 NUM_DSCRS_PER_CHANNEL, 0);
797 }
798 return 0;
799}
800
801static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
802{
803 int ret;
804 u32 loops = 1000;
805
806 struct snd_pcm_runtime *runtime = substream->runtime;
807 struct snd_soc_pcm_runtime *prtd = substream->private_data;
808 struct audio_substream_data *rtd = runtime->private_data;
809
810 if (!rtd)
811 return -EINVAL;
812 switch (cmd) {
813 case SNDRV_PCM_TRIGGER_START:
814 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
815 case SNDRV_PCM_TRIGGER_RESUME:
816 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
817 acp_dma_start(rtd->acp_mmio,
818 SYSRAM_TO_ACP_CH_NUM, false);
819 while (acp_reg_read(rtd->acp_mmio, mmACP_DMA_CH_STS) &
820 BIT(SYSRAM_TO_ACP_CH_NUM)) {
821 if (!loops--) {
822 dev_err(prtd->platform->dev,
823 "acp dma start timeout\n");
824 return -ETIMEDOUT;
825 }
826 cpu_relax();
827 }
828
829 acp_dma_start(rtd->acp_mmio,
830 ACP_TO_I2S_DMA_CH_NUM, true);
831
832 } else {
833 acp_dma_start(rtd->acp_mmio,
834 I2S_TO_ACP_DMA_CH_NUM, true);
835 }
836 ret = 0;
837 break;
838 case SNDRV_PCM_TRIGGER_STOP:
839 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
840 case SNDRV_PCM_TRIGGER_SUSPEND:
841 /* Need to stop only circular DMA channels :
842 * ACP_TO_I2S_DMA_CH_NUM / I2S_TO_ACP_DMA_CH_NUM. Non-circular
843 * channels will stopped automatically after its transfer
844 * completes : SYSRAM_TO_ACP_CH_NUM / ACP_TO_SYSRAM_CH_NUM
845 */
846 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
847 ret = acp_dma_stop(rtd->acp_mmio,
848 ACP_TO_I2S_DMA_CH_NUM);
849 else
850 ret = acp_dma_stop(rtd->acp_mmio,
851 I2S_TO_ACP_DMA_CH_NUM);
852 break;
853 default:
854 ret = -EINVAL;
855
856 }
857 return ret;
858}
859
860static int acp_dma_new(struct snd_soc_pcm_runtime *rtd)
861{
862 return snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
863 SNDRV_DMA_TYPE_DEV,
864 NULL, MIN_BUFFER,
865 MAX_BUFFER);
866}
867
868static int acp_dma_close(struct snd_pcm_substream *substream)
869{
870 u16 bank;
871 struct snd_pcm_runtime *runtime = substream->runtime;
872 struct audio_substream_data *rtd = runtime->private_data;
873 struct snd_soc_pcm_runtime *prtd = substream->private_data;
874 struct audio_drv_data *adata = dev_get_drvdata(prtd->platform->dev);
875
876 kfree(rtd);
877
878 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
879 adata->play_stream = NULL;
880 for (bank = 1; bank <= 4; bank++)
881 acp_set_sram_bank_state(adata->acp_mmio, bank,
882 false);
883 } else {
884 adata->capture_stream = NULL;
885 for (bank = 5; bank <= 8; bank++)
886 acp_set_sram_bank_state(adata->acp_mmio, bank,
887 false);
888 }
889
890 /* Disable ACP irq, when the current stream is being closed and
891 * another stream is also not active.
892 */
893 if (!adata->play_stream && !adata->capture_stream)
894 acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
895
896 return 0;
897}
898
899static struct snd_pcm_ops acp_dma_ops = {
900 .open = acp_dma_open,
901 .close = acp_dma_close,
902 .ioctl = snd_pcm_lib_ioctl,
903 .hw_params = acp_dma_hw_params,
904 .hw_free = acp_dma_hw_free,
905 .trigger = acp_dma_trigger,
906 .pointer = acp_dma_pointer,
907 .mmap = acp_dma_mmap,
908 .prepare = acp_dma_prepare,
909};
910
911static struct snd_soc_platform_driver acp_asoc_platform = {
912 .ops = &acp_dma_ops,
913 .pcm_new = acp_dma_new,
914};
915
916static int acp_audio_probe(struct platform_device *pdev)
917{
918 int status;
919 struct audio_drv_data *audio_drv_data;
920 struct resource *res;
921
922 audio_drv_data = devm_kzalloc(&pdev->dev, sizeof(struct audio_drv_data),
923 GFP_KERNEL);
924 if (audio_drv_data == NULL)
925 return -ENOMEM;
926
927 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
928 audio_drv_data->acp_mmio = devm_ioremap_resource(&pdev->dev, res);
929
930 /* The following members gets populated in device 'open'
931 * function. Till then interrupts are disabled in 'acp_init'
932 * and device doesn't generate any interrupts.
933 */
934
935 audio_drv_data->play_stream = NULL;
936 audio_drv_data->capture_stream = NULL;
937
938 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
939 if (!res) {
940 dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
941 return -ENODEV;
942 }
943
944 status = devm_request_irq(&pdev->dev, res->start, dma_irq_handler,
945 0, "ACP_IRQ", &pdev->dev);
946 if (status) {
947 dev_err(&pdev->dev, "ACP IRQ request failed\n");
948 return status;
949 }
950
951 dev_set_drvdata(&pdev->dev, audio_drv_data);
952
953 /* Initialize the ACP */
954 acp_init(audio_drv_data->acp_mmio);
955
956 status = snd_soc_register_platform(&pdev->dev, &acp_asoc_platform);
957 if (status != 0) {
958 dev_err(&pdev->dev, "Fail to register ALSA platform device\n");
959 return status;
960 }
961
962 pm_runtime_set_autosuspend_delay(&pdev->dev, 10000);
963 pm_runtime_use_autosuspend(&pdev->dev);
964 pm_runtime_enable(&pdev->dev);
965
966 return status;
967}
968
969static int acp_audio_remove(struct platform_device *pdev)
970{
971 struct audio_drv_data *adata = dev_get_drvdata(&pdev->dev);
972
973 acp_deinit(adata->acp_mmio);
974 snd_soc_unregister_platform(&pdev->dev);
975 pm_runtime_disable(&pdev->dev);
976
977 return 0;
978}
979
980static int acp_pcm_resume(struct device *dev)
981{
982 u16 bank;
983 struct audio_drv_data *adata = dev_get_drvdata(dev);
984
985 acp_init(adata->acp_mmio);
986
987 if (adata->play_stream && adata->play_stream->runtime) {
988 for (bank = 1; bank <= 4; bank++)
989 acp_set_sram_bank_state(adata->acp_mmio, bank,
990 true);
991 config_acp_dma(adata->acp_mmio,
992 adata->play_stream->runtime->private_data);
993 }
994 if (adata->capture_stream && adata->capture_stream->runtime) {
995 for (bank = 5; bank <= 8; bank++)
996 acp_set_sram_bank_state(adata->acp_mmio, bank,
997 true);
998 config_acp_dma(adata->acp_mmio,
999 adata->capture_stream->runtime->private_data);
1000 }
1001 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
1002 return 0;
1003}
1004
1005static int acp_pcm_runtime_suspend(struct device *dev)
1006{
1007 struct audio_drv_data *adata = dev_get_drvdata(dev);
1008
1009 acp_deinit(adata->acp_mmio);
1010 acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
1011 return 0;
1012}
1013
1014static int acp_pcm_runtime_resume(struct device *dev)
1015{
1016 struct audio_drv_data *adata = dev_get_drvdata(dev);
1017
1018 acp_init(adata->acp_mmio);
1019 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
1020 return 0;
1021}
1022
1023static const struct dev_pm_ops acp_pm_ops = {
1024 .resume = acp_pcm_resume,
1025 .runtime_suspend = acp_pcm_runtime_suspend,
1026 .runtime_resume = acp_pcm_runtime_resume,
1027};
1028
1029static struct platform_driver acp_dma_driver = {
1030 .probe = acp_audio_probe,
1031 .remove = acp_audio_remove,
1032 .driver = {
1033 .name = "acp_audio_dma",
1034 .pm = &acp_pm_ops,
1035 },
1036};
1037
1038module_platform_driver(acp_dma_driver);
1039
1040MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com");
1041MODULE_DESCRIPTION("AMD ACP PCM Driver");
1042MODULE_LICENSE("GPL v2");
1043MODULE_ALIAS("platform:acp-dma-audio");
diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h
new file mode 100644
index 000000000000..330832ef4e5e
--- /dev/null
+++ b/sound/soc/amd/acp.h
@@ -0,0 +1,118 @@
1#ifndef __ACP_HW_H
2#define __ACP_HW_H
3
4#include "include/acp_2_2_d.h"
5#include "include/acp_2_2_sh_mask.h"
6
7#define ACP_PAGE_SIZE_4K_ENABLE 0x02
8
9#define ACP_PLAYBACK_PTE_OFFSET 10
10#define ACP_CAPTURE_PTE_OFFSET 0
11
12#define ACP_GARLIC_CNTL_DEFAULT 0x00000FB4
13#define ACP_ONION_CNTL_DEFAULT 0x00000FB4
14
15#define ACP_PHYSICAL_BASE 0x14000
16
17/* Playback SRAM address (as a destination in dma descriptor) */
18#define ACP_SHARED_RAM_BANK_1_ADDRESS 0x4002000
19
20/* Capture SRAM address (as a source in dma descriptor) */
21#define ACP_SHARED_RAM_BANK_5_ADDRESS 0x400A000
22
23#define ACP_DMA_RESET_TIME 10000
24#define ACP_CLOCK_EN_TIME_OUT_VALUE 0x000000FF
25#define ACP_SOFT_RESET_DONE_TIME_OUT_VALUE 0x000000FF
26#define ACP_DMA_COMPLETE_TIME_OUT_VALUE 0x000000FF
27
28#define ACP_SRAM_BASE_ADDRESS 0x4000000
29#define ACP_DAGB_GRP_SRAM_BASE_ADDRESS 0x4001000
30#define ACP_DAGB_GRP_SRBM_SRAM_BASE_OFFSET 0x1000
31#define ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS 0x00000000
32#define ACP_INTERNAL_APERTURE_WINDOW_4_ADDRESS 0x01800000
33
34#define TO_ACP_I2S_1 0x2
35#define TO_ACP_I2S_2 0x4
36#define FROM_ACP_I2S_1 0xa
37#define FROM_ACP_I2S_2 0xb
38
39#define ACP_TILE_ON_MASK 0x03
40#define ACP_TILE_OFF_MASK 0x02
41#define ACP_TILE_ON_RETAIN_REG_MASK 0x1f
42#define ACP_TILE_OFF_RETAIN_REG_MASK 0x20
43
44#define ACP_TILE_P1_MASK 0x3e
45#define ACP_TILE_P2_MASK 0x3d
46#define ACP_TILE_DSP0_MASK 0x3b
47#define ACP_TILE_DSP1_MASK 0x37
48
49#define ACP_TILE_DSP2_MASK 0x2f
50/* Playback DMA channels */
51#define SYSRAM_TO_ACP_CH_NUM 12
52#define ACP_TO_I2S_DMA_CH_NUM 13
53
54/* Capture DMA channels */
55#define ACP_TO_SYSRAM_CH_NUM 14
56#define I2S_TO_ACP_DMA_CH_NUM 15
57
58#define NUM_DSCRS_PER_CHANNEL 2
59
60#define PLAYBACK_START_DMA_DESCR_CH12 0
61#define PLAYBACK_END_DMA_DESCR_CH12 1
62#define PLAYBACK_START_DMA_DESCR_CH13 2
63#define PLAYBACK_END_DMA_DESCR_CH13 3
64
65#define CAPTURE_START_DMA_DESCR_CH14 4
66#define CAPTURE_END_DMA_DESCR_CH14 5
67#define CAPTURE_START_DMA_DESCR_CH15 6
68#define CAPTURE_END_DMA_DESCR_CH15 7
69
70enum acp_dma_priority_level {
71 /* 0x0 Specifies the DMA channel is given normal priority */
72 ACP_DMA_PRIORITY_LEVEL_NORMAL = 0x0,
73 /* 0x1 Specifies the DMA channel is given high priority */
74 ACP_DMA_PRIORITY_LEVEL_HIGH = 0x1,
75 ACP_DMA_PRIORITY_LEVEL_FORCESIZE = 0xFF
76};
77
78struct audio_substream_data {
79 struct page *pg;
80 unsigned int order;
81 u16 num_of_pages;
82 u16 direction;
83 uint64_t size;
84 void __iomem *acp_mmio;
85};
86
87enum {
88 ACP_TILE_P1 = 0,
89 ACP_TILE_P2,
90 ACP_TILE_DSP0,
91 ACP_TILE_DSP1,
92 ACP_TILE_DSP2,
93};
94
95enum {
96 ACP_DMA_ATTRIBUTES_SHAREDMEM_TO_DAGB_ONION = 0x0,
97 ACP_DMA_ATTRIBUTES_SHARED_MEM_TO_DAGB_GARLIC = 0x1,
98 ACP_DMA_ATTRIBUTES_DAGB_ONION_TO_SHAREDMEM = 0x8,
99 ACP_DMA_ATTRIBUTES_DAGB_GARLIC_TO_SHAREDMEM = 0x9,
100 ACP_DMA_ATTRIBUTES_FORCE_SIZE = 0xF
101};
102
103typedef struct acp_dma_dscr_transfer {
104 /* Specifies the source memory location for the DMA data transfer. */
105 u32 src;
106 /* Specifies the destination memory location to where the data will
107 * be transferred.
108 */
109 u32 dest;
110 /* Specifies the number of bytes need to be transferred
111 * from source to destination memory.Transfer direction & IOC enable
112 */
113 u32 xfer_val;
114 /* Reserved for future use */
115 u32 reserved;
116} acp_dma_dscr_transfer_t;
117
118#endif /*__ACP_HW_H */
diff --git a/sound/soc/amd/include/acp_2_2_d.h b/sound/soc/amd/include/acp_2_2_d.h
new file mode 100644
index 000000000000..0118fe9e6a87
--- /dev/null
+++ b/sound/soc/amd/include/acp_2_2_d.h
@@ -0,0 +1,609 @@
1/*
2 * ACP_2_2 Register documentation
3 *
4 * Copyright (C) 2014 Advanced Micro Devices, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
23
24#ifndef ACP_2_2_D_H
25#define ACP_2_2_D_H
26
27#define mmACP_DMA_CNTL_0 0x5000
28#define mmACP_DMA_CNTL_1 0x5001
29#define mmACP_DMA_CNTL_2 0x5002
30#define mmACP_DMA_CNTL_3 0x5003
31#define mmACP_DMA_CNTL_4 0x5004
32#define mmACP_DMA_CNTL_5 0x5005
33#define mmACP_DMA_CNTL_6 0x5006
34#define mmACP_DMA_CNTL_7 0x5007
35#define mmACP_DMA_CNTL_8 0x5008
36#define mmACP_DMA_CNTL_9 0x5009
37#define mmACP_DMA_CNTL_10 0x500a
38#define mmACP_DMA_CNTL_11 0x500b
39#define mmACP_DMA_CNTL_12 0x500c
40#define mmACP_DMA_CNTL_13 0x500d
41#define mmACP_DMA_CNTL_14 0x500e
42#define mmACP_DMA_CNTL_15 0x500f
43#define mmACP_DMA_DSCR_STRT_IDX_0 0x5010
44#define mmACP_DMA_DSCR_STRT_IDX_1 0x5011
45#define mmACP_DMA_DSCR_STRT_IDX_2 0x5012
46#define mmACP_DMA_DSCR_STRT_IDX_3 0x5013
47#define mmACP_DMA_DSCR_STRT_IDX_4 0x5014
48#define mmACP_DMA_DSCR_STRT_IDX_5 0x5015
49#define mmACP_DMA_DSCR_STRT_IDX_6 0x5016
50#define mmACP_DMA_DSCR_STRT_IDX_7 0x5017
51#define mmACP_DMA_DSCR_STRT_IDX_8 0x5018
52#define mmACP_DMA_DSCR_STRT_IDX_9 0x5019
53#define mmACP_DMA_DSCR_STRT_IDX_10 0x501a
54#define mmACP_DMA_DSCR_STRT_IDX_11 0x501b
55#define mmACP_DMA_DSCR_STRT_IDX_12 0x501c
56#define mmACP_DMA_DSCR_STRT_IDX_13 0x501d
57#define mmACP_DMA_DSCR_STRT_IDX_14 0x501e
58#define mmACP_DMA_DSCR_STRT_IDX_15 0x501f
59#define mmACP_DMA_DSCR_CNT_0 0x5020
60#define mmACP_DMA_DSCR_CNT_1 0x5021
61#define mmACP_DMA_DSCR_CNT_2 0x5022
62#define mmACP_DMA_DSCR_CNT_3 0x5023
63#define mmACP_DMA_DSCR_CNT_4 0x5024
64#define mmACP_DMA_DSCR_CNT_5 0x5025
65#define mmACP_DMA_DSCR_CNT_6 0x5026
66#define mmACP_DMA_DSCR_CNT_7 0x5027
67#define mmACP_DMA_DSCR_CNT_8 0x5028
68#define mmACP_DMA_DSCR_CNT_9 0x5029
69#define mmACP_DMA_DSCR_CNT_10 0x502a
70#define mmACP_DMA_DSCR_CNT_11 0x502b
71#define mmACP_DMA_DSCR_CNT_12 0x502c
72#define mmACP_DMA_DSCR_CNT_13 0x502d
73#define mmACP_DMA_DSCR_CNT_14 0x502e
74#define mmACP_DMA_DSCR_CNT_15 0x502f
75#define mmACP_DMA_PRIO_0 0x5030
76#define mmACP_DMA_PRIO_1 0x5031
77#define mmACP_DMA_PRIO_2 0x5032
78#define mmACP_DMA_PRIO_3 0x5033
79#define mmACP_DMA_PRIO_4 0x5034
80#define mmACP_DMA_PRIO_5 0x5035
81#define mmACP_DMA_PRIO_6 0x5036
82#define mmACP_DMA_PRIO_7 0x5037
83#define mmACP_DMA_PRIO_8 0x5038
84#define mmACP_DMA_PRIO_9 0x5039
85#define mmACP_DMA_PRIO_10 0x503a
86#define mmACP_DMA_PRIO_11 0x503b
87#define mmACP_DMA_PRIO_12 0x503c
88#define mmACP_DMA_PRIO_13 0x503d
89#define mmACP_DMA_PRIO_14 0x503e
90#define mmACP_DMA_PRIO_15 0x503f
91#define mmACP_DMA_CUR_DSCR_0 0x5040
92#define mmACP_DMA_CUR_DSCR_1 0x5041
93#define mmACP_DMA_CUR_DSCR_2 0x5042
94#define mmACP_DMA_CUR_DSCR_3 0x5043
95#define mmACP_DMA_CUR_DSCR_4 0x5044
96#define mmACP_DMA_CUR_DSCR_5 0x5045
97#define mmACP_DMA_CUR_DSCR_6 0x5046
98#define mmACP_DMA_CUR_DSCR_7 0x5047
99#define mmACP_DMA_CUR_DSCR_8 0x5048
100#define mmACP_DMA_CUR_DSCR_9 0x5049
101#define mmACP_DMA_CUR_DSCR_10 0x504a
102#define mmACP_DMA_CUR_DSCR_11 0x504b
103#define mmACP_DMA_CUR_DSCR_12 0x504c
104#define mmACP_DMA_CUR_DSCR_13 0x504d
105#define mmACP_DMA_CUR_DSCR_14 0x504e
106#define mmACP_DMA_CUR_DSCR_15 0x504f
107#define mmACP_DMA_CUR_TRANS_CNT_0 0x5050
108#define mmACP_DMA_CUR_TRANS_CNT_1 0x5051
109#define mmACP_DMA_CUR_TRANS_CNT_2 0x5052
110#define mmACP_DMA_CUR_TRANS_CNT_3 0x5053
111#define mmACP_DMA_CUR_TRANS_CNT_4 0x5054
112#define mmACP_DMA_CUR_TRANS_CNT_5 0x5055
113#define mmACP_DMA_CUR_TRANS_CNT_6 0x5056
114#define mmACP_DMA_CUR_TRANS_CNT_7 0x5057
115#define mmACP_DMA_CUR_TRANS_CNT_8 0x5058
116#define mmACP_DMA_CUR_TRANS_CNT_9 0x5059
117#define mmACP_DMA_CUR_TRANS_CNT_10 0x505a
118#define mmACP_DMA_CUR_TRANS_CNT_11 0x505b
119#define mmACP_DMA_CUR_TRANS_CNT_12 0x505c
120#define mmACP_DMA_CUR_TRANS_CNT_13 0x505d
121#define mmACP_DMA_CUR_TRANS_CNT_14 0x505e
122#define mmACP_DMA_CUR_TRANS_CNT_15 0x505f
123#define mmACP_DMA_ERR_STS_0 0x5060
124#define mmACP_DMA_ERR_STS_1 0x5061
125#define mmACP_DMA_ERR_STS_2 0x5062
126#define mmACP_DMA_ERR_STS_3 0x5063
127#define mmACP_DMA_ERR_STS_4 0x5064
128#define mmACP_DMA_ERR_STS_5 0x5065
129#define mmACP_DMA_ERR_STS_6 0x5066
130#define mmACP_DMA_ERR_STS_7 0x5067
131#define mmACP_DMA_ERR_STS_8 0x5068
132#define mmACP_DMA_ERR_STS_9 0x5069
133#define mmACP_DMA_ERR_STS_10 0x506a
134#define mmACP_DMA_ERR_STS_11 0x506b
135#define mmACP_DMA_ERR_STS_12 0x506c
136#define mmACP_DMA_ERR_STS_13 0x506d
137#define mmACP_DMA_ERR_STS_14 0x506e
138#define mmACP_DMA_ERR_STS_15 0x506f
139#define mmACP_DMA_DESC_BASE_ADDR 0x5070
140#define mmACP_DMA_DESC_MAX_NUM_DSCR 0x5071
141#define mmACP_DMA_CH_STS 0x5072
142#define mmACP_DMA_CH_GROUP 0x5073
143#define mmACP_DSP0_CACHE_OFFSET0 0x5078
144#define mmACP_DSP0_CACHE_SIZE0 0x5079
145#define mmACP_DSP0_CACHE_OFFSET1 0x507a
146#define mmACP_DSP0_CACHE_SIZE1 0x507b
147#define mmACP_DSP0_CACHE_OFFSET2 0x507c
148#define mmACP_DSP0_CACHE_SIZE2 0x507d
149#define mmACP_DSP0_CACHE_OFFSET3 0x507e
150#define mmACP_DSP0_CACHE_SIZE3 0x507f
151#define mmACP_DSP0_CACHE_OFFSET4 0x5080
152#define mmACP_DSP0_CACHE_SIZE4 0x5081
153#define mmACP_DSP0_CACHE_OFFSET5 0x5082
154#define mmACP_DSP0_CACHE_SIZE5 0x5083
155#define mmACP_DSP0_CACHE_OFFSET6 0x5084
156#define mmACP_DSP0_CACHE_SIZE6 0x5085
157#define mmACP_DSP0_CACHE_OFFSET7 0x5086
158#define mmACP_DSP0_CACHE_SIZE7 0x5087
159#define mmACP_DSP0_CACHE_OFFSET8 0x5088
160#define mmACP_DSP0_CACHE_SIZE8 0x5089
161#define mmACP_DSP0_NONCACHE_OFFSET0 0x508a
162#define mmACP_DSP0_NONCACHE_SIZE0 0x508b
163#define mmACP_DSP0_NONCACHE_OFFSET1 0x508c
164#define mmACP_DSP0_NONCACHE_SIZE1 0x508d
165#define mmACP_DSP0_DEBUG_PC 0x508e
166#define mmACP_DSP0_NMI_SEL 0x508f
167#define mmACP_DSP0_CLKRST_CNTL 0x5090
168#define mmACP_DSP0_RUNSTALL 0x5091
169#define mmACP_DSP0_OCD_HALT_ON_RST 0x5092
170#define mmACP_DSP0_WAIT_MODE 0x5093
171#define mmACP_DSP0_VECT_SEL 0x5094
172#define mmACP_DSP0_DEBUG_REG1 0x5095
173#define mmACP_DSP0_DEBUG_REG2 0x5096
174#define mmACP_DSP0_DEBUG_REG3 0x5097
175#define mmACP_DSP1_CACHE_OFFSET0 0x509d
176#define mmACP_DSP1_CACHE_SIZE0 0x509e
177#define mmACP_DSP1_CACHE_OFFSET1 0x509f
178#define mmACP_DSP1_CACHE_SIZE1 0x50a0
179#define mmACP_DSP1_CACHE_OFFSET2 0x50a1
180#define mmACP_DSP1_CACHE_SIZE2 0x50a2
181#define mmACP_DSP1_CACHE_OFFSET3 0x50a3
182#define mmACP_DSP1_CACHE_SIZE3 0x50a4
183#define mmACP_DSP1_CACHE_OFFSET4 0x50a5
184#define mmACP_DSP1_CACHE_SIZE4 0x50a6
185#define mmACP_DSP1_CACHE_OFFSET5 0x50a7
186#define mmACP_DSP1_CACHE_SIZE5 0x50a8
187#define mmACP_DSP1_CACHE_OFFSET6 0x50a9
188#define mmACP_DSP1_CACHE_SIZE6 0x50aa
189#define mmACP_DSP1_CACHE_OFFSET7 0x50ab
190#define mmACP_DSP1_CACHE_SIZE7 0x50ac
191#define mmACP_DSP1_CACHE_OFFSET8 0x50ad
192#define mmACP_DSP1_CACHE_SIZE8 0x50ae
193#define mmACP_DSP1_NONCACHE_OFFSET0 0x50af
194#define mmACP_DSP1_NONCACHE_SIZE0 0x50b0
195#define mmACP_DSP1_NONCACHE_OFFSET1 0x50b1
196#define mmACP_DSP1_NONCACHE_SIZE1 0x50b2
197#define mmACP_DSP1_DEBUG_PC 0x50b3
198#define mmACP_DSP1_NMI_SEL 0x50b4
199#define mmACP_DSP1_CLKRST_CNTL 0x50b5
200#define mmACP_DSP1_RUNSTALL 0x50b6
201#define mmACP_DSP1_OCD_HALT_ON_RST 0x50b7
202#define mmACP_DSP1_WAIT_MODE 0x50b8
203#define mmACP_DSP1_VECT_SEL 0x50b9
204#define mmACP_DSP1_DEBUG_REG1 0x50ba
205#define mmACP_DSP1_DEBUG_REG2 0x50bb
206#define mmACP_DSP1_DEBUG_REG3 0x50bc
207#define mmACP_DSP2_CACHE_OFFSET0 0x50c2
208#define mmACP_DSP2_CACHE_SIZE0 0x50c3
209#define mmACP_DSP2_CACHE_OFFSET1 0x50c4
210#define mmACP_DSP2_CACHE_SIZE1 0x50c5
211#define mmACP_DSP2_CACHE_OFFSET2 0x50c6
212#define mmACP_DSP2_CACHE_SIZE2 0x50c7
213#define mmACP_DSP2_CACHE_OFFSET3 0x50c8
214#define mmACP_DSP2_CACHE_SIZE3 0x50c9
215#define mmACP_DSP2_CACHE_OFFSET4 0x50ca
216#define mmACP_DSP2_CACHE_SIZE4 0x50cb
217#define mmACP_DSP2_CACHE_OFFSET5 0x50cc
218#define mmACP_DSP2_CACHE_SIZE5 0x50cd
219#define mmACP_DSP2_CACHE_OFFSET6 0x50ce
220#define mmACP_DSP2_CACHE_SIZE6 0x50cf
221#define mmACP_DSP2_CACHE_OFFSET7 0x50d0
222#define mmACP_DSP2_CACHE_SIZE7 0x50d1
223#define mmACP_DSP2_CACHE_OFFSET8 0x50d2
224#define mmACP_DSP2_CACHE_SIZE8 0x50d3
225#define mmACP_DSP2_NONCACHE_OFFSET0 0x50d4
226#define mmACP_DSP2_NONCACHE_SIZE0 0x50d5
227#define mmACP_DSP2_NONCACHE_OFFSET1 0x50d6
228#define mmACP_DSP2_NONCACHE_SIZE1 0x50d7
229#define mmACP_DSP2_DEBUG_PC 0x50d8
230#define mmACP_DSP2_NMI_SEL 0x50d9
231#define mmACP_DSP2_CLKRST_CNTL 0x50da
232#define mmACP_DSP2_RUNSTALL 0x50db
233#define mmACP_DSP2_OCD_HALT_ON_RST 0x50dc
234#define mmACP_DSP2_WAIT_MODE 0x50dd
235#define mmACP_DSP2_VECT_SEL 0x50de
236#define mmACP_DSP2_DEBUG_REG1 0x50df
237#define mmACP_DSP2_DEBUG_REG2 0x50e0
238#define mmACP_DSP2_DEBUG_REG3 0x50e1
239#define mmACP_AXI2DAGB_ONION_CNTL 0x50e7
240#define mmACP_AXI2DAGB_ONION_ERR_STATUS_WR 0x50e8
241#define mmACP_AXI2DAGB_ONION_ERR_STATUS_RD 0x50e9
242#define mmACP_DAGB_Onion_TransPerf_Counter_Control 0x50ea
243#define mmACP_DAGB_Onion_Wr_TransPerf_Counter_Current 0x50eb
244#define mmACP_DAGB_Onion_Wr_TransPerf_Counter_Peak 0x50ec
245#define mmACP_DAGB_Onion_Rd_TransPerf_Counter_Current 0x50ed
246#define mmACP_DAGB_Onion_Rd_TransPerf_Counter_Peak 0x50ee
247#define mmACP_AXI2DAGB_GARLIC_CNTL 0x50f3
248#define mmACP_AXI2DAGB_GARLIC_ERR_STATUS_WR 0x50f4
249#define mmACP_AXI2DAGB_GARLIC_ERR_STATUS_RD 0x50f5
250#define mmACP_DAGB_Garlic_TransPerf_Counter_Control 0x50f6
251#define mmACP_DAGB_Garlic_Wr_TransPerf_Counter_Current 0x50f7
252#define mmACP_DAGB_Garlic_Wr_TransPerf_Counter_Peak 0x50f8
253#define mmACP_DAGB_Garlic_Rd_TransPerf_Counter_Current 0x50f9
254#define mmACP_DAGB_Garlic_Rd_TransPerf_Counter_Peak 0x50fa
255#define mmACP_DAGB_PAGE_SIZE_GRP_1 0x50ff
256#define mmACP_DAGB_BASE_ADDR_GRP_1 0x5100
257#define mmACP_DAGB_PAGE_SIZE_GRP_2 0x5101
258#define mmACP_DAGB_BASE_ADDR_GRP_2 0x5102
259#define mmACP_DAGB_PAGE_SIZE_GRP_3 0x5103
260#define mmACP_DAGB_BASE_ADDR_GRP_3 0x5104
261#define mmACP_DAGB_PAGE_SIZE_GRP_4 0x5105
262#define mmACP_DAGB_BASE_ADDR_GRP_4 0x5106
263#define mmACP_DAGB_PAGE_SIZE_GRP_5 0x5107
264#define mmACP_DAGB_BASE_ADDR_GRP_5 0x5108
265#define mmACP_DAGB_PAGE_SIZE_GRP_6 0x5109
266#define mmACP_DAGB_BASE_ADDR_GRP_6 0x510a
267#define mmACP_DAGB_PAGE_SIZE_GRP_7 0x510b
268#define mmACP_DAGB_BASE_ADDR_GRP_7 0x510c
269#define mmACP_DAGB_PAGE_SIZE_GRP_8 0x510d
270#define mmACP_DAGB_BASE_ADDR_GRP_8 0x510e
271#define mmACP_DAGB_ATU_CTRL 0x510f
272#define mmACP_CONTROL 0x5131
273#define mmACP_STATUS 0x5133
274#define mmACP_SOFT_RESET 0x5134
275#define mmACP_PwrMgmt_CNTL 0x5135
276#define mmACP_CAC_INDICATOR_CONTROL 0x5136
277#define mmACP_SMU_MAILBOX 0x5137
278#define mmACP_FUTURE_REG_SCLK_0 0x5138
279#define mmACP_FUTURE_REG_SCLK_1 0x5139
280#define mmACP_FUTURE_REG_SCLK_2 0x513a
281#define mmACP_FUTURE_REG_SCLK_3 0x513b
282#define mmACP_FUTURE_REG_SCLK_4 0x513c
283#define mmACP_DAGB_DEBUG_CNT_ENABLE 0x513d
284#define mmACP_DAGBG_WR_ASK_CNT 0x513e
285#define mmACP_DAGBG_WR_GO_CNT 0x513f
286#define mmACP_DAGBG_WR_EXP_RESP_CNT 0x5140
287#define mmACP_DAGBG_WR_ACTUAL_RESP_CNT 0x5141
288#define mmACP_DAGBG_RD_ASK_CNT 0x5142
289#define mmACP_DAGBG_RD_GO_CNT 0x5143
290#define mmACP_DAGBG_RD_EXP_RESP_CNT 0x5144
291#define mmACP_DAGBG_RD_ACTUAL_RESP_CNT 0x5145
292#define mmACP_DAGBO_WR_ASK_CNT 0x5146
293#define mmACP_DAGBO_WR_GO_CNT 0x5147
294#define mmACP_DAGBO_WR_EXP_RESP_CNT 0x5148
295#define mmACP_DAGBO_WR_ACTUAL_RESP_CNT 0x5149
296#define mmACP_DAGBO_RD_ASK_CNT 0x514a
297#define mmACP_DAGBO_RD_GO_CNT 0x514b
298#define mmACP_DAGBO_RD_EXP_RESP_CNT 0x514c
299#define mmACP_DAGBO_RD_ACTUAL_RESP_CNT 0x514d
300#define mmACP_BRB_CONTROL 0x5156
301#define mmACP_EXTERNAL_INTR_ENB 0x5157
302#define mmACP_EXTERNAL_INTR_CNTL 0x5158
303#define mmACP_ERROR_SOURCE_STS 0x5159
304#define mmACP_DSP_SW_INTR_TRIG 0x515a
305#define mmACP_DSP_SW_INTR_CNTL 0x515b
306#define mmACP_DAGBG_TIMEOUT_CNTL 0x515c
307#define mmACP_DAGBO_TIMEOUT_CNTL 0x515d
308#define mmACP_EXTERNAL_INTR_STAT 0x515e
309#define mmACP_DSP_SW_INTR_STAT 0x515f
310#define mmACP_DSP0_INTR_CNTL 0x5160
311#define mmACP_DSP0_INTR_STAT 0x5161
312#define mmACP_DSP0_TIMEOUT_CNTL 0x5162
313#define mmACP_DSP1_INTR_CNTL 0x5163
314#define mmACP_DSP1_INTR_STAT 0x5164
315#define mmACP_DSP1_TIMEOUT_CNTL 0x5165
316#define mmACP_DSP2_INTR_CNTL 0x5166
317#define mmACP_DSP2_INTR_STAT 0x5167
318#define mmACP_DSP2_TIMEOUT_CNTL 0x5168
319#define mmACP_DSP0_EXT_TIMER_CNTL 0x5169
320#define mmACP_DSP1_EXT_TIMER_CNTL 0x516a
321#define mmACP_DSP2_EXT_TIMER_CNTL 0x516b
322#define mmACP_AXI2DAGB_SEM_0 0x516c
323#define mmACP_AXI2DAGB_SEM_1 0x516d
324#define mmACP_AXI2DAGB_SEM_2 0x516e
325#define mmACP_AXI2DAGB_SEM_3 0x516f
326#define mmACP_AXI2DAGB_SEM_4 0x5170
327#define mmACP_AXI2DAGB_SEM_5 0x5171
328#define mmACP_AXI2DAGB_SEM_6 0x5172
329#define mmACP_AXI2DAGB_SEM_7 0x5173
330#define mmACP_AXI2DAGB_SEM_8 0x5174
331#define mmACP_AXI2DAGB_SEM_9 0x5175
332#define mmACP_AXI2DAGB_SEM_10 0x5176
333#define mmACP_AXI2DAGB_SEM_11 0x5177
334#define mmACP_AXI2DAGB_SEM_12 0x5178
335#define mmACP_AXI2DAGB_SEM_13 0x5179
336#define mmACP_AXI2DAGB_SEM_14 0x517a
337#define mmACP_AXI2DAGB_SEM_15 0x517b
338#define mmACP_AXI2DAGB_SEM_16 0x517c
339#define mmACP_AXI2DAGB_SEM_17 0x517d
340#define mmACP_AXI2DAGB_SEM_18 0x517e
341#define mmACP_AXI2DAGB_SEM_19 0x517f
342#define mmACP_AXI2DAGB_SEM_20 0x5180
343#define mmACP_AXI2DAGB_SEM_21 0x5181
344#define mmACP_AXI2DAGB_SEM_22 0x5182
345#define mmACP_AXI2DAGB_SEM_23 0x5183
346#define mmACP_AXI2DAGB_SEM_24 0x5184
347#define mmACP_AXI2DAGB_SEM_25 0x5185
348#define mmACP_AXI2DAGB_SEM_26 0x5186
349#define mmACP_AXI2DAGB_SEM_27 0x5187
350#define mmACP_AXI2DAGB_SEM_28 0x5188
351#define mmACP_AXI2DAGB_SEM_29 0x5189
352#define mmACP_AXI2DAGB_SEM_30 0x518a
353#define mmACP_AXI2DAGB_SEM_31 0x518b
354#define mmACP_AXI2DAGB_SEM_32 0x518c
355#define mmACP_AXI2DAGB_SEM_33 0x518d
356#define mmACP_AXI2DAGB_SEM_34 0x518e
357#define mmACP_AXI2DAGB_SEM_35 0x518f
358#define mmACP_AXI2DAGB_SEM_36 0x5190
359#define mmACP_AXI2DAGB_SEM_37 0x5191
360#define mmACP_AXI2DAGB_SEM_38 0x5192
361#define mmACP_AXI2DAGB_SEM_39 0x5193
362#define mmACP_AXI2DAGB_SEM_40 0x5194
363#define mmACP_AXI2DAGB_SEM_41 0x5195
364#define mmACP_AXI2DAGB_SEM_42 0x5196
365#define mmACP_AXI2DAGB_SEM_43 0x5197
366#define mmACP_AXI2DAGB_SEM_44 0x5198
367#define mmACP_AXI2DAGB_SEM_45 0x5199
368#define mmACP_AXI2DAGB_SEM_46 0x519a
369#define mmACP_AXI2DAGB_SEM_47 0x519b
370#define mmACP_SRBM_Client_Base_Addr 0x519c
371#define mmACP_SRBM_Client_RDDATA 0x519d
372#define mmACP_SRBM_Cycle_Sts 0x519e
373#define mmACP_SRBM_Targ_Idx_Addr 0x519f
374#define mmACP_SRBM_Targ_Idx_Data 0x51a0
375#define mmACP_SEMA_ADDR_LOW 0x51a1
376#define mmACP_SEMA_ADDR_HIGH 0x51a2
377#define mmACP_SEMA_CMD 0x51a3
378#define mmACP_SEMA_STS 0x51a4
379#define mmACP_SEMA_REQ 0x51a5
380#define mmACP_FW_STATUS 0x51a6
381#define mmACP_FUTURE_REG_ACLK_0 0x51a7
382#define mmACP_FUTURE_REG_ACLK_1 0x51a8
383#define mmACP_FUTURE_REG_ACLK_2 0x51a9
384#define mmACP_FUTURE_REG_ACLK_3 0x51aa
385#define mmACP_FUTURE_REG_ACLK_4 0x51ab
386#define mmACP_TIMER 0x51ac
387#define mmACP_TIMER_CNTL 0x51ad
388#define mmACP_DSP0_TIMER 0x51ae
389#define mmACP_DSP1_TIMER 0x51af
390#define mmACP_DSP2_TIMER 0x51b0
391#define mmACP_I2S_TRANSMIT_BYTE_CNT_HIGH 0x51b1
392#define mmACP_I2S_TRANSMIT_BYTE_CNT_LOW 0x51b2
393#define mmACP_I2S_BT_TRANSMIT_BYTE_CNT_HIGH 0x51b3
394#define mmACP_I2S_BT_TRANSMIT_BYTE_CNT_LOW 0x51b4
395#define mmACP_I2S_BT_RECEIVE_BYTE_CNT_HIGH 0x51b5
396#define mmACP_I2S_BT_RECEIVE_BYTE_CNT_LOW 0x51b6
397#define mmACP_DSP0_CS_STATE 0x51b7
398#define mmACP_DSP1_CS_STATE 0x51b8
399#define mmACP_DSP2_CS_STATE 0x51b9
400#define mmACP_SCRATCH_REG_BASE_ADDR 0x51ba
401#define mmCC_ACP_EFUSE 0x51c8
402#define mmACP_PGFSM_RETAIN_REG 0x51c9
403#define mmACP_PGFSM_CONFIG_REG 0x51ca
404#define mmACP_PGFSM_WRITE_REG 0x51cb
405#define mmACP_PGFSM_READ_REG_0 0x51cc
406#define mmACP_PGFSM_READ_REG_1 0x51cd
407#define mmACP_PGFSM_READ_REG_2 0x51ce
408#define mmACP_PGFSM_READ_REG_3 0x51cf
409#define mmACP_PGFSM_READ_REG_4 0x51d0
410#define mmACP_PGFSM_READ_REG_5 0x51d1
411#define mmACP_IP_PGFSM_ENABLE 0x51d2
412#define mmACP_I2S_PIN_CONFIG 0x51d3
413#define mmACP_AZALIA_I2S_SELECT 0x51d4
414#define mmACP_CHIP_PKG_FOR_PAD_ISOLATION 0x51d5
415#define mmACP_AUDIO_PAD_PULLUP_PULLDOWN_CTRL 0x51d6
416#define mmACP_BT_UART_PAD_SEL 0x51d7
417#define mmACP_SCRATCH_REG_0 0x52c0
418#define mmACP_SCRATCH_REG_1 0x52c1
419#define mmACP_SCRATCH_REG_2 0x52c2
420#define mmACP_SCRATCH_REG_3 0x52c3
421#define mmACP_SCRATCH_REG_4 0x52c4
422#define mmACP_SCRATCH_REG_5 0x52c5
423#define mmACP_SCRATCH_REG_6 0x52c6
424#define mmACP_SCRATCH_REG_7 0x52c7
425#define mmACP_SCRATCH_REG_8 0x52c8
426#define mmACP_SCRATCH_REG_9 0x52c9
427#define mmACP_SCRATCH_REG_10 0x52ca
428#define mmACP_SCRATCH_REG_11 0x52cb
429#define mmACP_SCRATCH_REG_12 0x52cc
430#define mmACP_SCRATCH_REG_13 0x52cd
431#define mmACP_SCRATCH_REG_14 0x52ce
432#define mmACP_SCRATCH_REG_15 0x52cf
433#define mmACP_SCRATCH_REG_16 0x52d0
434#define mmACP_SCRATCH_REG_17 0x52d1
435#define mmACP_SCRATCH_REG_18 0x52d2
436#define mmACP_SCRATCH_REG_19 0x52d3
437#define mmACP_SCRATCH_REG_20 0x52d4
438#define mmACP_SCRATCH_REG_21 0x52d5
439#define mmACP_SCRATCH_REG_22 0x52d6
440#define mmACP_SCRATCH_REG_23 0x52d7
441#define mmACP_SCRATCH_REG_24 0x52d8
442#define mmACP_SCRATCH_REG_25 0x52d9
443#define mmACP_SCRATCH_REG_26 0x52da
444#define mmACP_SCRATCH_REG_27 0x52db
445#define mmACP_SCRATCH_REG_28 0x52dc
446#define mmACP_SCRATCH_REG_29 0x52dd
447#define mmACP_SCRATCH_REG_30 0x52de
448#define mmACP_SCRATCH_REG_31 0x52df
449#define mmACP_SCRATCH_REG_32 0x52e0
450#define mmACP_SCRATCH_REG_33 0x52e1
451#define mmACP_SCRATCH_REG_34 0x52e2
452#define mmACP_SCRATCH_REG_35 0x52e3
453#define mmACP_SCRATCH_REG_36 0x52e4
454#define mmACP_SCRATCH_REG_37 0x52e5
455#define mmACP_SCRATCH_REG_38 0x52e6
456#define mmACP_SCRATCH_REG_39 0x52e7
457#define mmACP_SCRATCH_REG_40 0x52e8
458#define mmACP_SCRATCH_REG_41 0x52e9
459#define mmACP_SCRATCH_REG_42 0x52ea
460#define mmACP_SCRATCH_REG_43 0x52eb
461#define mmACP_SCRATCH_REG_44 0x52ec
462#define mmACP_SCRATCH_REG_45 0x52ed
463#define mmACP_SCRATCH_REG_46 0x52ee
464#define mmACP_SCRATCH_REG_47 0x52ef
465#define mmACP_VOICE_WAKEUP_ENABLE 0x51e8
466#define mmACP_VOICE_WAKEUP_STATUS 0x51e9
467#define mmI2S_VOICE_WAKEUP_LOWER_THRESHOLD 0x51ea
468#define mmI2S_VOICE_WAKEUP_HIGHER_THRESHOLD 0x51eb
469#define mmI2S_VOICE_WAKEUP_NO_OF_SAMPLES 0x51ec
470#define mmI2S_VOICE_WAKEUP_NO_OF_PEAKS 0x51ed
471#define mmI2S_VOICE_WAKEUP_DURATION_OF_N_PEAKS 0x51ee
472#define mmI2S_VOICE_WAKEUP_BITCLK_TOGGLE_DETECTION 0x51ef
473#define mmI2S_VOICE_WAKEUP_DATA_PATH_SWITCH 0x51f0
474#define mmI2S_VOICE_WAKEUP_DATA_POINTER 0x51f1
475#define mmI2S_VOICE_WAKEUP_AUTH_MATCH 0x51f2
476#define mmI2S_VOICE_WAKEUP_8KB_WRAP 0x51f3
477#define mmACP_I2S_RECEIVED_BYTE_CNT_HIGH 0x51f4
478#define mmACP_I2S_RECEIVED_BYTE_CNT_LOW 0x51f5
479#define mmACP_I2S_MICSP_TRANSMIT_BYTE_CNT_HIGH 0x51f6
480#define mmACP_I2S_MICSP_TRANSMIT_BYTE_CNT_LOW 0x51f7
481#define mmACP_MEM_SHUT_DOWN_REQ_LO 0x51f8
482#define mmACP_MEM_SHUT_DOWN_REQ_HI 0x51f9
483#define mmACP_MEM_SHUT_DOWN_STS_LO 0x51fa
484#define mmACP_MEM_SHUT_DOWN_STS_HI 0x51fb
485#define mmACP_MEM_DEEP_SLEEP_REQ_LO 0x51fc
486#define mmACP_MEM_DEEP_SLEEP_REQ_HI 0x51fd
487#define mmACP_MEM_DEEP_SLEEP_STS_LO 0x51fe
488#define mmACP_MEM_DEEP_SLEEP_STS_HI 0x51ff
489#define mmACP_MEM_WAKEUP_FROM_SHUT_DOWN_LO 0x5200
490#define mmACP_MEM_WAKEUP_FROM_SHUT_DOWN_HI 0x5201
491#define mmACP_MEM_WAKEUP_FROM_SLEEP_LO 0x5202
492#define mmACP_MEM_WAKEUP_FROM_SLEEP_HI 0x5203
493#define mmACP_I2SSP_IER 0x5210
494#define mmACP_I2SSP_IRER 0x5211
495#define mmACP_I2SSP_ITER 0x5212
496#define mmACP_I2SSP_CER 0x5213
497#define mmACP_I2SSP_CCR 0x5214
498#define mmACP_I2SSP_RXFFR 0x5215
499#define mmACP_I2SSP_TXFFR 0x5216
500#define mmACP_I2SSP_LRBR0 0x5218
501#define mmACP_I2SSP_RRBR0 0x5219
502#define mmACP_I2SSP_RER0 0x521a
503#define mmACP_I2SSP_TER0 0x521b
504#define mmACP_I2SSP_RCR0 0x521c
505#define mmACP_I2SSP_TCR0 0x521d
506#define mmACP_I2SSP_ISR0 0x521e
507#define mmACP_I2SSP_IMR0 0x521f
508#define mmACP_I2SSP_ROR0 0x5220
509#define mmACP_I2SSP_TOR0 0x5221
510#define mmACP_I2SSP_RFCR0 0x5222
511#define mmACP_I2SSP_TFCR0 0x5223
512#define mmACP_I2SSP_RFF0 0x5224
513#define mmACP_I2SSP_TFF0 0x5225
514#define mmACP_I2SSP_RXDMA 0x5226
515#define mmACP_I2SSP_RRXDMA 0x5227
516#define mmACP_I2SSP_TXDMA 0x5228
517#define mmACP_I2SSP_RTXDMA 0x5229
518#define mmACP_I2SSP_COMP_PARAM_2 0x522a
519#define mmACP_I2SSP_COMP_PARAM_1 0x522b
520#define mmACP_I2SSP_COMP_VERSION 0x522c
521#define mmACP_I2SSP_COMP_TYPE 0x522d
522#define mmACP_I2SMICSP_IER 0x522e
523#define mmACP_I2SMICSP_IRER 0x522f
524#define mmACP_I2SMICSP_ITER 0x5230
525#define mmACP_I2SMICSP_CER 0x5231
526#define mmACP_I2SMICSP_CCR 0x5232
527#define mmACP_I2SMICSP_RXFFR 0x5233
528#define mmACP_I2SMICSP_TXFFR 0x5234
529#define mmACP_I2SMICSP_LRBR0 0x5236
530#define mmACP_I2SMICSP_RRBR0 0x5237
531#define mmACP_I2SMICSP_RER0 0x5238
532#define mmACP_I2SMICSP_TER0 0x5239
533#define mmACP_I2SMICSP_RCR0 0x523a
534#define mmACP_I2SMICSP_TCR0 0x523b
535#define mmACP_I2SMICSP_ISR0 0x523c
536#define mmACP_I2SMICSP_IMR0 0x523d
537#define mmACP_I2SMICSP_ROR0 0x523e
538#define mmACP_I2SMICSP_TOR0 0x523f
539#define mmACP_I2SMICSP_RFCR0 0x5240
540#define mmACP_I2SMICSP_TFCR0 0x5241
541#define mmACP_I2SMICSP_RFF0 0x5242
542#define mmACP_I2SMICSP_TFF0 0x5243
543#define mmACP_I2SMICSP_LRBR1 0x5246
544#define mmACP_I2SMICSP_RRBR1 0x5247
545#define mmACP_I2SMICSP_RER1 0x5248
546#define mmACP_I2SMICSP_TER1 0x5249
547#define mmACP_I2SMICSP_RCR1 0x524a
548#define mmACP_I2SMICSP_TCR1 0x524b
549#define mmACP_I2SMICSP_ISR1 0x524c
550#define mmACP_I2SMICSP_IMR1 0x524d
551#define mmACP_I2SMICSP_ROR1 0x524e
552#define mmACP_I2SMICSP_TOR1 0x524f
553#define mmACP_I2SMICSP_RFCR1 0x5250
554#define mmACP_I2SMICSP_TFCR1 0x5251
555#define mmACP_I2SMICSP_RFF1 0x5252
556#define mmACP_I2SMICSP_TFF1 0x5253
557#define mmACP_I2SMICSP_RXDMA 0x5254
558#define mmACP_I2SMICSP_RRXDMA 0x5255
559#define mmACP_I2SMICSP_TXDMA 0x5256
560#define mmACP_I2SMICSP_RTXDMA 0x5257
561#define mmACP_I2SMICSP_COMP_PARAM_2 0x5258
562#define mmACP_I2SMICSP_COMP_PARAM_1 0x5259
563#define mmACP_I2SMICSP_COMP_VERSION 0x525a
564#define mmACP_I2SMICSP_COMP_TYPE 0x525b
565#define mmACP_I2SBT_IER 0x525c
566#define mmACP_I2SBT_IRER 0x525d
567#define mmACP_I2SBT_ITER 0x525e
568#define mmACP_I2SBT_CER 0x525f
569#define mmACP_I2SBT_CCR 0x5260
570#define mmACP_I2SBT_RXFFR 0x5261
571#define mmACP_I2SBT_TXFFR 0x5262
572#define mmACP_I2SBT_LRBR0 0x5264
573#define mmACP_I2SBT_RRBR0 0x5265
574#define mmACP_I2SBT_RER0 0x5266
575#define mmACP_I2SBT_TER0 0x5267
576#define mmACP_I2SBT_RCR0 0x5268
577#define mmACP_I2SBT_TCR0 0x5269
578#define mmACP_I2SBT_ISR0 0x526a
579#define mmACP_I2SBT_IMR0 0x526b
580#define mmACP_I2SBT_ROR0 0x526c
581#define mmACP_I2SBT_TOR0 0x526d
582#define mmACP_I2SBT_RFCR0 0x526e
583#define mmACP_I2SBT_TFCR0 0x526f
584#define mmACP_I2SBT_RFF0 0x5270
585#define mmACP_I2SBT_TFF0 0x5271
586#define mmACP_I2SBT_LRBR1 0x5274
587#define mmACP_I2SBT_RRBR1 0x5275
588#define mmACP_I2SBT_RER1 0x5276
589#define mmACP_I2SBT_TER1 0x5277
590#define mmACP_I2SBT_RCR1 0x5278
591#define mmACP_I2SBT_TCR1 0x5279
592#define mmACP_I2SBT_ISR1 0x527a
593#define mmACP_I2SBT_IMR1 0x527b
594#define mmACP_I2SBT_ROR1 0x527c
595#define mmACP_I2SBT_TOR1 0x527d
596#define mmACP_I2SBT_RFCR1 0x527e
597#define mmACP_I2SBT_TFCR1 0x527f
598#define mmACP_I2SBT_RFF1 0x5280
599#define mmACP_I2SBT_TFF1 0x5281
600#define mmACP_I2SBT_RXDMA 0x5282
601#define mmACP_I2SBT_RRXDMA 0x5283
602#define mmACP_I2SBT_TXDMA 0x5284
603#define mmACP_I2SBT_RTXDMA 0x5285
604#define mmACP_I2SBT_COMP_PARAM_2 0x5286
605#define mmACP_I2SBT_COMP_PARAM_1 0x5287
606#define mmACP_I2SBT_COMP_VERSION 0x5288
607#define mmACP_I2SBT_COMP_TYPE 0x5289
608
609#endif /* ACP_2_2_D_H */
diff --git a/sound/soc/amd/include/acp_2_2_enum.h b/sound/soc/amd/include/acp_2_2_enum.h
new file mode 100644
index 000000000000..f3577c851086
--- /dev/null
+++ b/sound/soc/amd/include/acp_2_2_enum.h
@@ -0,0 +1,1068 @@
1/*
2 * ACP_2_2 Register documentation
3 *
4 * Copyright (C) 2014 Advanced Micro Devices, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
23
24#ifndef ACP_2_2_ENUM_H
25#define ACP_2_2_ENUM_H
26
27typedef enum DebugBlockId {
28 DBG_BLOCK_ID_RESERVED = 0x0,
29 DBG_BLOCK_ID_DBG = 0x1,
30 DBG_BLOCK_ID_VMC = 0x2,
31 DBG_BLOCK_ID_PDMA = 0x3,
32 DBG_BLOCK_ID_CG = 0x4,
33 DBG_BLOCK_ID_SRBM = 0x5,
34 DBG_BLOCK_ID_GRBM = 0x6,
35 DBG_BLOCK_ID_RLC = 0x7,
36 DBG_BLOCK_ID_CSC = 0x8,
37 DBG_BLOCK_ID_SEM = 0x9,
38 DBG_BLOCK_ID_IH = 0xa,
39 DBG_BLOCK_ID_SC = 0xb,
40 DBG_BLOCK_ID_SQ = 0xc,
41 DBG_BLOCK_ID_UVDU = 0xd,
42 DBG_BLOCK_ID_SQA = 0xe,
43 DBG_BLOCK_ID_SDMA0 = 0xf,
44 DBG_BLOCK_ID_SDMA1 = 0x10,
45 DBG_BLOCK_ID_SPIM = 0x11,
46 DBG_BLOCK_ID_GDS = 0x12,
47 DBG_BLOCK_ID_VC0 = 0x13,
48 DBG_BLOCK_ID_VC1 = 0x14,
49 DBG_BLOCK_ID_PA0 = 0x15,
50 DBG_BLOCK_ID_PA1 = 0x16,
51 DBG_BLOCK_ID_CP0 = 0x17,
52 DBG_BLOCK_ID_CP1 = 0x18,
53 DBG_BLOCK_ID_CP2 = 0x19,
54 DBG_BLOCK_ID_XBR = 0x1a,
55 DBG_BLOCK_ID_UVDM = 0x1b,
56 DBG_BLOCK_ID_VGT0 = 0x1c,
57 DBG_BLOCK_ID_VGT1 = 0x1d,
58 DBG_BLOCK_ID_IA = 0x1e,
59 DBG_BLOCK_ID_SXM0 = 0x1f,
60 DBG_BLOCK_ID_SXM1 = 0x20,
61 DBG_BLOCK_ID_SCT0 = 0x21,
62 DBG_BLOCK_ID_SCT1 = 0x22,
63 DBG_BLOCK_ID_SPM0 = 0x23,
64 DBG_BLOCK_ID_SPM1 = 0x24,
65 DBG_BLOCK_ID_UNUSED0 = 0x25,
66 DBG_BLOCK_ID_UNUSED1 = 0x26,
67 DBG_BLOCK_ID_TCAA = 0x27,
68 DBG_BLOCK_ID_TCAB = 0x28,
69 DBG_BLOCK_ID_TCCA = 0x29,
70 DBG_BLOCK_ID_TCCB = 0x2a,
71 DBG_BLOCK_ID_MCC0 = 0x2b,
72 DBG_BLOCK_ID_MCC1 = 0x2c,
73 DBG_BLOCK_ID_MCC2 = 0x2d,
74 DBG_BLOCK_ID_MCC3 = 0x2e,
75 DBG_BLOCK_ID_SXS0 = 0x2f,
76 DBG_BLOCK_ID_SXS1 = 0x30,
77 DBG_BLOCK_ID_SXS2 = 0x31,
78 DBG_BLOCK_ID_SXS3 = 0x32,
79 DBG_BLOCK_ID_SXS4 = 0x33,
80 DBG_BLOCK_ID_SXS5 = 0x34,
81 DBG_BLOCK_ID_SXS6 = 0x35,
82 DBG_BLOCK_ID_SXS7 = 0x36,
83 DBG_BLOCK_ID_SXS8 = 0x37,
84 DBG_BLOCK_ID_SXS9 = 0x38,
85 DBG_BLOCK_ID_BCI0 = 0x39,
86 DBG_BLOCK_ID_BCI1 = 0x3a,
87 DBG_BLOCK_ID_BCI2 = 0x3b,
88 DBG_BLOCK_ID_BCI3 = 0x3c,
89 DBG_BLOCK_ID_MCB = 0x3d,
90 DBG_BLOCK_ID_UNUSED6 = 0x3e,
91 DBG_BLOCK_ID_SQA00 = 0x3f,
92 DBG_BLOCK_ID_SQA01 = 0x40,
93 DBG_BLOCK_ID_SQA02 = 0x41,
94 DBG_BLOCK_ID_SQA10 = 0x42,
95 DBG_BLOCK_ID_SQA11 = 0x43,
96 DBG_BLOCK_ID_SQA12 = 0x44,
97 DBG_BLOCK_ID_UNUSED7 = 0x45,
98 DBG_BLOCK_ID_UNUSED8 = 0x46,
99 DBG_BLOCK_ID_SQB00 = 0x47,
100 DBG_BLOCK_ID_SQB01 = 0x48,
101 DBG_BLOCK_ID_SQB10 = 0x49,
102 DBG_BLOCK_ID_SQB11 = 0x4a,
103 DBG_BLOCK_ID_SQ00 = 0x4b,
104 DBG_BLOCK_ID_SQ01 = 0x4c,
105 DBG_BLOCK_ID_SQ10 = 0x4d,
106 DBG_BLOCK_ID_SQ11 = 0x4e,
107 DBG_BLOCK_ID_CB00 = 0x4f,
108 DBG_BLOCK_ID_CB01 = 0x50,
109 DBG_BLOCK_ID_CB02 = 0x51,
110 DBG_BLOCK_ID_CB03 = 0x52,
111 DBG_BLOCK_ID_CB04 = 0x53,
112 DBG_BLOCK_ID_UNUSED9 = 0x54,
113 DBG_BLOCK_ID_UNUSED10 = 0x55,
114 DBG_BLOCK_ID_UNUSED11 = 0x56,
115 DBG_BLOCK_ID_CB10 = 0x57,
116 DBG_BLOCK_ID_CB11 = 0x58,
117 DBG_BLOCK_ID_CB12 = 0x59,
118 DBG_BLOCK_ID_CB13 = 0x5a,
119 DBG_BLOCK_ID_CB14 = 0x5b,
120 DBG_BLOCK_ID_UNUSED12 = 0x5c,
121 DBG_BLOCK_ID_UNUSED13 = 0x5d,
122 DBG_BLOCK_ID_UNUSED14 = 0x5e,
123 DBG_BLOCK_ID_TCP0 = 0x5f,
124 DBG_BLOCK_ID_TCP1 = 0x60,
125 DBG_BLOCK_ID_TCP2 = 0x61,
126 DBG_BLOCK_ID_TCP3 = 0x62,
127 DBG_BLOCK_ID_TCP4 = 0x63,
128 DBG_BLOCK_ID_TCP5 = 0x64,
129 DBG_BLOCK_ID_TCP6 = 0x65,
130 DBG_BLOCK_ID_TCP7 = 0x66,
131 DBG_BLOCK_ID_TCP8 = 0x67,
132 DBG_BLOCK_ID_TCP9 = 0x68,
133 DBG_BLOCK_ID_TCP10 = 0x69,
134 DBG_BLOCK_ID_TCP11 = 0x6a,
135 DBG_BLOCK_ID_TCP12 = 0x6b,
136 DBG_BLOCK_ID_TCP13 = 0x6c,
137 DBG_BLOCK_ID_TCP14 = 0x6d,
138 DBG_BLOCK_ID_TCP15 = 0x6e,
139 DBG_BLOCK_ID_TCP16 = 0x6f,
140 DBG_BLOCK_ID_TCP17 = 0x70,
141 DBG_BLOCK_ID_TCP18 = 0x71,
142 DBG_BLOCK_ID_TCP19 = 0x72,
143 DBG_BLOCK_ID_TCP20 = 0x73,
144 DBG_BLOCK_ID_TCP21 = 0x74,
145 DBG_BLOCK_ID_TCP22 = 0x75,
146 DBG_BLOCK_ID_TCP23 = 0x76,
147 DBG_BLOCK_ID_TCP_RESERVED0 = 0x77,
148 DBG_BLOCK_ID_TCP_RESERVED1 = 0x78,
149 DBG_BLOCK_ID_TCP_RESERVED2 = 0x79,
150 DBG_BLOCK_ID_TCP_RESERVED3 = 0x7a,
151 DBG_BLOCK_ID_TCP_RESERVED4 = 0x7b,
152 DBG_BLOCK_ID_TCP_RESERVED5 = 0x7c,
153 DBG_BLOCK_ID_TCP_RESERVED6 = 0x7d,
154 DBG_BLOCK_ID_TCP_RESERVED7 = 0x7e,
155 DBG_BLOCK_ID_DB00 = 0x7f,
156 DBG_BLOCK_ID_DB01 = 0x80,
157 DBG_BLOCK_ID_DB02 = 0x81,
158 DBG_BLOCK_ID_DB03 = 0x82,
159 DBG_BLOCK_ID_DB04 = 0x83,
160 DBG_BLOCK_ID_UNUSED15 = 0x84,
161 DBG_BLOCK_ID_UNUSED16 = 0x85,
162 DBG_BLOCK_ID_UNUSED17 = 0x86,
163 DBG_BLOCK_ID_DB10 = 0x87,
164 DBG_BLOCK_ID_DB11 = 0x88,
165 DBG_BLOCK_ID_DB12 = 0x89,
166 DBG_BLOCK_ID_DB13 = 0x8a,
167 DBG_BLOCK_ID_DB14 = 0x8b,
168 DBG_BLOCK_ID_UNUSED18 = 0x8c,
169 DBG_BLOCK_ID_UNUSED19 = 0x8d,
170 DBG_BLOCK_ID_UNUSED20 = 0x8e,
171 DBG_BLOCK_ID_TCC0 = 0x8f,
172 DBG_BLOCK_ID_TCC1 = 0x90,
173 DBG_BLOCK_ID_TCC2 = 0x91,
174 DBG_BLOCK_ID_TCC3 = 0x92,
175 DBG_BLOCK_ID_TCC4 = 0x93,
176 DBG_BLOCK_ID_TCC5 = 0x94,
177 DBG_BLOCK_ID_TCC6 = 0x95,
178 DBG_BLOCK_ID_TCC7 = 0x96,
179 DBG_BLOCK_ID_SPS00 = 0x97,
180 DBG_BLOCK_ID_SPS01 = 0x98,
181 DBG_BLOCK_ID_SPS02 = 0x99,
182 DBG_BLOCK_ID_SPS10 = 0x9a,
183 DBG_BLOCK_ID_SPS11 = 0x9b,
184 DBG_BLOCK_ID_SPS12 = 0x9c,
185 DBG_BLOCK_ID_UNUSED21 = 0x9d,
186 DBG_BLOCK_ID_UNUSED22 = 0x9e,
187 DBG_BLOCK_ID_TA00 = 0x9f,
188 DBG_BLOCK_ID_TA01 = 0xa0,
189 DBG_BLOCK_ID_TA02 = 0xa1,
190 DBG_BLOCK_ID_TA03 = 0xa2,
191 DBG_BLOCK_ID_TA04 = 0xa3,
192 DBG_BLOCK_ID_TA05 = 0xa4,
193 DBG_BLOCK_ID_TA06 = 0xa5,
194 DBG_BLOCK_ID_TA07 = 0xa6,
195 DBG_BLOCK_ID_TA08 = 0xa7,
196 DBG_BLOCK_ID_TA09 = 0xa8,
197 DBG_BLOCK_ID_TA0A = 0xa9,
198 DBG_BLOCK_ID_TA0B = 0xaa,
199 DBG_BLOCK_ID_UNUSED23 = 0xab,
200 DBG_BLOCK_ID_UNUSED24 = 0xac,
201 DBG_BLOCK_ID_UNUSED25 = 0xad,
202 DBG_BLOCK_ID_UNUSED26 = 0xae,
203 DBG_BLOCK_ID_TA10 = 0xaf,
204 DBG_BLOCK_ID_TA11 = 0xb0,
205 DBG_BLOCK_ID_TA12 = 0xb1,
206 DBG_BLOCK_ID_TA13 = 0xb2,
207 DBG_BLOCK_ID_TA14 = 0xb3,
208 DBG_BLOCK_ID_TA15 = 0xb4,
209 DBG_BLOCK_ID_TA16 = 0xb5,
210 DBG_BLOCK_ID_TA17 = 0xb6,
211 DBG_BLOCK_ID_TA18 = 0xb7,
212 DBG_BLOCK_ID_TA19 = 0xb8,
213 DBG_BLOCK_ID_TA1A = 0xb9,
214 DBG_BLOCK_ID_TA1B = 0xba,
215 DBG_BLOCK_ID_UNUSED27 = 0xbb,
216 DBG_BLOCK_ID_UNUSED28 = 0xbc,
217 DBG_BLOCK_ID_UNUSED29 = 0xbd,
218 DBG_BLOCK_ID_UNUSED30 = 0xbe,
219 DBG_BLOCK_ID_TD00 = 0xbf,
220 DBG_BLOCK_ID_TD01 = 0xc0,
221 DBG_BLOCK_ID_TD02 = 0xc1,
222 DBG_BLOCK_ID_TD03 = 0xc2,
223 DBG_BLOCK_ID_TD04 = 0xc3,
224 DBG_BLOCK_ID_TD05 = 0xc4,
225 DBG_BLOCK_ID_TD06 = 0xc5,
226 DBG_BLOCK_ID_TD07 = 0xc6,
227 DBG_BLOCK_ID_TD08 = 0xc7,
228 DBG_BLOCK_ID_TD09 = 0xc8,
229 DBG_BLOCK_ID_TD0A = 0xc9,
230 DBG_BLOCK_ID_TD0B = 0xca,
231 DBG_BLOCK_ID_UNUSED31 = 0xcb,
232 DBG_BLOCK_ID_UNUSED32 = 0xcc,
233 DBG_BLOCK_ID_UNUSED33 = 0xcd,
234 DBG_BLOCK_ID_UNUSED34 = 0xce,
235 DBG_BLOCK_ID_TD10 = 0xcf,
236 DBG_BLOCK_ID_TD11 = 0xd0,
237 DBG_BLOCK_ID_TD12 = 0xd1,
238 DBG_BLOCK_ID_TD13 = 0xd2,
239 DBG_BLOCK_ID_TD14 = 0xd3,
240 DBG_BLOCK_ID_TD15 = 0xd4,
241 DBG_BLOCK_ID_TD16 = 0xd5,
242 DBG_BLOCK_ID_TD17 = 0xd6,
243 DBG_BLOCK_ID_TD18 = 0xd7,
244 DBG_BLOCK_ID_TD19 = 0xd8,
245 DBG_BLOCK_ID_TD1A = 0xd9,
246 DBG_BLOCK_ID_TD1B = 0xda,
247 DBG_BLOCK_ID_UNUSED35 = 0xdb,
248 DBG_BLOCK_ID_UNUSED36 = 0xdc,
249 DBG_BLOCK_ID_UNUSED37 = 0xdd,
250 DBG_BLOCK_ID_UNUSED38 = 0xde,
251 DBG_BLOCK_ID_LDS00 = 0xdf,
252 DBG_BLOCK_ID_LDS01 = 0xe0,
253 DBG_BLOCK_ID_LDS02 = 0xe1,
254 DBG_BLOCK_ID_LDS03 = 0xe2,
255 DBG_BLOCK_ID_LDS04 = 0xe3,
256 DBG_BLOCK_ID_LDS05 = 0xe4,
257 DBG_BLOCK_ID_LDS06 = 0xe5,
258 DBG_BLOCK_ID_LDS07 = 0xe6,
259 DBG_BLOCK_ID_LDS08 = 0xe7,
260 DBG_BLOCK_ID_LDS09 = 0xe8,
261 DBG_BLOCK_ID_LDS0A = 0xe9,
262 DBG_BLOCK_ID_LDS0B = 0xea,
263 DBG_BLOCK_ID_UNUSED39 = 0xeb,
264 DBG_BLOCK_ID_UNUSED40 = 0xec,
265 DBG_BLOCK_ID_UNUSED41 = 0xed,
266 DBG_BLOCK_ID_UNUSED42 = 0xee,
267 DBG_BLOCK_ID_LDS10 = 0xef,
268 DBG_BLOCK_ID_LDS11 = 0xf0,
269 DBG_BLOCK_ID_LDS12 = 0xf1,
270 DBG_BLOCK_ID_LDS13 = 0xf2,
271 DBG_BLOCK_ID_LDS14 = 0xf3,
272 DBG_BLOCK_ID_LDS15 = 0xf4,
273 DBG_BLOCK_ID_LDS16 = 0xf5,
274 DBG_BLOCK_ID_LDS17 = 0xf6,
275 DBG_BLOCK_ID_LDS18 = 0xf7,
276 DBG_BLOCK_ID_LDS19 = 0xf8,
277 DBG_BLOCK_ID_LDS1A = 0xf9,
278 DBG_BLOCK_ID_LDS1B = 0xfa,
279 DBG_BLOCK_ID_UNUSED43 = 0xfb,
280 DBG_BLOCK_ID_UNUSED44 = 0xfc,
281 DBG_BLOCK_ID_UNUSED45 = 0xfd,
282 DBG_BLOCK_ID_UNUSED46 = 0xfe,
283} DebugBlockId;
284typedef enum DebugBlockId_BY2 {
285 DBG_BLOCK_ID_RESERVED_BY2 = 0x0,
286 DBG_BLOCK_ID_VMC_BY2 = 0x1,
287 DBG_BLOCK_ID_UNUSED0_BY2 = 0x2,
288 DBG_BLOCK_ID_GRBM_BY2 = 0x3,
289 DBG_BLOCK_ID_CSC_BY2 = 0x4,
290 DBG_BLOCK_ID_IH_BY2 = 0x5,
291 DBG_BLOCK_ID_SQ_BY2 = 0x6,
292 DBG_BLOCK_ID_UVD_BY2 = 0x7,
293 DBG_BLOCK_ID_SDMA0_BY2 = 0x8,
294 DBG_BLOCK_ID_SPIM_BY2 = 0x9,
295 DBG_BLOCK_ID_VC0_BY2 = 0xa,
296 DBG_BLOCK_ID_PA_BY2 = 0xb,
297 DBG_BLOCK_ID_CP0_BY2 = 0xc,
298 DBG_BLOCK_ID_CP2_BY2 = 0xd,
299 DBG_BLOCK_ID_PC0_BY2 = 0xe,
300 DBG_BLOCK_ID_BCI0_BY2 = 0xf,
301 DBG_BLOCK_ID_SXM0_BY2 = 0x10,
302 DBG_BLOCK_ID_SCT0_BY2 = 0x11,
303 DBG_BLOCK_ID_SPM0_BY2 = 0x12,
304 DBG_BLOCK_ID_BCI2_BY2 = 0x13,
305 DBG_BLOCK_ID_TCA_BY2 = 0x14,
306 DBG_BLOCK_ID_TCCA_BY2 = 0x15,
307 DBG_BLOCK_ID_MCC_BY2 = 0x16,
308 DBG_BLOCK_ID_MCC2_BY2 = 0x17,
309 DBG_BLOCK_ID_MCD_BY2 = 0x18,
310 DBG_BLOCK_ID_MCD2_BY2 = 0x19,
311 DBG_BLOCK_ID_MCD4_BY2 = 0x1a,
312 DBG_BLOCK_ID_MCB_BY2 = 0x1b,
313 DBG_BLOCK_ID_SQA_BY2 = 0x1c,
314 DBG_BLOCK_ID_SQA02_BY2 = 0x1d,
315 DBG_BLOCK_ID_SQA11_BY2 = 0x1e,
316 DBG_BLOCK_ID_UNUSED8_BY2 = 0x1f,
317 DBG_BLOCK_ID_SQB_BY2 = 0x20,
318 DBG_BLOCK_ID_SQB10_BY2 = 0x21,
319 DBG_BLOCK_ID_UNUSED10_BY2 = 0x22,
320 DBG_BLOCK_ID_UNUSED12_BY2 = 0x23,
321 DBG_BLOCK_ID_CB_BY2 = 0x24,
322 DBG_BLOCK_ID_CB02_BY2 = 0x25,
323 DBG_BLOCK_ID_CB10_BY2 = 0x26,
324 DBG_BLOCK_ID_CB12_BY2 = 0x27,
325 DBG_BLOCK_ID_SXS_BY2 = 0x28,
326 DBG_BLOCK_ID_SXS2_BY2 = 0x29,
327 DBG_BLOCK_ID_SXS4_BY2 = 0x2a,
328 DBG_BLOCK_ID_SXS6_BY2 = 0x2b,
329 DBG_BLOCK_ID_DB_BY2 = 0x2c,
330 DBG_BLOCK_ID_DB02_BY2 = 0x2d,
331 DBG_BLOCK_ID_DB10_BY2 = 0x2e,
332 DBG_BLOCK_ID_DB12_BY2 = 0x2f,
333 DBG_BLOCK_ID_TCP_BY2 = 0x30,
334 DBG_BLOCK_ID_TCP2_BY2 = 0x31,
335 DBG_BLOCK_ID_TCP4_BY2 = 0x32,
336 DBG_BLOCK_ID_TCP6_BY2 = 0x33,
337 DBG_BLOCK_ID_TCP8_BY2 = 0x34,
338 DBG_BLOCK_ID_TCP10_BY2 = 0x35,
339 DBG_BLOCK_ID_TCP12_BY2 = 0x36,
340 DBG_BLOCK_ID_TCP14_BY2 = 0x37,
341 DBG_BLOCK_ID_TCP16_BY2 = 0x38,
342 DBG_BLOCK_ID_TCP18_BY2 = 0x39,
343 DBG_BLOCK_ID_TCP20_BY2 = 0x3a,
344 DBG_BLOCK_ID_TCP22_BY2 = 0x3b,
345 DBG_BLOCK_ID_TCP_RESERVED0_BY2 = 0x3c,
346 DBG_BLOCK_ID_TCP_RESERVED2_BY2 = 0x3d,
347 DBG_BLOCK_ID_TCP_RESERVED4_BY2 = 0x3e,
348 DBG_BLOCK_ID_TCP_RESERVED6_BY2 = 0x3f,
349 DBG_BLOCK_ID_TCC_BY2 = 0x40,
350 DBG_BLOCK_ID_TCC2_BY2 = 0x41,
351 DBG_BLOCK_ID_TCC4_BY2 = 0x42,
352 DBG_BLOCK_ID_TCC6_BY2 = 0x43,
353 DBG_BLOCK_ID_SPS_BY2 = 0x44,
354 DBG_BLOCK_ID_SPS02_BY2 = 0x45,
355 DBG_BLOCK_ID_SPS11_BY2 = 0x46,
356 DBG_BLOCK_ID_UNUSED14_BY2 = 0x47,
357 DBG_BLOCK_ID_TA_BY2 = 0x48,
358 DBG_BLOCK_ID_TA02_BY2 = 0x49,
359 DBG_BLOCK_ID_TA04_BY2 = 0x4a,
360 DBG_BLOCK_ID_TA06_BY2 = 0x4b,
361 DBG_BLOCK_ID_TA08_BY2 = 0x4c,
362 DBG_BLOCK_ID_TA0A_BY2 = 0x4d,
363 DBG_BLOCK_ID_UNUSED20_BY2 = 0x4e,
364 DBG_BLOCK_ID_UNUSED22_BY2 = 0x4f,
365 DBG_BLOCK_ID_TA10_BY2 = 0x50,
366 DBG_BLOCK_ID_TA12_BY2 = 0x51,
367 DBG_BLOCK_ID_TA14_BY2 = 0x52,
368 DBG_BLOCK_ID_TA16_BY2 = 0x53,
369 DBG_BLOCK_ID_TA18_BY2 = 0x54,
370 DBG_BLOCK_ID_TA1A_BY2 = 0x55,
371 DBG_BLOCK_ID_UNUSED24_BY2 = 0x56,
372 DBG_BLOCK_ID_UNUSED26_BY2 = 0x57,
373 DBG_BLOCK_ID_TD_BY2 = 0x58,
374 DBG_BLOCK_ID_TD02_BY2 = 0x59,
375 DBG_BLOCK_ID_TD04_BY2 = 0x5a,
376 DBG_BLOCK_ID_TD06_BY2 = 0x5b,
377 DBG_BLOCK_ID_TD08_BY2 = 0x5c,
378 DBG_BLOCK_ID_TD0A_BY2 = 0x5d,
379 DBG_BLOCK_ID_UNUSED28_BY2 = 0x5e,
380 DBG_BLOCK_ID_UNUSED30_BY2 = 0x5f,
381 DBG_BLOCK_ID_TD10_BY2 = 0x60,
382 DBG_BLOCK_ID_TD12_BY2 = 0x61,
383 DBG_BLOCK_ID_TD14_BY2 = 0x62,
384 DBG_BLOCK_ID_TD16_BY2 = 0x63,
385 DBG_BLOCK_ID_TD18_BY2 = 0x64,
386 DBG_BLOCK_ID_TD1A_BY2 = 0x65,
387 DBG_BLOCK_ID_UNUSED32_BY2 = 0x66,
388 DBG_BLOCK_ID_UNUSED34_BY2 = 0x67,
389 DBG_BLOCK_ID_LDS_BY2 = 0x68,
390 DBG_BLOCK_ID_LDS02_BY2 = 0x69,
391 DBG_BLOCK_ID_LDS04_BY2 = 0x6a,
392 DBG_BLOCK_ID_LDS06_BY2 = 0x6b,
393 DBG_BLOCK_ID_LDS08_BY2 = 0x6c,
394 DBG_BLOCK_ID_LDS0A_BY2 = 0x6d,
395 DBG_BLOCK_ID_UNUSED36_BY2 = 0x6e,
396 DBG_BLOCK_ID_UNUSED38_BY2 = 0x6f,
397 DBG_BLOCK_ID_LDS10_BY2 = 0x70,
398 DBG_BLOCK_ID_LDS12_BY2 = 0x71,
399 DBG_BLOCK_ID_LDS14_BY2 = 0x72,
400 DBG_BLOCK_ID_LDS16_BY2 = 0x73,
401 DBG_BLOCK_ID_LDS18_BY2 = 0x74,
402 DBG_BLOCK_ID_LDS1A_BY2 = 0x75,
403 DBG_BLOCK_ID_UNUSED40_BY2 = 0x76,
404 DBG_BLOCK_ID_UNUSED42_BY2 = 0x77,
405} DebugBlockId_BY2;
406typedef enum DebugBlockId_BY4 {
407 DBG_BLOCK_ID_RESERVED_BY4 = 0x0,
408 DBG_BLOCK_ID_UNUSED0_BY4 = 0x1,
409 DBG_BLOCK_ID_CSC_BY4 = 0x2,
410 DBG_BLOCK_ID_SQ_BY4 = 0x3,
411 DBG_BLOCK_ID_SDMA0_BY4 = 0x4,
412 DBG_BLOCK_ID_VC0_BY4 = 0x5,
413 DBG_BLOCK_ID_CP0_BY4 = 0x6,
414 DBG_BLOCK_ID_UNUSED1_BY4 = 0x7,
415 DBG_BLOCK_ID_SXM0_BY4 = 0x8,
416 DBG_BLOCK_ID_SPM0_BY4 = 0x9,
417 DBG_BLOCK_ID_TCAA_BY4 = 0xa,
418 DBG_BLOCK_ID_MCC_BY4 = 0xb,
419 DBG_BLOCK_ID_MCD_BY4 = 0xc,
420 DBG_BLOCK_ID_MCD4_BY4 = 0xd,
421 DBG_BLOCK_ID_SQA_BY4 = 0xe,
422 DBG_BLOCK_ID_SQA11_BY4 = 0xf,
423 DBG_BLOCK_ID_SQB_BY4 = 0x10,
424 DBG_BLOCK_ID_UNUSED10_BY4 = 0x11,
425 DBG_BLOCK_ID_CB_BY4 = 0x12,
426 DBG_BLOCK_ID_CB10_BY4 = 0x13,
427 DBG_BLOCK_ID_SXS_BY4 = 0x14,
428 DBG_BLOCK_ID_SXS4_BY4 = 0x15,
429 DBG_BLOCK_ID_DB_BY4 = 0x16,
430 DBG_BLOCK_ID_DB10_BY4 = 0x17,
431 DBG_BLOCK_ID_TCP_BY4 = 0x18,
432 DBG_BLOCK_ID_TCP4_BY4 = 0x19,
433 DBG_BLOCK_ID_TCP8_BY4 = 0x1a,
434 DBG_BLOCK_ID_TCP12_BY4 = 0x1b,
435 DBG_BLOCK_ID_TCP16_BY4 = 0x1c,
436 DBG_BLOCK_ID_TCP20_BY4 = 0x1d,
437 DBG_BLOCK_ID_TCP_RESERVED0_BY4 = 0x1e,
438 DBG_BLOCK_ID_TCP_RESERVED4_BY4 = 0x1f,
439 DBG_BLOCK_ID_TCC_BY4 = 0x20,
440 DBG_BLOCK_ID_TCC4_BY4 = 0x21,
441 DBG_BLOCK_ID_SPS_BY4 = 0x22,
442 DBG_BLOCK_ID_SPS11_BY4 = 0x23,
443 DBG_BLOCK_ID_TA_BY4 = 0x24,
444 DBG_BLOCK_ID_TA04_BY4 = 0x25,
445 DBG_BLOCK_ID_TA08_BY4 = 0x26,
446 DBG_BLOCK_ID_UNUSED20_BY4 = 0x27,
447 DBG_BLOCK_ID_TA10_BY4 = 0x28,
448 DBG_BLOCK_ID_TA14_BY4 = 0x29,
449 DBG_BLOCK_ID_TA18_BY4 = 0x2a,
450 DBG_BLOCK_ID_UNUSED24_BY4 = 0x2b,
451 DBG_BLOCK_ID_TD_BY4 = 0x2c,
452 DBG_BLOCK_ID_TD04_BY4 = 0x2d,
453 DBG_BLOCK_ID_TD08_BY4 = 0x2e,
454 DBG_BLOCK_ID_UNUSED28_BY4 = 0x2f,
455 DBG_BLOCK_ID_TD10_BY4 = 0x30,
456 DBG_BLOCK_ID_TD14_BY4 = 0x31,
457 DBG_BLOCK_ID_TD18_BY4 = 0x32,
458 DBG_BLOCK_ID_UNUSED32_BY4 = 0x33,
459 DBG_BLOCK_ID_LDS_BY4 = 0x34,
460 DBG_BLOCK_ID_LDS04_BY4 = 0x35,
461 DBG_BLOCK_ID_LDS08_BY4 = 0x36,
462 DBG_BLOCK_ID_UNUSED36_BY4 = 0x37,
463 DBG_BLOCK_ID_LDS10_BY4 = 0x38,
464 DBG_BLOCK_ID_LDS14_BY4 = 0x39,
465 DBG_BLOCK_ID_LDS18_BY4 = 0x3a,
466 DBG_BLOCK_ID_UNUSED40_BY4 = 0x3b,
467} DebugBlockId_BY4;
468typedef enum DebugBlockId_BY8 {
469 DBG_BLOCK_ID_RESERVED_BY8 = 0x0,
470 DBG_BLOCK_ID_CSC_BY8 = 0x1,
471 DBG_BLOCK_ID_SDMA0_BY8 = 0x2,
472 DBG_BLOCK_ID_CP0_BY8 = 0x3,
473 DBG_BLOCK_ID_SXM0_BY8 = 0x4,
474 DBG_BLOCK_ID_TCA_BY8 = 0x5,
475 DBG_BLOCK_ID_MCD_BY8 = 0x6,
476 DBG_BLOCK_ID_SQA_BY8 = 0x7,
477 DBG_BLOCK_ID_SQB_BY8 = 0x8,
478 DBG_BLOCK_ID_CB_BY8 = 0x9,
479 DBG_BLOCK_ID_SXS_BY8 = 0xa,
480 DBG_BLOCK_ID_DB_BY8 = 0xb,
481 DBG_BLOCK_ID_TCP_BY8 = 0xc,
482 DBG_BLOCK_ID_TCP8_BY8 = 0xd,
483 DBG_BLOCK_ID_TCP16_BY8 = 0xe,
484 DBG_BLOCK_ID_TCP_RESERVED0_BY8 = 0xf,
485 DBG_BLOCK_ID_TCC_BY8 = 0x10,
486 DBG_BLOCK_ID_SPS_BY8 = 0x11,
487 DBG_BLOCK_ID_TA_BY8 = 0x12,
488 DBG_BLOCK_ID_TA08_BY8 = 0x13,
489 DBG_BLOCK_ID_TA10_BY8 = 0x14,
490 DBG_BLOCK_ID_TA18_BY8 = 0x15,
491 DBG_BLOCK_ID_TD_BY8 = 0x16,
492 DBG_BLOCK_ID_TD08_BY8 = 0x17,
493 DBG_BLOCK_ID_TD10_BY8 = 0x18,
494 DBG_BLOCK_ID_TD18_BY8 = 0x19,
495 DBG_BLOCK_ID_LDS_BY8 = 0x1a,
496 DBG_BLOCK_ID_LDS08_BY8 = 0x1b,
497 DBG_BLOCK_ID_LDS10_BY8 = 0x1c,
498 DBG_BLOCK_ID_LDS18_BY8 = 0x1d,
499} DebugBlockId_BY8;
500typedef enum DebugBlockId_BY16 {
501 DBG_BLOCK_ID_RESERVED_BY16 = 0x0,
502 DBG_BLOCK_ID_SDMA0_BY16 = 0x1,
503 DBG_BLOCK_ID_SXM_BY16 = 0x2,
504 DBG_BLOCK_ID_MCD_BY16 = 0x3,
505 DBG_BLOCK_ID_SQB_BY16 = 0x4,
506 DBG_BLOCK_ID_SXS_BY16 = 0x5,
507 DBG_BLOCK_ID_TCP_BY16 = 0x6,
508 DBG_BLOCK_ID_TCP16_BY16 = 0x7,
509 DBG_BLOCK_ID_TCC_BY16 = 0x8,
510 DBG_BLOCK_ID_TA_BY16 = 0x9,
511 DBG_BLOCK_ID_TA10_BY16 = 0xa,
512 DBG_BLOCK_ID_TD_BY16 = 0xb,
513 DBG_BLOCK_ID_TD10_BY16 = 0xc,
514 DBG_BLOCK_ID_LDS_BY16 = 0xd,
515 DBG_BLOCK_ID_LDS10_BY16 = 0xe,
516} DebugBlockId_BY16;
517typedef enum SurfaceEndian {
518 ENDIAN_NONE = 0x0,
519 ENDIAN_8IN16 = 0x1,
520 ENDIAN_8IN32 = 0x2,
521 ENDIAN_8IN64 = 0x3,
522} SurfaceEndian;
523typedef enum ArrayMode {
524 ARRAY_LINEAR_GENERAL = 0x0,
525 ARRAY_LINEAR_ALIGNED = 0x1,
526 ARRAY_1D_TILED_THIN1 = 0x2,
527 ARRAY_1D_TILED_THICK = 0x3,
528 ARRAY_2D_TILED_THIN1 = 0x4,
529 ARRAY_PRT_TILED_THIN1 = 0x5,
530 ARRAY_PRT_2D_TILED_THIN1 = 0x6,
531 ARRAY_2D_TILED_THICK = 0x7,
532 ARRAY_2D_TILED_XTHICK = 0x8,
533 ARRAY_PRT_TILED_THICK = 0x9,
534 ARRAY_PRT_2D_TILED_THICK = 0xa,
535 ARRAY_PRT_3D_TILED_THIN1 = 0xb,
536 ARRAY_3D_TILED_THIN1 = 0xc,
537 ARRAY_3D_TILED_THICK = 0xd,
538 ARRAY_3D_TILED_XTHICK = 0xe,
539 ARRAY_PRT_3D_TILED_THICK = 0xf,
540} ArrayMode;
541typedef enum PipeTiling {
542 CONFIG_1_PIPE = 0x0,
543 CONFIG_2_PIPE = 0x1,
544 CONFIG_4_PIPE = 0x2,
545 CONFIG_8_PIPE = 0x3,
546} PipeTiling;
547typedef enum BankTiling {
548 CONFIG_4_BANK = 0x0,
549 CONFIG_8_BANK = 0x1,
550} BankTiling;
551typedef enum GroupInterleave {
552 CONFIG_256B_GROUP = 0x0,
553 CONFIG_512B_GROUP = 0x1,
554} GroupInterleave;
555typedef enum RowTiling {
556 CONFIG_1KB_ROW = 0x0,
557 CONFIG_2KB_ROW = 0x1,
558 CONFIG_4KB_ROW = 0x2,
559 CONFIG_8KB_ROW = 0x3,
560 CONFIG_1KB_ROW_OPT = 0x4,
561 CONFIG_2KB_ROW_OPT = 0x5,
562 CONFIG_4KB_ROW_OPT = 0x6,
563 CONFIG_8KB_ROW_OPT = 0x7,
564} RowTiling;
565typedef enum BankSwapBytes {
566 CONFIG_128B_SWAPS = 0x0,
567 CONFIG_256B_SWAPS = 0x1,
568 CONFIG_512B_SWAPS = 0x2,
569 CONFIG_1KB_SWAPS = 0x3,
570} BankSwapBytes;
571typedef enum SampleSplitBytes {
572 CONFIG_1KB_SPLIT = 0x0,
573 CONFIG_2KB_SPLIT = 0x1,
574 CONFIG_4KB_SPLIT = 0x2,
575 CONFIG_8KB_SPLIT = 0x3,
576} SampleSplitBytes;
577typedef enum NumPipes {
578 ADDR_CONFIG_1_PIPE = 0x0,
579 ADDR_CONFIG_2_PIPE = 0x1,
580 ADDR_CONFIG_4_PIPE = 0x2,
581 ADDR_CONFIG_8_PIPE = 0x3,
582} NumPipes;
583typedef enum PipeInterleaveSize {
584 ADDR_CONFIG_PIPE_INTERLEAVE_256B = 0x0,
585 ADDR_CONFIG_PIPE_INTERLEAVE_512B = 0x1,
586} PipeInterleaveSize;
587typedef enum BankInterleaveSize {
588 ADDR_CONFIG_BANK_INTERLEAVE_1 = 0x0,
589 ADDR_CONFIG_BANK_INTERLEAVE_2 = 0x1,
590 ADDR_CONFIG_BANK_INTERLEAVE_4 = 0x2,
591 ADDR_CONFIG_BANK_INTERLEAVE_8 = 0x3,
592} BankInterleaveSize;
593typedef enum NumShaderEngines {
594 ADDR_CONFIG_1_SHADER_ENGINE = 0x0,
595 ADDR_CONFIG_2_SHADER_ENGINE = 0x1,
596} NumShaderEngines;
597typedef enum ShaderEngineTileSize {
598 ADDR_CONFIG_SE_TILE_16 = 0x0,
599 ADDR_CONFIG_SE_TILE_32 = 0x1,
600} ShaderEngineTileSize;
601typedef enum NumGPUs {
602 ADDR_CONFIG_1_GPU = 0x0,
603 ADDR_CONFIG_2_GPU = 0x1,
604 ADDR_CONFIG_4_GPU = 0x2,
605} NumGPUs;
606typedef enum MultiGPUTileSize {
607 ADDR_CONFIG_GPU_TILE_16 = 0x0,
608 ADDR_CONFIG_GPU_TILE_32 = 0x1,
609 ADDR_CONFIG_GPU_TILE_64 = 0x2,
610 ADDR_CONFIG_GPU_TILE_128 = 0x3,
611} MultiGPUTileSize;
612typedef enum RowSize {
613 ADDR_CONFIG_1KB_ROW = 0x0,
614 ADDR_CONFIG_2KB_ROW = 0x1,
615 ADDR_CONFIG_4KB_ROW = 0x2,
616} RowSize;
617typedef enum NumLowerPipes {
618 ADDR_CONFIG_1_LOWER_PIPES = 0x0,
619 ADDR_CONFIG_2_LOWER_PIPES = 0x1,
620} NumLowerPipes;
621typedef enum ColorTransform {
622 DCC_CT_AUTO = 0x0,
623 DCC_CT_NONE = 0x1,
624 ABGR_TO_A_BG_G_RB = 0x2,
625 BGRA_TO_BG_G_RB_A = 0x3,
626} ColorTransform;
627typedef enum CompareRef {
628 REF_NEVER = 0x0,
629 REF_LESS = 0x1,
630 REF_EQUAL = 0x2,
631 REF_LEQUAL = 0x3,
632 REF_GREATER = 0x4,
633 REF_NOTEQUAL = 0x5,
634 REF_GEQUAL = 0x6,
635 REF_ALWAYS = 0x7,
636} CompareRef;
637typedef enum ReadSize {
638 READ_256_BITS = 0x0,
639 READ_512_BITS = 0x1,
640} ReadSize;
641typedef enum DepthFormat {
642 DEPTH_INVALID = 0x0,
643 DEPTH_16 = 0x1,
644 DEPTH_X8_24 = 0x2,
645 DEPTH_8_24 = 0x3,
646 DEPTH_X8_24_FLOAT = 0x4,
647 DEPTH_8_24_FLOAT = 0x5,
648 DEPTH_32_FLOAT = 0x6,
649 DEPTH_X24_8_32_FLOAT = 0x7,
650} DepthFormat;
651typedef enum ZFormat {
652 Z_INVALID = 0x0,
653 Z_16 = 0x1,
654 Z_24 = 0x2,
655 Z_32_FLOAT = 0x3,
656} ZFormat;
657typedef enum StencilFormat {
658 STENCIL_INVALID = 0x0,
659 STENCIL_8 = 0x1,
660} StencilFormat;
661typedef enum CmaskMode {
662 CMASK_CLEAR_NONE = 0x0,
663 CMASK_CLEAR_ONE = 0x1,
664 CMASK_CLEAR_ALL = 0x2,
665 CMASK_ANY_EXPANDED = 0x3,
666 CMASK_ALPHA0_FRAG1 = 0x4,
667 CMASK_ALPHA0_FRAG2 = 0x5,
668 CMASK_ALPHA0_FRAG4 = 0x6,
669 CMASK_ALPHA0_FRAGS = 0x7,
670 CMASK_ALPHA1_FRAG1 = 0x8,
671 CMASK_ALPHA1_FRAG2 = 0x9,
672 CMASK_ALPHA1_FRAG4 = 0xa,
673 CMASK_ALPHA1_FRAGS = 0xb,
674 CMASK_ALPHAX_FRAG1 = 0xc,
675 CMASK_ALPHAX_FRAG2 = 0xd,
676 CMASK_ALPHAX_FRAG4 = 0xe,
677 CMASK_ALPHAX_FRAGS = 0xf,
678} CmaskMode;
679typedef enum QuadExportFormat {
680 EXPORT_UNUSED = 0x0,
681 EXPORT_32_R = 0x1,
682 EXPORT_32_GR = 0x2,
683 EXPORT_32_AR = 0x3,
684 EXPORT_FP16_ABGR = 0x4,
685 EXPORT_UNSIGNED16_ABGR = 0x5,
686 EXPORT_SIGNED16_ABGR = 0x6,
687 EXPORT_32_ABGR = 0x7,
688} QuadExportFormat;
689typedef enum QuadExportFormatOld {
690 EXPORT_4P_32BPC_ABGR = 0x0,
691 EXPORT_4P_16BPC_ABGR = 0x1,
692 EXPORT_4P_32BPC_GR = 0x2,
693 EXPORT_4P_32BPC_AR = 0x3,
694 EXPORT_2P_32BPC_ABGR = 0x4,
695 EXPORT_8P_32BPC_R = 0x5,
696} QuadExportFormatOld;
697typedef enum ColorFormat {
698 COLOR_INVALID = 0x0,
699 COLOR_8 = 0x1,
700 COLOR_16 = 0x2,
701 COLOR_8_8 = 0x3,
702 COLOR_32 = 0x4,
703 COLOR_16_16 = 0x5,
704 COLOR_10_11_11 = 0x6,
705 COLOR_11_11_10 = 0x7,
706 COLOR_10_10_10_2 = 0x8,
707 COLOR_2_10_10_10 = 0x9,
708 COLOR_8_8_8_8 = 0xa,
709 COLOR_32_32 = 0xb,
710 COLOR_16_16_16_16 = 0xc,
711 COLOR_RESERVED_13 = 0xd,
712 COLOR_32_32_32_32 = 0xe,
713 COLOR_RESERVED_15 = 0xf,
714 COLOR_5_6_5 = 0x10,
715 COLOR_1_5_5_5 = 0x11,
716 COLOR_5_5_5_1 = 0x12,
717 COLOR_4_4_4_4 = 0x13,
718 COLOR_8_24 = 0x14,
719 COLOR_24_8 = 0x15,
720 COLOR_X24_8_32_FLOAT = 0x16,
721 COLOR_RESERVED_23 = 0x17,
722} ColorFormat;
723typedef enum SurfaceFormat {
724 FMT_INVALID = 0x0,
725 FMT_8 = 0x1,
726 FMT_16 = 0x2,
727 FMT_8_8 = 0x3,
728 FMT_32 = 0x4,
729 FMT_16_16 = 0x5,
730 FMT_10_11_11 = 0x6,
731 FMT_11_11_10 = 0x7,
732 FMT_10_10_10_2 = 0x8,
733 FMT_2_10_10_10 = 0x9,
734 FMT_8_8_8_8 = 0xa,
735 FMT_32_32 = 0xb,
736 FMT_16_16_16_16 = 0xc,
737 FMT_32_32_32 = 0xd,
738 FMT_32_32_32_32 = 0xe,
739 FMT_RESERVED_4 = 0xf,
740 FMT_5_6_5 = 0x10,
741 FMT_1_5_5_5 = 0x11,
742 FMT_5_5_5_1 = 0x12,
743 FMT_4_4_4_4 = 0x13,
744 FMT_8_24 = 0x14,
745 FMT_24_8 = 0x15,
746 FMT_X24_8_32_FLOAT = 0x16,
747 FMT_RESERVED_33 = 0x17,
748 FMT_11_11_10_FLOAT = 0x18,
749 FMT_16_FLOAT = 0x19,
750 FMT_32_FLOAT = 0x1a,
751 FMT_16_16_FLOAT = 0x1b,
752 FMT_8_24_FLOAT = 0x1c,
753 FMT_24_8_FLOAT = 0x1d,
754 FMT_32_32_FLOAT = 0x1e,
755 FMT_10_11_11_FLOAT = 0x1f,
756 FMT_16_16_16_16_FLOAT = 0x20,
757 FMT_3_3_2 = 0x21,
758 FMT_6_5_5 = 0x22,
759 FMT_32_32_32_32_FLOAT = 0x23,
760 FMT_RESERVED_36 = 0x24,
761 FMT_1 = 0x25,
762 FMT_1_REVERSED = 0x26,
763 FMT_GB_GR = 0x27,
764 FMT_BG_RG = 0x28,
765 FMT_32_AS_8 = 0x29,
766 FMT_32_AS_8_8 = 0x2a,
767 FMT_5_9_9_9_SHAREDEXP = 0x2b,
768 FMT_8_8_8 = 0x2c,
769 FMT_16_16_16 = 0x2d,
770 FMT_16_16_16_FLOAT = 0x2e,
771 FMT_4_4 = 0x2f,
772 FMT_32_32_32_FLOAT = 0x30,
773 FMT_BC1 = 0x31,
774 FMT_BC2 = 0x32,
775 FMT_BC3 = 0x33,
776 FMT_BC4 = 0x34,
777 FMT_BC5 = 0x35,
778 FMT_BC6 = 0x36,
779 FMT_BC7 = 0x37,
780 FMT_32_AS_32_32_32_32 = 0x38,
781 FMT_APC3 = 0x39,
782 FMT_APC4 = 0x3a,
783 FMT_APC5 = 0x3b,
784 FMT_APC6 = 0x3c,
785 FMT_APC7 = 0x3d,
786 FMT_CTX1 = 0x3e,
787 FMT_RESERVED_63 = 0x3f,
788} SurfaceFormat;
789typedef enum BUF_DATA_FORMAT {
790 BUF_DATA_FORMAT_INVALID = 0x0,
791 BUF_DATA_FORMAT_8 = 0x1,
792 BUF_DATA_FORMAT_16 = 0x2,
793 BUF_DATA_FORMAT_8_8 = 0x3,
794 BUF_DATA_FORMAT_32 = 0x4,
795 BUF_DATA_FORMAT_16_16 = 0x5,
796 BUF_DATA_FORMAT_10_11_11 = 0x6,
797 BUF_DATA_FORMAT_11_11_10 = 0x7,
798 BUF_DATA_FORMAT_10_10_10_2 = 0x8,
799 BUF_DATA_FORMAT_2_10_10_10 = 0x9,
800 BUF_DATA_FORMAT_8_8_8_8 = 0xa,
801 BUF_DATA_FORMAT_32_32 = 0xb,
802 BUF_DATA_FORMAT_16_16_16_16 = 0xc,
803 BUF_DATA_FORMAT_32_32_32 = 0xd,
804 BUF_DATA_FORMAT_32_32_32_32 = 0xe,
805 BUF_DATA_FORMAT_RESERVED_15 = 0xf,
806} BUF_DATA_FORMAT;
807typedef enum IMG_DATA_FORMAT {
808 IMG_DATA_FORMAT_INVALID = 0x0,
809 IMG_DATA_FORMAT_8 = 0x1,
810 IMG_DATA_FORMAT_16 = 0x2,
811 IMG_DATA_FORMAT_8_8 = 0x3,
812 IMG_DATA_FORMAT_32 = 0x4,
813 IMG_DATA_FORMAT_16_16 = 0x5,
814 IMG_DATA_FORMAT_10_11_11 = 0x6,
815 IMG_DATA_FORMAT_11_11_10 = 0x7,
816 IMG_DATA_FORMAT_10_10_10_2 = 0x8,
817 IMG_DATA_FORMAT_2_10_10_10 = 0x9,
818 IMG_DATA_FORMAT_8_8_8_8 = 0xa,
819 IMG_DATA_FORMAT_32_32 = 0xb,
820 IMG_DATA_FORMAT_16_16_16_16 = 0xc,
821 IMG_DATA_FORMAT_32_32_32 = 0xd,
822 IMG_DATA_FORMAT_32_32_32_32 = 0xe,
823 IMG_DATA_FORMAT_RESERVED_15 = 0xf,
824 IMG_DATA_FORMAT_5_6_5 = 0x10,
825 IMG_DATA_FORMAT_1_5_5_5 = 0x11,
826 IMG_DATA_FORMAT_5_5_5_1 = 0x12,
827 IMG_DATA_FORMAT_4_4_4_4 = 0x13,
828 IMG_DATA_FORMAT_8_24 = 0x14,
829 IMG_DATA_FORMAT_24_8 = 0x15,
830 IMG_DATA_FORMAT_X24_8_32 = 0x16,
831 IMG_DATA_FORMAT_RESERVED_23 = 0x17,
832 IMG_DATA_FORMAT_RESERVED_24 = 0x18,
833 IMG_DATA_FORMAT_RESERVED_25 = 0x19,
834 IMG_DATA_FORMAT_RESERVED_26 = 0x1a,
835 IMG_DATA_FORMAT_RESERVED_27 = 0x1b,
836 IMG_DATA_FORMAT_RESERVED_28 = 0x1c,
837 IMG_DATA_FORMAT_RESERVED_29 = 0x1d,
838 IMG_DATA_FORMAT_RESERVED_30 = 0x1e,
839 IMG_DATA_FORMAT_RESERVED_31 = 0x1f,
840 IMG_DATA_FORMAT_GB_GR = 0x20,
841 IMG_DATA_FORMAT_BG_RG = 0x21,
842 IMG_DATA_FORMAT_5_9_9_9 = 0x22,
843 IMG_DATA_FORMAT_BC1 = 0x23,
844 IMG_DATA_FORMAT_BC2 = 0x24,
845 IMG_DATA_FORMAT_BC3 = 0x25,
846 IMG_DATA_FORMAT_BC4 = 0x26,
847 IMG_DATA_FORMAT_BC5 = 0x27,
848 IMG_DATA_FORMAT_BC6 = 0x28,
849 IMG_DATA_FORMAT_BC7 = 0x29,
850 IMG_DATA_FORMAT_RESERVED_42 = 0x2a,
851 IMG_DATA_FORMAT_RESERVED_43 = 0x2b,
852 IMG_DATA_FORMAT_FMASK8_S2_F1 = 0x2c,
853 IMG_DATA_FORMAT_FMASK8_S4_F1 = 0x2d,
854 IMG_DATA_FORMAT_FMASK8_S8_F1 = 0x2e,
855 IMG_DATA_FORMAT_FMASK8_S2_F2 = 0x2f,
856 IMG_DATA_FORMAT_FMASK8_S4_F2 = 0x30,
857 IMG_DATA_FORMAT_FMASK8_S4_F4 = 0x31,
858 IMG_DATA_FORMAT_FMASK16_S16_F1 = 0x32,
859 IMG_DATA_FORMAT_FMASK16_S8_F2 = 0x33,
860 IMG_DATA_FORMAT_FMASK32_S16_F2 = 0x34,
861 IMG_DATA_FORMAT_FMASK32_S8_F4 = 0x35,
862 IMG_DATA_FORMAT_FMASK32_S8_F8 = 0x36,
863 IMG_DATA_FORMAT_FMASK64_S16_F4 = 0x37,
864 IMG_DATA_FORMAT_FMASK64_S16_F8 = 0x38,
865 IMG_DATA_FORMAT_4_4 = 0x39,
866 IMG_DATA_FORMAT_6_5_5 = 0x3a,
867 IMG_DATA_FORMAT_1 = 0x3b,
868 IMG_DATA_FORMAT_1_REVERSED = 0x3c,
869 IMG_DATA_FORMAT_32_AS_8 = 0x3d,
870 IMG_DATA_FORMAT_32_AS_8_8 = 0x3e,
871 IMG_DATA_FORMAT_32_AS_32_32_32_32 = 0x3f,
872} IMG_DATA_FORMAT;
873typedef enum BUF_NUM_FORMAT {
874 BUF_NUM_FORMAT_UNORM = 0x0,
875 BUF_NUM_FORMAT_SNORM = 0x1,
876 BUF_NUM_FORMAT_USCALED = 0x2,
877 BUF_NUM_FORMAT_SSCALED = 0x3,
878 BUF_NUM_FORMAT_UINT = 0x4,
879 BUF_NUM_FORMAT_SINT = 0x5,
880 BUF_NUM_FORMAT_RESERVED_6 = 0x6,
881 BUF_NUM_FORMAT_FLOAT = 0x7,
882} BUF_NUM_FORMAT;
883typedef enum IMG_NUM_FORMAT {
884 IMG_NUM_FORMAT_UNORM = 0x0,
885 IMG_NUM_FORMAT_SNORM = 0x1,
886 IMG_NUM_FORMAT_USCALED = 0x2,
887 IMG_NUM_FORMAT_SSCALED = 0x3,
888 IMG_NUM_FORMAT_UINT = 0x4,
889 IMG_NUM_FORMAT_SINT = 0x5,
890 IMG_NUM_FORMAT_RESERVED_6 = 0x6,
891 IMG_NUM_FORMAT_FLOAT = 0x7,
892 IMG_NUM_FORMAT_RESERVED_8 = 0x8,
893 IMG_NUM_FORMAT_SRGB = 0x9,
894 IMG_NUM_FORMAT_RESERVED_10 = 0xa,
895 IMG_NUM_FORMAT_RESERVED_11 = 0xb,
896 IMG_NUM_FORMAT_RESERVED_12 = 0xc,
897 IMG_NUM_FORMAT_RESERVED_13 = 0xd,
898 IMG_NUM_FORMAT_RESERVED_14 = 0xe,
899 IMG_NUM_FORMAT_RESERVED_15 = 0xf,
900} IMG_NUM_FORMAT;
901typedef enum TileType {
902 ARRAY_COLOR_TILE = 0x0,
903 ARRAY_DEPTH_TILE = 0x1,
904} TileType;
905typedef enum NonDispTilingOrder {
906 ADDR_SURF_MICRO_TILING_DISPLAY = 0x0,
907 ADDR_SURF_MICRO_TILING_NON_DISPLAY = 0x1,
908} NonDispTilingOrder;
909typedef enum MicroTileMode {
910 ADDR_SURF_DISPLAY_MICRO_TILING = 0x0,
911 ADDR_SURF_THIN_MICRO_TILING = 0x1,
912 ADDR_SURF_DEPTH_MICRO_TILING = 0x2,
913 ADDR_SURF_ROTATED_MICRO_TILING = 0x3,
914 ADDR_SURF_THICK_MICRO_TILING = 0x4,
915} MicroTileMode;
916typedef enum TileSplit {
917 ADDR_SURF_TILE_SPLIT_64B = 0x0,
918 ADDR_SURF_TILE_SPLIT_128B = 0x1,
919 ADDR_SURF_TILE_SPLIT_256B = 0x2,
920 ADDR_SURF_TILE_SPLIT_512B = 0x3,
921 ADDR_SURF_TILE_SPLIT_1KB = 0x4,
922 ADDR_SURF_TILE_SPLIT_2KB = 0x5,
923 ADDR_SURF_TILE_SPLIT_4KB = 0x6,
924} TileSplit;
925typedef enum SampleSplit {
926 ADDR_SURF_SAMPLE_SPLIT_1 = 0x0,
927 ADDR_SURF_SAMPLE_SPLIT_2 = 0x1,
928 ADDR_SURF_SAMPLE_SPLIT_4 = 0x2,
929 ADDR_SURF_SAMPLE_SPLIT_8 = 0x3,
930} SampleSplit;
931typedef enum PipeConfig {
932 ADDR_SURF_P2 = 0x0,
933 ADDR_SURF_P2_RESERVED0 = 0x1,
934 ADDR_SURF_P2_RESERVED1 = 0x2,
935 ADDR_SURF_P2_RESERVED2 = 0x3,
936 ADDR_SURF_P4_8x16 = 0x4,
937 ADDR_SURF_P4_16x16 = 0x5,
938 ADDR_SURF_P4_16x32 = 0x6,
939 ADDR_SURF_P4_32x32 = 0x7,
940 ADDR_SURF_P8_16x16_8x16 = 0x8,
941 ADDR_SURF_P8_16x32_8x16 = 0x9,
942 ADDR_SURF_P8_32x32_8x16 = 0xa,
943 ADDR_SURF_P8_16x32_16x16 = 0xb,
944 ADDR_SURF_P8_32x32_16x16 = 0xc,
945 ADDR_SURF_P8_32x32_16x32 = 0xd,
946 ADDR_SURF_P8_32x64_32x32 = 0xe,
947 ADDR_SURF_P8_RESERVED0 = 0xf,
948 ADDR_SURF_P16_32x32_8x16 = 0x10,
949 ADDR_SURF_P16_32x32_16x16 = 0x11,
950} PipeConfig;
951typedef enum NumBanks {
952 ADDR_SURF_2_BANK = 0x0,
953 ADDR_SURF_4_BANK = 0x1,
954 ADDR_SURF_8_BANK = 0x2,
955 ADDR_SURF_16_BANK = 0x3,
956} NumBanks;
957typedef enum BankWidth {
958 ADDR_SURF_BANK_WIDTH_1 = 0x0,
959 ADDR_SURF_BANK_WIDTH_2 = 0x1,
960 ADDR_SURF_BANK_WIDTH_4 = 0x2,
961 ADDR_SURF_BANK_WIDTH_8 = 0x3,
962} BankWidth;
963typedef enum BankHeight {
964 ADDR_SURF_BANK_HEIGHT_1 = 0x0,
965 ADDR_SURF_BANK_HEIGHT_2 = 0x1,
966 ADDR_SURF_BANK_HEIGHT_4 = 0x2,
967 ADDR_SURF_BANK_HEIGHT_8 = 0x3,
968} BankHeight;
969typedef enum BankWidthHeight {
970 ADDR_SURF_BANK_WH_1 = 0x0,
971 ADDR_SURF_BANK_WH_2 = 0x1,
972 ADDR_SURF_BANK_WH_4 = 0x2,
973 ADDR_SURF_BANK_WH_8 = 0x3,
974} BankWidthHeight;
975typedef enum MacroTileAspect {
976 ADDR_SURF_MACRO_ASPECT_1 = 0x0,
977 ADDR_SURF_MACRO_ASPECT_2 = 0x1,
978 ADDR_SURF_MACRO_ASPECT_4 = 0x2,
979 ADDR_SURF_MACRO_ASPECT_8 = 0x3,
980} MacroTileAspect;
981typedef enum GATCL1RequestType {
982 GATCL1_TYPE_NORMAL = 0x0,
983 GATCL1_TYPE_SHOOTDOWN = 0x1,
984 GATCL1_TYPE_BYPASS = 0x2,
985} GATCL1RequestType;
986typedef enum TCC_CACHE_POLICIES {
987 TCC_CACHE_POLICY_LRU = 0x0,
988 TCC_CACHE_POLICY_STREAM = 0x1,
989} TCC_CACHE_POLICIES;
990typedef enum MTYPE {
991 MTYPE_NC_NV = 0x0,
992 MTYPE_NC = 0x1,
993 MTYPE_CC = 0x2,
994 MTYPE_UC = 0x3,
995} MTYPE;
996typedef enum PERFMON_COUNTER_MODE {
997 PERFMON_COUNTER_MODE_ACCUM = 0x0,
998 PERFMON_COUNTER_MODE_ACTIVE_CYCLES = 0x1,
999 PERFMON_COUNTER_MODE_MAX = 0x2,
1000 PERFMON_COUNTER_MODE_DIRTY = 0x3,
1001 PERFMON_COUNTER_MODE_SAMPLE = 0x4,
1002 PERFMON_COUNTER_MODE_CYCLES_SINCE_FIRST_EVENT = 0x5,
1003 PERFMON_COUNTER_MODE_CYCLES_SINCE_LAST_EVENT = 0x6,
1004 PERFMON_COUNTER_MODE_CYCLES_GE_HI = 0x7,
1005 PERFMON_COUNTER_MODE_CYCLES_EQ_HI = 0x8,
1006 PERFMON_COUNTER_MODE_INACTIVE_CYCLES = 0x9,
1007 PERFMON_COUNTER_MODE_RESERVED = 0xf,
1008} PERFMON_COUNTER_MODE;
1009typedef enum PERFMON_SPM_MODE {
1010 PERFMON_SPM_MODE_OFF = 0x0,
1011 PERFMON_SPM_MODE_16BIT_CLAMP = 0x1,
1012 PERFMON_SPM_MODE_16BIT_NO_CLAMP = 0x2,
1013 PERFMON_SPM_MODE_32BIT_CLAMP = 0x3,
1014 PERFMON_SPM_MODE_32BIT_NO_CLAMP = 0x4,
1015 PERFMON_SPM_MODE_RESERVED_5 = 0x5,
1016 PERFMON_SPM_MODE_RESERVED_6 = 0x6,
1017 PERFMON_SPM_MODE_RESERVED_7 = 0x7,
1018 PERFMON_SPM_MODE_TEST_MODE_0 = 0x8,
1019 PERFMON_SPM_MODE_TEST_MODE_1 = 0x9,
1020 PERFMON_SPM_MODE_TEST_MODE_2 = 0xa,
1021} PERFMON_SPM_MODE;
1022typedef enum SurfaceTiling {
1023 ARRAY_LINEAR = 0x0,
1024 ARRAY_TILED = 0x1,
1025} SurfaceTiling;
1026typedef enum SurfaceArray {
1027 ARRAY_1D = 0x0,
1028 ARRAY_2D = 0x1,
1029 ARRAY_3D = 0x2,
1030 ARRAY_3D_SLICE = 0x3,
1031} SurfaceArray;
1032typedef enum ColorArray {
1033 ARRAY_2D_ALT_COLOR = 0x0,
1034 ARRAY_2D_COLOR = 0x1,
1035 ARRAY_3D_SLICE_COLOR = 0x3,
1036} ColorArray;
1037typedef enum DepthArray {
1038 ARRAY_2D_ALT_DEPTH = 0x0,
1039 ARRAY_2D_DEPTH = 0x1,
1040} DepthArray;
1041typedef enum ENUM_NUM_SIMD_PER_CU {
1042 NUM_SIMD_PER_CU = 0x4,
1043} ENUM_NUM_SIMD_PER_CU;
1044typedef enum MEM_PWR_FORCE_CTRL {
1045 NO_FORCE_REQUEST = 0x0,
1046 FORCE_LIGHT_SLEEP_REQUEST = 0x1,
1047 FORCE_DEEP_SLEEP_REQUEST = 0x2,
1048 FORCE_SHUT_DOWN_REQUEST = 0x3,
1049} MEM_PWR_FORCE_CTRL;
1050typedef enum MEM_PWR_FORCE_CTRL2 {
1051 NO_FORCE_REQ = 0x0,
1052 FORCE_LIGHT_SLEEP_REQ = 0x1,
1053} MEM_PWR_FORCE_CTRL2;
1054typedef enum MEM_PWR_DIS_CTRL {
1055 ENABLE_MEM_PWR_CTRL = 0x0,
1056 DISABLE_MEM_PWR_CTRL = 0x1,
1057} MEM_PWR_DIS_CTRL;
1058typedef enum MEM_PWR_SEL_CTRL {
1059 DYNAMIC_SHUT_DOWN_ENABLE = 0x0,
1060 DYNAMIC_DEEP_SLEEP_ENABLE = 0x1,
1061 DYNAMIC_LIGHT_SLEEP_ENABLE = 0x2,
1062} MEM_PWR_SEL_CTRL;
1063typedef enum MEM_PWR_SEL_CTRL2 {
1064 DYNAMIC_DEEP_SLEEP_EN = 0x0,
1065 DYNAMIC_LIGHT_SLEEP_EN = 0x1,
1066} MEM_PWR_SEL_CTRL2;
1067
1068#endif /* ACP_2_2_ENUM_H */
diff --git a/sound/soc/amd/include/acp_2_2_sh_mask.h b/sound/soc/amd/include/acp_2_2_sh_mask.h
new file mode 100644
index 000000000000..32d2d4104309
--- /dev/null
+++ b/sound/soc/amd/include/acp_2_2_sh_mask.h
@@ -0,0 +1,2292 @@
1/*
2 * ACP_2_2 Register documentation
3 *
4 * Copyright (C) 2014 Advanced Micro Devices, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
23
24#ifndef ACP_2_2_SH_MASK_H
25#define ACP_2_2_SH_MASK_H
26
27#define ACP_DMA_CNTL_0__DMAChRst_MASK 0x1
28#define ACP_DMA_CNTL_0__DMAChRst__SHIFT 0x0
29#define ACP_DMA_CNTL_0__DMAChRun_MASK 0x2
30#define ACP_DMA_CNTL_0__DMAChRun__SHIFT 0x1
31#define ACP_DMA_CNTL_0__DMAChIOCEn_MASK 0x4
32#define ACP_DMA_CNTL_0__DMAChIOCEn__SHIFT 0x2
33#define ACP_DMA_CNTL_0__Circular_DMA_En_MASK 0x8
34#define ACP_DMA_CNTL_0__Circular_DMA_En__SHIFT 0x3
35#define ACP_DMA_CNTL_0__DMAChGracefulRstEn_MASK 0x10
36#define ACP_DMA_CNTL_0__DMAChGracefulRstEn__SHIFT 0x4
37#define ACP_DMA_CNTL_1__DMAChRst_MASK 0x1
38#define ACP_DMA_CNTL_1__DMAChRst__SHIFT 0x0
39#define ACP_DMA_CNTL_1__DMAChRun_MASK 0x2
40#define ACP_DMA_CNTL_1__DMAChRun__SHIFT 0x1
41#define ACP_DMA_CNTL_1__DMAChIOCEn_MASK 0x4
42#define ACP_DMA_CNTL_1__DMAChIOCEn__SHIFT 0x2
43#define ACP_DMA_CNTL_1__Circular_DMA_En_MASK 0x8
44#define ACP_DMA_CNTL_1__Circular_DMA_En__SHIFT 0x3
45#define ACP_DMA_CNTL_1__DMAChGracefulRstEn_MASK 0x10
46#define ACP_DMA_CNTL_1__DMAChGracefulRstEn__SHIFT 0x4
47#define ACP_DMA_CNTL_2__DMAChRst_MASK 0x1
48#define ACP_DMA_CNTL_2__DMAChRst__SHIFT 0x0
49#define ACP_DMA_CNTL_2__DMAChRun_MASK 0x2
50#define ACP_DMA_CNTL_2__DMAChRun__SHIFT 0x1
51#define ACP_DMA_CNTL_2__DMAChIOCEn_MASK 0x4
52#define ACP_DMA_CNTL_2__DMAChIOCEn__SHIFT 0x2
53#define ACP_DMA_CNTL_2__Circular_DMA_En_MASK 0x8
54#define ACP_DMA_CNTL_2__Circular_DMA_En__SHIFT 0x3
55#define ACP_DMA_CNTL_2__DMAChGracefulRstEn_MASK 0x10
56#define ACP_DMA_CNTL_2__DMAChGracefulRstEn__SHIFT 0x4
57#define ACP_DMA_CNTL_3__DMAChRst_MASK 0x1
58#define ACP_DMA_CNTL_3__DMAChRst__SHIFT 0x0
59#define ACP_DMA_CNTL_3__DMAChRun_MASK 0x2
60#define ACP_DMA_CNTL_3__DMAChRun__SHIFT 0x1
61#define ACP_DMA_CNTL_3__DMAChIOCEn_MASK 0x4
62#define ACP_DMA_CNTL_3__DMAChIOCEn__SHIFT 0x2
63#define ACP_DMA_CNTL_3__Circular_DMA_En_MASK 0x8
64#define ACP_DMA_CNTL_3__Circular_DMA_En__SHIFT 0x3
65#define ACP_DMA_CNTL_3__DMAChGracefulRstEn_MASK 0x10
66#define ACP_DMA_CNTL_3__DMAChGracefulRstEn__SHIFT 0x4
67#define ACP_DMA_CNTL_4__DMAChRst_MASK 0x1
68#define ACP_DMA_CNTL_4__DMAChRst__SHIFT 0x0
69#define ACP_DMA_CNTL_4__DMAChRun_MASK 0x2
70#define ACP_DMA_CNTL_4__DMAChRun__SHIFT 0x1
71#define ACP_DMA_CNTL_4__DMAChIOCEn_MASK 0x4
72#define ACP_DMA_CNTL_4__DMAChIOCEn__SHIFT 0x2
73#define ACP_DMA_CNTL_4__Circular_DMA_En_MASK 0x8
74#define ACP_DMA_CNTL_4__Circular_DMA_En__SHIFT 0x3
75#define ACP_DMA_CNTL_4__DMAChGracefulRstEn_MASK 0x10
76#define ACP_DMA_CNTL_4__DMAChGracefulRstEn__SHIFT 0x4
77#define ACP_DMA_CNTL_5__DMAChRst_MASK 0x1
78#define ACP_DMA_CNTL_5__DMAChRst__SHIFT 0x0
79#define ACP_DMA_CNTL_5__DMAChRun_MASK 0x2
80#define ACP_DMA_CNTL_5__DMAChRun__SHIFT 0x1
81#define ACP_DMA_CNTL_5__DMAChIOCEn_MASK 0x4
82#define ACP_DMA_CNTL_5__DMAChIOCEn__SHIFT 0x2
83#define ACP_DMA_CNTL_5__Circular_DMA_En_MASK 0x8
84#define ACP_DMA_CNTL_5__Circular_DMA_En__SHIFT 0x3
85#define ACP_DMA_CNTL_5__DMAChGracefulRstEn_MASK 0x10
86#define ACP_DMA_CNTL_5__DMAChGracefulRstEn__SHIFT 0x4
87#define ACP_DMA_CNTL_6__DMAChRst_MASK 0x1
88#define ACP_DMA_CNTL_6__DMAChRst__SHIFT 0x0
89#define ACP_DMA_CNTL_6__DMAChRun_MASK 0x2
90#define ACP_DMA_CNTL_6__DMAChRun__SHIFT 0x1
91#define ACP_DMA_CNTL_6__DMAChIOCEn_MASK 0x4
92#define ACP_DMA_CNTL_6__DMAChIOCEn__SHIFT 0x2
93#define ACP_DMA_CNTL_6__Circular_DMA_En_MASK 0x8
94#define ACP_DMA_CNTL_6__Circular_DMA_En__SHIFT 0x3
95#define ACP_DMA_CNTL_6__DMAChGracefulRstEn_MASK 0x10
96#define ACP_DMA_CNTL_6__DMAChGracefulRstEn__SHIFT 0x4
97#define ACP_DMA_CNTL_7__DMAChRst_MASK 0x1
98#define ACP_DMA_CNTL_7__DMAChRst__SHIFT 0x0
99#define ACP_DMA_CNTL_7__DMAChRun_MASK 0x2
100#define ACP_DMA_CNTL_7__DMAChRun__SHIFT 0x1
101#define ACP_DMA_CNTL_7__DMAChIOCEn_MASK 0x4
102#define ACP_DMA_CNTL_7__DMAChIOCEn__SHIFT 0x2
103#define ACP_DMA_CNTL_7__Circular_DMA_En_MASK 0x8
104#define ACP_DMA_CNTL_7__Circular_DMA_En__SHIFT 0x3
105#define ACP_DMA_CNTL_7__DMAChGracefulRstEn_MASK 0x10
106#define ACP_DMA_CNTL_7__DMAChGracefulRstEn__SHIFT 0x4
107#define ACP_DMA_CNTL_8__DMAChRst_MASK 0x1
108#define ACP_DMA_CNTL_8__DMAChRst__SHIFT 0x0
109#define ACP_DMA_CNTL_8__DMAChRun_MASK 0x2
110#define ACP_DMA_CNTL_8__DMAChRun__SHIFT 0x1
111#define ACP_DMA_CNTL_8__DMAChIOCEn_MASK 0x4
112#define ACP_DMA_CNTL_8__DMAChIOCEn__SHIFT 0x2
113#define ACP_DMA_CNTL_8__Circular_DMA_En_MASK 0x8
114#define ACP_DMA_CNTL_8__Circular_DMA_En__SHIFT 0x3
115#define ACP_DMA_CNTL_8__DMAChGracefulRstEn_MASK 0x10
116#define ACP_DMA_CNTL_8__DMAChGracefulRstEn__SHIFT 0x4
117#define ACP_DMA_CNTL_9__DMAChRst_MASK 0x1
118#define ACP_DMA_CNTL_9__DMAChRst__SHIFT 0x0
119#define ACP_DMA_CNTL_9__DMAChRun_MASK 0x2
120#define ACP_DMA_CNTL_9__DMAChRun__SHIFT 0x1
121#define ACP_DMA_CNTL_9__DMAChIOCEn_MASK 0x4
122#define ACP_DMA_CNTL_9__DMAChIOCEn__SHIFT 0x2
123#define ACP_DMA_CNTL_9__Circular_DMA_En_MASK 0x8
124#define ACP_DMA_CNTL_9__Circular_DMA_En__SHIFT 0x3
125#define ACP_DMA_CNTL_9__DMAChGracefulRstEn_MASK 0x10
126#define ACP_DMA_CNTL_9__DMAChGracefulRstEn__SHIFT 0x4
127#define ACP_DMA_CNTL_10__DMAChRst_MASK 0x1
128#define ACP_DMA_CNTL_10__DMAChRst__SHIFT 0x0
129#define ACP_DMA_CNTL_10__DMAChRun_MASK 0x2
130#define ACP_DMA_CNTL_10__DMAChRun__SHIFT 0x1
131#define ACP_DMA_CNTL_10__DMAChIOCEn_MASK 0x4
132#define ACP_DMA_CNTL_10__DMAChIOCEn__SHIFT 0x2
133#define ACP_DMA_CNTL_10__Circular_DMA_En_MASK 0x8
134#define ACP_DMA_CNTL_10__Circular_DMA_En__SHIFT 0x3
135#define ACP_DMA_CNTL_10__DMAChGracefulRstEn_MASK 0x10
136#define ACP_DMA_CNTL_10__DMAChGracefulRstEn__SHIFT 0x4
137#define ACP_DMA_CNTL_11__DMAChRst_MASK 0x1
138#define ACP_DMA_CNTL_11__DMAChRst__SHIFT 0x0
139#define ACP_DMA_CNTL_11__DMAChRun_MASK 0x2
140#define ACP_DMA_CNTL_11__DMAChRun__SHIFT 0x1
141#define ACP_DMA_CNTL_11__DMAChIOCEn_MASK 0x4
142#define ACP_DMA_CNTL_11__DMAChIOCEn__SHIFT 0x2
143#define ACP_DMA_CNTL_11__Circular_DMA_En_MASK 0x8
144#define ACP_DMA_CNTL_11__Circular_DMA_En__SHIFT 0x3
145#define ACP_DMA_CNTL_11__DMAChGracefulRstEn_MASK 0x10
146#define ACP_DMA_CNTL_11__DMAChGracefulRstEn__SHIFT 0x4
147#define ACP_DMA_CNTL_12__DMAChRst_MASK 0x1
148#define ACP_DMA_CNTL_12__DMAChRst__SHIFT 0x0
149#define ACP_DMA_CNTL_12__DMAChRun_MASK 0x2
150#define ACP_DMA_CNTL_12__DMAChRun__SHIFT 0x1
151#define ACP_DMA_CNTL_12__DMAChIOCEn_MASK 0x4
152#define ACP_DMA_CNTL_12__DMAChIOCEn__SHIFT 0x2
153#define ACP_DMA_CNTL_12__Circular_DMA_En_MASK 0x8
154#define ACP_DMA_CNTL_12__Circular_DMA_En__SHIFT 0x3
155#define ACP_DMA_CNTL_12__DMAChGracefulRstEn_MASK 0x10
156#define ACP_DMA_CNTL_12__DMAChGracefulRstEn__SHIFT 0x4
157#define ACP_DMA_CNTL_13__DMAChRst_MASK 0x1
158#define ACP_DMA_CNTL_13__DMAChRst__SHIFT 0x0
159#define ACP_DMA_CNTL_13__DMAChRun_MASK 0x2
160#define ACP_DMA_CNTL_13__DMAChRun__SHIFT 0x1
161#define ACP_DMA_CNTL_13__DMAChIOCEn_MASK 0x4
162#define ACP_DMA_CNTL_13__DMAChIOCEn__SHIFT 0x2
163#define ACP_DMA_CNTL_13__Circular_DMA_En_MASK 0x8
164#define ACP_DMA_CNTL_13__Circular_DMA_En__SHIFT 0x3
165#define ACP_DMA_CNTL_13__DMAChGracefulRstEn_MASK 0x10
166#define ACP_DMA_CNTL_13__DMAChGracefulRstEn__SHIFT 0x4
167#define ACP_DMA_CNTL_14__DMAChRst_MASK 0x1
168#define ACP_DMA_CNTL_14__DMAChRst__SHIFT 0x0
169#define ACP_DMA_CNTL_14__DMAChRun_MASK 0x2
170#define ACP_DMA_CNTL_14__DMAChRun__SHIFT 0x1
171#define ACP_DMA_CNTL_14__DMAChIOCEn_MASK 0x4
172#define ACP_DMA_CNTL_14__DMAChIOCEn__SHIFT 0x2
173#define ACP_DMA_CNTL_14__Circular_DMA_En_MASK 0x8
174#define ACP_DMA_CNTL_14__Circular_DMA_En__SHIFT 0x3
175#define ACP_DMA_CNTL_14__DMAChGracefulRstEn_MASK 0x10
176#define ACP_DMA_CNTL_14__DMAChGracefulRstEn__SHIFT 0x4
177#define ACP_DMA_CNTL_15__DMAChRst_MASK 0x1
178#define ACP_DMA_CNTL_15__DMAChRst__SHIFT 0x0
179#define ACP_DMA_CNTL_15__DMAChRun_MASK 0x2
180#define ACP_DMA_CNTL_15__DMAChRun__SHIFT 0x1
181#define ACP_DMA_CNTL_15__DMAChIOCEn_MASK 0x4
182#define ACP_DMA_CNTL_15__DMAChIOCEn__SHIFT 0x2
183#define ACP_DMA_CNTL_15__Circular_DMA_En_MASK 0x8
184#define ACP_DMA_CNTL_15__Circular_DMA_En__SHIFT 0x3
185#define ACP_DMA_CNTL_15__DMAChGracefulRstEn_MASK 0x10
186#define ACP_DMA_CNTL_15__DMAChGracefulRstEn__SHIFT 0x4
187#define ACP_DMA_DSCR_STRT_IDX_0__DMAChDscrStrtIdx_MASK 0x3ff
188#define ACP_DMA_DSCR_STRT_IDX_0__DMAChDscrStrtIdx__SHIFT 0x0
189#define ACP_DMA_DSCR_STRT_IDX_1__DMAChDscrStrtIdx_MASK 0x3ff
190#define ACP_DMA_DSCR_STRT_IDX_1__DMAChDscrStrtIdx__SHIFT 0x0
191#define ACP_DMA_DSCR_STRT_IDX_2__DMAChDscrStrtIdx_MASK 0x3ff
192#define ACP_DMA_DSCR_STRT_IDX_2__DMAChDscrStrtIdx__SHIFT 0x0
193#define ACP_DMA_DSCR_STRT_IDX_3__DMAChDscrStrtIdx_MASK 0x3ff
194#define ACP_DMA_DSCR_STRT_IDX_3__DMAChDscrStrtIdx__SHIFT 0x0
195#define ACP_DMA_DSCR_STRT_IDX_4__DMAChDscrStrtIdx_MASK 0x3ff
196#define ACP_DMA_DSCR_STRT_IDX_4__DMAChDscrStrtIdx__SHIFT 0x0
197#define ACP_DMA_DSCR_STRT_IDX_5__DMAChDscrStrtIdx_MASK 0x3ff
198#define ACP_DMA_DSCR_STRT_IDX_5__DMAChDscrStrtIdx__SHIFT 0x0
199#define ACP_DMA_DSCR_STRT_IDX_6__DMAChDscrStrtIdx_MASK 0x3ff
200#define ACP_DMA_DSCR_STRT_IDX_6__DMAChDscrStrtIdx__SHIFT 0x0
201#define ACP_DMA_DSCR_STRT_IDX_7__DMAChDscrStrtIdx_MASK 0x3ff
202#define ACP_DMA_DSCR_STRT_IDX_7__DMAChDscrStrtIdx__SHIFT 0x0
203#define ACP_DMA_DSCR_STRT_IDX_8__DMAChDscrStrtIdx_MASK 0x3ff
204#define ACP_DMA_DSCR_STRT_IDX_8__DMAChDscrStrtIdx__SHIFT 0x0
205#define ACP_DMA_DSCR_STRT_IDX_9__DMAChDscrStrtIdx_MASK 0x3ff
206#define ACP_DMA_DSCR_STRT_IDX_9__DMAChDscrStrtIdx__SHIFT 0x0
207#define ACP_DMA_DSCR_STRT_IDX_10__DMAChDscrStrtIdx_MASK 0x3ff
208#define ACP_DMA_DSCR_STRT_IDX_10__DMAChDscrStrtIdx__SHIFT 0x0
209#define ACP_DMA_DSCR_STRT_IDX_11__DMAChDscrStrtIdx_MASK 0x3ff
210#define ACP_DMA_DSCR_STRT_IDX_11__DMAChDscrStrtIdx__SHIFT 0x0
211#define ACP_DMA_DSCR_STRT_IDX_12__DMAChDscrStrtIdx_MASK 0x3ff
212#define ACP_DMA_DSCR_STRT_IDX_12__DMAChDscrStrtIdx__SHIFT 0x0
213#define ACP_DMA_DSCR_STRT_IDX_13__DMAChDscrStrtIdx_MASK 0x3ff
214#define ACP_DMA_DSCR_STRT_IDX_13__DMAChDscrStrtIdx__SHIFT 0x0
215#define ACP_DMA_DSCR_STRT_IDX_14__DMAChDscrStrtIdx_MASK 0x3ff
216#define ACP_DMA_DSCR_STRT_IDX_14__DMAChDscrStrtIdx__SHIFT 0x0
217#define ACP_DMA_DSCR_STRT_IDX_15__DMAChDscrStrtIdx_MASK 0x3ff
218#define ACP_DMA_DSCR_STRT_IDX_15__DMAChDscrStrtIdx__SHIFT 0x0
219#define ACP_DMA_DSCR_CNT_0__DMAChDscrCnt_MASK 0x3ff
220#define ACP_DMA_DSCR_CNT_0__DMAChDscrCnt__SHIFT 0x0
221#define ACP_DMA_DSCR_CNT_1__DMAChDscrCnt_MASK 0x3ff
222#define ACP_DMA_DSCR_CNT_1__DMAChDscrCnt__SHIFT 0x0
223#define ACP_DMA_DSCR_CNT_2__DMAChDscrCnt_MASK 0x3ff
224#define ACP_DMA_DSCR_CNT_2__DMAChDscrCnt__SHIFT 0x0
225#define ACP_DMA_DSCR_CNT_3__DMAChDscrCnt_MASK 0x3ff
226#define ACP_DMA_DSCR_CNT_3__DMAChDscrCnt__SHIFT 0x0
227#define ACP_DMA_DSCR_CNT_4__DMAChDscrCnt_MASK 0x3ff
228#define ACP_DMA_DSCR_CNT_4__DMAChDscrCnt__SHIFT 0x0
229#define ACP_DMA_DSCR_CNT_5__DMAChDscrCnt_MASK 0x3ff
230#define ACP_DMA_DSCR_CNT_5__DMAChDscrCnt__SHIFT 0x0
231#define ACP_DMA_DSCR_CNT_6__DMAChDscrCnt_MASK 0x3ff
232#define ACP_DMA_DSCR_CNT_6__DMAChDscrCnt__SHIFT 0x0
233#define ACP_DMA_DSCR_CNT_7__DMAChDscrCnt_MASK 0x3ff
234#define ACP_DMA_DSCR_CNT_7__DMAChDscrCnt__SHIFT 0x0
235#define ACP_DMA_DSCR_CNT_8__DMAChDscrCnt_MASK 0x3ff
236#define ACP_DMA_DSCR_CNT_8__DMAChDscrCnt__SHIFT 0x0
237#define ACP_DMA_DSCR_CNT_9__DMAChDscrCnt_MASK 0x3ff
238#define ACP_DMA_DSCR_CNT_9__DMAChDscrCnt__SHIFT 0x0
239#define ACP_DMA_DSCR_CNT_10__DMAChDscrCnt_MASK 0x3ff
240#define ACP_DMA_DSCR_CNT_10__DMAChDscrCnt__SHIFT 0x0
241#define ACP_DMA_DSCR_CNT_11__DMAChDscrCnt_MASK 0x3ff
242#define ACP_DMA_DSCR_CNT_11__DMAChDscrCnt__SHIFT 0x0
243#define ACP_DMA_DSCR_CNT_12__DMAChDscrCnt_MASK 0x3ff
244#define ACP_DMA_DSCR_CNT_12__DMAChDscrCnt__SHIFT 0x0
245#define ACP_DMA_DSCR_CNT_13__DMAChDscrCnt_MASK 0x3ff
246#define ACP_DMA_DSCR_CNT_13__DMAChDscrCnt__SHIFT 0x0
247#define ACP_DMA_DSCR_CNT_14__DMAChDscrCnt_MASK 0x3ff
248#define ACP_DMA_DSCR_CNT_14__DMAChDscrCnt__SHIFT 0x0
249#define ACP_DMA_DSCR_CNT_15__DMAChDscrCnt_MASK 0x3ff
250#define ACP_DMA_DSCR_CNT_15__DMAChDscrCnt__SHIFT 0x0
251#define ACP_DMA_PRIO_0__DMAChPrioLvl_MASK 0x1
252#define ACP_DMA_PRIO_0__DMAChPrioLvl__SHIFT 0x0
253#define ACP_DMA_PRIO_1__DMAChPrioLvl_MASK 0x1
254#define ACP_DMA_PRIO_1__DMAChPrioLvl__SHIFT 0x0
255#define ACP_DMA_PRIO_2__DMAChPrioLvl_MASK 0x1
256#define ACP_DMA_PRIO_2__DMAChPrioLvl__SHIFT 0x0
257#define ACP_DMA_PRIO_3__DMAChPrioLvl_MASK 0x1
258#define ACP_DMA_PRIO_3__DMAChPrioLvl__SHIFT 0x0
259#define ACP_DMA_PRIO_4__DMAChPrioLvl_MASK 0x1
260#define ACP_DMA_PRIO_4__DMAChPrioLvl__SHIFT 0x0
261#define ACP_DMA_PRIO_5__DMAChPrioLvl_MASK 0x1
262#define ACP_DMA_PRIO_5__DMAChPrioLvl__SHIFT 0x0
263#define ACP_DMA_PRIO_6__DMAChPrioLvl_MASK 0x1
264#define ACP_DMA_PRIO_6__DMAChPrioLvl__SHIFT 0x0
265#define ACP_DMA_PRIO_7__DMAChPrioLvl_MASK 0x1
266#define ACP_DMA_PRIO_7__DMAChPrioLvl__SHIFT 0x0
267#define ACP_DMA_PRIO_8__DMAChPrioLvl_MASK 0x1
268#define ACP_DMA_PRIO_8__DMAChPrioLvl__SHIFT 0x0
269#define ACP_DMA_PRIO_9__DMAChPrioLvl_MASK 0x1
270#define ACP_DMA_PRIO_9__DMAChPrioLvl__SHIFT 0x0
271#define ACP_DMA_PRIO_10__DMAChPrioLvl_MASK 0x1
272#define ACP_DMA_PRIO_10__DMAChPrioLvl__SHIFT 0x0
273#define ACP_DMA_PRIO_11__DMAChPrioLvl_MASK 0x1
274#define ACP_DMA_PRIO_11__DMAChPrioLvl__SHIFT 0x0
275#define ACP_DMA_PRIO_12__DMAChPrioLvl_MASK 0x1
276#define ACP_DMA_PRIO_12__DMAChPrioLvl__SHIFT 0x0
277#define ACP_DMA_PRIO_13__DMAChPrioLvl_MASK 0x1
278#define ACP_DMA_PRIO_13__DMAChPrioLvl__SHIFT 0x0
279#define ACP_DMA_PRIO_14__DMAChPrioLvl_MASK 0x1
280#define ACP_DMA_PRIO_14__DMAChPrioLvl__SHIFT 0x0
281#define ACP_DMA_PRIO_15__DMAChPrioLvl_MASK 0x1
282#define ACP_DMA_PRIO_15__DMAChPrioLvl__SHIFT 0x0
283#define ACP_DMA_CUR_DSCR_0__DMAChCurDscrIdx_MASK 0x3ff
284#define ACP_DMA_CUR_DSCR_0__DMAChCurDscrIdx__SHIFT 0x0
285#define ACP_DMA_CUR_DSCR_1__DMAChCurDscrIdx_MASK 0x3ff
286#define ACP_DMA_CUR_DSCR_1__DMAChCurDscrIdx__SHIFT 0x0
287#define ACP_DMA_CUR_DSCR_2__DMAChCurDscrIdx_MASK 0x3ff
288#define ACP_DMA_CUR_DSCR_2__DMAChCurDscrIdx__SHIFT 0x0
289#define ACP_DMA_CUR_DSCR_3__DMAChCurDscrIdx_MASK 0x3ff
290#define ACP_DMA_CUR_DSCR_3__DMAChCurDscrIdx__SHIFT 0x0
291#define ACP_DMA_CUR_DSCR_4__DMAChCurDscrIdx_MASK 0x3ff
292#define ACP_DMA_CUR_DSCR_4__DMAChCurDscrIdx__SHIFT 0x0
293#define ACP_DMA_CUR_DSCR_5__DMAChCurDscrIdx_MASK 0x3ff
294#define ACP_DMA_CUR_DSCR_5__DMAChCurDscrIdx__SHIFT 0x0
295#define ACP_DMA_CUR_DSCR_6__DMAChCurDscrIdx_MASK 0x3ff
296#define ACP_DMA_CUR_DSCR_6__DMAChCurDscrIdx__SHIFT 0x0
297#define ACP_DMA_CUR_DSCR_7__DMAChCurDscrIdx_MASK 0x3ff
298#define ACP_DMA_CUR_DSCR_7__DMAChCurDscrIdx__SHIFT 0x0
299#define ACP_DMA_CUR_DSCR_8__DMAChCurDscrIdx_MASK 0x3ff
300#define ACP_DMA_CUR_DSCR_8__DMAChCurDscrIdx__SHIFT 0x0
301#define ACP_DMA_CUR_DSCR_9__DMAChCurDscrIdx_MASK 0x3ff
302#define ACP_DMA_CUR_DSCR_9__DMAChCurDscrIdx__SHIFT 0x0
303#define ACP_DMA_CUR_DSCR_10__DMAChCurDscrIdx_MASK 0x3ff
304#define ACP_DMA_CUR_DSCR_10__DMAChCurDscrIdx__SHIFT 0x0
305#define ACP_DMA_CUR_DSCR_11__DMAChCurDscrIdx_MASK 0x3ff
306#define ACP_DMA_CUR_DSCR_11__DMAChCurDscrIdx__SHIFT 0x0
307#define ACP_DMA_CUR_DSCR_12__DMAChCurDscrIdx_MASK 0x3ff
308#define ACP_DMA_CUR_DSCR_12__DMAChCurDscrIdx__SHIFT 0x0
309#define ACP_DMA_CUR_DSCR_13__DMAChCurDscrIdx_MASK 0x3ff
310#define ACP_DMA_CUR_DSCR_13__DMAChCurDscrIdx__SHIFT 0x0
311#define ACP_DMA_CUR_DSCR_14__DMAChCurDscrIdx_MASK 0x3ff
312#define ACP_DMA_CUR_DSCR_14__DMAChCurDscrIdx__SHIFT 0x0
313#define ACP_DMA_CUR_DSCR_15__DMAChCurDscrIdx_MASK 0x3ff
314#define ACP_DMA_CUR_DSCR_15__DMAChCurDscrIdx__SHIFT 0x0
315#define ACP_DMA_CUR_TRANS_CNT_0__DMAChCurTransCnt_MASK 0x1ffff
316#define ACP_DMA_CUR_TRANS_CNT_0__DMAChCurTransCnt__SHIFT 0x0
317#define ACP_DMA_CUR_TRANS_CNT_1__DMAChCurTransCnt_MASK 0x1ffff
318#define ACP_DMA_CUR_TRANS_CNT_1__DMAChCurTransCnt__SHIFT 0x0
319#define ACP_DMA_CUR_TRANS_CNT_2__DMAChCurTransCnt_MASK 0x1ffff
320#define ACP_DMA_CUR_TRANS_CNT_2__DMAChCurTransCnt__SHIFT 0x0
321#define ACP_DMA_CUR_TRANS_CNT_3__DMAChCurTransCnt_MASK 0x1ffff
322#define ACP_DMA_CUR_TRANS_CNT_3__DMAChCurTransCnt__SHIFT 0x0
323#define ACP_DMA_CUR_TRANS_CNT_4__DMAChCurTransCnt_MASK 0x1ffff
324#define ACP_DMA_CUR_TRANS_CNT_4__DMAChCurTransCnt__SHIFT 0x0
325#define ACP_DMA_CUR_TRANS_CNT_5__DMAChCurTransCnt_MASK 0x1ffff
326#define ACP_DMA_CUR_TRANS_CNT_5__DMAChCurTransCnt__SHIFT 0x0
327#define ACP_DMA_CUR_TRANS_CNT_6__DMAChCurTransCnt_MASK 0x1ffff
328#define ACP_DMA_CUR_TRANS_CNT_6__DMAChCurTransCnt__SHIFT 0x0
329#define ACP_DMA_CUR_TRANS_CNT_7__DMAChCurTransCnt_MASK 0x1ffff
330#define ACP_DMA_CUR_TRANS_CNT_7__DMAChCurTransCnt__SHIFT 0x0
331#define ACP_DMA_CUR_TRANS_CNT_8__DMAChCurTransCnt_MASK 0x1ffff
332#define ACP_DMA_CUR_TRANS_CNT_8__DMAChCurTransCnt__SHIFT 0x0
333#define ACP_DMA_CUR_TRANS_CNT_9__DMAChCurTransCnt_MASK 0x1ffff
334#define ACP_DMA_CUR_TRANS_CNT_9__DMAChCurTransCnt__SHIFT 0x0
335#define ACP_DMA_CUR_TRANS_CNT_10__DMAChCurTransCnt_MASK 0x1ffff
336#define ACP_DMA_CUR_TRANS_CNT_10__DMAChCurTransCnt__SHIFT 0x0
337#define ACP_DMA_CUR_TRANS_CNT_11__DMAChCurTransCnt_MASK 0x1ffff
338#define ACP_DMA_CUR_TRANS_CNT_11__DMAChCurTransCnt__SHIFT 0x0
339#define ACP_DMA_CUR_TRANS_CNT_12__DMAChCurTransCnt_MASK 0x1ffff
340#define ACP_DMA_CUR_TRANS_CNT_12__DMAChCurTransCnt__SHIFT 0x0
341#define ACP_DMA_CUR_TRANS_CNT_13__DMAChCurTransCnt_MASK 0x1ffff
342#define ACP_DMA_CUR_TRANS_CNT_13__DMAChCurTransCnt__SHIFT 0x0
343#define ACP_DMA_CUR_TRANS_CNT_14__DMAChCurTransCnt_MASK 0x1ffff
344#define ACP_DMA_CUR_TRANS_CNT_14__DMAChCurTransCnt__SHIFT 0x0
345#define ACP_DMA_CUR_TRANS_CNT_15__DMAChCurTransCnt_MASK 0x1ffff
346#define ACP_DMA_CUR_TRANS_CNT_15__DMAChCurTransCnt__SHIFT 0x0
347#define ACP_DMA_ERR_STS_0__DMAChTermErr_MASK 0x1
348#define ACP_DMA_ERR_STS_0__DMAChTermErr__SHIFT 0x0
349#define ACP_DMA_ERR_STS_0__DMAChErrCode_MASK 0x1e
350#define ACP_DMA_ERR_STS_0__DMAChErrCode__SHIFT 0x1
351#define ACP_DMA_ERR_STS_1__DMAChTermErr_MASK 0x1
352#define ACP_DMA_ERR_STS_1__DMAChTermErr__SHIFT 0x0
353#define ACP_DMA_ERR_STS_1__DMAChErrCode_MASK 0x1e
354#define ACP_DMA_ERR_STS_1__DMAChErrCode__SHIFT 0x1
355#define ACP_DMA_ERR_STS_2__DMAChTermErr_MASK 0x1
356#define ACP_DMA_ERR_STS_2__DMAChTermErr__SHIFT 0x0
357#define ACP_DMA_ERR_STS_2__DMAChErrCode_MASK 0x1e
358#define ACP_DMA_ERR_STS_2__DMAChErrCode__SHIFT 0x1
359#define ACP_DMA_ERR_STS_3__DMAChTermErr_MASK 0x1
360#define ACP_DMA_ERR_STS_3__DMAChTermErr__SHIFT 0x0
361#define ACP_DMA_ERR_STS_3__DMAChErrCode_MASK 0x1e
362#define ACP_DMA_ERR_STS_3__DMAChErrCode__SHIFT 0x1
363#define ACP_DMA_ERR_STS_4__DMAChTermErr_MASK 0x1
364#define ACP_DMA_ERR_STS_4__DMAChTermErr__SHIFT 0x0
365#define ACP_DMA_ERR_STS_4__DMAChErrCode_MASK 0x1e
366#define ACP_DMA_ERR_STS_4__DMAChErrCode__SHIFT 0x1
367#define ACP_DMA_ERR_STS_5__DMAChTermErr_MASK 0x1
368#define ACP_DMA_ERR_STS_5__DMAChTermErr__SHIFT 0x0
369#define ACP_DMA_ERR_STS_5__DMAChErrCode_MASK 0x1e
370#define ACP_DMA_ERR_STS_5__DMAChErrCode__SHIFT 0x1
371#define ACP_DMA_ERR_STS_6__DMAChTermErr_MASK 0x1
372#define ACP_DMA_ERR_STS_6__DMAChTermErr__SHIFT 0x0
373#define ACP_DMA_ERR_STS_6__DMAChErrCode_MASK 0x1e
374#define ACP_DMA_ERR_STS_6__DMAChErrCode__SHIFT 0x1
375#define ACP_DMA_ERR_STS_7__DMAChTermErr_MASK 0x1
376#define ACP_DMA_ERR_STS_7__DMAChTermErr__SHIFT 0x0
377#define ACP_DMA_ERR_STS_7__DMAChErrCode_MASK 0x1e
378#define ACP_DMA_ERR_STS_7__DMAChErrCode__SHIFT 0x1
379#define ACP_DMA_ERR_STS_8__DMAChTermErr_MASK 0x1
380#define ACP_DMA_ERR_STS_8__DMAChTermErr__SHIFT 0x0
381#define ACP_DMA_ERR_STS_8__DMAChErrCode_MASK 0x1e
382#define ACP_DMA_ERR_STS_8__DMAChErrCode__SHIFT 0x1
383#define ACP_DMA_ERR_STS_9__DMAChTermErr_MASK 0x1
384#define ACP_DMA_ERR_STS_9__DMAChTermErr__SHIFT 0x0
385#define ACP_DMA_ERR_STS_9__DMAChErrCode_MASK 0x1e
386#define ACP_DMA_ERR_STS_9__DMAChErrCode__SHIFT 0x1
387#define ACP_DMA_ERR_STS_10__DMAChTermErr_MASK 0x1
388#define ACP_DMA_ERR_STS_10__DMAChTermErr__SHIFT 0x0
389#define ACP_DMA_ERR_STS_10__DMAChErrCode_MASK 0x1e
390#define ACP_DMA_ERR_STS_10__DMAChErrCode__SHIFT 0x1
391#define ACP_DMA_ERR_STS_11__DMAChTermErr_MASK 0x1
392#define ACP_DMA_ERR_STS_11__DMAChTermErr__SHIFT 0x0
393#define ACP_DMA_ERR_STS_11__DMAChErrCode_MASK 0x1e
394#define ACP_DMA_ERR_STS_11__DMAChErrCode__SHIFT 0x1
395#define ACP_DMA_ERR_STS_12__DMAChTermErr_MASK 0x1
396#define ACP_DMA_ERR_STS_12__DMAChTermErr__SHIFT 0x0
397#define ACP_DMA_ERR_STS_12__DMAChErrCode_MASK 0x1e
398#define ACP_DMA_ERR_STS_12__DMAChErrCode__SHIFT 0x1
399#define ACP_DMA_ERR_STS_13__DMAChTermErr_MASK 0x1
400#define ACP_DMA_ERR_STS_13__DMAChTermErr__SHIFT 0x0
401#define ACP_DMA_ERR_STS_13__DMAChErrCode_MASK 0x1e
402#define ACP_DMA_ERR_STS_13__DMAChErrCode__SHIFT 0x1
403#define ACP_DMA_ERR_STS_14__DMAChTermErr_MASK 0x1
404#define ACP_DMA_ERR_STS_14__DMAChTermErr__SHIFT 0x0
405#define ACP_DMA_ERR_STS_14__DMAChErrCode_MASK 0x1e
406#define ACP_DMA_ERR_STS_14__DMAChErrCode__SHIFT 0x1
407#define ACP_DMA_ERR_STS_15__DMAChTermErr_MASK 0x1
408#define ACP_DMA_ERR_STS_15__DMAChTermErr__SHIFT 0x0
409#define ACP_DMA_ERR_STS_15__DMAChErrCode_MASK 0x1e
410#define ACP_DMA_ERR_STS_15__DMAChErrCode__SHIFT 0x1
411#define ACP_DMA_DESC_BASE_ADDR__DescriptorBaseAddr_MASK 0xffffffff
412#define ACP_DMA_DESC_BASE_ADDR__DescriptorBaseAddr__SHIFT 0x0
413#define ACP_DMA_DESC_MAX_NUM_DSCR__MaximumNumberDescr_MASK 0xf
414#define ACP_DMA_DESC_MAX_NUM_DSCR__MaximumNumberDescr__SHIFT 0x0
415#define ACP_DMA_CH_STS__DMAChSts_MASK 0xffff
416#define ACP_DMA_CH_STS__DMAChSts__SHIFT 0x0
417#define ACP_DMA_CH_GROUP__DMAChanelGrouping_MASK 0x1
418#define ACP_DMA_CH_GROUP__DMAChanelGrouping__SHIFT 0x0
419#define ACP_DSP0_CACHE_OFFSET0__Offset_MASK 0xfffffff
420#define ACP_DSP0_CACHE_OFFSET0__Offset__SHIFT 0x0
421#define ACP_DSP0_CACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
422#define ACP_DSP0_CACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
423#define ACP_DSP0_CACHE_SIZE0__Size_MASK 0xffffff
424#define ACP_DSP0_CACHE_SIZE0__Size__SHIFT 0x0
425#define ACP_DSP0_CACHE_SIZE0__PageEnable_MASK 0x80000000
426#define ACP_DSP0_CACHE_SIZE0__PageEnable__SHIFT 0x1f
427#define ACP_DSP0_CACHE_OFFSET1__Offset_MASK 0xfffffff
428#define ACP_DSP0_CACHE_OFFSET1__Offset__SHIFT 0x0
429#define ACP_DSP0_CACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
430#define ACP_DSP0_CACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
431#define ACP_DSP0_CACHE_SIZE1__Size_MASK 0xffffff
432#define ACP_DSP0_CACHE_SIZE1__Size__SHIFT 0x0
433#define ACP_DSP0_CACHE_SIZE1__PageEnable_MASK 0x80000000
434#define ACP_DSP0_CACHE_SIZE1__PageEnable__SHIFT 0x1f
435#define ACP_DSP0_CACHE_OFFSET2__Offset_MASK 0xfffffff
436#define ACP_DSP0_CACHE_OFFSET2__Offset__SHIFT 0x0
437#define ACP_DSP0_CACHE_OFFSET2__OnionGarlicSel_MASK 0x80000000
438#define ACP_DSP0_CACHE_OFFSET2__OnionGarlicSel__SHIFT 0x1f
439#define ACP_DSP0_CACHE_SIZE2__Size_MASK 0xffffff
440#define ACP_DSP0_CACHE_SIZE2__Size__SHIFT 0x0
441#define ACP_DSP0_CACHE_SIZE2__PageEnable_MASK 0x80000000
442#define ACP_DSP0_CACHE_SIZE2__PageEnable__SHIFT 0x1f
443#define ACP_DSP0_CACHE_OFFSET3__Offset_MASK 0xfffffff
444#define ACP_DSP0_CACHE_OFFSET3__Offset__SHIFT 0x0
445#define ACP_DSP0_CACHE_OFFSET3__OnionGarlicSel_MASK 0x80000000
446#define ACP_DSP0_CACHE_OFFSET3__OnionGarlicSel__SHIFT 0x1f
447#define ACP_DSP0_CACHE_SIZE3__Size_MASK 0xffffff
448#define ACP_DSP0_CACHE_SIZE3__Size__SHIFT 0x0
449#define ACP_DSP0_CACHE_SIZE3__PageEnable_MASK 0x80000000
450#define ACP_DSP0_CACHE_SIZE3__PageEnable__SHIFT 0x1f
451#define ACP_DSP0_CACHE_OFFSET4__Offset_MASK 0xfffffff
452#define ACP_DSP0_CACHE_OFFSET4__Offset__SHIFT 0x0
453#define ACP_DSP0_CACHE_OFFSET4__OnionGarlicSel_MASK 0x80000000
454#define ACP_DSP0_CACHE_OFFSET4__OnionGarlicSel__SHIFT 0x1f
455#define ACP_DSP0_CACHE_SIZE4__Size_MASK 0xffffff
456#define ACP_DSP0_CACHE_SIZE4__Size__SHIFT 0x0
457#define ACP_DSP0_CACHE_SIZE4__PageEnable_MASK 0x80000000
458#define ACP_DSP0_CACHE_SIZE4__PageEnable__SHIFT 0x1f
459#define ACP_DSP0_CACHE_OFFSET5__Offset_MASK 0xfffffff
460#define ACP_DSP0_CACHE_OFFSET5__Offset__SHIFT 0x0
461#define ACP_DSP0_CACHE_OFFSET5__OnionGarlicSel_MASK 0x80000000
462#define ACP_DSP0_CACHE_OFFSET5__OnionGarlicSel__SHIFT 0x1f
463#define ACP_DSP0_CACHE_SIZE5__Size_MASK 0xffffff
464#define ACP_DSP0_CACHE_SIZE5__Size__SHIFT 0x0
465#define ACP_DSP0_CACHE_SIZE5__PageEnable_MASK 0x80000000
466#define ACP_DSP0_CACHE_SIZE5__PageEnable__SHIFT 0x1f
467#define ACP_DSP0_CACHE_OFFSET6__Offset_MASK 0xfffffff
468#define ACP_DSP0_CACHE_OFFSET6__Offset__SHIFT 0x0
469#define ACP_DSP0_CACHE_OFFSET6__OnionGarlicSel_MASK 0x80000000
470#define ACP_DSP0_CACHE_OFFSET6__OnionGarlicSel__SHIFT 0x1f
471#define ACP_DSP0_CACHE_SIZE6__Size_MASK 0xffffff
472#define ACP_DSP0_CACHE_SIZE6__Size__SHIFT 0x0
473#define ACP_DSP0_CACHE_SIZE6__PageEnable_MASK 0x80000000
474#define ACP_DSP0_CACHE_SIZE6__PageEnable__SHIFT 0x1f
475#define ACP_DSP0_CACHE_OFFSET7__Offset_MASK 0xfffffff
476#define ACP_DSP0_CACHE_OFFSET7__Offset__SHIFT 0x0
477#define ACP_DSP0_CACHE_OFFSET7__OnionGarlicSel_MASK 0x80000000
478#define ACP_DSP0_CACHE_OFFSET7__OnionGarlicSel__SHIFT 0x1f
479#define ACP_DSP0_CACHE_SIZE7__Size_MASK 0xffffff
480#define ACP_DSP0_CACHE_SIZE7__Size__SHIFT 0x0
481#define ACP_DSP0_CACHE_SIZE7__PageEnable_MASK 0x80000000
482#define ACP_DSP0_CACHE_SIZE7__PageEnable__SHIFT 0x1f
483#define ACP_DSP0_CACHE_OFFSET8__Offset_MASK 0xfffffff
484#define ACP_DSP0_CACHE_OFFSET8__Offset__SHIFT 0x0
485#define ACP_DSP0_CACHE_OFFSET8__OnionGarlicSel_MASK 0x80000000
486#define ACP_DSP0_CACHE_OFFSET8__OnionGarlicSel__SHIFT 0x1f
487#define ACP_DSP0_CACHE_SIZE8__Size_MASK 0xffffff
488#define ACP_DSP0_CACHE_SIZE8__Size__SHIFT 0x0
489#define ACP_DSP0_CACHE_SIZE8__PageEnable_MASK 0x80000000
490#define ACP_DSP0_CACHE_SIZE8__PageEnable__SHIFT 0x1f
491#define ACP_DSP0_NONCACHE_OFFSET0__Offset_MASK 0xfffffff
492#define ACP_DSP0_NONCACHE_OFFSET0__Offset__SHIFT 0x0
493#define ACP_DSP0_NONCACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
494#define ACP_DSP0_NONCACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
495#define ACP_DSP0_NONCACHE_SIZE0__Size_MASK 0xffffff
496#define ACP_DSP0_NONCACHE_SIZE0__Size__SHIFT 0x0
497#define ACP_DSP0_NONCACHE_SIZE0__PageEnable_MASK 0x80000000
498#define ACP_DSP0_NONCACHE_SIZE0__PageEnable__SHIFT 0x1f
499#define ACP_DSP0_NONCACHE_OFFSET1__Offset_MASK 0xfffffff
500#define ACP_DSP0_NONCACHE_OFFSET1__Offset__SHIFT 0x0
501#define ACP_DSP0_NONCACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
502#define ACP_DSP0_NONCACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
503#define ACP_DSP0_NONCACHE_SIZE1__Size_MASK 0xffffff
504#define ACP_DSP0_NONCACHE_SIZE1__Size__SHIFT 0x0
505#define ACP_DSP0_NONCACHE_SIZE1__PageEnable_MASK 0x80000000
506#define ACP_DSP0_NONCACHE_SIZE1__PageEnable__SHIFT 0x1f
507#define ACP_DSP0_DEBUG_PC__DebugPC_MASK 0xffffffff
508#define ACP_DSP0_DEBUG_PC__DebugPC__SHIFT 0x0
509#define ACP_DSP0_NMI_SEL__NMISel_MASK 0x1
510#define ACP_DSP0_NMI_SEL__NMISel__SHIFT 0x0
511#define ACP_DSP0_CLKRST_CNTL__ClkEn_MASK 0x1
512#define ACP_DSP0_CLKRST_CNTL__ClkEn__SHIFT 0x0
513#define ACP_DSP0_CLKRST_CNTL__SoftResetDSP_MASK 0x2
514#define ACP_DSP0_CLKRST_CNTL__SoftResetDSP__SHIFT 0x1
515#define ACP_DSP0_CLKRST_CNTL__InternalSoftResetMode_MASK 0x4
516#define ACP_DSP0_CLKRST_CNTL__InternalSoftResetMode__SHIFT 0x2
517#define ACP_DSP0_CLKRST_CNTL__ExternalSoftResetMode_MASK 0x8
518#define ACP_DSP0_CLKRST_CNTL__ExternalSoftResetMode__SHIFT 0x3
519#define ACP_DSP0_CLKRST_CNTL__SoftResetDSPDone_MASK 0x10
520#define ACP_DSP0_CLKRST_CNTL__SoftResetDSPDone__SHIFT 0x4
521#define ACP_DSP0_CLKRST_CNTL__Clk_ON_Status_MASK 0x20
522#define ACP_DSP0_CLKRST_CNTL__Clk_ON_Status__SHIFT 0x5
523#define ACP_DSP0_RUNSTALL__RunStallCntl_MASK 0x1
524#define ACP_DSP0_RUNSTALL__RunStallCntl__SHIFT 0x0
525#define ACP_DSP0_OCD_HALT_ON_RST__OCD_HALT_ON_RST_MASK 0x1
526#define ACP_DSP0_OCD_HALT_ON_RST__OCD_HALT_ON_RST__SHIFT 0x0
527#define ACP_DSP0_WAIT_MODE__WaitMode_MASK 0x1
528#define ACP_DSP0_WAIT_MODE__WaitMode__SHIFT 0x0
529#define ACP_DSP0_VECT_SEL__StaticVectorSel_MASK 0x1
530#define ACP_DSP0_VECT_SEL__StaticVectorSel__SHIFT 0x0
531#define ACP_DSP0_DEBUG_REG1__ACP_DSP_DEBUG_REG1_MASK 0xffffffff
532#define ACP_DSP0_DEBUG_REG1__ACP_DSP_DEBUG_REG1__SHIFT 0x0
533#define ACP_DSP0_DEBUG_REG2__ACP_DSP_DEBUG_REG2_MASK 0xffffffff
534#define ACP_DSP0_DEBUG_REG2__ACP_DSP_DEBUG_REG2__SHIFT 0x0
535#define ACP_DSP0_DEBUG_REG3__ACP_DSP_DEBUG_REG3_MASK 0xffffffff
536#define ACP_DSP0_DEBUG_REG3__ACP_DSP_DEBUG_REG3__SHIFT 0x0
537#define ACP_DSP1_CACHE_OFFSET0__Offset_MASK 0xfffffff
538#define ACP_DSP1_CACHE_OFFSET0__Offset__SHIFT 0x0
539#define ACP_DSP1_CACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
540#define ACP_DSP1_CACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
541#define ACP_DSP1_CACHE_SIZE0__Size_MASK 0xffffff
542#define ACP_DSP1_CACHE_SIZE0__Size__SHIFT 0x0
543#define ACP_DSP1_CACHE_SIZE0__PageEnable_MASK 0x80000000
544#define ACP_DSP1_CACHE_SIZE0__PageEnable__SHIFT 0x1f
545#define ACP_DSP1_CACHE_OFFSET1__Offset_MASK 0xfffffff
546#define ACP_DSP1_CACHE_OFFSET1__Offset__SHIFT 0x0
547#define ACP_DSP1_CACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
548#define ACP_DSP1_CACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
549#define ACP_DSP1_CACHE_SIZE1__Size_MASK 0xffffff
550#define ACP_DSP1_CACHE_SIZE1__Size__SHIFT 0x0
551#define ACP_DSP1_CACHE_SIZE1__PageEnable_MASK 0x80000000
552#define ACP_DSP1_CACHE_SIZE1__PageEnable__SHIFT 0x1f
553#define ACP_DSP1_CACHE_OFFSET2__Offset_MASK 0xfffffff
554#define ACP_DSP1_CACHE_OFFSET2__Offset__SHIFT 0x0
555#define ACP_DSP1_CACHE_OFFSET2__OnionGarlicSel_MASK 0x80000000
556#define ACP_DSP1_CACHE_OFFSET2__OnionGarlicSel__SHIFT 0x1f
557#define ACP_DSP1_CACHE_SIZE2__Size_MASK 0xffffff
558#define ACP_DSP1_CACHE_SIZE2__Size__SHIFT 0x0
559#define ACP_DSP1_CACHE_SIZE2__PageEnable_MASK 0x80000000
560#define ACP_DSP1_CACHE_SIZE2__PageEnable__SHIFT 0x1f
561#define ACP_DSP1_CACHE_OFFSET3__Offset_MASK 0xfffffff
562#define ACP_DSP1_CACHE_OFFSET3__Offset__SHIFT 0x0
563#define ACP_DSP1_CACHE_OFFSET3__OnionGarlicSel_MASK 0x80000000
564#define ACP_DSP1_CACHE_OFFSET3__OnionGarlicSel__SHIFT 0x1f
565#define ACP_DSP1_CACHE_SIZE3__Size_MASK 0xffffff
566#define ACP_DSP1_CACHE_SIZE3__Size__SHIFT 0x0
567#define ACP_DSP1_CACHE_SIZE3__PageEnable_MASK 0x80000000
568#define ACP_DSP1_CACHE_SIZE3__PageEnable__SHIFT 0x1f
569#define ACP_DSP1_CACHE_OFFSET4__Offset_MASK 0xfffffff
570#define ACP_DSP1_CACHE_OFFSET4__Offset__SHIFT 0x0
571#define ACP_DSP1_CACHE_OFFSET4__OnionGarlicSel_MASK 0x80000000
572#define ACP_DSP1_CACHE_OFFSET4__OnionGarlicSel__SHIFT 0x1f
573#define ACP_DSP1_CACHE_SIZE4__Size_MASK 0xffffff
574#define ACP_DSP1_CACHE_SIZE4__Size__SHIFT 0x0
575#define ACP_DSP1_CACHE_SIZE4__PageEnable_MASK 0x80000000
576#define ACP_DSP1_CACHE_SIZE4__PageEnable__SHIFT 0x1f
577#define ACP_DSP1_CACHE_OFFSET5__Offset_MASK 0xfffffff
578#define ACP_DSP1_CACHE_OFFSET5__Offset__SHIFT 0x0
579#define ACP_DSP1_CACHE_OFFSET5__OnionGarlicSel_MASK 0x80000000
580#define ACP_DSP1_CACHE_OFFSET5__OnionGarlicSel__SHIFT 0x1f
581#define ACP_DSP1_CACHE_SIZE5__Size_MASK 0xffffff
582#define ACP_DSP1_CACHE_SIZE5__Size__SHIFT 0x0
583#define ACP_DSP1_CACHE_SIZE5__PageEnable_MASK 0x80000000
584#define ACP_DSP1_CACHE_SIZE5__PageEnable__SHIFT 0x1f
585#define ACP_DSP1_CACHE_OFFSET6__Offset_MASK 0xfffffff
586#define ACP_DSP1_CACHE_OFFSET6__Offset__SHIFT 0x0
587#define ACP_DSP1_CACHE_OFFSET6__OnionGarlicSel_MASK 0x80000000
588#define ACP_DSP1_CACHE_OFFSET6__OnionGarlicSel__SHIFT 0x1f
589#define ACP_DSP1_CACHE_SIZE6__Size_MASK 0xffffff
590#define ACP_DSP1_CACHE_SIZE6__Size__SHIFT 0x0
591#define ACP_DSP1_CACHE_SIZE6__PageEnable_MASK 0x80000000
592#define ACP_DSP1_CACHE_SIZE6__PageEnable__SHIFT 0x1f
593#define ACP_DSP1_CACHE_OFFSET7__Offset_MASK 0xfffffff
594#define ACP_DSP1_CACHE_OFFSET7__Offset__SHIFT 0x0
595#define ACP_DSP1_CACHE_OFFSET7__OnionGarlicSel_MASK 0x80000000
596#define ACP_DSP1_CACHE_OFFSET7__OnionGarlicSel__SHIFT 0x1f
597#define ACP_DSP1_CACHE_SIZE7__Size_MASK 0xffffff
598#define ACP_DSP1_CACHE_SIZE7__Size__SHIFT 0x0
599#define ACP_DSP1_CACHE_SIZE7__PageEnable_MASK 0x80000000
600#define ACP_DSP1_CACHE_SIZE7__PageEnable__SHIFT 0x1f
601#define ACP_DSP1_CACHE_OFFSET8__Offset_MASK 0xfffffff
602#define ACP_DSP1_CACHE_OFFSET8__Offset__SHIFT 0x0
603#define ACP_DSP1_CACHE_OFFSET8__OnionGarlicSel_MASK 0x80000000
604#define ACP_DSP1_CACHE_OFFSET8__OnionGarlicSel__SHIFT 0x1f
605#define ACP_DSP1_CACHE_SIZE8__Size_MASK 0xffffff
606#define ACP_DSP1_CACHE_SIZE8__Size__SHIFT 0x0
607#define ACP_DSP1_CACHE_SIZE8__PageEnable_MASK 0x80000000
608#define ACP_DSP1_CACHE_SIZE8__PageEnable__SHIFT 0x1f
609#define ACP_DSP1_NONCACHE_OFFSET0__Offset_MASK 0xfffffff
610#define ACP_DSP1_NONCACHE_OFFSET0__Offset__SHIFT 0x0
611#define ACP_DSP1_NONCACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
612#define ACP_DSP1_NONCACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
613#define ACP_DSP1_NONCACHE_SIZE0__Size_MASK 0xffffff
614#define ACP_DSP1_NONCACHE_SIZE0__Size__SHIFT 0x0
615#define ACP_DSP1_NONCACHE_SIZE0__PageEnable_MASK 0x80000000
616#define ACP_DSP1_NONCACHE_SIZE0__PageEnable__SHIFT 0x1f
617#define ACP_DSP1_NONCACHE_OFFSET1__Offset_MASK 0xfffffff
618#define ACP_DSP1_NONCACHE_OFFSET1__Offset__SHIFT 0x0
619#define ACP_DSP1_NONCACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
620#define ACP_DSP1_NONCACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
621#define ACP_DSP1_NONCACHE_SIZE1__Size_MASK 0xffffff
622#define ACP_DSP1_NONCACHE_SIZE1__Size__SHIFT 0x0
623#define ACP_DSP1_NONCACHE_SIZE1__PageEnable_MASK 0x80000000
624#define ACP_DSP1_NONCACHE_SIZE1__PageEnable__SHIFT 0x1f
625#define ACP_DSP1_DEBUG_PC__DebugPC_MASK 0xffffffff
626#define ACP_DSP1_DEBUG_PC__DebugPC__SHIFT 0x0
627#define ACP_DSP1_NMI_SEL__NMISel_MASK 0x1
628#define ACP_DSP1_NMI_SEL__NMISel__SHIFT 0x0
629#define ACP_DSP1_CLKRST_CNTL__ClkEn_MASK 0x1
630#define ACP_DSP1_CLKRST_CNTL__ClkEn__SHIFT 0x0
631#define ACP_DSP1_CLKRST_CNTL__SoftResetDSP_MASK 0x2
632#define ACP_DSP1_CLKRST_CNTL__SoftResetDSP__SHIFT 0x1
633#define ACP_DSP1_CLKRST_CNTL__InternalSoftResetMode_MASK 0x4
634#define ACP_DSP1_CLKRST_CNTL__InternalSoftResetMode__SHIFT 0x2
635#define ACP_DSP1_CLKRST_CNTL__ExternalSoftResetMode_MASK 0x8
636#define ACP_DSP1_CLKRST_CNTL__ExternalSoftResetMode__SHIFT 0x3
637#define ACP_DSP1_CLKRST_CNTL__SoftResetDSPDone_MASK 0x10
638#define ACP_DSP1_CLKRST_CNTL__SoftResetDSPDone__SHIFT 0x4
639#define ACP_DSP1_CLKRST_CNTL__Clk_ON_Status_MASK 0x20
640#define ACP_DSP1_CLKRST_CNTL__Clk_ON_Status__SHIFT 0x5
641#define ACP_DSP1_RUNSTALL__RunStallCntl_MASK 0x1
642#define ACP_DSP1_RUNSTALL__RunStallCntl__SHIFT 0x0
643#define ACP_DSP1_OCD_HALT_ON_RST__OCD_HALT_ON_RST_MASK 0x1
644#define ACP_DSP1_OCD_HALT_ON_RST__OCD_HALT_ON_RST__SHIFT 0x0
645#define ACP_DSP1_WAIT_MODE__WaitMode_MASK 0x1
646#define ACP_DSP1_WAIT_MODE__WaitMode__SHIFT 0x0
647#define ACP_DSP1_VECT_SEL__StaticVectorSel_MASK 0x1
648#define ACP_DSP1_VECT_SEL__StaticVectorSel__SHIFT 0x0
649#define ACP_DSP1_DEBUG_REG1__ACP_DSP_DEBUG_REG1_MASK 0xffffffff
650#define ACP_DSP1_DEBUG_REG1__ACP_DSP_DEBUG_REG1__SHIFT 0x0
651#define ACP_DSP1_DEBUG_REG2__ACP_DSP_DEBUG_REG2_MASK 0xffffffff
652#define ACP_DSP1_DEBUG_REG2__ACP_DSP_DEBUG_REG2__SHIFT 0x0
653#define ACP_DSP1_DEBUG_REG3__ACP_DSP_DEBUG_REG3_MASK 0xffffffff
654#define ACP_DSP1_DEBUG_REG3__ACP_DSP_DEBUG_REG3__SHIFT 0x0
655#define ACP_DSP2_CACHE_OFFSET0__Offset_MASK 0xfffffff
656#define ACP_DSP2_CACHE_OFFSET0__Offset__SHIFT 0x0
657#define ACP_DSP2_CACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
658#define ACP_DSP2_CACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
659#define ACP_DSP2_CACHE_SIZE0__Size_MASK 0xffffff
660#define ACP_DSP2_CACHE_SIZE0__Size__SHIFT 0x0
661#define ACP_DSP2_CACHE_SIZE0__PageEnable_MASK 0x80000000
662#define ACP_DSP2_CACHE_SIZE0__PageEnable__SHIFT 0x1f
663#define ACP_DSP2_CACHE_OFFSET1__Offset_MASK 0xfffffff
664#define ACP_DSP2_CACHE_OFFSET1__Offset__SHIFT 0x0
665#define ACP_DSP2_CACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
666#define ACP_DSP2_CACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
667#define ACP_DSP2_CACHE_SIZE1__Size_MASK 0xffffff
668#define ACP_DSP2_CACHE_SIZE1__Size__SHIFT 0x0
669#define ACP_DSP2_CACHE_SIZE1__PageEnable_MASK 0x80000000
670#define ACP_DSP2_CACHE_SIZE1__PageEnable__SHIFT 0x1f
671#define ACP_DSP2_CACHE_OFFSET2__Offset_MASK 0xfffffff
672#define ACP_DSP2_CACHE_OFFSET2__Offset__SHIFT 0x0
673#define ACP_DSP2_CACHE_OFFSET2__OnionGarlicSel_MASK 0x80000000
674#define ACP_DSP2_CACHE_OFFSET2__OnionGarlicSel__SHIFT 0x1f
675#define ACP_DSP2_CACHE_SIZE2__Size_MASK 0xffffff
676#define ACP_DSP2_CACHE_SIZE2__Size__SHIFT 0x0
677#define ACP_DSP2_CACHE_SIZE2__PageEnable_MASK 0x80000000
678#define ACP_DSP2_CACHE_SIZE2__PageEnable__SHIFT 0x1f
679#define ACP_DSP2_CACHE_OFFSET3__Offset_MASK 0xfffffff
680#define ACP_DSP2_CACHE_OFFSET3__Offset__SHIFT 0x0
681#define ACP_DSP2_CACHE_OFFSET3__OnionGarlicSel_MASK 0x80000000
682#define ACP_DSP2_CACHE_OFFSET3__OnionGarlicSel__SHIFT 0x1f
683#define ACP_DSP2_CACHE_SIZE3__Size_MASK 0xffffff
684#define ACP_DSP2_CACHE_SIZE3__Size__SHIFT 0x0
685#define ACP_DSP2_CACHE_SIZE3__PageEnable_MASK 0x80000000
686#define ACP_DSP2_CACHE_SIZE3__PageEnable__SHIFT 0x1f
687#define ACP_DSP2_CACHE_OFFSET4__Offset_MASK 0xfffffff
688#define ACP_DSP2_CACHE_OFFSET4__Offset__SHIFT 0x0
689#define ACP_DSP2_CACHE_OFFSET4__OnionGarlicSel_MASK 0x80000000
690#define ACP_DSP2_CACHE_OFFSET4__OnionGarlicSel__SHIFT 0x1f
691#define ACP_DSP2_CACHE_SIZE4__Size_MASK 0xffffff
692#define ACP_DSP2_CACHE_SIZE4__Size__SHIFT 0x0
693#define ACP_DSP2_CACHE_SIZE4__PageEnable_MASK 0x80000000
694#define ACP_DSP2_CACHE_SIZE4__PageEnable__SHIFT 0x1f
695#define ACP_DSP2_CACHE_OFFSET5__Offset_MASK 0xfffffff
696#define ACP_DSP2_CACHE_OFFSET5__Offset__SHIFT 0x0
697#define ACP_DSP2_CACHE_OFFSET5__OnionGarlicSel_MASK 0x80000000
698#define ACP_DSP2_CACHE_OFFSET5__OnionGarlicSel__SHIFT 0x1f
699#define ACP_DSP2_CACHE_SIZE5__Size_MASK 0xffffff
700#define ACP_DSP2_CACHE_SIZE5__Size__SHIFT 0x0
701#define ACP_DSP2_CACHE_SIZE5__PageEnable_MASK 0x80000000
702#define ACP_DSP2_CACHE_SIZE5__PageEnable__SHIFT 0x1f
703#define ACP_DSP2_CACHE_OFFSET6__Offset_MASK 0xfffffff
704#define ACP_DSP2_CACHE_OFFSET6__Offset__SHIFT 0x0
705#define ACP_DSP2_CACHE_OFFSET6__OnionGarlicSel_MASK 0x80000000
706#define ACP_DSP2_CACHE_OFFSET6__OnionGarlicSel__SHIFT 0x1f
707#define ACP_DSP2_CACHE_SIZE6__Size_MASK 0xffffff
708#define ACP_DSP2_CACHE_SIZE6__Size__SHIFT 0x0
709#define ACP_DSP2_CACHE_SIZE6__PageEnable_MASK 0x80000000
710#define ACP_DSP2_CACHE_SIZE6__PageEnable__SHIFT 0x1f
711#define ACP_DSP2_CACHE_OFFSET7__Offset_MASK 0xfffffff
712#define ACP_DSP2_CACHE_OFFSET7__Offset__SHIFT 0x0
713#define ACP_DSP2_CACHE_OFFSET7__OnionGarlicSel_MASK 0x80000000
714#define ACP_DSP2_CACHE_OFFSET7__OnionGarlicSel__SHIFT 0x1f
715#define ACP_DSP2_CACHE_SIZE7__Size_MASK 0xffffff
716#define ACP_DSP2_CACHE_SIZE7__Size__SHIFT 0x0
717#define ACP_DSP2_CACHE_SIZE7__PageEnable_MASK 0x80000000
718#define ACP_DSP2_CACHE_SIZE7__PageEnable__SHIFT 0x1f
719#define ACP_DSP2_CACHE_OFFSET8__Offset_MASK 0xfffffff
720#define ACP_DSP2_CACHE_OFFSET8__Offset__SHIFT 0x0
721#define ACP_DSP2_CACHE_OFFSET8__OnionGarlicSel_MASK 0x80000000
722#define ACP_DSP2_CACHE_OFFSET8__OnionGarlicSel__SHIFT 0x1f
723#define ACP_DSP2_CACHE_SIZE8__Size_MASK 0xffffff
724#define ACP_DSP2_CACHE_SIZE8__Size__SHIFT 0x0
725#define ACP_DSP2_CACHE_SIZE8__PageEnable_MASK 0x80000000
726#define ACP_DSP2_CACHE_SIZE8__PageEnable__SHIFT 0x1f
727#define ACP_DSP2_NONCACHE_OFFSET0__Offset_MASK 0xfffffff
728#define ACP_DSP2_NONCACHE_OFFSET0__Offset__SHIFT 0x0
729#define ACP_DSP2_NONCACHE_OFFSET0__OnionGarlicSel_MASK 0x80000000
730#define ACP_DSP2_NONCACHE_OFFSET0__OnionGarlicSel__SHIFT 0x1f
731#define ACP_DSP2_NONCACHE_SIZE0__Size_MASK 0xffffff
732#define ACP_DSP2_NONCACHE_SIZE0__Size__SHIFT 0x0
733#define ACP_DSP2_NONCACHE_SIZE0__PageEnable_MASK 0x80000000
734#define ACP_DSP2_NONCACHE_SIZE0__PageEnable__SHIFT 0x1f
735#define ACP_DSP2_NONCACHE_OFFSET1__Offset_MASK 0xfffffff
736#define ACP_DSP2_NONCACHE_OFFSET1__Offset__SHIFT 0x0
737#define ACP_DSP2_NONCACHE_OFFSET1__OnionGarlicSel_MASK 0x80000000
738#define ACP_DSP2_NONCACHE_OFFSET1__OnionGarlicSel__SHIFT 0x1f
739#define ACP_DSP2_NONCACHE_SIZE1__Size_MASK 0xffffff
740#define ACP_DSP2_NONCACHE_SIZE1__Size__SHIFT 0x0
741#define ACP_DSP2_NONCACHE_SIZE1__PageEnable_MASK 0x80000000
742#define ACP_DSP2_NONCACHE_SIZE1__PageEnable__SHIFT 0x1f
743#define ACP_DSP2_DEBUG_PC__DebugPC_MASK 0xffffffff
744#define ACP_DSP2_DEBUG_PC__DebugPC__SHIFT 0x0
745#define ACP_DSP2_NMI_SEL__NMISel_MASK 0x1
746#define ACP_DSP2_NMI_SEL__NMISel__SHIFT 0x0
747#define ACP_DSP2_CLKRST_CNTL__ClkEn_MASK 0x1
748#define ACP_DSP2_CLKRST_CNTL__ClkEn__SHIFT 0x0
749#define ACP_DSP2_CLKRST_CNTL__SoftResetDSP_MASK 0x2
750#define ACP_DSP2_CLKRST_CNTL__SoftResetDSP__SHIFT 0x1
751#define ACP_DSP2_CLKRST_CNTL__InternalSoftResetMode_MASK 0x4
752#define ACP_DSP2_CLKRST_CNTL__InternalSoftResetMode__SHIFT 0x2
753#define ACP_DSP2_CLKRST_CNTL__ExternalSoftResetMode_MASK 0x8
754#define ACP_DSP2_CLKRST_CNTL__ExternalSoftResetMode__SHIFT 0x3
755#define ACP_DSP2_CLKRST_CNTL__SoftResetDSPDone_MASK 0x10
756#define ACP_DSP2_CLKRST_CNTL__SoftResetDSPDone__SHIFT 0x4
757#define ACP_DSP2_CLKRST_CNTL__Clk_ON_Status_MASK 0x20
758#define ACP_DSP2_CLKRST_CNTL__Clk_ON_Status__SHIFT 0x5
759#define ACP_DSP2_RUNSTALL__RunStallCntl_MASK 0x1
760#define ACP_DSP2_RUNSTALL__RunStallCntl__SHIFT 0x0
761#define ACP_DSP2_OCD_HALT_ON_RST__OCD_HALT_ON_RST_MASK 0x1
762#define ACP_DSP2_OCD_HALT_ON_RST__OCD_HALT_ON_RST__SHIFT 0x0
763#define ACP_DSP2_WAIT_MODE__WaitMode_MASK 0x1
764#define ACP_DSP2_WAIT_MODE__WaitMode__SHIFT 0x0
765#define ACP_DSP2_VECT_SEL__StaticVectorSel_MASK 0x1
766#define ACP_DSP2_VECT_SEL__StaticVectorSel__SHIFT 0x0
767#define ACP_DSP2_DEBUG_REG1__ACP_DSP_DEBUG_REG1_MASK 0xffffffff
768#define ACP_DSP2_DEBUG_REG1__ACP_DSP_DEBUG_REG1__SHIFT 0x0
769#define ACP_DSP2_DEBUG_REG2__ACP_DSP_DEBUG_REG2_MASK 0xffffffff
770#define ACP_DSP2_DEBUG_REG2__ACP_DSP_DEBUG_REG2__SHIFT 0x0
771#define ACP_DSP2_DEBUG_REG3__ACP_DSP_DEBUG_REG3_MASK 0xffffffff
772#define ACP_DSP2_DEBUG_REG3__ACP_DSP_DEBUG_REG3__SHIFT 0x0
773#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBDataSwap_MASK 0x3
774#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBDataSwap__SHIFT 0x0
775#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBEnbMultRdReq_MASK 0x4
776#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBEnbMultRdReq__SHIFT 0x2
777#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBEnbMultWrReq_MASK 0x18
778#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBEnbMultWrReq__SHIFT 0x3
779#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBMaxReadBurst_MASK 0x60
780#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBMaxReadBurst__SHIFT 0x5
781#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBStallEnb_MASK 0x80
782#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBStallEnb__SHIFT 0x7
783#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBNackChkEnb_MASK 0x100
784#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBNackChkEnb__SHIFT 0x8
785#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBAdrWinViolChkEnb_MASK 0x200
786#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBAdrWinViolChkEnb__SHIFT 0x9
787#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBUrgEnb_MASK 0x400
788#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBUrgEnb__SHIFT 0xa
789#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBUrgCntMult_MASK 0x1800
790#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBUrgCntMult__SHIFT 0xb
791#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBStallMode_MASK 0x2000
792#define ACP_AXI2DAGB_ONION_CNTL__AXI2DAGBStallMode__SHIFT 0xd
793#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViolOver_MASK 0x2000000
794#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViolOver__SHIFT 0x19
795#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViolSource_MASK 0x1c000000
796#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViolSource__SHIFT 0x1a
797#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViol_MASK 0x20000000
798#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBAdrWinViol__SHIFT 0x1d
799#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBNackOver_MASK 0x40000000
800#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBNackOver__SHIFT 0x1e
801#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBNackVal_MASK 0x80000000
802#define ACP_AXI2DAGB_ONION_ERR_STATUS_WR__AXI2DAGBNackVal__SHIFT 0x1f
803#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViolOver_MASK 0x2000000
804#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViolOver__SHIFT 0x19
805#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViolSource_MASK 0x1c000000
806#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViolSource__SHIFT 0x1a
807#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViol_MASK 0x20000000
808#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBAdrWinViol__SHIFT 0x1d
809#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBNackOver_MASK 0x40000000
810#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBNackOver__SHIFT 0x1e
811#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBNackVal_MASK 0x80000000
812#define ACP_AXI2DAGB_ONION_ERR_STATUS_RD__AXI2DAGBNackVal__SHIFT 0x1f
813#define ACP_DAGB_Onion_TransPerf_Counter_Control__EnbDAGBTransPerfCntr_MASK 0x1
814#define ACP_DAGB_Onion_TransPerf_Counter_Control__EnbDAGBTransPerfCntr__SHIFT 0x0
815#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime_MASK 0x1ffff
816#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime__SHIFT 0x0
817#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr_MASK 0x80000000
818#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr__SHIFT 0x1f
819#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime_MASK 0x1ffff
820#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime__SHIFT 0x0
821#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr_MASK 0x80000000
822#define ACP_DAGB_Onion_Wr_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr__SHIFT 0x1f
823#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime_MASK 0x1ffff
824#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime__SHIFT 0x0
825#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr_MASK 0x80000000
826#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr__SHIFT 0x1f
827#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime_MASK 0x1ffff
828#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime__SHIFT 0x0
829#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr_MASK 0x80000000
830#define ACP_DAGB_Onion_Rd_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr__SHIFT 0x1f
831#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBDataSwap_MASK 0x3
832#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBDataSwap__SHIFT 0x0
833#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBEnbMultRdReq_MASK 0x4
834#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBEnbMultRdReq__SHIFT 0x2
835#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBEnbMultWrReq_MASK 0x18
836#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBEnbMultWrReq__SHIFT 0x3
837#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBMaxReadBurst_MASK 0x60
838#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBMaxReadBurst__SHIFT 0x5
839#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBStallEnb_MASK 0x80
840#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBStallEnb__SHIFT 0x7
841#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBNackChkEnb_MASK 0x100
842#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBNackChkEnb__SHIFT 0x8
843#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBAdrWinViolChkEnb_MASK 0x200
844#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBAdrWinViolChkEnb__SHIFT 0x9
845#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBUrgEnb_MASK 0x400
846#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBUrgEnb__SHIFT 0xa
847#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBUrgCntMult_MASK 0x1800
848#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBUrgCntMult__SHIFT 0xb
849#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBStallMode_MASK 0x2000
850#define ACP_AXI2DAGB_GARLIC_CNTL__AXI2DAGBStallMode__SHIFT 0xd
851#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViolOver_MASK 0x2000000
852#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViolOver__SHIFT 0x19
853#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViolSource_MASK 0x1c000000
854#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViolSource__SHIFT 0x1a
855#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViol_MASK 0x20000000
856#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBAdrWinViol__SHIFT 0x1d
857#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBNackOver_MASK 0x40000000
858#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBNackOver__SHIFT 0x1e
859#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBNackVal_MASK 0x80000000
860#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_WR__AXI2DAGBNackVal__SHIFT 0x1f
861#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViolOver_MASK 0x2000000
862#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViolOver__SHIFT 0x19
863#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViolSource_MASK 0x1c000000
864#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViolSource__SHIFT 0x1a
865#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViol_MASK 0x20000000
866#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBAdrWinViol__SHIFT 0x1d
867#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBNackOver_MASK 0x40000000
868#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBNackOver__SHIFT 0x1e
869#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBNackVal_MASK 0x80000000
870#define ACP_AXI2DAGB_GARLIC_ERR_STATUS_RD__AXI2DAGBNackVal__SHIFT 0x1f
871#define ACP_DAGB_Garlic_TransPerf_Counter_Control__EnbDAGBTransPerfCntr_MASK 0x1
872#define ACP_DAGB_Garlic_TransPerf_Counter_Control__EnbDAGBTransPerfCntr__SHIFT 0x0
873#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime_MASK 0x1ffff
874#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime__SHIFT 0x0
875#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr_MASK 0x80000000
876#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr__SHIFT 0x1f
877#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime_MASK 0x1ffff
878#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime__SHIFT 0x0
879#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr_MASK 0x80000000
880#define ACP_DAGB_Garlic_Wr_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr__SHIFT 0x1f
881#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime_MASK 0x1ffff
882#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Current__CurDAGBTransPerfCntrTime__SHIFT 0x0
883#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr_MASK 0x80000000
884#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Current__ClrCurDAGBTransPerfCntr__SHIFT 0x1f
885#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime_MASK 0x1ffff
886#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Peak__PeakDAGBTransPerfCntrTime__SHIFT 0x0
887#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr_MASK 0x80000000
888#define ACP_DAGB_Garlic_Rd_TransPerf_Counter_Peak__ClrPeakDAGBTransPerfCntr__SHIFT 0x1f
889#define ACP_DAGB_PAGE_SIZE_GRP_1__AXI2DAGBPageSize_MASK 0x3
890#define ACP_DAGB_PAGE_SIZE_GRP_1__AXI2DAGBPageSize__SHIFT 0x0
891#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBBaseAddr_MASK 0xfffffff
892#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBBaseAddr__SHIFT 0x0
893#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBSnoopSel_MASK 0x20000000
894#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBSnoopSel__SHIFT 0x1d
895#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBTargetMemSel_MASK 0x40000000
896#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBTargetMemSel__SHIFT 0x1e
897#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBGrpEnable_MASK 0x80000000
898#define ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBGrpEnable__SHIFT 0x1f
899#define ACP_DAGB_PAGE_SIZE_GRP_2__AXI2DAGBPageSize_MASK 0x3
900#define ACP_DAGB_PAGE_SIZE_GRP_2__AXI2DAGBPageSize__SHIFT 0x0
901#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBBaseAddr_MASK 0xfffffff
902#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBBaseAddr__SHIFT 0x0
903#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBSnoopSel_MASK 0x20000000
904#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBSnoopSel__SHIFT 0x1d
905#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBTargetMemSel_MASK 0x40000000
906#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBTargetMemSel__SHIFT 0x1e
907#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBGrpEnable_MASK 0x80000000
908#define ACP_DAGB_BASE_ADDR_GRP_2__AXI2DAGBGrpEnable__SHIFT 0x1f
909#define ACP_DAGB_PAGE_SIZE_GRP_3__AXI2DAGBPageSize_MASK 0x3
910#define ACP_DAGB_PAGE_SIZE_GRP_3__AXI2DAGBPageSize__SHIFT 0x0
911#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBBaseAddr_MASK 0xfffffff
912#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBBaseAddr__SHIFT 0x0
913#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBSnoopSel_MASK 0x20000000
914#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBSnoopSel__SHIFT 0x1d
915#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBTargetMemSel_MASK 0x40000000
916#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBTargetMemSel__SHIFT 0x1e
917#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBGrpEnable_MASK 0x80000000
918#define ACP_DAGB_BASE_ADDR_GRP_3__AXI2DAGBGrpEnable__SHIFT 0x1f
919#define ACP_DAGB_PAGE_SIZE_GRP_4__AXI2DAGBPageSize_MASK 0x3
920#define ACP_DAGB_PAGE_SIZE_GRP_4__AXI2DAGBPageSize__SHIFT 0x0
921#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBBaseAddr_MASK 0xfffffff
922#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBBaseAddr__SHIFT 0x0
923#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBSnoopSel_MASK 0x20000000
924#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBSnoopSel__SHIFT 0x1d
925#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBTargetMemSel_MASK 0x40000000
926#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBTargetMemSel__SHIFT 0x1e
927#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBGrpEnable_MASK 0x80000000
928#define ACP_DAGB_BASE_ADDR_GRP_4__AXI2DAGBGrpEnable__SHIFT 0x1f
929#define ACP_DAGB_PAGE_SIZE_GRP_5__AXI2DAGBPageSize_MASK 0x3
930#define ACP_DAGB_PAGE_SIZE_GRP_5__AXI2DAGBPageSize__SHIFT 0x0
931#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBBaseAddr_MASK 0xfffffff
932#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBBaseAddr__SHIFT 0x0
933#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBSnoopSel_MASK 0x20000000
934#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBSnoopSel__SHIFT 0x1d
935#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBTargetMemSel_MASK 0x40000000
936#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBTargetMemSel__SHIFT 0x1e
937#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBGrpEnable_MASK 0x80000000
938#define ACP_DAGB_BASE_ADDR_GRP_5__AXI2DAGBGrpEnable__SHIFT 0x1f
939#define ACP_DAGB_PAGE_SIZE_GRP_6__AXI2DAGBPageSize_MASK 0x3
940#define ACP_DAGB_PAGE_SIZE_GRP_6__AXI2DAGBPageSize__SHIFT 0x0
941#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBBaseAddr_MASK 0xfffffff
942#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBBaseAddr__SHIFT 0x0
943#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBSnoopSel_MASK 0x20000000
944#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBSnoopSel__SHIFT 0x1d
945#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBTargetMemSel_MASK 0x40000000
946#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBTargetMemSel__SHIFT 0x1e
947#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBGrpEnable_MASK 0x80000000
948#define ACP_DAGB_BASE_ADDR_GRP_6__AXI2DAGBGrpEnable__SHIFT 0x1f
949#define ACP_DAGB_PAGE_SIZE_GRP_7__AXI2DAGBPageSize_MASK 0x3
950#define ACP_DAGB_PAGE_SIZE_GRP_7__AXI2DAGBPageSize__SHIFT 0x0
951#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBBaseAddr_MASK 0xfffffff
952#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBBaseAddr__SHIFT 0x0
953#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBSnoopSel_MASK 0x20000000
954#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBSnoopSel__SHIFT 0x1d
955#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBTargetMemSel_MASK 0x40000000
956#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBTargetMemSel__SHIFT 0x1e
957#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBGrpEnable_MASK 0x80000000
958#define ACP_DAGB_BASE_ADDR_GRP_7__AXI2DAGBGrpEnable__SHIFT 0x1f
959#define ACP_DAGB_PAGE_SIZE_GRP_8__AXI2DAGBPageSize_MASK 0x3
960#define ACP_DAGB_PAGE_SIZE_GRP_8__AXI2DAGBPageSize__SHIFT 0x0
961#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBBaseAddr_MASK 0xfffffff
962#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBBaseAddr__SHIFT 0x0
963#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBSnoopSel_MASK 0x20000000
964#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBSnoopSel__SHIFT 0x1d
965#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBTargetMemSel_MASK 0x40000000
966#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBTargetMemSel__SHIFT 0x1e
967#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBGrpEnable_MASK 0x80000000
968#define ACP_DAGB_BASE_ADDR_GRP_8__AXI2DAGBGrpEnable__SHIFT 0x1f
969#define ACP_DAGB_ATU_CTRL__AXI2DAGBCacheInvalidate_MASK 0x1
970#define ACP_DAGB_ATU_CTRL__AXI2DAGBCacheInvalidate__SHIFT 0x0
971#define ACP_CONTROL__ClkEn_MASK 0x1
972#define ACP_CONTROL__ClkEn__SHIFT 0x0
973#define ACP_CONTROL__JtagEn_MASK 0x400
974#define ACP_CONTROL__JtagEn__SHIFT 0xa
975#define ACP_STATUS__ClkOn_MASK 0x1
976#define ACP_STATUS__ClkOn__SHIFT 0x0
977#define ACP_STATUS__ACPRefClkSpd_MASK 0x2
978#define ACP_STATUS__ACPRefClkSpd__SHIFT 0x1
979#define ACP_STATUS__SMUStutterLastEdge_MASK 0x4
980#define ACP_STATUS__SMUStutterLastEdge__SHIFT 0x2
981#define ACP_STATUS__MCStutterLastEdge_MASK 0x8
982#define ACP_STATUS__MCStutterLastEdge__SHIFT 0x3
983#define ACP_SOFT_RESET__SoftResetAud_MASK 0x100
984#define ACP_SOFT_RESET__SoftResetAud__SHIFT 0x8
985#define ACP_SOFT_RESET__SoftResetDMA_MASK 0x200
986#define ACP_SOFT_RESET__SoftResetDMA__SHIFT 0x9
987#define ACP_SOFT_RESET__InternalSoftResetMode_MASK 0x4000
988#define ACP_SOFT_RESET__InternalSoftResetMode__SHIFT 0xe
989#define ACP_SOFT_RESET__ExternalSoftResetMode_MASK 0x8000
990#define ACP_SOFT_RESET__ExternalSoftResetMode__SHIFT 0xf
991#define ACP_SOFT_RESET__SoftResetAudDone_MASK 0x1000000
992#define ACP_SOFT_RESET__SoftResetAudDone__SHIFT 0x18
993#define ACP_SOFT_RESET__SoftResetDMADone_MASK 0x2000000
994#define ACP_SOFT_RESET__SoftResetDMADone__SHIFT 0x19
995#define ACP_PwrMgmt_CNTL__SCLKSleepCntl_MASK 0x3
996#define ACP_PwrMgmt_CNTL__SCLKSleepCntl__SHIFT 0x0
997#define ACP_CAC_INDICATOR_CONTROL__ACP_Cac_Indicator_Counter_MASK 0xffff
998#define ACP_CAC_INDICATOR_CONTROL__ACP_Cac_Indicator_Counter__SHIFT 0x0
999#define ACP_SMU_MAILBOX__ACP_SMU_Mailbox_MASK 0xffffffff
1000#define ACP_SMU_MAILBOX__ACP_SMU_Mailbox__SHIFT 0x0
1001#define ACP_FUTURE_REG_SCLK_0__ACPFutureReg_MASK 0xffffffff
1002#define ACP_FUTURE_REG_SCLK_0__ACPFutureReg__SHIFT 0x0
1003#define ACP_FUTURE_REG_SCLK_1__ACPFutureReg_MASK 0xffffffff
1004#define ACP_FUTURE_REG_SCLK_1__ACPFutureReg__SHIFT 0x0
1005#define ACP_FUTURE_REG_SCLK_2__ACPFutureReg_MASK 0xffffffff
1006#define ACP_FUTURE_REG_SCLK_2__ACPFutureReg__SHIFT 0x0
1007#define ACP_FUTURE_REG_SCLK_3__ACPFutureReg_MASK 0xffffffff
1008#define ACP_FUTURE_REG_SCLK_3__ACPFutureReg__SHIFT 0x0
1009#define ACP_FUTURE_REG_SCLK_4__ACPFutureReg_MASK 0xffffffff
1010#define ACP_FUTURE_REG_SCLK_4__ACPFutureReg__SHIFT 0x0
1011#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_ask_cnt_enable_MASK 0x1
1012#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_ask_cnt_enable__SHIFT 0x0
1013#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_go_cnt_enable_MASK 0x2
1014#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_go_cnt_enable__SHIFT 0x1
1015#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_exp_respcnt_enable_MASK 0x4
1016#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_exp_respcnt_enable__SHIFT 0x2
1017#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_actual_respcnt_enable_MASK 0x8
1018#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_wr_actual_respcnt_enable__SHIFT 0x3
1019#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_ask_cnt_enable_MASK 0x10
1020#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_ask_cnt_enable__SHIFT 0x4
1021#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_go_cnt_enable_MASK 0x20
1022#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_go_cnt_enable__SHIFT 0x5
1023#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_exp_respcnt_enable_MASK 0x40
1024#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_exp_respcnt_enable__SHIFT 0x6
1025#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_actual_respcnt_enable_MASK 0x80
1026#define ACP_DAGB_DEBUG_CNT_ENABLE__garlic_rd_actual_respcnt_enable__SHIFT 0x7
1027#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_ask_cnt_enable_MASK 0x100
1028#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_ask_cnt_enable__SHIFT 0x8
1029#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_go_cnt_enable_MASK 0x200
1030#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_go_cnt_enable__SHIFT 0x9
1031#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_exp_respcnt_enable_MASK 0x400
1032#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_exp_respcnt_enable__SHIFT 0xa
1033#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_actual_respcnt_enable_MASK 0x800
1034#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_wr_actual_respcnt_enable__SHIFT 0xb
1035#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_ask_cnt_enable_MASK 0x1000
1036#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_ask_cnt_enable__SHIFT 0xc
1037#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_go_cnt_enable_MASK 0x2000
1038#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_go_cnt_enable__SHIFT 0xd
1039#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_exp_respcnt_enable_MASK 0x4000
1040#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_exp_respcnt_enable__SHIFT 0xe
1041#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_actual_respcnt_enable_MASK 0x8000
1042#define ACP_DAGB_DEBUG_CNT_ENABLE__onion_rd_actual_respcnt_enable__SHIFT 0xf
1043#define ACP_DAGBG_WR_ASK_CNT__garlic_wr_only_ask_cnt_MASK 0xffff
1044#define ACP_DAGBG_WR_ASK_CNT__garlic_wr_only_ask_cnt__SHIFT 0x0
1045#define ACP_DAGBG_WR_GO_CNT__garlic_wr_only_go_cnt_MASK 0xffff
1046#define ACP_DAGBG_WR_GO_CNT__garlic_wr_only_go_cnt__SHIFT 0x0
1047#define ACP_DAGBG_WR_EXP_RESP_CNT__garlic_wr_exp_resp_cnt_MASK 0xffff
1048#define ACP_DAGBG_WR_EXP_RESP_CNT__garlic_wr_exp_resp_cnt__SHIFT 0x0
1049#define ACP_DAGBG_WR_ACTUAL_RESP_CNT__garlic_wr_actual_resp_cnt_MASK 0xffff
1050#define ACP_DAGBG_WR_ACTUAL_RESP_CNT__garlic_wr_actual_resp_cnt__SHIFT 0x0
1051#define ACP_DAGBG_RD_ASK_CNT__garlic_rd_only_ask_cnt_MASK 0xffff
1052#define ACP_DAGBG_RD_ASK_CNT__garlic_rd_only_ask_cnt__SHIFT 0x0
1053#define ACP_DAGBG_RD_GO_CNT__garlic_rd_only_go_cnt_MASK 0xffff
1054#define ACP_DAGBG_RD_GO_CNT__garlic_rd_only_go_cnt__SHIFT 0x0
1055#define ACP_DAGBG_RD_EXP_RESP_CNT__garlic_rd_exp_resp_cnt_MASK 0xffff
1056#define ACP_DAGBG_RD_EXP_RESP_CNT__garlic_rd_exp_resp_cnt__SHIFT 0x0
1057#define ACP_DAGBG_RD_ACTUAL_RESP_CNT__garlic_rd_actual_resp_cnt_MASK 0xffff
1058#define ACP_DAGBG_RD_ACTUAL_RESP_CNT__garlic_rd_actual_resp_cnt__SHIFT 0x0
1059#define ACP_DAGBO_WR_ASK_CNT__onion_wr_only_ask_cnt_MASK 0xffff
1060#define ACP_DAGBO_WR_ASK_CNT__onion_wr_only_ask_cnt__SHIFT 0x0
1061#define ACP_DAGBO_WR_GO_CNT__onion_wr_only_go_cnt_MASK 0xffff
1062#define ACP_DAGBO_WR_GO_CNT__onion_wr_only_go_cnt__SHIFT 0x0
1063#define ACP_DAGBO_WR_EXP_RESP_CNT__onion_wr_exp_resp_cnt_MASK 0xffff
1064#define ACP_DAGBO_WR_EXP_RESP_CNT__onion_wr_exp_resp_cnt__SHIFT 0x0
1065#define ACP_DAGBO_WR_ACTUAL_RESP_CNT__onion_wr_actual_resp_cnt_MASK 0xffff
1066#define ACP_DAGBO_WR_ACTUAL_RESP_CNT__onion_wr_actual_resp_cnt__SHIFT 0x0
1067#define ACP_DAGBO_RD_ASK_CNT__onion_rd_only_ask_cnt_MASK 0xffff
1068#define ACP_DAGBO_RD_ASK_CNT__onion_rd_only_ask_cnt__SHIFT 0x0
1069#define ACP_DAGBO_RD_GO_CNT__onion_rd_only_go_cnt_MASK 0xffff
1070#define ACP_DAGBO_RD_GO_CNT__onion_rd_only_go_cnt__SHIFT 0x0
1071#define ACP_DAGBO_RD_EXP_RESP_CNT__onion_rd_exp_resp_cnt_MASK 0xffff
1072#define ACP_DAGBO_RD_EXP_RESP_CNT__onion_rd_exp_resp_cnt__SHIFT 0x0
1073#define ACP_DAGBO_RD_ACTUAL_RESP_CNT__onion_rd_actual_resp_cnt_MASK 0xffff
1074#define ACP_DAGBO_RD_ACTUAL_RESP_CNT__onion_rd_actual_resp_cnt__SHIFT 0x0
1075#define ACP_BRB_CONTROL__BRB_BlockSharedRAMArbCntrl_MASK 0xf
1076#define ACP_BRB_CONTROL__BRB_BlockSharedRAMArbCntrl__SHIFT 0x0
1077#define ACP_EXTERNAL_INTR_ENB__ACPExtIntrEnb_MASK 0x1
1078#define ACP_EXTERNAL_INTR_ENB__ACPExtIntrEnb__SHIFT 0x0
1079#define ACP_EXTERNAL_INTR_CNTL__ACPErrMask_MASK 0x1
1080#define ACP_EXTERNAL_INTR_CNTL__ACPErrMask__SHIFT 0x0
1081#define ACP_EXTERNAL_INTR_CNTL__I2SMicDataAvMask_MASK 0x2
1082#define ACP_EXTERNAL_INTR_CNTL__I2SMicDataAvMask__SHIFT 0x1
1083#define ACP_EXTERNAL_INTR_CNTL__I2SSpkr0DataEmptyMask_MASK 0x4
1084#define ACP_EXTERNAL_INTR_CNTL__I2SSpkr0DataEmptyMask__SHIFT 0x2
1085#define ACP_EXTERNAL_INTR_CNTL__I2SSpkr1DataEmptyMask_MASK 0x8
1086#define ACP_EXTERNAL_INTR_CNTL__I2SSpkr1DataEmptyMask__SHIFT 0x3
1087#define ACP_EXTERNAL_INTR_CNTL__I2SBTDataAvMask_MASK 0x10
1088#define ACP_EXTERNAL_INTR_CNTL__I2SBTDataAvMask__SHIFT 0x4
1089#define ACP_EXTERNAL_INTR_CNTL__AzaliaIntrMask_MASK 0x40
1090#define ACP_EXTERNAL_INTR_CNTL__AzaliaIntrMask__SHIFT 0x6
1091#define ACP_EXTERNAL_INTR_CNTL__DSP0TimeoutMask_MASK 0x100
1092#define ACP_EXTERNAL_INTR_CNTL__DSP0TimeoutMask__SHIFT 0x8
1093#define ACP_EXTERNAL_INTR_CNTL__DSP1TimeoutMask_MASK 0x200
1094#define ACP_EXTERNAL_INTR_CNTL__DSP1TimeoutMask__SHIFT 0x9
1095#define ACP_EXTERNAL_INTR_CNTL__DSP2TimeoutMask_MASK 0x400
1096#define ACP_EXTERNAL_INTR_CNTL__DSP2TimeoutMask__SHIFT 0xa
1097#define ACP_EXTERNAL_INTR_CNTL__I2SBTDataEmptyMask_MASK 0x800
1098#define ACP_EXTERNAL_INTR_CNTL__I2SBTDataEmptyMask__SHIFT 0xb
1099#define ACP_EXTERNAL_INTR_CNTL__DMAIOCMask_MASK 0xffff0000
1100#define ACP_EXTERNAL_INTR_CNTL__DMAIOCMask__SHIFT 0x10
1101#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErr_MASK 0x1
1102#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErr__SHIFT 0x0
1103#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErrSource_MASK 0xe
1104#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErrSource__SHIFT 0x1
1105#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErrSourceOver_MASK 0x10
1106#define ACP_ERROR_SOURCE_STS__ACPRegUdefADDRErrSourceOver__SHIFT 0x4
1107#define ACP_ERROR_SOURCE_STS__BRBAddrErr_MASK 0x20
1108#define ACP_ERROR_SOURCE_STS__BRBAddrErr__SHIFT 0x5
1109#define ACP_ERROR_SOURCE_STS__BRBAddrErrSource_MASK 0x3c0
1110#define ACP_ERROR_SOURCE_STS__BRBAddrErrSource__SHIFT 0x6
1111#define ACP_ERROR_SOURCE_STS__BRBAddrErrSourceOver_MASK 0x400
1112#define ACP_ERROR_SOURCE_STS__BRBAddrErrSourceOver__SHIFT 0xa
1113#define ACP_ERROR_SOURCE_STS__I2SMicOverFlowErr_MASK 0x800
1114#define ACP_ERROR_SOURCE_STS__I2SMicOverFlowErr__SHIFT 0xb
1115#define ACP_ERROR_SOURCE_STS__I2SSpeaker0OverFlowErr_MASK 0x1000
1116#define ACP_ERROR_SOURCE_STS__I2SSpeaker0OverFlowErr__SHIFT 0xc
1117#define ACP_ERROR_SOURCE_STS__I2SSpeaker1OverFlowErr_MASK 0x2000
1118#define ACP_ERROR_SOURCE_STS__I2SSpeaker1OverFlowErr__SHIFT 0xd
1119#define ACP_ERROR_SOURCE_STS__I2SBTRxFifoOverFlowErr_MASK 0x4000
1120#define ACP_ERROR_SOURCE_STS__I2SBTRxFifoOverFlowErr__SHIFT 0xe
1121#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErr_MASK 0x8000
1122#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErr__SHIFT 0xf
1123#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErrSource_MASK 0x70000
1124#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErrSource__SHIFT 0x10
1125#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErrSourceOver_MASK 0x80000
1126#define ACP_ERROR_SOURCE_STS__DSPAdrTransRangeErrSourceOver__SHIFT 0x13
1127#define ACP_ERROR_SOURCE_STS__DAGBErr_MASK 0x100000
1128#define ACP_ERROR_SOURCE_STS__DAGBErr__SHIFT 0x14
1129#define ACP_ERROR_SOURCE_STS__DAGBErrSource_MASK 0x1e00000
1130#define ACP_ERROR_SOURCE_STS__DAGBErrSource__SHIFT 0x15
1131#define ACP_ERROR_SOURCE_STS__DAGBErrSourceOver_MASK 0x2000000
1132#define ACP_ERROR_SOURCE_STS__DAGBErrSourceOver__SHIFT 0x19
1133#define ACP_ERROR_SOURCE_STS__DMATermOnErr_MASK 0x4000000
1134#define ACP_ERROR_SOURCE_STS__DMATermOnErr__SHIFT 0x1a
1135#define ACP_ERROR_SOURCE_STS__I2SBTTxFifoOverFlowErr_MASK 0x10000000
1136#define ACP_ERROR_SOURCE_STS__I2SBTTxFifoOverFlowErr__SHIFT 0x1c
1137#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP0_MASK 0x1
1138#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP0__SHIFT 0x0
1139#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP1_MASK 0x2
1140#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP1__SHIFT 0x1
1141#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP2_MASK 0x4
1142#define ACP_DSP_SW_INTR_TRIG__TrigSWIntHostDSP2__SHIFT 0x2
1143#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP0_MASK 0x100
1144#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP0__SHIFT 0x8
1145#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP1_MASK 0x200
1146#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP1__SHIFT 0x9
1147#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP2_MASK 0x400
1148#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSPnDSP2__SHIFT 0xa
1149#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP0Host_MASK 0x10000
1150#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP0Host__SHIFT 0x10
1151#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP1Host_MASK 0x20000
1152#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP1Host__SHIFT 0x11
1153#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP2Host_MASK 0x40000
1154#define ACP_DSP_SW_INTR_TRIG__TrigSWIntDSP2Host__SHIFT 0x12
1155#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP0_MASK 0x1
1156#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP0__SHIFT 0x0
1157#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP1_MASK 0x2
1158#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP1__SHIFT 0x1
1159#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP2_MASK 0x4
1160#define ACP_DSP_SW_INTR_CNTL__EnbSWIntHostDSP2__SHIFT 0x2
1161#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP0_MASK 0x100
1162#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP0__SHIFT 0x8
1163#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP1_MASK 0x200
1164#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP1__SHIFT 0x9
1165#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP2_MASK 0x400
1166#define ACP_DSP_SW_INTR_CNTL__EnbSWIntDSPnDSP2__SHIFT 0xa
1167#define ACP_DSP_SW_INTR_CNTL__EnbKernelIntrDSP0Mask_MASK 0x10000
1168#define ACP_DSP_SW_INTR_CNTL__EnbKernelIntrDSP0Mask__SHIFT 0x10
1169#define ACP_DSP_SW_INTR_CNTL__EmbKernelIntrDSP1Mask_MASK 0x20000
1170#define ACP_DSP_SW_INTR_CNTL__EmbKernelIntrDSP1Mask__SHIFT 0x11
1171#define ACP_DSP_SW_INTR_CNTL__EmbKernelIntrDSP2Mask_MASK 0x40000
1172#define ACP_DSP_SW_INTR_CNTL__EmbKernelIntrDSP2Mask__SHIFT 0x12
1173#define ACP_DAGBG_TIMEOUT_CNTL__DAGBGTimeoutValue_MASK 0x3ffff
1174#define ACP_DAGBG_TIMEOUT_CNTL__DAGBGTimeoutValue__SHIFT 0x0
1175#define ACP_DAGBG_TIMEOUT_CNTL__CntEn_MASK 0x80000000
1176#define ACP_DAGBG_TIMEOUT_CNTL__CntEn__SHIFT 0x1f
1177#define ACP_DAGBO_TIMEOUT_CNTL__DAGBOTimeoutValue_MASK 0x3ffff
1178#define ACP_DAGBO_TIMEOUT_CNTL__DAGBOTimeoutValue__SHIFT 0x0
1179#define ACP_DAGBO_TIMEOUT_CNTL__CntEn_MASK 0x80000000
1180#define ACP_DAGBO_TIMEOUT_CNTL__CntEn__SHIFT 0x1f
1181#define ACP_EXTERNAL_INTR_STAT__ACPErrStat_MASK 0x1
1182#define ACP_EXTERNAL_INTR_STAT__ACPErrStat__SHIFT 0x0
1183#define ACP_EXTERNAL_INTR_STAT__ACPErrAck_MASK 0x1
1184#define ACP_EXTERNAL_INTR_STAT__ACPErrAck__SHIFT 0x0
1185#define ACP_EXTERNAL_INTR_STAT__I2SMicDataAvStat_MASK 0x2
1186#define ACP_EXTERNAL_INTR_STAT__I2SMicDataAvStat__SHIFT 0x1
1187#define ACP_EXTERNAL_INTR_STAT__I2SMicDataAvAck_MASK 0x2
1188#define ACP_EXTERNAL_INTR_STAT__I2SMicDataAvAck__SHIFT 0x1
1189#define ACP_EXTERNAL_INTR_STAT__I2SSpkr0DataEmptyStat_MASK 0x4
1190#define ACP_EXTERNAL_INTR_STAT__I2SSpkr0DataEmptyStat__SHIFT 0x2
1191#define ACP_EXTERNAL_INTR_STAT__I2SSpkr0DataEmptyAck_MASK 0x4
1192#define ACP_EXTERNAL_INTR_STAT__I2SSpkr0DataEmptyAck__SHIFT 0x2
1193#define ACP_EXTERNAL_INTR_STAT__I2SSpkr1DataEmptyStat_MASK 0x8
1194#define ACP_EXTERNAL_INTR_STAT__I2SSpkr1DataEmptyStat__SHIFT 0x3
1195#define ACP_EXTERNAL_INTR_STAT__I2SSpkr1DataEmptyAck_MASK 0x8
1196#define ACP_EXTERNAL_INTR_STAT__I2SSpkr1DataEmptyAck__SHIFT 0x3
1197#define ACP_EXTERNAL_INTR_STAT__I2SBTDataAvStat_MASK 0x10
1198#define ACP_EXTERNAL_INTR_STAT__I2SBTDataAvStat__SHIFT 0x4
1199#define ACP_EXTERNAL_INTR_STAT__I2SBTDataAvAck_MASK 0x10
1200#define ACP_EXTERNAL_INTR_STAT__I2SBTDataAvAck__SHIFT 0x4
1201#define ACP_EXTERNAL_INTR_STAT__AzaliaIntrStat_MASK 0x40
1202#define ACP_EXTERNAL_INTR_STAT__AzaliaIntrStat__SHIFT 0x6
1203#define ACP_EXTERNAL_INTR_STAT__AzaliaIntrAck_MASK 0x40
1204#define ACP_EXTERNAL_INTR_STAT__AzaliaIntrAck__SHIFT 0x6
1205#define ACP_EXTERNAL_INTR_STAT__DSP0TimeoutStat_MASK 0x100
1206#define ACP_EXTERNAL_INTR_STAT__DSP0TimeoutStat__SHIFT 0x8
1207#define ACP_EXTERNAL_INTR_STAT__DSP0TimeoutAck_MASK 0x100
1208#define ACP_EXTERNAL_INTR_STAT__DSP0TimeoutAck__SHIFT 0x8
1209#define ACP_EXTERNAL_INTR_STAT__DSP1TimeoutStat_MASK 0x200
1210#define ACP_EXTERNAL_INTR_STAT__DSP1TimeoutStat__SHIFT 0x9
1211#define ACP_EXTERNAL_INTR_STAT__DSP1TimeoutAck_MASK 0x200
1212#define ACP_EXTERNAL_INTR_STAT__DSP1TimeoutAck__SHIFT 0x9
1213#define ACP_EXTERNAL_INTR_STAT__DSP2TimeoutStat_MASK 0x400
1214#define ACP_EXTERNAL_INTR_STAT__DSP2TimeoutStat__SHIFT 0xa
1215#define ACP_EXTERNAL_INTR_STAT__DSP2TimeoutAck_MASK 0x400
1216#define ACP_EXTERNAL_INTR_STAT__DSP2TimeoutAck__SHIFT 0xa
1217#define ACP_EXTERNAL_INTR_STAT__I2SBTDataEmptyStat_MASK 0x800
1218#define ACP_EXTERNAL_INTR_STAT__I2SBTDataEmptyStat__SHIFT 0xb
1219#define ACP_EXTERNAL_INTR_STAT__I2SBTDataEmptyAck_MASK 0x800
1220#define ACP_EXTERNAL_INTR_STAT__I2SBTDataEmptyAck__SHIFT 0xb
1221#define ACP_EXTERNAL_INTR_STAT__DMAIOCStat_MASK 0xffff0000
1222#define ACP_EXTERNAL_INTR_STAT__DMAIOCStat__SHIFT 0x10
1223#define ACP_EXTERNAL_INTR_STAT__DMAIOCAck_MASK 0xffff0000
1224#define ACP_EXTERNAL_INTR_STAT__DMAIOCAck__SHIFT 0x10
1225#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP0Stat_MASK 0x1
1226#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP0Stat__SHIFT 0x0
1227#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP0Ack_MASK 0x1
1228#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP0Ack__SHIFT 0x0
1229#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP1Stat_MASK 0x2
1230#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP1Stat__SHIFT 0x1
1231#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP1Ack_MASK 0x2
1232#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP1Ack__SHIFT 0x1
1233#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP2Stat_MASK 0x4
1234#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP2Stat__SHIFT 0x2
1235#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP2Ack_MASK 0x4
1236#define ACP_DSP_SW_INTR_STAT__SWIntHostDSP2Ack__SHIFT 0x2
1237#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP0Stat_MASK 0x100
1238#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP0Stat__SHIFT 0x8
1239#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP0Ack_MASK 0x100
1240#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP0Ack__SHIFT 0x8
1241#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP1Stat_MASK 0x200
1242#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP1Stat__SHIFT 0x9
1243#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP1Ack_MASK 0x200
1244#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP1Ack__SHIFT 0x9
1245#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP2Stat_MASK 0x400
1246#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP2Stat__SHIFT 0xa
1247#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP2Ack_MASK 0x400
1248#define ACP_DSP_SW_INTR_STAT__SWIntDSPnDSP2Ack__SHIFT 0xa
1249#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP0Stat_MASK 0x10000
1250#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP0Stat__SHIFT 0x10
1251#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP0Ack_MASK 0x10000
1252#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP0Ack__SHIFT 0x10
1253#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP1Stat_MASK 0x20000
1254#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP1Stat__SHIFT 0x11
1255#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP1Ack_MASK 0x20000
1256#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP1Ack__SHIFT 0x11
1257#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP2Stat_MASK 0x40000
1258#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP2Stat__SHIFT 0x12
1259#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP2Ack_MASK 0x40000
1260#define ACP_DSP_SW_INTR_STAT__SWKernelIntrDSP2Ack__SHIFT 0x12
1261#define ACP_DSP0_INTR_CNTL__ACPErrMask_MASK 0x1
1262#define ACP_DSP0_INTR_CNTL__ACPErrMask__SHIFT 0x0
1263#define ACP_DSP0_INTR_CNTL__I2SMicDataAvMask_MASK 0x2
1264#define ACP_DSP0_INTR_CNTL__I2SMicDataAvMask__SHIFT 0x1
1265#define ACP_DSP0_INTR_CNTL__I2SSpkr0DataEmptyMask_MASK 0x4
1266#define ACP_DSP0_INTR_CNTL__I2SSpkr0DataEmptyMask__SHIFT 0x2
1267#define ACP_DSP0_INTR_CNTL__I2SSpkr1DataEmptyMask_MASK 0x8
1268#define ACP_DSP0_INTR_CNTL__I2SSpkr1DataEmptyMask__SHIFT 0x3
1269#define ACP_DSP0_INTR_CNTL__I2SBTDataAvMask_MASK 0x10
1270#define ACP_DSP0_INTR_CNTL__I2SBTDataAvMask__SHIFT 0x4
1271#define ACP_DSP0_INTR_CNTL__AzaliaIntrMask_MASK 0x40
1272#define ACP_DSP0_INTR_CNTL__AzaliaIntrMask__SHIFT 0x6
1273#define ACP_DSP0_INTR_CNTL__SMUMailboxWriteMask_MASK 0x100
1274#define ACP_DSP0_INTR_CNTL__SMUMailboxWriteMask__SHIFT 0x8
1275#define ACP_DSP0_INTR_CNTL__SMUStutterStatusMask_MASK 0x200
1276#define ACP_DSP0_INTR_CNTL__SMUStutterStatusMask__SHIFT 0x9
1277#define ACP_DSP0_INTR_CNTL__MCStutterStatusMask_MASK 0x400
1278#define ACP_DSP0_INTR_CNTL__MCStutterStatusMask__SHIFT 0xa
1279#define ACP_DSP0_INTR_CNTL__DSPExtTimerMask_MASK 0x800
1280#define ACP_DSP0_INTR_CNTL__DSPExtTimerMask__SHIFT 0xb
1281#define ACP_DSP0_INTR_CNTL__DSPSemRespMask_MASK 0x1000
1282#define ACP_DSP0_INTR_CNTL__DSPSemRespMask__SHIFT 0xc
1283#define ACP_DSP0_INTR_CNTL__I2SBTDataEmptyMask_MASK 0x2000
1284#define ACP_DSP0_INTR_CNTL__I2SBTDataEmptyMask__SHIFT 0xd
1285#define ACP_DSP0_INTR_CNTL__DMAIOCMask_MASK 0xffff0000
1286#define ACP_DSP0_INTR_CNTL__DMAIOCMask__SHIFT 0x10
1287#define ACP_DSP0_INTR_STAT__ACPErrStat_MASK 0x1
1288#define ACP_DSP0_INTR_STAT__ACPErrStat__SHIFT 0x0
1289#define ACP_DSP0_INTR_STAT__ACPErrAck_MASK 0x1
1290#define ACP_DSP0_INTR_STAT__ACPErrAck__SHIFT 0x0
1291#define ACP_DSP0_INTR_STAT__I2SMicDataAvStat_MASK 0x2
1292#define ACP_DSP0_INTR_STAT__I2SMicDataAvStat__SHIFT 0x1
1293#define ACP_DSP0_INTR_STAT__I2SMicDataAvAck_MASK 0x2
1294#define ACP_DSP0_INTR_STAT__I2SMicDataAvAck__SHIFT 0x1
1295#define ACP_DSP0_INTR_STAT__I2SSpkr0DataEmptyStat_MASK 0x4
1296#define ACP_DSP0_INTR_STAT__I2SSpkr0DataEmptyStat__SHIFT 0x2
1297#define ACP_DSP0_INTR_STAT__I2SSpkr0DataEmptyAck_MASK 0x4
1298#define ACP_DSP0_INTR_STAT__I2SSpkr0DataEmptyAck__SHIFT 0x2
1299#define ACP_DSP0_INTR_STAT__I2SSpkr1DataEmptyStat_MASK 0x8
1300#define ACP_DSP0_INTR_STAT__I2SSpkr1DataEmptyStat__SHIFT 0x3
1301#define ACP_DSP0_INTR_STAT__I2SSpkr1DataEmptyAck_MASK 0x8
1302#define ACP_DSP0_INTR_STAT__I2SSpkr1DataEmptyAck__SHIFT 0x3
1303#define ACP_DSP0_INTR_STAT__I2SBTDataAvStat_MASK 0x10
1304#define ACP_DSP0_INTR_STAT__I2SBTDataAvStat__SHIFT 0x4
1305#define ACP_DSP0_INTR_STAT__I2SBTDataAvAck_MASK 0x10
1306#define ACP_DSP0_INTR_STAT__I2SBTDataAvAck__SHIFT 0x4
1307#define ACP_DSP0_INTR_STAT__AzaliaIntrStat_MASK 0x40
1308#define ACP_DSP0_INTR_STAT__AzaliaIntrStat__SHIFT 0x6
1309#define ACP_DSP0_INTR_STAT__AzaliaIntrAck_MASK 0x40
1310#define ACP_DSP0_INTR_STAT__AzaliaIntrAck__SHIFT 0x6
1311#define ACP_DSP0_INTR_STAT__SMUMailboxWriteStat_MASK 0x100
1312#define ACP_DSP0_INTR_STAT__SMUMailboxWriteStat__SHIFT 0x8
1313#define ACP_DSP0_INTR_STAT__SMUMailboxWriteAck_MASK 0x100
1314#define ACP_DSP0_INTR_STAT__SMUMailboxWriteAck__SHIFT 0x8
1315#define ACP_DSP0_INTR_STAT__SMUStutterStatusStat_MASK 0x200
1316#define ACP_DSP0_INTR_STAT__SMUStutterStatusStat__SHIFT 0x9
1317#define ACP_DSP0_INTR_STAT__SMUStutterStatusAck_MASK 0x200
1318#define ACP_DSP0_INTR_STAT__SMUStutterStatusAck__SHIFT 0x9
1319#define ACP_DSP0_INTR_STAT__MCStutterStatusStat_MASK 0x400
1320#define ACP_DSP0_INTR_STAT__MCStutterStatusStat__SHIFT 0xa
1321#define ACP_DSP0_INTR_STAT__MCStutterStatusAck_MASK 0x400
1322#define ACP_DSP0_INTR_STAT__MCStutterStatusAck__SHIFT 0xa
1323#define ACP_DSP0_INTR_STAT__DSPExtTimerStat_MASK 0x800
1324#define ACP_DSP0_INTR_STAT__DSPExtTimerStat__SHIFT 0xb
1325#define ACP_DSP0_INTR_STAT__DSPExtTimerAck_MASK 0x800
1326#define ACP_DSP0_INTR_STAT__DSPExtTimerAck__SHIFT 0xb
1327#define ACP_DSP0_INTR_STAT__DSPSemRespStat_MASK 0x1000
1328#define ACP_DSP0_INTR_STAT__DSPSemRespStat__SHIFT 0xc
1329#define ACP_DSP0_INTR_STAT__DSPSemRespAck_MASK 0x1000
1330#define ACP_DSP0_INTR_STAT__DSPSemRespAck__SHIFT 0xc
1331#define ACP_DSP0_INTR_STAT__I2SBTDataEmptyStat_MASK 0x2000
1332#define ACP_DSP0_INTR_STAT__I2SBTDataEmptyStat__SHIFT 0xd
1333#define ACP_DSP0_INTR_STAT__I2SBTDataEmptyAck_MASK 0x2000
1334#define ACP_DSP0_INTR_STAT__I2SBTDataEmptyAck__SHIFT 0xd
1335#define ACP_DSP0_INTR_STAT__DMAIOCStat_MASK 0xffff0000
1336#define ACP_DSP0_INTR_STAT__DMAIOCStat__SHIFT 0x10
1337#define ACP_DSP0_INTR_STAT__DMAIOCAck_MASK 0xffff0000
1338#define ACP_DSP0_INTR_STAT__DMAIOCAck__SHIFT 0x10
1339#define ACP_DSP0_TIMEOUT_CNTL__DSP0TimeoutValue_MASK 0x3ffff
1340#define ACP_DSP0_TIMEOUT_CNTL__DSP0TimeoutValue__SHIFT 0x0
1341#define ACP_DSP0_TIMEOUT_CNTL__CntEn_MASK 0x80000000
1342#define ACP_DSP0_TIMEOUT_CNTL__CntEn__SHIFT 0x1f
1343#define ACP_DSP1_INTR_CNTL__ACPErrMask_MASK 0x1
1344#define ACP_DSP1_INTR_CNTL__ACPErrMask__SHIFT 0x0
1345#define ACP_DSP1_INTR_CNTL__I2SMicDataAvMask_MASK 0x2
1346#define ACP_DSP1_INTR_CNTL__I2SMicDataAvMask__SHIFT 0x1
1347#define ACP_DSP1_INTR_CNTL__I2SSpkr0DataEmptyMask_MASK 0x4
1348#define ACP_DSP1_INTR_CNTL__I2SSpkr0DataEmptyMask__SHIFT 0x2
1349#define ACP_DSP1_INTR_CNTL__I2SSpkr1DataEmptyMask_MASK 0x8
1350#define ACP_DSP1_INTR_CNTL__I2SSpkr1DataEmptyMask__SHIFT 0x3
1351#define ACP_DSP1_INTR_CNTL__I2SBTDataAvMask_MASK 0x10
1352#define ACP_DSP1_INTR_CNTL__I2SBTDataAvMask__SHIFT 0x4
1353#define ACP_DSP1_INTR_CNTL__AzaliaIntrMask_MASK 0x40
1354#define ACP_DSP1_INTR_CNTL__AzaliaIntrMask__SHIFT 0x6
1355#define ACP_DSP1_INTR_CNTL__SMUMailboxWriteMask_MASK 0x100
1356#define ACP_DSP1_INTR_CNTL__SMUMailboxWriteMask__SHIFT 0x8
1357#define ACP_DSP1_INTR_CNTL__SMUStutterStatusMask_MASK 0x200
1358#define ACP_DSP1_INTR_CNTL__SMUStutterStatusMask__SHIFT 0x9
1359#define ACP_DSP1_INTR_CNTL__MCStutterStatusMask_MASK 0x400
1360#define ACP_DSP1_INTR_CNTL__MCStutterStatusMask__SHIFT 0xa
1361#define ACP_DSP1_INTR_CNTL__DSPExtTimerMask_MASK 0x800
1362#define ACP_DSP1_INTR_CNTL__DSPExtTimerMask__SHIFT 0xb
1363#define ACP_DSP1_INTR_CNTL__DSPSemRespMask_MASK 0x1000
1364#define ACP_DSP1_INTR_CNTL__DSPSemRespMask__SHIFT 0xc
1365#define ACP_DSP1_INTR_CNTL__I2SBTDataEmptyMask_MASK 0x2000
1366#define ACP_DSP1_INTR_CNTL__I2SBTDataEmptyMask__SHIFT 0xd
1367#define ACP_DSP1_INTR_CNTL__DMAIOCMask_MASK 0xffff0000
1368#define ACP_DSP1_INTR_CNTL__DMAIOCMask__SHIFT 0x10
1369#define ACP_DSP1_INTR_STAT__ACPErrStat_MASK 0x1
1370#define ACP_DSP1_INTR_STAT__ACPErrStat__SHIFT 0x0
1371#define ACP_DSP1_INTR_STAT__ACPErrAck_MASK 0x1
1372#define ACP_DSP1_INTR_STAT__ACPErrAck__SHIFT 0x0
1373#define ACP_DSP1_INTR_STAT__I2SMicDataAvStat_MASK 0x2
1374#define ACP_DSP1_INTR_STAT__I2SMicDataAvStat__SHIFT 0x1
1375#define ACP_DSP1_INTR_STAT__I2SMicDataAvAck_MASK 0x2
1376#define ACP_DSP1_INTR_STAT__I2SMicDataAvAck__SHIFT 0x1
1377#define ACP_DSP1_INTR_STAT__I2SSpkr0DataEmptyStat_MASK 0x4
1378#define ACP_DSP1_INTR_STAT__I2SSpkr0DataEmptyStat__SHIFT 0x2
1379#define ACP_DSP1_INTR_STAT__I2SSpkr0DataEmptyAck_MASK 0x4
1380#define ACP_DSP1_INTR_STAT__I2SSpkr0DataEmptyAck__SHIFT 0x2
1381#define ACP_DSP1_INTR_STAT__I2SSpkr1DataEmptyStat_MASK 0x8
1382#define ACP_DSP1_INTR_STAT__I2SSpkr1DataEmptyStat__SHIFT 0x3
1383#define ACP_DSP1_INTR_STAT__I2SSpkr1DataEmptyAck_MASK 0x8
1384#define ACP_DSP1_INTR_STAT__I2SSpkr1DataEmptyAck__SHIFT 0x3
1385#define ACP_DSP1_INTR_STAT__I2SBTDataAvStat_MASK 0x10
1386#define ACP_DSP1_INTR_STAT__I2SBTDataAvStat__SHIFT 0x4
1387#define ACP_DSP1_INTR_STAT__I2SBTDataAvAck_MASK 0x10
1388#define ACP_DSP1_INTR_STAT__I2SBTDataAvAck__SHIFT 0x4
1389#define ACP_DSP1_INTR_STAT__AzaliaIntrStat_MASK 0x40
1390#define ACP_DSP1_INTR_STAT__AzaliaIntrStat__SHIFT 0x6
1391#define ACP_DSP1_INTR_STAT__AzaliaIntrAck_MASK 0x40
1392#define ACP_DSP1_INTR_STAT__AzaliaIntrAck__SHIFT 0x6
1393#define ACP_DSP1_INTR_STAT__SMUMailboxWriteStat_MASK 0x100
1394#define ACP_DSP1_INTR_STAT__SMUMailboxWriteStat__SHIFT 0x8
1395#define ACP_DSP1_INTR_STAT__SMUMailboxWriteAck_MASK 0x100
1396#define ACP_DSP1_INTR_STAT__SMUMailboxWriteAck__SHIFT 0x8
1397#define ACP_DSP1_INTR_STAT__SMUStutterStatusStat_MASK 0x200
1398#define ACP_DSP1_INTR_STAT__SMUStutterStatusStat__SHIFT 0x9
1399#define ACP_DSP1_INTR_STAT__SMUStutterStatusAck_MASK 0x200
1400#define ACP_DSP1_INTR_STAT__SMUStutterStatusAck__SHIFT 0x9
1401#define ACP_DSP1_INTR_STAT__MCStutterStatusStat_MASK 0x400
1402#define ACP_DSP1_INTR_STAT__MCStutterStatusStat__SHIFT 0xa
1403#define ACP_DSP1_INTR_STAT__MCStutterStatusAck_MASK 0x400
1404#define ACP_DSP1_INTR_STAT__MCStutterStatusAck__SHIFT 0xa
1405#define ACP_DSP1_INTR_STAT__DSPExtTimerStat_MASK 0x800
1406#define ACP_DSP1_INTR_STAT__DSPExtTimerStat__SHIFT 0xb
1407#define ACP_DSP1_INTR_STAT__DSPExtTimerAck_MASK 0x800
1408#define ACP_DSP1_INTR_STAT__DSPExtTimerAck__SHIFT 0xb
1409#define ACP_DSP1_INTR_STAT__DSPSemRespStat_MASK 0x1000
1410#define ACP_DSP1_INTR_STAT__DSPSemRespStat__SHIFT 0xc
1411#define ACP_DSP1_INTR_STAT__DSPSemRespAck_MASK 0x1000
1412#define ACP_DSP1_INTR_STAT__DSPSemRespAck__SHIFT 0xc
1413#define ACP_DSP1_INTR_STAT__I2SBTDataEmptyStat_MASK 0x2000
1414#define ACP_DSP1_INTR_STAT__I2SBTDataEmptyStat__SHIFT 0xd
1415#define ACP_DSP1_INTR_STAT__I2SBTDataEmptyAck_MASK 0x2000
1416#define ACP_DSP1_INTR_STAT__I2SBTDataEmptyAck__SHIFT 0xd
1417#define ACP_DSP1_INTR_STAT__DMAIOCStat_MASK 0xffff0000
1418#define ACP_DSP1_INTR_STAT__DMAIOCStat__SHIFT 0x10
1419#define ACP_DSP1_INTR_STAT__DMAIOCAck_MASK 0xffff0000
1420#define ACP_DSP1_INTR_STAT__DMAIOCAck__SHIFT 0x10
1421#define ACP_DSP1_TIMEOUT_CNTL__DSP1TimeoutValue_MASK 0x3ffff
1422#define ACP_DSP1_TIMEOUT_CNTL__DSP1TimeoutValue__SHIFT 0x0
1423#define ACP_DSP1_TIMEOUT_CNTL__CntEn_MASK 0x80000000
1424#define ACP_DSP1_TIMEOUT_CNTL__CntEn__SHIFT 0x1f
1425#define ACP_DSP2_INTR_CNTL__ACPErrMask_MASK 0x1
1426#define ACP_DSP2_INTR_CNTL__ACPErrMask__SHIFT 0x0
1427#define ACP_DSP2_INTR_CNTL__I2SMicDataAvMask_MASK 0x2
1428#define ACP_DSP2_INTR_CNTL__I2SMicDataAvMask__SHIFT 0x1
1429#define ACP_DSP2_INTR_CNTL__I2SSpkr0DataEmptyMask_MASK 0x4
1430#define ACP_DSP2_INTR_CNTL__I2SSpkr0DataEmptyMask__SHIFT 0x2
1431#define ACP_DSP2_INTR_CNTL__I2SSpkr1DataEmptyMask_MASK 0x8
1432#define ACP_DSP2_INTR_CNTL__I2SSpkr1DataEmptyMask__SHIFT 0x3
1433#define ACP_DSP2_INTR_CNTL__I2SBTDataAvMask_MASK 0x10
1434#define ACP_DSP2_INTR_CNTL__I2SBTDataAvMask__SHIFT 0x4
1435#define ACP_DSP2_INTR_CNTL__AzaliaIntrMask_MASK 0x40
1436#define ACP_DSP2_INTR_CNTL__AzaliaIntrMask__SHIFT 0x6
1437#define ACP_DSP2_INTR_CNTL__SMUMailboxWriteMask_MASK 0x100
1438#define ACP_DSP2_INTR_CNTL__SMUMailboxWriteMask__SHIFT 0x8
1439#define ACP_DSP2_INTR_CNTL__SMUStutterStatusMask_MASK 0x200
1440#define ACP_DSP2_INTR_CNTL__SMUStutterStatusMask__SHIFT 0x9
1441#define ACP_DSP2_INTR_CNTL__MCStutterStatusMask_MASK 0x400
1442#define ACP_DSP2_INTR_CNTL__MCStutterStatusMask__SHIFT 0xa
1443#define ACP_DSP2_INTR_CNTL__DSPExtTimerMask_MASK 0x800
1444#define ACP_DSP2_INTR_CNTL__DSPExtTimerMask__SHIFT 0xb
1445#define ACP_DSP2_INTR_CNTL__DSPSemRespMask_MASK 0x1000
1446#define ACP_DSP2_INTR_CNTL__DSPSemRespMask__SHIFT 0xc
1447#define ACP_DSP2_INTR_CNTL__I2SBTDataEmptyMask_MASK 0x2000
1448#define ACP_DSP2_INTR_CNTL__I2SBTDataEmptyMask__SHIFT 0xd
1449#define ACP_DSP2_INTR_CNTL__DMAIOCMask_MASK 0xffff0000
1450#define ACP_DSP2_INTR_CNTL__DMAIOCMask__SHIFT 0x10
1451#define ACP_DSP2_INTR_STAT__ACPErrStat_MASK 0x1
1452#define ACP_DSP2_INTR_STAT__ACPErrStat__SHIFT 0x0
1453#define ACP_DSP2_INTR_STAT__ACPErrAck_MASK 0x1
1454#define ACP_DSP2_INTR_STAT__ACPErrAck__SHIFT 0x0
1455#define ACP_DSP2_INTR_STAT__I2SMicDataAvStat_MASK 0x2
1456#define ACP_DSP2_INTR_STAT__I2SMicDataAvStat__SHIFT 0x1
1457#define ACP_DSP2_INTR_STAT__I2SMicDataAvAck_MASK 0x2
1458#define ACP_DSP2_INTR_STAT__I2SMicDataAvAck__SHIFT 0x1
1459#define ACP_DSP2_INTR_STAT__I2SSpkr0DataEmptyStat_MASK 0x4
1460#define ACP_DSP2_INTR_STAT__I2SSpkr0DataEmptyStat__SHIFT 0x2
1461#define ACP_DSP2_INTR_STAT__I2SSpkr0DataEmptyAck_MASK 0x4
1462#define ACP_DSP2_INTR_STAT__I2SSpkr0DataEmptyAck__SHIFT 0x2
1463#define ACP_DSP2_INTR_STAT__I2SSpkr1DataEmptyStat_MASK 0x8
1464#define ACP_DSP2_INTR_STAT__I2SSpkr1DataEmptyStat__SHIFT 0x3
1465#define ACP_DSP2_INTR_STAT__I2SSpkr1DataEmptyAck_MASK 0x8
1466#define ACP_DSP2_INTR_STAT__I2SSpkr1DataEmptyAck__SHIFT 0x3
1467#define ACP_DSP2_INTR_STAT__I2SBTDataAvStat_MASK 0x10
1468#define ACP_DSP2_INTR_STAT__I2SBTDataAvStat__SHIFT 0x4
1469#define ACP_DSP2_INTR_STAT__I2SBTDataAvAck_MASK 0x10
1470#define ACP_DSP2_INTR_STAT__I2SBTDataAvAck__SHIFT 0x4
1471#define ACP_DSP2_INTR_STAT__AzaliaIntrStat_MASK 0x40
1472#define ACP_DSP2_INTR_STAT__AzaliaIntrStat__SHIFT 0x6
1473#define ACP_DSP2_INTR_STAT__AzaliaIntrAck_MASK 0x40
1474#define ACP_DSP2_INTR_STAT__AzaliaIntrAck__SHIFT 0x6
1475#define ACP_DSP2_INTR_STAT__SMUMailboxWriteStat_MASK 0x100
1476#define ACP_DSP2_INTR_STAT__SMUMailboxWriteStat__SHIFT 0x8
1477#define ACP_DSP2_INTR_STAT__SMUMailboxWriteAck_MASK 0x100
1478#define ACP_DSP2_INTR_STAT__SMUMailboxWriteAck__SHIFT 0x8
1479#define ACP_DSP2_INTR_STAT__SMUStutterStatusStat_MASK 0x200
1480#define ACP_DSP2_INTR_STAT__SMUStutterStatusStat__SHIFT 0x9
1481#define ACP_DSP2_INTR_STAT__SMUStutterStatusAck_MASK 0x200
1482#define ACP_DSP2_INTR_STAT__SMUStutterStatusAck__SHIFT 0x9
1483#define ACP_DSP2_INTR_STAT__MCStutterStatusStat_MASK 0x400
1484#define ACP_DSP2_INTR_STAT__MCStutterStatusStat__SHIFT 0xa
1485#define ACP_DSP2_INTR_STAT__MCStutterStatusAck_MASK 0x400
1486#define ACP_DSP2_INTR_STAT__MCStutterStatusAck__SHIFT 0xa
1487#define ACP_DSP2_INTR_STAT__DSPExtTimerStat_MASK 0x800
1488#define ACP_DSP2_INTR_STAT__DSPExtTimerStat__SHIFT 0xb
1489#define ACP_DSP2_INTR_STAT__DSPExtTimerAck_MASK 0x800
1490#define ACP_DSP2_INTR_STAT__DSPExtTimerAck__SHIFT 0xb
1491#define ACP_DSP2_INTR_STAT__DSPSemRespStat_MASK 0x1000
1492#define ACP_DSP2_INTR_STAT__DSPSemRespStat__SHIFT 0xc
1493#define ACP_DSP2_INTR_STAT__DSPSemRespAck_MASK 0x1000
1494#define ACP_DSP2_INTR_STAT__DSPSemRespAck__SHIFT 0xc
1495#define ACP_DSP2_INTR_STAT__I2SBTDataEmptyStat_MASK 0x2000
1496#define ACP_DSP2_INTR_STAT__I2SBTDataEmptyStat__SHIFT 0xd
1497#define ACP_DSP2_INTR_STAT__I2SBTDataEmptyAck_MASK 0x2000
1498#define ACP_DSP2_INTR_STAT__I2SBTDataEmptyAck__SHIFT 0xd
1499#define ACP_DSP2_INTR_STAT__DMAIOCStat_MASK 0xffff0000
1500#define ACP_DSP2_INTR_STAT__DMAIOCStat__SHIFT 0x10
1501#define ACP_DSP2_INTR_STAT__DMAIOCAck_MASK 0xffff0000
1502#define ACP_DSP2_INTR_STAT__DMAIOCAck__SHIFT 0x10
1503#define ACP_DSP2_TIMEOUT_CNTL__DSP2TimeoutValue_MASK 0x3ffff
1504#define ACP_DSP2_TIMEOUT_CNTL__DSP2TimeoutValue__SHIFT 0x0
1505#define ACP_DSP2_TIMEOUT_CNTL__CntEn_MASK 0x80000000
1506#define ACP_DSP2_TIMEOUT_CNTL__CntEn__SHIFT 0x1f
1507#define ACP_DSP0_EXT_TIMER_CNTL__TimerCount_MASK 0xffffff
1508#define ACP_DSP0_EXT_TIMER_CNTL__TimerCount__SHIFT 0x0
1509#define ACP_DSP0_EXT_TIMER_CNTL__TimerCntl_MASK 0xc0000000
1510#define ACP_DSP0_EXT_TIMER_CNTL__TimerCntl__SHIFT 0x1e
1511#define ACP_DSP1_EXT_TIMER_CNTL__TimerCount_MASK 0xffffff
1512#define ACP_DSP1_EXT_TIMER_CNTL__TimerCount__SHIFT 0x0
1513#define ACP_DSP1_EXT_TIMER_CNTL__TimerCntl_MASK 0xc0000000
1514#define ACP_DSP1_EXT_TIMER_CNTL__TimerCntl__SHIFT 0x1e
1515#define ACP_DSP2_EXT_TIMER_CNTL__TimerCount_MASK 0xffffff
1516#define ACP_DSP2_EXT_TIMER_CNTL__TimerCount__SHIFT 0x0
1517#define ACP_DSP2_EXT_TIMER_CNTL__TimerCntl_MASK 0xc0000000
1518#define ACP_DSP2_EXT_TIMER_CNTL__TimerCntl__SHIFT 0x1e
1519#define ACP_AXI2DAGB_SEM_0__AXI2DAGBGblSemReg_MASK 0x1
1520#define ACP_AXI2DAGB_SEM_0__AXI2DAGBGblSemReg__SHIFT 0x0
1521#define ACP_AXI2DAGB_SEM_1__AXI2DAGBGblSemReg_MASK 0x1
1522#define ACP_AXI2DAGB_SEM_1__AXI2DAGBGblSemReg__SHIFT 0x0
1523#define ACP_AXI2DAGB_SEM_2__AXI2DAGBGblSemReg_MASK 0x1
1524#define ACP_AXI2DAGB_SEM_2__AXI2DAGBGblSemReg__SHIFT 0x0
1525#define ACP_AXI2DAGB_SEM_3__AXI2DAGBGblSemReg_MASK 0x1
1526#define ACP_AXI2DAGB_SEM_3__AXI2DAGBGblSemReg__SHIFT 0x0
1527#define ACP_AXI2DAGB_SEM_4__AXI2DAGBGblSemReg_MASK 0x1
1528#define ACP_AXI2DAGB_SEM_4__AXI2DAGBGblSemReg__SHIFT 0x0
1529#define ACP_AXI2DAGB_SEM_5__AXI2DAGBGblSemReg_MASK 0x1
1530#define ACP_AXI2DAGB_SEM_5__AXI2DAGBGblSemReg__SHIFT 0x0
1531#define ACP_AXI2DAGB_SEM_6__AXI2DAGBGblSemReg_MASK 0x1
1532#define ACP_AXI2DAGB_SEM_6__AXI2DAGBGblSemReg__SHIFT 0x0
1533#define ACP_AXI2DAGB_SEM_7__AXI2DAGBGblSemReg_MASK 0x1
1534#define ACP_AXI2DAGB_SEM_7__AXI2DAGBGblSemReg__SHIFT 0x0
1535#define ACP_AXI2DAGB_SEM_8__AXI2DAGBGblSemReg_MASK 0x1
1536#define ACP_AXI2DAGB_SEM_8__AXI2DAGBGblSemReg__SHIFT 0x0
1537#define ACP_AXI2DAGB_SEM_9__AXI2DAGBGblSemReg_MASK 0x1
1538#define ACP_AXI2DAGB_SEM_9__AXI2DAGBGblSemReg__SHIFT 0x0
1539#define ACP_AXI2DAGB_SEM_10__AXI2DAGBGblSemReg_MASK 0x1
1540#define ACP_AXI2DAGB_SEM_10__AXI2DAGBGblSemReg__SHIFT 0x0
1541#define ACP_AXI2DAGB_SEM_11__AXI2DAGBGblSemReg_MASK 0x1
1542#define ACP_AXI2DAGB_SEM_11__AXI2DAGBGblSemReg__SHIFT 0x0
1543#define ACP_AXI2DAGB_SEM_12__AXI2DAGBGblSemReg_MASK 0x1
1544#define ACP_AXI2DAGB_SEM_12__AXI2DAGBGblSemReg__SHIFT 0x0
1545#define ACP_AXI2DAGB_SEM_13__AXI2DAGBGblSemReg_MASK 0x1
1546#define ACP_AXI2DAGB_SEM_13__AXI2DAGBGblSemReg__SHIFT 0x0
1547#define ACP_AXI2DAGB_SEM_14__AXI2DAGBGblSemReg_MASK 0x1
1548#define ACP_AXI2DAGB_SEM_14__AXI2DAGBGblSemReg__SHIFT 0x0
1549#define ACP_AXI2DAGB_SEM_15__AXI2DAGBGblSemReg_MASK 0x1
1550#define ACP_AXI2DAGB_SEM_15__AXI2DAGBGblSemReg__SHIFT 0x0
1551#define ACP_AXI2DAGB_SEM_16__AXI2DAGBGblSemReg_MASK 0x1
1552#define ACP_AXI2DAGB_SEM_16__AXI2DAGBGblSemReg__SHIFT 0x0
1553#define ACP_AXI2DAGB_SEM_17__AXI2DAGBGblSemReg_MASK 0x1
1554#define ACP_AXI2DAGB_SEM_17__AXI2DAGBGblSemReg__SHIFT 0x0
1555#define ACP_AXI2DAGB_SEM_18__AXI2DAGBGblSemReg_MASK 0x1
1556#define ACP_AXI2DAGB_SEM_18__AXI2DAGBGblSemReg__SHIFT 0x0
1557#define ACP_AXI2DAGB_SEM_19__AXI2DAGBGblSemReg_MASK 0x1
1558#define ACP_AXI2DAGB_SEM_19__AXI2DAGBGblSemReg__SHIFT 0x0
1559#define ACP_AXI2DAGB_SEM_20__AXI2DAGBGblSemReg_MASK 0x1
1560#define ACP_AXI2DAGB_SEM_20__AXI2DAGBGblSemReg__SHIFT 0x0
1561#define ACP_AXI2DAGB_SEM_21__AXI2DAGBGblSemReg_MASK 0x1
1562#define ACP_AXI2DAGB_SEM_21__AXI2DAGBGblSemReg__SHIFT 0x0
1563#define ACP_AXI2DAGB_SEM_22__AXI2DAGBGblSemReg_MASK 0x1
1564#define ACP_AXI2DAGB_SEM_22__AXI2DAGBGblSemReg__SHIFT 0x0
1565#define ACP_AXI2DAGB_SEM_23__AXI2DAGBGblSemReg_MASK 0x1
1566#define ACP_AXI2DAGB_SEM_23__AXI2DAGBGblSemReg__SHIFT 0x0
1567#define ACP_AXI2DAGB_SEM_24__AXI2DAGBGblSemReg_MASK 0x1
1568#define ACP_AXI2DAGB_SEM_24__AXI2DAGBGblSemReg__SHIFT 0x0
1569#define ACP_AXI2DAGB_SEM_25__AXI2DAGBGblSemReg_MASK 0x1
1570#define ACP_AXI2DAGB_SEM_25__AXI2DAGBGblSemReg__SHIFT 0x0
1571#define ACP_AXI2DAGB_SEM_26__AXI2DAGBGblSemReg_MASK 0x1
1572#define ACP_AXI2DAGB_SEM_26__AXI2DAGBGblSemReg__SHIFT 0x0
1573#define ACP_AXI2DAGB_SEM_27__AXI2DAGBGblSemReg_MASK 0x1
1574#define ACP_AXI2DAGB_SEM_27__AXI2DAGBGblSemReg__SHIFT 0x0
1575#define ACP_AXI2DAGB_SEM_28__AXI2DAGBGblSemReg_MASK 0x1
1576#define ACP_AXI2DAGB_SEM_28__AXI2DAGBGblSemReg__SHIFT 0x0
1577#define ACP_AXI2DAGB_SEM_29__AXI2DAGBGblSemReg_MASK 0x1
1578#define ACP_AXI2DAGB_SEM_29__AXI2DAGBGblSemReg__SHIFT 0x0
1579#define ACP_AXI2DAGB_SEM_30__AXI2DAGBGblSemReg_MASK 0x1
1580#define ACP_AXI2DAGB_SEM_30__AXI2DAGBGblSemReg__SHIFT 0x0
1581#define ACP_AXI2DAGB_SEM_31__AXI2DAGBGblSemReg_MASK 0x1
1582#define ACP_AXI2DAGB_SEM_31__AXI2DAGBGblSemReg__SHIFT 0x0
1583#define ACP_AXI2DAGB_SEM_32__AXI2DAGBGblSemReg_MASK 0x1
1584#define ACP_AXI2DAGB_SEM_32__AXI2DAGBGblSemReg__SHIFT 0x0
1585#define ACP_AXI2DAGB_SEM_33__AXI2DAGBGblSemReg_MASK 0x1
1586#define ACP_AXI2DAGB_SEM_33__AXI2DAGBGblSemReg__SHIFT 0x0
1587#define ACP_AXI2DAGB_SEM_34__AXI2DAGBGblSemReg_MASK 0x1
1588#define ACP_AXI2DAGB_SEM_34__AXI2DAGBGblSemReg__SHIFT 0x0
1589#define ACP_AXI2DAGB_SEM_35__AXI2DAGBGblSemReg_MASK 0x1
1590#define ACP_AXI2DAGB_SEM_35__AXI2DAGBGblSemReg__SHIFT 0x0
1591#define ACP_AXI2DAGB_SEM_36__AXI2DAGBGblSemReg_MASK 0x1
1592#define ACP_AXI2DAGB_SEM_36__AXI2DAGBGblSemReg__SHIFT 0x0
1593#define ACP_AXI2DAGB_SEM_37__AXI2DAGBGblSemReg_MASK 0x1
1594#define ACP_AXI2DAGB_SEM_37__AXI2DAGBGblSemReg__SHIFT 0x0
1595#define ACP_AXI2DAGB_SEM_38__AXI2DAGBGblSemReg_MASK 0x1
1596#define ACP_AXI2DAGB_SEM_38__AXI2DAGBGblSemReg__SHIFT 0x0
1597#define ACP_AXI2DAGB_SEM_39__AXI2DAGBGblSemReg_MASK 0x1
1598#define ACP_AXI2DAGB_SEM_39__AXI2DAGBGblSemReg__SHIFT 0x0
1599#define ACP_AXI2DAGB_SEM_40__AXI2DAGBGblSemReg_MASK 0x1
1600#define ACP_AXI2DAGB_SEM_40__AXI2DAGBGblSemReg__SHIFT 0x0
1601#define ACP_AXI2DAGB_SEM_41__AXI2DAGBGblSemReg_MASK 0x1
1602#define ACP_AXI2DAGB_SEM_41__AXI2DAGBGblSemReg__SHIFT 0x0
1603#define ACP_AXI2DAGB_SEM_42__AXI2DAGBGblSemReg_MASK 0x1
1604#define ACP_AXI2DAGB_SEM_42__AXI2DAGBGblSemReg__SHIFT 0x0
1605#define ACP_AXI2DAGB_SEM_43__AXI2DAGBGblSemReg_MASK 0x1
1606#define ACP_AXI2DAGB_SEM_43__AXI2DAGBGblSemReg__SHIFT 0x0
1607#define ACP_AXI2DAGB_SEM_44__AXI2DAGBGblSemReg_MASK 0x1
1608#define ACP_AXI2DAGB_SEM_44__AXI2DAGBGblSemReg__SHIFT 0x0
1609#define ACP_AXI2DAGB_SEM_45__AXI2DAGBGblSemReg_MASK 0x1
1610#define ACP_AXI2DAGB_SEM_45__AXI2DAGBGblSemReg__SHIFT 0x0
1611#define ACP_AXI2DAGB_SEM_46__AXI2DAGBGblSemReg_MASK 0x1
1612#define ACP_AXI2DAGB_SEM_46__AXI2DAGBGblSemReg__SHIFT 0x0
1613#define ACP_AXI2DAGB_SEM_47__AXI2DAGBGblSemReg_MASK 0x1
1614#define ACP_AXI2DAGB_SEM_47__AXI2DAGBGblSemReg__SHIFT 0x0
1615#define ACP_SRBM_Client_Base_Addr__SRBM_Client_base_addr_MASK 0xff
1616#define ACP_SRBM_Client_Base_Addr__SRBM_Client_base_addr__SHIFT 0x0
1617#define ACP_SRBM_Client_RDDATA__ReadData_MASK 0xffffffff
1618#define ACP_SRBM_Client_RDDATA__ReadData__SHIFT 0x0
1619#define ACP_SRBM_Cycle_Sts__SRBM_Client_Sts_MASK 0x1
1620#define ACP_SRBM_Cycle_Sts__SRBM_Client_Sts__SHIFT 0x0
1621#define ACP_SRBM_Targ_Idx_Addr__SRBM_Targ_Idx_addr_MASK 0x7ffffff
1622#define ACP_SRBM_Targ_Idx_Addr__SRBM_Targ_Idx_addr__SHIFT 0x0
1623#define ACP_SRBM_Targ_Idx_Data__SRBM_Targ_Idx_Data_MASK 0xffffffff
1624#define ACP_SRBM_Targ_Idx_Data__SRBM_Targ_Idx_Data__SHIFT 0x0
1625#define ACP_SEMA_ADDR_LOW__ADDR_9_3_MASK 0x7f
1626#define ACP_SEMA_ADDR_LOW__ADDR_9_3__SHIFT 0x0
1627#define ACP_SEMA_ADDR_HIGH__ADDR_39_10_MASK 0x3fffffff
1628#define ACP_SEMA_ADDR_HIGH__ADDR_39_10__SHIFT 0x0
1629#define ACP_SEMA_CMD__REQ_CMD_MASK 0xf
1630#define ACP_SEMA_CMD__REQ_CMD__SHIFT 0x0
1631#define ACP_SEMA_CMD__WR_PHASE_MASK 0x30
1632#define ACP_SEMA_CMD__WR_PHASE__SHIFT 0x4
1633#define ACP_SEMA_CMD__VMID_EN_MASK 0x80
1634#define ACP_SEMA_CMD__VMID_EN__SHIFT 0x7
1635#define ACP_SEMA_CMD__VMID_MASK 0xf00
1636#define ACP_SEMA_CMD__VMID__SHIFT 0x8
1637#define ACP_SEMA_CMD__ATC_MASK 0x1000
1638#define ACP_SEMA_CMD__ATC__SHIFT 0xc
1639#define ACP_SEMA_STS__REQ_STS_MASK 0x3
1640#define ACP_SEMA_STS__REQ_STS__SHIFT 0x0
1641#define ACP_SEMA_STS__REQ_RESP_AVAIL_MASK 0x100
1642#define ACP_SEMA_STS__REQ_RESP_AVAIL__SHIFT 0x8
1643#define ACP_SEMA_REQ__ISSUE_POLL_REQ_MASK 0x1
1644#define ACP_SEMA_REQ__ISSUE_POLL_REQ__SHIFT 0x0
1645#define ACP_FW_STATUS__RUN_MASK 0x1
1646#define ACP_FW_STATUS__RUN__SHIFT 0x0
1647#define ACP_FUTURE_REG_ACLK_0__ACPFutureReg_MASK 0xffffffff
1648#define ACP_FUTURE_REG_ACLK_0__ACPFutureReg__SHIFT 0x0
1649#define ACP_FUTURE_REG_ACLK_1__ACPFutureReg_MASK 0xffffffff
1650#define ACP_FUTURE_REG_ACLK_1__ACPFutureReg__SHIFT 0x0
1651#define ACP_FUTURE_REG_ACLK_2__ACPFutureReg_MASK 0xffffffff
1652#define ACP_FUTURE_REG_ACLK_2__ACPFutureReg__SHIFT 0x0
1653#define ACP_FUTURE_REG_ACLK_3__ACPFutureReg_MASK 0xffffffff
1654#define ACP_FUTURE_REG_ACLK_3__ACPFutureReg__SHIFT 0x0
1655#define ACP_FUTURE_REG_ACLK_4__ACPFutureReg_MASK 0xffffffff
1656#define ACP_FUTURE_REG_ACLK_4__ACPFutureReg__SHIFT 0x0
1657#define ACP_TIMER__ACP_Timer_count_MASK 0xffffffff
1658#define ACP_TIMER__ACP_Timer_count__SHIFT 0x0
1659#define ACP_TIMER_CNTL__ACP_Timer_control_MASK 0x1
1660#define ACP_TIMER_CNTL__ACP_Timer_control__SHIFT 0x0
1661#define ACP_DSP0_TIMER__ACP_DSP0_timer_MASK 0xffffff
1662#define ACP_DSP0_TIMER__ACP_DSP0_timer__SHIFT 0x0
1663#define ACP_DSP1_TIMER__ACP_DSP1_timer_MASK 0xffffff
1664#define ACP_DSP1_TIMER__ACP_DSP1_timer__SHIFT 0x0
1665#define ACP_DSP2_TIMER__ACP_DSP2_timer_MASK 0xffffff
1666#define ACP_DSP2_TIMER__ACP_DSP2_timer__SHIFT 0x0
1667#define ACP_I2S_TRANSMIT_BYTE_CNT_HIGH__i2s_sp_tx_byte_cnt_high_MASK 0xffffffff
1668#define ACP_I2S_TRANSMIT_BYTE_CNT_HIGH__i2s_sp_tx_byte_cnt_high__SHIFT 0x0
1669#define ACP_I2S_TRANSMIT_BYTE_CNT_LOW__i2s_sp_tx_byte_cnt_low_MASK 0xffffffff
1670#define ACP_I2S_TRANSMIT_BYTE_CNT_LOW__i2s_sp_tx_byte_cnt_low__SHIFT 0x0
1671#define ACP_I2S_BT_TRANSMIT_BYTE_CNT_HIGH__i2s_bt_tx_byte_cnt_high_MASK 0xffffffff
1672#define ACP_I2S_BT_TRANSMIT_BYTE_CNT_HIGH__i2s_bt_tx_byte_cnt_high__SHIFT 0x0
1673#define ACP_I2S_BT_TRANSMIT_BYTE_CNT_LOW__i2s_bt_tx_byte_cnt_low_MASK 0xffffffff
1674#define ACP_I2S_BT_TRANSMIT_BYTE_CNT_LOW__i2s_bt_tx_byte_cnt_low__SHIFT 0x0
1675#define ACP_I2S_BT_RECEIVE_BYTE_CNT_HIGH__i2s_bt_rx_byte_cnt_high_MASK 0xffffffff
1676#define ACP_I2S_BT_RECEIVE_BYTE_CNT_HIGH__i2s_bt_rx_byte_cnt_high__SHIFT 0x0
1677#define ACP_I2S_BT_RECEIVE_BYTE_CNT_LOW__i2s_bt_rx_byte_cnt_low_MASK 0xffffffff
1678#define ACP_I2S_BT_RECEIVE_BYTE_CNT_LOW__i2s_bt_rx_byte_cnt_low__SHIFT 0x0
1679#define ACP_DSP0_CS_STATE__DSP0_CS_state_MASK 0x1
1680#define ACP_DSP0_CS_STATE__DSP0_CS_state__SHIFT 0x0
1681#define ACP_DSP1_CS_STATE__DSP1_CS_state_MASK 0x1
1682#define ACP_DSP1_CS_STATE__DSP1_CS_state__SHIFT 0x0
1683#define ACP_DSP2_CS_STATE__DSP2_CS_state_MASK 0x1
1684#define ACP_DSP2_CS_STATE__DSP2_CS_state__SHIFT 0x0
1685#define ACP_SCRATCH_REG_BASE_ADDR__SCRATCH_REG_BASE_ADDR_MASK 0x7ffff
1686#define ACP_SCRATCH_REG_BASE_ADDR__SCRATCH_REG_BASE_ADDR__SHIFT 0x0
1687#define CC_ACP_EFUSE__DSP0_DISABLE_MASK 0x2
1688#define CC_ACP_EFUSE__DSP0_DISABLE__SHIFT 0x1
1689#define CC_ACP_EFUSE__DSP1_DISABLE_MASK 0x4
1690#define CC_ACP_EFUSE__DSP1_DISABLE__SHIFT 0x2
1691#define CC_ACP_EFUSE__DSP2_DISABLE_MASK 0x8
1692#define CC_ACP_EFUSE__DSP2_DISABLE__SHIFT 0x3
1693#define CC_ACP_EFUSE__ACP_DISABLE_MASK 0x10
1694#define CC_ACP_EFUSE__ACP_DISABLE__SHIFT 0x4
1695#define ACP_PGFSM_RETAIN_REG__ACP_P1_ON_OFF_MASK 0x1
1696#define ACP_PGFSM_RETAIN_REG__ACP_P1_ON_OFF__SHIFT 0x0
1697#define ACP_PGFSM_RETAIN_REG__ACP_P2_ON_OFF_MASK 0x2
1698#define ACP_PGFSM_RETAIN_REG__ACP_P2_ON_OFF__SHIFT 0x1
1699#define ACP_PGFSM_RETAIN_REG__ACP_DSP0_ON_OFF_MASK 0x4
1700#define ACP_PGFSM_RETAIN_REG__ACP_DSP0_ON_OFF__SHIFT 0x2
1701#define ACP_PGFSM_RETAIN_REG__ACP_DSP1_ON_OFF_MASK 0x8
1702#define ACP_PGFSM_RETAIN_REG__ACP_DSP1_ON_OFF__SHIFT 0x3
1703#define ACP_PGFSM_RETAIN_REG__ACP_DSP2_ON_OFF_MASK 0x10
1704#define ACP_PGFSM_RETAIN_REG__ACP_DSP2_ON_OFF__SHIFT 0x4
1705#define ACP_PGFSM_RETAIN_REG__ACP_AZ_ON_OFF_MASK 0x20
1706#define ACP_PGFSM_RETAIN_REG__ACP_AZ_ON_OFF__SHIFT 0x5
1707#define ACP_PGFSM_CONFIG_REG__FSM_ADDR_MASK 0xff
1708#define ACP_PGFSM_CONFIG_REG__FSM_ADDR__SHIFT 0x0
1709#define ACP_PGFSM_CONFIG_REG__Power_Down_MASK 0x100
1710#define ACP_PGFSM_CONFIG_REG__Power_Down__SHIFT 0x8
1711#define ACP_PGFSM_CONFIG_REG__Power_Up_MASK 0x200
1712#define ACP_PGFSM_CONFIG_REG__Power_Up__SHIFT 0x9
1713#define ACP_PGFSM_CONFIG_REG__P1_Select_MASK 0x400
1714#define ACP_PGFSM_CONFIG_REG__P1_Select__SHIFT 0xa
1715#define ACP_PGFSM_CONFIG_REG__P2_Select_MASK 0x800
1716#define ACP_PGFSM_CONFIG_REG__P2_Select__SHIFT 0xb
1717#define ACP_PGFSM_CONFIG_REG__Wr_MASK 0x1000
1718#define ACP_PGFSM_CONFIG_REG__Wr__SHIFT 0xc
1719#define ACP_PGFSM_CONFIG_REG__Rd_MASK 0x2000
1720#define ACP_PGFSM_CONFIG_REG__Rd__SHIFT 0xd
1721#define ACP_PGFSM_CONFIG_REG__RdData_Reset_MASK 0x4000
1722#define ACP_PGFSM_CONFIG_REG__RdData_Reset__SHIFT 0xe
1723#define ACP_PGFSM_CONFIG_REG__Short_Format_MASK 0x8000
1724#define ACP_PGFSM_CONFIG_REG__Short_Format__SHIFT 0xf
1725#define ACP_PGFSM_CONFIG_REG__BPM_CG_MG_FGCG_MASK 0x3ff0000
1726#define ACP_PGFSM_CONFIG_REG__BPM_CG_MG_FGCG__SHIFT 0x10
1727#define ACP_PGFSM_CONFIG_REG__SRBM_override_MASK 0x4000000
1728#define ACP_PGFSM_CONFIG_REG__SRBM_override__SHIFT 0x1a
1729#define ACP_PGFSM_CONFIG_REG__Rsvd_BPM_Addr_MASK 0x8000000
1730#define ACP_PGFSM_CONFIG_REG__Rsvd_BPM_Addr__SHIFT 0x1b
1731#define ACP_PGFSM_CONFIG_REG__REG_ADDR_MASK 0xf0000000
1732#define ACP_PGFSM_CONFIG_REG__REG_ADDR__SHIFT 0x1c
1733#define ACP_PGFSM_WRITE_REG__Write_value_MASK 0xffffffff
1734#define ACP_PGFSM_WRITE_REG__Write_value__SHIFT 0x0
1735#define ACP_PGFSM_READ_REG_0__Read_value_MASK 0xffffff
1736#define ACP_PGFSM_READ_REG_0__Read_value__SHIFT 0x0
1737#define ACP_PGFSM_READ_REG_1__Read_value_MASK 0xffffff
1738#define ACP_PGFSM_READ_REG_1__Read_value__SHIFT 0x0
1739#define ACP_PGFSM_READ_REG_2__Read_value_MASK 0xffffff
1740#define ACP_PGFSM_READ_REG_2__Read_value__SHIFT 0x0
1741#define ACP_PGFSM_READ_REG_3__Read_value_MASK 0xffffff
1742#define ACP_PGFSM_READ_REG_3__Read_value__SHIFT 0x0
1743#define ACP_PGFSM_READ_REG_4__Read_value_MASK 0xffffff
1744#define ACP_PGFSM_READ_REG_4__Read_value__SHIFT 0x0
1745#define ACP_PGFSM_READ_REG_5__Read_value_MASK 0xffffff
1746#define ACP_PGFSM_READ_REG_5__Read_value__SHIFT 0x0
1747#define ACP_IP_PGFSM_ENABLE__ACP_IP_ACCESS_MASK 0x1
1748#define ACP_IP_PGFSM_ENABLE__ACP_IP_ACCESS__SHIFT 0x0
1749#define ACP_I2S_PIN_CONFIG__ACP_I2S_PIN_CONFIG_MASK 0x3
1750#define ACP_I2S_PIN_CONFIG__ACP_I2S_PIN_CONFIG__SHIFT 0x0
1751#define ACP_AZALIA_I2S_SELECT__AZ_I2S_SELECT_MASK 0x1
1752#define ACP_AZALIA_I2S_SELECT__AZ_I2S_SELECT__SHIFT 0x0
1753#define ACP_CHIP_PKG_FOR_PAD_ISOLATION__external_fch_package_MASK 0x1
1754#define ACP_CHIP_PKG_FOR_PAD_ISOLATION__external_fch_package__SHIFT 0x0
1755#define ACP_AUDIO_PAD_PULLUP_PULLDOWN_CTRL__ACP_AUDIO_PAD_pullup_disable_MASK 0x7ff
1756#define ACP_AUDIO_PAD_PULLUP_PULLDOWN_CTRL__ACP_AUDIO_PAD_pullup_disable__SHIFT 0x0
1757#define ACP_AUDIO_PAD_PULLUP_PULLDOWN_CTRL__ACP_AUDIO_PAD_pulldown_enable_MASK 0x7ff0000
1758#define ACP_AUDIO_PAD_PULLUP_PULLDOWN_CTRL__ACP_AUDIO_PAD_pulldown_enable__SHIFT 0x10
1759#define ACP_BT_UART_PAD_SEL__ACP_BT_UART_PAD_SEL_MASK 0x1
1760#define ACP_BT_UART_PAD_SEL__ACP_BT_UART_PAD_SEL__SHIFT 0x0
1761#define ACP_SCRATCH_REG_0__ACP_SCRATCH_REG_MASK 0xffffffff
1762#define ACP_SCRATCH_REG_0__ACP_SCRATCH_REG__SHIFT 0x0
1763#define ACP_SCRATCH_REG_1__ACP_SCRATCH_REG_MASK 0xffffffff
1764#define ACP_SCRATCH_REG_1__ACP_SCRATCH_REG__SHIFT 0x0
1765#define ACP_SCRATCH_REG_2__ACP_SCRATCH_REG_MASK 0xffffffff
1766#define ACP_SCRATCH_REG_2__ACP_SCRATCH_REG__SHIFT 0x0
1767#define ACP_SCRATCH_REG_3__ACP_SCRATCH_REG_MASK 0xffffffff
1768#define ACP_SCRATCH_REG_3__ACP_SCRATCH_REG__SHIFT 0x0
1769#define ACP_SCRATCH_REG_4__ACP_SCRATCH_REG_MASK 0xffffffff
1770#define ACP_SCRATCH_REG_4__ACP_SCRATCH_REG__SHIFT 0x0
1771#define ACP_SCRATCH_REG_5__ACP_SCRATCH_REG_MASK 0xffffffff
1772#define ACP_SCRATCH_REG_5__ACP_SCRATCH_REG__SHIFT 0x0
1773#define ACP_SCRATCH_REG_6__ACP_SCRATCH_REG_MASK 0xffffffff
1774#define ACP_SCRATCH_REG_6__ACP_SCRATCH_REG__SHIFT 0x0
1775#define ACP_SCRATCH_REG_7__ACP_SCRATCH_REG_MASK 0xffffffff
1776#define ACP_SCRATCH_REG_7__ACP_SCRATCH_REG__SHIFT 0x0
1777#define ACP_SCRATCH_REG_8__ACP_SCRATCH_REG_MASK 0xffffffff
1778#define ACP_SCRATCH_REG_8__ACP_SCRATCH_REG__SHIFT 0x0
1779#define ACP_SCRATCH_REG_9__ACP_SCRATCH_REG_MASK 0xffffffff
1780#define ACP_SCRATCH_REG_9__ACP_SCRATCH_REG__SHIFT 0x0
1781#define ACP_SCRATCH_REG_10__ACP_SCRATCH_REG_MASK 0xffffffff
1782#define ACP_SCRATCH_REG_10__ACP_SCRATCH_REG__SHIFT 0x0
1783#define ACP_SCRATCH_REG_11__ACP_SCRATCH_REG_MASK 0xffffffff
1784#define ACP_SCRATCH_REG_11__ACP_SCRATCH_REG__SHIFT 0x0
1785#define ACP_SCRATCH_REG_12__ACP_SCRATCH_REG_MASK 0xffffffff
1786#define ACP_SCRATCH_REG_12__ACP_SCRATCH_REG__SHIFT 0x0
1787#define ACP_SCRATCH_REG_13__ACP_SCRATCH_REG_MASK 0xffffffff
1788#define ACP_SCRATCH_REG_13__ACP_SCRATCH_REG__SHIFT 0x0
1789#define ACP_SCRATCH_REG_14__ACP_SCRATCH_REG_MASK 0xffffffff
1790#define ACP_SCRATCH_REG_14__ACP_SCRATCH_REG__SHIFT 0x0
1791#define ACP_SCRATCH_REG_15__ACP_SCRATCH_REG_MASK 0xffffffff
1792#define ACP_SCRATCH_REG_15__ACP_SCRATCH_REG__SHIFT 0x0
1793#define ACP_SCRATCH_REG_16__ACP_SCRATCH_REG_MASK 0xffffffff
1794#define ACP_SCRATCH_REG_16__ACP_SCRATCH_REG__SHIFT 0x0
1795#define ACP_SCRATCH_REG_17__ACP_SCRATCH_REG_MASK 0xffffffff
1796#define ACP_SCRATCH_REG_17__ACP_SCRATCH_REG__SHIFT 0x0
1797#define ACP_SCRATCH_REG_18__ACP_SCRATCH_REG_MASK 0xffffffff
1798#define ACP_SCRATCH_REG_18__ACP_SCRATCH_REG__SHIFT 0x0
1799#define ACP_SCRATCH_REG_19__ACP_SCRATCH_REG_MASK 0xffffffff
1800#define ACP_SCRATCH_REG_19__ACP_SCRATCH_REG__SHIFT 0x0
1801#define ACP_SCRATCH_REG_20__ACP_SCRATCH_REG_MASK 0xffffffff
1802#define ACP_SCRATCH_REG_20__ACP_SCRATCH_REG__SHIFT 0x0
1803#define ACP_SCRATCH_REG_21__ACP_SCRATCH_REG_MASK 0xffffffff
1804#define ACP_SCRATCH_REG_21__ACP_SCRATCH_REG__SHIFT 0x0
1805#define ACP_SCRATCH_REG_22__ACP_SCRATCH_REG_MASK 0xffffffff
1806#define ACP_SCRATCH_REG_22__ACP_SCRATCH_REG__SHIFT 0x0
1807#define ACP_SCRATCH_REG_23__ACP_SCRATCH_REG_MASK 0xffffffff
1808#define ACP_SCRATCH_REG_23__ACP_SCRATCH_REG__SHIFT 0x0
1809#define ACP_SCRATCH_REG_24__ACP_SCRATCH_REG_MASK 0xffffffff
1810#define ACP_SCRATCH_REG_24__ACP_SCRATCH_REG__SHIFT 0x0
1811#define ACP_SCRATCH_REG_25__ACP_SCRATCH_REG_MASK 0xffffffff
1812#define ACP_SCRATCH_REG_25__ACP_SCRATCH_REG__SHIFT 0x0
1813#define ACP_SCRATCH_REG_26__ACP_SCRATCH_REG_MASK 0xffffffff
1814#define ACP_SCRATCH_REG_26__ACP_SCRATCH_REG__SHIFT 0x0
1815#define ACP_SCRATCH_REG_27__ACP_SCRATCH_REG_MASK 0xffffffff
1816#define ACP_SCRATCH_REG_27__ACP_SCRATCH_REG__SHIFT 0x0
1817#define ACP_SCRATCH_REG_28__ACP_SCRATCH_REG_MASK 0xffffffff
1818#define ACP_SCRATCH_REG_28__ACP_SCRATCH_REG__SHIFT 0x0
1819#define ACP_SCRATCH_REG_29__ACP_SCRATCH_REG_MASK 0xffffffff
1820#define ACP_SCRATCH_REG_29__ACP_SCRATCH_REG__SHIFT 0x0
1821#define ACP_SCRATCH_REG_30__ACP_SCRATCH_REG_MASK 0xffffffff
1822#define ACP_SCRATCH_REG_30__ACP_SCRATCH_REG__SHIFT 0x0
1823#define ACP_SCRATCH_REG_31__ACP_SCRATCH_REG_MASK 0xffffffff
1824#define ACP_SCRATCH_REG_31__ACP_SCRATCH_REG__SHIFT 0x0
1825#define ACP_SCRATCH_REG_32__ACP_SCRATCH_REG_MASK 0xffffffff
1826#define ACP_SCRATCH_REG_32__ACP_SCRATCH_REG__SHIFT 0x0
1827#define ACP_SCRATCH_REG_33__ACP_SCRATCH_REG_MASK 0xffffffff
1828#define ACP_SCRATCH_REG_33__ACP_SCRATCH_REG__SHIFT 0x0
1829#define ACP_SCRATCH_REG_34__ACP_SCRATCH_REG_MASK 0xffffffff
1830#define ACP_SCRATCH_REG_34__ACP_SCRATCH_REG__SHIFT 0x0
1831#define ACP_SCRATCH_REG_35__ACP_SCRATCH_REG_MASK 0xffffffff
1832#define ACP_SCRATCH_REG_35__ACP_SCRATCH_REG__SHIFT 0x0
1833#define ACP_SCRATCH_REG_36__ACP_SCRATCH_REG_MASK 0xffffffff
1834#define ACP_SCRATCH_REG_36__ACP_SCRATCH_REG__SHIFT 0x0
1835#define ACP_SCRATCH_REG_37__ACP_SCRATCH_REG_MASK 0xffffffff
1836#define ACP_SCRATCH_REG_37__ACP_SCRATCH_REG__SHIFT 0x0
1837#define ACP_SCRATCH_REG_38__ACP_SCRATCH_REG_MASK 0xffffffff
1838#define ACP_SCRATCH_REG_38__ACP_SCRATCH_REG__SHIFT 0x0
1839#define ACP_SCRATCH_REG_39__ACP_SCRATCH_REG_MASK 0xffffffff
1840#define ACP_SCRATCH_REG_39__ACP_SCRATCH_REG__SHIFT 0x0
1841#define ACP_SCRATCH_REG_40__ACP_SCRATCH_REG_MASK 0xffffffff
1842#define ACP_SCRATCH_REG_40__ACP_SCRATCH_REG__SHIFT 0x0
1843#define ACP_SCRATCH_REG_41__ACP_SCRATCH_REG_MASK 0xffffffff
1844#define ACP_SCRATCH_REG_41__ACP_SCRATCH_REG__SHIFT 0x0
1845#define ACP_SCRATCH_REG_42__ACP_SCRATCH_REG_MASK 0xffffffff
1846#define ACP_SCRATCH_REG_42__ACP_SCRATCH_REG__SHIFT 0x0
1847#define ACP_SCRATCH_REG_43__ACP_SCRATCH_REG_MASK 0xffffffff
1848#define ACP_SCRATCH_REG_43__ACP_SCRATCH_REG__SHIFT 0x0
1849#define ACP_SCRATCH_REG_44__ACP_SCRATCH_REG_MASK 0xffffffff
1850#define ACP_SCRATCH_REG_44__ACP_SCRATCH_REG__SHIFT 0x0
1851#define ACP_SCRATCH_REG_45__ACP_SCRATCH_REG_MASK 0xffffffff
1852#define ACP_SCRATCH_REG_45__ACP_SCRATCH_REG__SHIFT 0x0
1853#define ACP_SCRATCH_REG_46__ACP_SCRATCH_REG_MASK 0xffffffff
1854#define ACP_SCRATCH_REG_46__ACP_SCRATCH_REG__SHIFT 0x0
1855#define ACP_SCRATCH_REG_47__ACP_SCRATCH_REG_MASK 0xffffffff
1856#define ACP_SCRATCH_REG_47__ACP_SCRATCH_REG__SHIFT 0x0
1857#define ACP_VOICE_WAKEUP_ENABLE__voice_wakeup_enable_MASK 0x1
1858#define ACP_VOICE_WAKEUP_ENABLE__voice_wakeup_enable__SHIFT 0x0
1859#define ACP_VOICE_WAKEUP_STATUS__voice_wakeup_status_MASK 0x1
1860#define ACP_VOICE_WAKEUP_STATUS__voice_wakeup_status__SHIFT 0x0
1861#define I2S_VOICE_WAKEUP_LOWER_THRESHOLD__i2s_voice_wakeup_lower_threshold_MASK 0xffffffff
1862#define I2S_VOICE_WAKEUP_LOWER_THRESHOLD__i2s_voice_wakeup_lower_threshold__SHIFT 0x0
1863#define I2S_VOICE_WAKEUP_HIGHER_THRESHOLD__i2s_voice_wakeup_higher_threshold_MASK 0xffffffff
1864#define I2S_VOICE_WAKEUP_HIGHER_THRESHOLD__i2s_voice_wakeup_higher_threshold__SHIFT 0x0
1865#define I2S_VOICE_WAKEUP_NO_OF_SAMPLES__i2s_voice_wakeup_no_of_samples_MASK 0xffff
1866#define I2S_VOICE_WAKEUP_NO_OF_SAMPLES__i2s_voice_wakeup_no_of_samples__SHIFT 0x0
1867#define I2S_VOICE_WAKEUP_NO_OF_PEAKS__i2s_voice_wakeup_no_of_peaks_MASK 0xffff
1868#define I2S_VOICE_WAKEUP_NO_OF_PEAKS__i2s_voice_wakeup_no_of_peaks__SHIFT 0x0
1869#define I2S_VOICE_WAKEUP_DURATION_OF_N_PEAKS__i2s_voice_wakeup_duration_of_n_peaks_MASK 0xffffffff
1870#define I2S_VOICE_WAKEUP_DURATION_OF_N_PEAKS__i2s_voice_wakeup_duration_of_n_peaks__SHIFT 0x0
1871#define I2S_VOICE_WAKEUP_BITCLK_TOGGLE_DETECTION__i2s_voice_wakeup_bitclk_toggle_wakeup_en_MASK 0x1
1872#define I2S_VOICE_WAKEUP_BITCLK_TOGGLE_DETECTION__i2s_voice_wakeup_bitclk_toggle_wakeup_en__SHIFT 0x0
1873#define I2S_VOICE_WAKEUP_DATA_PATH_SWITCH__i2s_voice_wakeup_data_path_switch_req_MASK 0x1
1874#define I2S_VOICE_WAKEUP_DATA_PATH_SWITCH__i2s_voice_wakeup_data_path_switch_req__SHIFT 0x0
1875#define I2S_VOICE_WAKEUP_DATA_PATH_SWITCH__i2s_voice_wakeup_data_path_switch_ack_MASK 0x2
1876#define I2S_VOICE_WAKEUP_DATA_PATH_SWITCH__i2s_voice_wakeup_data_path_switch_ack__SHIFT 0x1
1877#define I2S_VOICE_WAKEUP_DATA_POINTER__i2s_voice_wakeup_data_pointer_MASK 0xffffffff
1878#define I2S_VOICE_WAKEUP_DATA_POINTER__i2s_voice_wakeup_data_pointer__SHIFT 0x0
1879#define I2S_VOICE_WAKEUP_AUTH_MATCH__i2s_voice_wakeup_authentication_valid_MASK 0x1
1880#define I2S_VOICE_WAKEUP_AUTH_MATCH__i2s_voice_wakeup_authentication_valid__SHIFT 0x0
1881#define I2S_VOICE_WAKEUP_AUTH_MATCH__i2s_voice_wakeup_authentication_match_MASK 0x2
1882#define I2S_VOICE_WAKEUP_AUTH_MATCH__i2s_voice_wakeup_authentication_match__SHIFT 0x1
1883#define I2S_VOICE_WAKEUP_8KB_WRAP__i2s_voice_wakeup_8kb_wrap_MASK 0x1
1884#define I2S_VOICE_WAKEUP_8KB_WRAP__i2s_voice_wakeup_8kb_wrap__SHIFT 0x0
1885#define ACP_I2S_RECEIVED_BYTE_CNT_HIGH__i2s_mic_rx_byte_cnt_high_MASK 0xffffffff
1886#define ACP_I2S_RECEIVED_BYTE_CNT_HIGH__i2s_mic_rx_byte_cnt_high__SHIFT 0x0
1887#define ACP_I2S_RECEIVED_BYTE_CNT_LOW__i2s_mic_rx_byte_cnt_low_MASK 0xffffffff
1888#define ACP_I2S_RECEIVED_BYTE_CNT_LOW__i2s_mic_rx_byte_cnt_low__SHIFT 0x0
1889#define ACP_I2S_MICSP_TRANSMIT_BYTE_CNT_HIGH__i2s_micsp_tx_byte_cnt_high_MASK 0xffffffff
1890#define ACP_I2S_MICSP_TRANSMIT_BYTE_CNT_HIGH__i2s_micsp_tx_byte_cnt_high__SHIFT 0x0
1891#define ACP_I2S_MICSP_TRANSMIT_BYTE_CNT_LOW__i2s_micsp_tx_byte_cnt_low_MASK 0xffffffff
1892#define ACP_I2S_MICSP_TRANSMIT_BYTE_CNT_LOW__i2s_micsp_tx_byte_cnt_low__SHIFT 0x0
1893#define ACP_MEM_SHUT_DOWN_REQ_LO__ACP_ShutDownReq_RAML_MASK 0xffffffff
1894#define ACP_MEM_SHUT_DOWN_REQ_LO__ACP_ShutDownReq_RAML__SHIFT 0x0
1895#define ACP_MEM_SHUT_DOWN_REQ_HI__ACP_ShutDownReq_RAMH_MASK 0xffff
1896#define ACP_MEM_SHUT_DOWN_REQ_HI__ACP_ShutDownReq_RAMH__SHIFT 0x0
1897#define ACP_MEM_SHUT_DOWN_STS_LO__ACP_ShutDownSts_RAML_MASK 0xffffffff
1898#define ACP_MEM_SHUT_DOWN_STS_LO__ACP_ShutDownSts_RAML__SHIFT 0x0
1899#define ACP_MEM_SHUT_DOWN_STS_HI__ACP_ShutDownSts_RAMH_MASK 0xffff
1900#define ACP_MEM_SHUT_DOWN_STS_HI__ACP_ShutDownSts_RAMH__SHIFT 0x0
1901#define ACP_MEM_DEEP_SLEEP_REQ_LO__ACP_DeepSleepReq_RAML_MASK 0xffffffff
1902#define ACP_MEM_DEEP_SLEEP_REQ_LO__ACP_DeepSleepReq_RAML__SHIFT 0x0
1903#define ACP_MEM_DEEP_SLEEP_REQ_HI__ACP_DeepSleepReq_RAMH_MASK 0xffff
1904#define ACP_MEM_DEEP_SLEEP_REQ_HI__ACP_DeepSleepReq_RAMH__SHIFT 0x0
1905#define ACP_MEM_DEEP_SLEEP_STS_LO__ACP_DeepSleepSts_RAML_MASK 0xffffffff
1906#define ACP_MEM_DEEP_SLEEP_STS_LO__ACP_DeepSleepSts_RAML__SHIFT 0x0
1907#define ACP_MEM_DEEP_SLEEP_STS_HI__ACP_DeepSleepSts_RAMH_MASK 0xffff
1908#define ACP_MEM_DEEP_SLEEP_STS_HI__ACP_DeepSleepSts_RAMH__SHIFT 0x0
1909#define ACP_MEM_WAKEUP_FROM_SHUT_DOWN_LO__acp_mem_wakeup_from_shut_down_lo_MASK 0xffffffff
1910#define ACP_MEM_WAKEUP_FROM_SHUT_DOWN_LO__acp_mem_wakeup_from_shut_down_lo__SHIFT 0x0
1911#define ACP_MEM_WAKEUP_FROM_SHUT_DOWN_HI__acp_mem_wakeup_from_shut_down_hi_MASK 0xffff
1912#define ACP_MEM_WAKEUP_FROM_SHUT_DOWN_HI__acp_mem_wakeup_from_shut_down_hi__SHIFT 0x0
1913#define ACP_MEM_WAKEUP_FROM_SLEEP_LO__acp_mem_wakeup_from_sleep_lo_MASK 0xffffffff
1914#define ACP_MEM_WAKEUP_FROM_SLEEP_LO__acp_mem_wakeup_from_sleep_lo__SHIFT 0x0
1915#define ACP_MEM_WAKEUP_FROM_SLEEP_HI__acp_mem_wakeup_from_sleep_hi_MASK 0xffff
1916#define ACP_MEM_WAKEUP_FROM_SLEEP_HI__acp_mem_wakeup_from_sleep_hi__SHIFT 0x0
1917#define ACP_I2SSP_IER__I2SSP_IEN_MASK 0x1
1918#define ACP_I2SSP_IER__I2SSP_IEN__SHIFT 0x0
1919#define ACP_I2SSP_IRER__I2SSP_RXEN_MASK 0x1
1920#define ACP_I2SSP_IRER__I2SSP_RXEN__SHIFT 0x0
1921#define ACP_I2SSP_ITER__I2SSP_TXEN_MASK 0x1
1922#define ACP_I2SSP_ITER__I2SSP_TXEN__SHIFT 0x0
1923#define ACP_I2SSP_CER__I2SSP_CLKEN_MASK 0x1
1924#define ACP_I2SSP_CER__I2SSP_CLKEN__SHIFT 0x0
1925#define ACP_I2SSP_CCR__I2SSP_SCLKG_MASK 0x7
1926#define ACP_I2SSP_CCR__I2SSP_SCLKG__SHIFT 0x0
1927#define ACP_I2SSP_CCR__I2SSP_WSS_MASK 0x18
1928#define ACP_I2SSP_CCR__I2SSP_WSS__SHIFT 0x3
1929#define ACP_I2SSP_RXFFR__I2SSP_RXFFR_MASK 0x1
1930#define ACP_I2SSP_RXFFR__I2SSP_RXFFR__SHIFT 0x0
1931#define ACP_I2SSP_TXFFR__I2SSP_TXFFR_MASK 0x1
1932#define ACP_I2SSP_TXFFR__I2SSP_TXFFR__SHIFT 0x0
1933#define ACP_I2SSP_LRBR0__I2SSP_LRBR0_MASK 0xffffffff
1934#define ACP_I2SSP_LRBR0__I2SSP_LRBR0__SHIFT 0x0
1935#define ACP_I2SSP_RRBR0__I2SSP_RRBR0_MASK 0xffffffff
1936#define ACP_I2SSP_RRBR0__I2SSP_RRBR0__SHIFT 0x0
1937#define ACP_I2SSP_RER0__I2SSP_RXCHEN0_MASK 0x1
1938#define ACP_I2SSP_RER0__I2SSP_RXCHEN0__SHIFT 0x0
1939#define ACP_I2SSP_TER0__I2SSP_TXCHEN0_MASK 0x1
1940#define ACP_I2SSP_TER0__I2SSP_TXCHEN0__SHIFT 0x0
1941#define ACP_I2SSP_RCR0__I2SSP_WLEN_MASK 0x7
1942#define ACP_I2SSP_RCR0__I2SSP_WLEN__SHIFT 0x0
1943#define ACP_I2SSP_TCR0__I2SSP_WLEN_MASK 0x7
1944#define ACP_I2SSP_TCR0__I2SSP_WLEN__SHIFT 0x0
1945#define ACP_I2SSP_ISR0__I2SSP_RXDA_MASK 0x1
1946#define ACP_I2SSP_ISR0__I2SSP_RXDA__SHIFT 0x0
1947#define ACP_I2SSP_ISR0__I2SSP_RXFO_MASK 0x2
1948#define ACP_I2SSP_ISR0__I2SSP_RXFO__SHIFT 0x1
1949#define ACP_I2SSP_ISR0__I2SSP_TXFE_MASK 0x10
1950#define ACP_I2SSP_ISR0__I2SSP_TXFE__SHIFT 0x4
1951#define ACP_I2SSP_ISR0__I2SSP_TXFO_MASK 0x20
1952#define ACP_I2SSP_ISR0__I2SSP_TXFO__SHIFT 0x5
1953#define ACP_I2SSP_IMR0__I2SSP_RXDAM_MASK 0x1
1954#define ACP_I2SSP_IMR0__I2SSP_RXDAM__SHIFT 0x0
1955#define ACP_I2SSP_IMR0__I2SSP_RXFOM_MASK 0x2
1956#define ACP_I2SSP_IMR0__I2SSP_RXFOM__SHIFT 0x1
1957#define ACP_I2SSP_IMR0__I2SSP_TXFEM_MASK 0x10
1958#define ACP_I2SSP_IMR0__I2SSP_TXFEM__SHIFT 0x4
1959#define ACP_I2SSP_IMR0__I2SSP_TXFOM_MASK 0x20
1960#define ACP_I2SSP_IMR0__I2SSP_TXFOM__SHIFT 0x5
1961#define ACP_I2SSP_ROR0__I2SSP_RXCHO_MASK 0x1
1962#define ACP_I2SSP_ROR0__I2SSP_RXCHO__SHIFT 0x0
1963#define ACP_I2SSP_TOR0__I2SSP_TXCHO_MASK 0x1
1964#define ACP_I2SSP_TOR0__I2SSP_TXCHO__SHIFT 0x0
1965#define ACP_I2SSP_RFCR0__I2SSP_RXCHDT_MASK 0xf
1966#define ACP_I2SSP_RFCR0__I2SSP_RXCHDT__SHIFT 0x0
1967#define ACP_I2SSP_TFCR0__I2SSP_TXCHET_MASK 0xf
1968#define ACP_I2SSP_TFCR0__I2SSP_TXCHET__SHIFT 0x0
1969#define ACP_I2SSP_RFF0__I2SSP_RXCHFR_MASK 0x1
1970#define ACP_I2SSP_RFF0__I2SSP_RXCHFR__SHIFT 0x0
1971#define ACP_I2SSP_TFF0__I2SSP_TXCHFR_MASK 0x1
1972#define ACP_I2SSP_TFF0__I2SSP_TXCHFR__SHIFT 0x0
1973#define ACP_I2SSP_RXDMA__I2SSP_RXDMA_MASK 0xffffffff
1974#define ACP_I2SSP_RXDMA__I2SSP_RXDMA__SHIFT 0x0
1975#define ACP_I2SSP_RRXDMA__I2SSP_RRXDMA_MASK 0x1
1976#define ACP_I2SSP_RRXDMA__I2SSP_RRXDMA__SHIFT 0x0
1977#define ACP_I2SSP_TXDMA__I2SSP_TXDMA_MASK 0xffffffff
1978#define ACP_I2SSP_TXDMA__I2SSP_TXDMA__SHIFT 0x0
1979#define ACP_I2SSP_RTXDMA__I2SSP_RTXDMA_MASK 0x1
1980#define ACP_I2SSP_RTXDMA__I2SSP_RTXDMA__SHIFT 0x0
1981#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_0_MASK 0x7
1982#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_0__SHIFT 0x0
1983#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_1_MASK 0x38
1984#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_1__SHIFT 0x3
1985#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_2_MASK 0x380
1986#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_2__SHIFT 0x7
1987#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_3_MASK 0x1c00
1988#define ACP_I2SSP_COMP_PARAM_2__I2SSP_RX_WPRDSIZE_3__SHIFT 0xa
1989#define ACP_I2SSP_COMP_PARAM_1__I2SSP_APB_DATA_WIDTH_MASK 0x3
1990#define ACP_I2SSP_COMP_PARAM_1__I2SSP_APB_DATA_WIDTH__SHIFT 0x0
1991#define ACP_I2SSP_COMP_PARAM_1__I2SSP_FIFO_DEPTH_GLOBAL_MASK 0xc
1992#define ACP_I2SSP_COMP_PARAM_1__I2SSP_FIFO_DEPTH_GLOBAL__SHIFT 0x2
1993#define ACP_I2SSP_COMP_PARAM_1__I2SSP_MODE_EN_MASK 0x10
1994#define ACP_I2SSP_COMP_PARAM_1__I2SSP_MODE_EN__SHIFT 0x4
1995#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TRANSMITTER_BLOCK_MASK 0x20
1996#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TRANSMITTER_BLOCK__SHIFT 0x5
1997#define ACP_I2SSP_COMP_PARAM_1__I2SSP_RECEIVER_BLOCK_MASK 0x40
1998#define ACP_I2SSP_COMP_PARAM_1__I2SSP_RECEIVER_BLOCK__SHIFT 0x6
1999#define ACP_I2SSP_COMP_PARAM_1__I2SSP_RX_CHANNLES_MASK 0x180
2000#define ACP_I2SSP_COMP_PARAM_1__I2SSP_RX_CHANNLES__SHIFT 0x7
2001#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_CHANNLES_MASK 0x600
2002#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_CHANNLES__SHIFT 0x9
2003#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_0_MASK 0x70000
2004#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_0__SHIFT 0x10
2005#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_1_MASK 0x380000
2006#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_1__SHIFT 0x13
2007#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_2_MASK 0x1c00000
2008#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_2__SHIFT 0x16
2009#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_3_MASK 0xe000000
2010#define ACP_I2SSP_COMP_PARAM_1__I2SSP_TX_WORDSIZE_3__SHIFT 0x19
2011#define ACP_I2SSP_COMP_VERSION__I2SSP_APB_DATA_WIDTH_MASK 0xffffffff
2012#define ACP_I2SSP_COMP_VERSION__I2SSP_APB_DATA_WIDTH__SHIFT 0x0
2013#define ACP_I2SSP_COMP_TYPE__I2SSP_COMP_TYPE_MASK 0xffffffff
2014#define ACP_I2SSP_COMP_TYPE__I2SSP_COMP_TYPE__SHIFT 0x0
2015#define ACP_I2SMICSP_IER__I2SMICSP_IEN_MASK 0x1
2016#define ACP_I2SMICSP_IER__I2SMICSP_IEN__SHIFT 0x0
2017#define ACP_I2SMICSP_IRER__I2SMICSP_RXEN_MASK 0x1
2018#define ACP_I2SMICSP_IRER__I2SMICSP_RXEN__SHIFT 0x0
2019#define ACP_I2SMICSP_ITER__I2SMICSP_TXEN_MASK 0x1
2020#define ACP_I2SMICSP_ITER__I2SMICSP_TXEN__SHIFT 0x0
2021#define ACP_I2SMICSP_CER__I2SMICSP_CLKEN_MASK 0x1
2022#define ACP_I2SMICSP_CER__I2SMICSP_CLKEN__SHIFT 0x0
2023#define ACP_I2SMICSP_CCR__I2SMICSP_SCLKG_MASK 0x7
2024#define ACP_I2SMICSP_CCR__I2SMICSP_SCLKG__SHIFT 0x0
2025#define ACP_I2SMICSP_CCR__I2SMICSP_WSS_MASK 0x18
2026#define ACP_I2SMICSP_CCR__I2SMICSP_WSS__SHIFT 0x3
2027#define ACP_I2SMICSP_RXFFR__I2SMICSP_RXFFR_MASK 0x1
2028#define ACP_I2SMICSP_RXFFR__I2SMICSP_RXFFR__SHIFT 0x0
2029#define ACP_I2SMICSP_TXFFR__I2SMICSP_TXFFR_MASK 0x1
2030#define ACP_I2SMICSP_TXFFR__I2SMICSP_TXFFR__SHIFT 0x0
2031#define ACP_I2SMICSP_LRBR0__I2SMICSP_LRBR0_MASK 0xffffffff
2032#define ACP_I2SMICSP_LRBR0__I2SMICSP_LRBR0__SHIFT 0x0
2033#define ACP_I2SMICSP_RRBR0__I2SMICSP_RRBR0_MASK 0xffffffff
2034#define ACP_I2SMICSP_RRBR0__I2SMICSP_RRBR0__SHIFT 0x0
2035#define ACP_I2SMICSP_RER0__I2SMICSP_RXCHEN0_MASK 0x1
2036#define ACP_I2SMICSP_RER0__I2SMICSP_RXCHEN0__SHIFT 0x0
2037#define ACP_I2SMICSP_TER0__I2SMICSP_TXCHEN0_MASK 0x1
2038#define ACP_I2SMICSP_TER0__I2SMICSP_TXCHEN0__SHIFT 0x0
2039#define ACP_I2SMICSP_RCR0__I2SMICSP_WLEN_MASK 0x7
2040#define ACP_I2SMICSP_RCR0__I2SMICSP_WLEN__SHIFT 0x0
2041#define ACP_I2SMICSP_TCR0__I2SMICSP_WLEN_MASK 0x7
2042#define ACP_I2SMICSP_TCR0__I2SMICSP_WLEN__SHIFT 0x0
2043#define ACP_I2SMICSP_ISR0__I2SMICSP_RXDA_MASK 0x1
2044#define ACP_I2SMICSP_ISR0__I2SMICSP_RXDA__SHIFT 0x0
2045#define ACP_I2SMICSP_ISR0__I2SMICSP_RXFO_MASK 0x2
2046#define ACP_I2SMICSP_ISR0__I2SMICSP_RXFO__SHIFT 0x1
2047#define ACP_I2SMICSP_ISR0__I2SMICSP_TXFE_MASK 0x10
2048#define ACP_I2SMICSP_ISR0__I2SMICSP_TXFE__SHIFT 0x4
2049#define ACP_I2SMICSP_ISR0__I2SMICSP_TXFO_MASK 0x20
2050#define ACP_I2SMICSP_ISR0__I2SMICSP_TXFO__SHIFT 0x5
2051#define ACP_I2SMICSP_IMR0__I2SMICSP_RXDAM_MASK 0x1
2052#define ACP_I2SMICSP_IMR0__I2SMICSP_RXDAM__SHIFT 0x0
2053#define ACP_I2SMICSP_IMR0__I2SMICSP_RXFOM_MASK 0x2
2054#define ACP_I2SMICSP_IMR0__I2SMICSP_RXFOM__SHIFT 0x1
2055#define ACP_I2SMICSP_IMR0__I2SMICSP_TXFEM_MASK 0x10
2056#define ACP_I2SMICSP_IMR0__I2SMICSP_TXFEM__SHIFT 0x4
2057#define ACP_I2SMICSP_IMR0__I2SMICSP_TXFOM_MASK 0x20
2058#define ACP_I2SMICSP_IMR0__I2SMICSP_TXFOM__SHIFT 0x5
2059#define ACP_I2SMICSP_ROR0__I2SMICSP_RXCHO_MASK 0x1
2060#define ACP_I2SMICSP_ROR0__I2SMICSP_RXCHO__SHIFT 0x0
2061#define ACP_I2SMICSP_TOR0__I2SMICSP_TXCHO_MASK 0x1
2062#define ACP_I2SMICSP_TOR0__I2SMICSP_TXCHO__SHIFT 0x0
2063#define ACP_I2SMICSP_RFCR0__I2SMICSP_RXCHDT_MASK 0xf
2064#define ACP_I2SMICSP_RFCR0__I2SMICSP_RXCHDT__SHIFT 0x0
2065#define ACP_I2SMICSP_TFCR0__I2SMICSP_TXCHET_MASK 0xf
2066#define ACP_I2SMICSP_TFCR0__I2SMICSP_TXCHET__SHIFT 0x0
2067#define ACP_I2SMICSP_RFF0__I2SMICSP_RXCHFR_MASK 0x1
2068#define ACP_I2SMICSP_RFF0__I2SMICSP_RXCHFR__SHIFT 0x0
2069#define ACP_I2SMICSP_TFF0__I2SMICSP_TXCHFR_MASK 0x1
2070#define ACP_I2SMICSP_TFF0__I2SMICSP_TXCHFR__SHIFT 0x0
2071#define ACP_I2SMICSP_LRBR1__I2SMICSP_LRBR1_MASK 0xffffffff
2072#define ACP_I2SMICSP_LRBR1__I2SMICSP_LRBR1__SHIFT 0x0
2073#define ACP_I2SMICSP_RRBR1__I2SMICSP_RRBR1_MASK 0xffffffff
2074#define ACP_I2SMICSP_RRBR1__I2SMICSP_RRBR1__SHIFT 0x0
2075#define ACP_I2SMICSP_RER1__I2SMICSP_RXCHEN1_MASK 0x1
2076#define ACP_I2SMICSP_RER1__I2SMICSP_RXCHEN1__SHIFT 0x0
2077#define ACP_I2SMICSP_TER1__I2SMICSP_TXCHEN1_MASK 0x1
2078#define ACP_I2SMICSP_TER1__I2SMICSP_TXCHEN1__SHIFT 0x0
2079#define ACP_I2SMICSP_RCR1__I2SMICSP_WLEN_MASK 0x7
2080#define ACP_I2SMICSP_RCR1__I2SMICSP_WLEN__SHIFT 0x0
2081#define ACP_I2SMICSP_TCR1__I2SMICSP_WLEN_MASK 0x7
2082#define ACP_I2SMICSP_TCR1__I2SMICSP_WLEN__SHIFT 0x0
2083#define ACP_I2SMICSP_ISR1__I2SMICSP_RXDA_MASK 0x1
2084#define ACP_I2SMICSP_ISR1__I2SMICSP_RXDA__SHIFT 0x0
2085#define ACP_I2SMICSP_ISR1__I2SMICSP_RXFO_MASK 0x2
2086#define ACP_I2SMICSP_ISR1__I2SMICSP_RXFO__SHIFT 0x1
2087#define ACP_I2SMICSP_ISR1__I2SMICSP_TXFE_MASK 0x10
2088#define ACP_I2SMICSP_ISR1__I2SMICSP_TXFE__SHIFT 0x4
2089#define ACP_I2SMICSP_ISR1__I2SMICSP_TXFO_MASK 0x20
2090#define ACP_I2SMICSP_ISR1__I2SMICSP_TXFO__SHIFT 0x5
2091#define ACP_I2SMICSP_IMR1__I2SMICSP_RXDAM_MASK 0x1
2092#define ACP_I2SMICSP_IMR1__I2SMICSP_RXDAM__SHIFT 0x0
2093#define ACP_I2SMICSP_IMR1__I2SMICSP_RXFOM_MASK 0x2
2094#define ACP_I2SMICSP_IMR1__I2SMICSP_RXFOM__SHIFT 0x1
2095#define ACP_I2SMICSP_IMR1__I2SMICSP_TXFEM_MASK 0x10
2096#define ACP_I2SMICSP_IMR1__I2SMICSP_TXFEM__SHIFT 0x4
2097#define ACP_I2SMICSP_IMR1__I2SMICSP_TXFOM_MASK 0x20
2098#define ACP_I2SMICSP_IMR1__I2SMICSP_TXFOM__SHIFT 0x5
2099#define ACP_I2SMICSP_ROR1__I2SMICSP_RXCHO_MASK 0x1
2100#define ACP_I2SMICSP_ROR1__I2SMICSP_RXCHO__SHIFT 0x0
2101#define ACP_I2SMICSP_TOR1__I2SMICSP_TXCHO_MASK 0x1
2102#define ACP_I2SMICSP_TOR1__I2SMICSP_TXCHO__SHIFT 0x0
2103#define ACP_I2SMICSP_RFCR1__I2SMICSP_RXCHDT_MASK 0xf
2104#define ACP_I2SMICSP_RFCR1__I2SMICSP_RXCHDT__SHIFT 0x0
2105#define ACP_I2SMICSP_TFCR1__I2SMICSP_TXCHET_MASK 0xf
2106#define ACP_I2SMICSP_TFCR1__I2SMICSP_TXCHET__SHIFT 0x0
2107#define ACP_I2SMICSP_RFF1__I2SMICSP_RXCHFR_MASK 0x1
2108#define ACP_I2SMICSP_RFF1__I2SMICSP_RXCHFR__SHIFT 0x0
2109#define ACP_I2SMICSP_TFF1__I2SMICSP_TXCHFR_MASK 0x1
2110#define ACP_I2SMICSP_TFF1__I2SMICSP_TXCHFR__SHIFT 0x0
2111#define ACP_I2SMICSP_RXDMA__I2SMICSP_RXDMA_MASK 0xffffffff
2112#define ACP_I2SMICSP_RXDMA__I2SMICSP_RXDMA__SHIFT 0x0
2113#define ACP_I2SMICSP_RRXDMA__I2SMICSP_RRXDMA_MASK 0x1
2114#define ACP_I2SMICSP_RRXDMA__I2SMICSP_RRXDMA__SHIFT 0x0
2115#define ACP_I2SMICSP_TXDMA__I2SMICSP_TXDMA_MASK 0xffffffff
2116#define ACP_I2SMICSP_TXDMA__I2SMICSP_TXDMA__SHIFT 0x0
2117#define ACP_I2SMICSP_RTXDMA__I2SMICSP_RTXDMA_MASK 0x1
2118#define ACP_I2SMICSP_RTXDMA__I2SMICSP_RTXDMA__SHIFT 0x0
2119#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_0_MASK 0x7
2120#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_0__SHIFT 0x0
2121#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_1_MASK 0x38
2122#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_1__SHIFT 0x3
2123#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_2_MASK 0x380
2124#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_2__SHIFT 0x7
2125#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_3_MASK 0x1c00
2126#define ACP_I2SMICSP_COMP_PARAM_2__I2SMICSP_RX_WPRDSIZE_3__SHIFT 0xa
2127#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_APB_DATA_WIDTH_MASK 0x3
2128#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_APB_DATA_WIDTH__SHIFT 0x0
2129#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_FIFO_DEPTH_GLOBAL_MASK 0xc
2130#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_FIFO_DEPTH_GLOBAL__SHIFT 0x2
2131#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_MODE_EN_MASK 0x10
2132#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_MODE_EN__SHIFT 0x4
2133#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TRANSMITTER_BLOCK_MASK 0x20
2134#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TRANSMITTER_BLOCK__SHIFT 0x5
2135#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_RECEIVER_BLOCK_MASK 0x40
2136#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_RECEIVER_BLOCK__SHIFT 0x6
2137#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_RX_CHANNLES_MASK 0x180
2138#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_RX_CHANNLES__SHIFT 0x7
2139#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_CHANNLES_MASK 0x600
2140#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_CHANNLES__SHIFT 0x9
2141#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_0_MASK 0x70000
2142#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_0__SHIFT 0x10
2143#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_1_MASK 0x380000
2144#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_1__SHIFT 0x13
2145#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_2_MASK 0x1c00000
2146#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_2__SHIFT 0x16
2147#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_3_MASK 0xe000000
2148#define ACP_I2SMICSP_COMP_PARAM_1__I2SMICSP_TX_WORDSIZE_3__SHIFT 0x19
2149#define ACP_I2SMICSP_COMP_VERSION__I2SMICSP_APB_DATA_WIDTH_MASK 0xffffffff
2150#define ACP_I2SMICSP_COMP_VERSION__I2SMICSP_APB_DATA_WIDTH__SHIFT 0x0
2151#define ACP_I2SMICSP_COMP_TYPE__I2SMICSP_COMP_TYPE_MASK 0xffffffff
2152#define ACP_I2SMICSP_COMP_TYPE__I2SMICSP_COMP_TYPE__SHIFT 0x0
2153#define ACP_I2SBT_IER__I2SBT_IEN_MASK 0x1
2154#define ACP_I2SBT_IER__I2SBT_IEN__SHIFT 0x0
2155#define ACP_I2SBT_IRER__I2SBT_RXEN_MASK 0x1
2156#define ACP_I2SBT_IRER__I2SBT_RXEN__SHIFT 0x0
2157#define ACP_I2SBT_ITER__I2SBT_TXEN_MASK 0x1
2158#define ACP_I2SBT_ITER__I2SBT_TXEN__SHIFT 0x0
2159#define ACP_I2SBT_CER__I2SBT_CLKEN_MASK 0x1
2160#define ACP_I2SBT_CER__I2SBT_CLKEN__SHIFT 0x0
2161#define ACP_I2SBT_CCR__I2SBT_SCLKG_MASK 0x7
2162#define ACP_I2SBT_CCR__I2SBT_SCLKG__SHIFT 0x0
2163#define ACP_I2SBT_CCR__I2SBT_WSS_MASK 0x18
2164#define ACP_I2SBT_CCR__I2SBT_WSS__SHIFT 0x3
2165#define ACP_I2SBT_RXFFR__I2SBT_RXFFR_MASK 0x1
2166#define ACP_I2SBT_RXFFR__I2SBT_RXFFR__SHIFT 0x0
2167#define ACP_I2SBT_TXFFR__I2SBT_TXFFR_MASK 0x1
2168#define ACP_I2SBT_TXFFR__I2SBT_TXFFR__SHIFT 0x0
2169#define ACP_I2SBT_LRBR0__I2SBT_LRBR0_MASK 0xffffffff
2170#define ACP_I2SBT_LRBR0__I2SBT_LRBR0__SHIFT 0x0
2171#define ACP_I2SBT_RRBR0__I2SBT_RRBR0_MASK 0xffffffff
2172#define ACP_I2SBT_RRBR0__I2SBT_RRBR0__SHIFT 0x0
2173#define ACP_I2SBT_RER0__I2SBT_RXCHEN0_MASK 0x1
2174#define ACP_I2SBT_RER0__I2SBT_RXCHEN0__SHIFT 0x0
2175#define ACP_I2SBT_TER0__I2SBT_TXCHEN0_MASK 0x1
2176#define ACP_I2SBT_TER0__I2SBT_TXCHEN0__SHIFT 0x0
2177#define ACP_I2SBT_RCR0__I2SBT_WLEN_MASK 0x7
2178#define ACP_I2SBT_RCR0__I2SBT_WLEN__SHIFT 0x0
2179#define ACP_I2SBT_TCR0__I2SBT_WLEN_MASK 0x7
2180#define ACP_I2SBT_TCR0__I2SBT_WLEN__SHIFT 0x0
2181#define ACP_I2SBT_ISR0__I2SBT_RXDA_MASK 0x1
2182#define ACP_I2SBT_ISR0__I2SBT_RXDA__SHIFT 0x0
2183#define ACP_I2SBT_ISR0__I2SBT_RXFO_MASK 0x2
2184#define ACP_I2SBT_ISR0__I2SBT_RXFO__SHIFT 0x1
2185#define ACP_I2SBT_ISR0__I2SBT_TXFE_MASK 0x10
2186#define ACP_I2SBT_ISR0__I2SBT_TXFE__SHIFT 0x4
2187#define ACP_I2SBT_ISR0__I2SBT_TXFO_MASK 0x20
2188#define ACP_I2SBT_ISR0__I2SBT_TXFO__SHIFT 0x5
2189#define ACP_I2SBT_IMR0__I2SBT_RXDAM_MASK 0x1
2190#define ACP_I2SBT_IMR0__I2SBT_RXDAM__SHIFT 0x0
2191#define ACP_I2SBT_IMR0__I2SBT_RXFOM_MASK 0x2
2192#define ACP_I2SBT_IMR0__I2SBT_RXFOM__SHIFT 0x1
2193#define ACP_I2SBT_IMR0__I2SBT_TXFEM_MASK 0x10
2194#define ACP_I2SBT_IMR0__I2SBT_TXFEM__SHIFT 0x4
2195#define ACP_I2SBT_IMR0__I2SBT_TXFOM_MASK 0x20
2196#define ACP_I2SBT_IMR0__I2SBT_TXFOM__SHIFT 0x5
2197#define ACP_I2SBT_ROR0__I2SBT_RXCHO_MASK 0x1
2198#define ACP_I2SBT_ROR0__I2SBT_RXCHO__SHIFT 0x0
2199#define ACP_I2SBT_TOR0__I2SBT_TXCHO_MASK 0x1
2200#define ACP_I2SBT_TOR0__I2SBT_TXCHO__SHIFT 0x0
2201#define ACP_I2SBT_RFCR0__I2SBT_RXCHDT_MASK 0xf
2202#define ACP_I2SBT_RFCR0__I2SBT_RXCHDT__SHIFT 0x0
2203#define ACP_I2SBT_TFCR0__I2SBT_TXCHET_MASK 0xf
2204#define ACP_I2SBT_TFCR0__I2SBT_TXCHET__SHIFT 0x0
2205#define ACP_I2SBT_RFF0__I2SBT_RXCHFR_MASK 0x1
2206#define ACP_I2SBT_RFF0__I2SBT_RXCHFR__SHIFT 0x0
2207#define ACP_I2SBT_TFF0__I2SBT_TXCHFR_MASK 0x1
2208#define ACP_I2SBT_TFF0__I2SBT_TXCHFR__SHIFT 0x0
2209#define ACP_I2SBT_LRBR1__I2SBT_LRBR1_MASK 0xffffffff
2210#define ACP_I2SBT_LRBR1__I2SBT_LRBR1__SHIFT 0x0
2211#define ACP_I2SBT_RRBR1__I2SBT_RRBR1_MASK 0xffffffff
2212#define ACP_I2SBT_RRBR1__I2SBT_RRBR1__SHIFT 0x0
2213#define ACP_I2SBT_RER1__I2SBT_RXCHEN1_MASK 0x1
2214#define ACP_I2SBT_RER1__I2SBT_RXCHEN1__SHIFT 0x0
2215#define ACP_I2SBT_TER1__I2SBT_TXCHEN1_MASK 0x1
2216#define ACP_I2SBT_TER1__I2SBT_TXCHEN1__SHIFT 0x0
2217#define ACP_I2SBT_RCR1__I2SBT_WLEN_MASK 0x7
2218#define ACP_I2SBT_RCR1__I2SBT_WLEN__SHIFT 0x0
2219#define ACP_I2SBT_TCR1__I2SBT_WLEN_MASK 0x7
2220#define ACP_I2SBT_TCR1__I2SBT_WLEN__SHIFT 0x0
2221#define ACP_I2SBT_ISR1__I2SBT_RXDA_MASK 0x1
2222#define ACP_I2SBT_ISR1__I2SBT_RXDA__SHIFT 0x0
2223#define ACP_I2SBT_ISR1__I2SBT_RXFO_MASK 0x2
2224#define ACP_I2SBT_ISR1__I2SBT_RXFO__SHIFT 0x1
2225#define ACP_I2SBT_ISR1__I2SBT_TXFE_MASK 0x10
2226#define ACP_I2SBT_ISR1__I2SBT_TXFE__SHIFT 0x4
2227#define ACP_I2SBT_ISR1__I2SBT_TXFO_MASK 0x20
2228#define ACP_I2SBT_ISR1__I2SBT_TXFO__SHIFT 0x5
2229#define ACP_I2SBT_IMR1__I2SBT_RXDAM_MASK 0x1
2230#define ACP_I2SBT_IMR1__I2SBT_RXDAM__SHIFT 0x0
2231#define ACP_I2SBT_IMR1__I2SBT_RXFOM_MASK 0x2
2232#define ACP_I2SBT_IMR1__I2SBT_RXFOM__SHIFT 0x1
2233#define ACP_I2SBT_IMR1__I2SBT_TXFEM_MASK 0x10
2234#define ACP_I2SBT_IMR1__I2SBT_TXFEM__SHIFT 0x4
2235#define ACP_I2SBT_IMR1__I2SBT_TXFOM_MASK 0x20
2236#define ACP_I2SBT_IMR1__I2SBT_TXFOM__SHIFT 0x5
2237#define ACP_I2SBT_ROR1__I2SBT_RXCHO_MASK 0x1
2238#define ACP_I2SBT_ROR1__I2SBT_RXCHO__SHIFT 0x0
2239#define ACP_I2SBT_TOR1__I2SBT_TXCHO_MASK 0x1
2240#define ACP_I2SBT_TOR1__I2SBT_TXCHO__SHIFT 0x0
2241#define ACP_I2SBT_RFCR1__I2SBT_RXCHDT_MASK 0xf
2242#define ACP_I2SBT_RFCR1__I2SBT_RXCHDT__SHIFT 0x0
2243#define ACP_I2SBT_TFCR1__I2SBT_TXCHET_MASK 0xf
2244#define ACP_I2SBT_TFCR1__I2SBT_TXCHET__SHIFT 0x0
2245#define ACP_I2SBT_RFF1__I2SBT_RXCHFR_MASK 0x1
2246#define ACP_I2SBT_RFF1__I2SBT_RXCHFR__SHIFT 0x0
2247#define ACP_I2SBT_TFF1__I2SBT_TXCHFR_MASK 0x1
2248#define ACP_I2SBT_TFF1__I2SBT_TXCHFR__SHIFT 0x0
2249#define ACP_I2SBT_RXDMA__I2SBT_RXDMA_MASK 0xffffffff
2250#define ACP_I2SBT_RXDMA__I2SBT_RXDMA__SHIFT 0x0
2251#define ACP_I2SBT_RRXDMA__I2SBT_RRXDMA_MASK 0x1
2252#define ACP_I2SBT_RRXDMA__I2SBT_RRXDMA__SHIFT 0x0
2253#define ACP_I2SBT_TXDMA__I2SBT_TXDMA_MASK 0xffffffff
2254#define ACP_I2SBT_TXDMA__I2SBT_TXDMA__SHIFT 0x0
2255#define ACP_I2SBT_RTXDMA__I2SBT_RTXDMA_MASK 0x1
2256#define ACP_I2SBT_RTXDMA__I2SBT_RTXDMA__SHIFT 0x0
2257#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_0_MASK 0x7
2258#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_0__SHIFT 0x0
2259#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_1_MASK 0x38
2260#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_1__SHIFT 0x3
2261#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_2_MASK 0x380
2262#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_2__SHIFT 0x7
2263#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_3_MASK 0x1c00
2264#define ACP_I2SBT_COMP_PARAM_2__I2SBT_RX_WPRDSIZE_3__SHIFT 0xa
2265#define ACP_I2SBT_COMP_PARAM_1__I2SBT_APB_DATA_WIDTH_MASK 0x3
2266#define ACP_I2SBT_COMP_PARAM_1__I2SBT_APB_DATA_WIDTH__SHIFT 0x0
2267#define ACP_I2SBT_COMP_PARAM_1__I2SBT_FIFO_DEPTH_GLOBAL_MASK 0xc
2268#define ACP_I2SBT_COMP_PARAM_1__I2SBT_FIFO_DEPTH_GLOBAL__SHIFT 0x2
2269#define ACP_I2SBT_COMP_PARAM_1__I2SBT_MODE_EN_MASK 0x10
2270#define ACP_I2SBT_COMP_PARAM_1__I2SBT_MODE_EN__SHIFT 0x4
2271#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TRANSMITTER_BLOCK_MASK 0x20
2272#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TRANSMITTER_BLOCK__SHIFT 0x5
2273#define ACP_I2SBT_COMP_PARAM_1__I2SBT_RECEIVER_BLOCK_MASK 0x40
2274#define ACP_I2SBT_COMP_PARAM_1__I2SBT_RECEIVER_BLOCK__SHIFT 0x6
2275#define ACP_I2SBT_COMP_PARAM_1__I2SBT_RX_CHANNLES_MASK 0x180
2276#define ACP_I2SBT_COMP_PARAM_1__I2SBT_RX_CHANNLES__SHIFT 0x7
2277#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_CHANNLES_MASK 0x600
2278#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_CHANNLES__SHIFT 0x9
2279#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_0_MASK 0x70000
2280#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_0__SHIFT 0x10
2281#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_1_MASK 0x380000
2282#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_1__SHIFT 0x13
2283#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_2_MASK 0x1c00000
2284#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_2__SHIFT 0x16
2285#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_3_MASK 0xe000000
2286#define ACP_I2SBT_COMP_PARAM_1__I2SBT_TX_WORDSIZE_3__SHIFT 0x19
2287#define ACP_I2SBT_COMP_VERSION__I2SBT_APB_DATA_WIDTH_MASK 0xffffffff
2288#define ACP_I2SBT_COMP_VERSION__I2SBT_APB_DATA_WIDTH__SHIFT 0x0
2289#define ACP_I2SBT_COMP_TYPE__I2SBT_COMP_TYPE_MASK 0xffffffff
2290#define ACP_I2SBT_COMP_TYPE__I2SBT_COMP_TYPE__SHIFT 0x0
2291
2292#endif /* ACP_2_2_SH_MASK_H */
diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c
index 8c435beb263d..3303d5f58082 100644
--- a/sound/soc/bcm/bcm2835-i2s.c
+++ b/sound/soc/bcm/bcm2835-i2s.c
@@ -31,20 +31,20 @@
31 * General Public License for more details. 31 * General Public License for more details.
32 */ 32 */
33 33
34#include <linux/clk.h>
35#include <linux/delay.h>
36#include <linux/device.h>
34#include <linux/init.h> 37#include <linux/init.h>
38#include <linux/io.h>
35#include <linux/module.h> 39#include <linux/module.h>
36#include <linux/device.h>
37#include <linux/slab.h> 40#include <linux/slab.h>
38#include <linux/delay.h>
39#include <linux/io.h>
40#include <linux/clk.h>
41 41
42#include <sound/core.h> 42#include <sound/core.h>
43#include <sound/dmaengine_pcm.h>
44#include <sound/initval.h>
43#include <sound/pcm.h> 45#include <sound/pcm.h>
44#include <sound/pcm_params.h> 46#include <sound/pcm_params.h>
45#include <sound/initval.h>
46#include <sound/soc.h> 47#include <sound/soc.h>
47#include <sound/dmaengine_pcm.h>
48 48
49/* Clock registers */ 49/* Clock registers */
50#define BCM2835_CLK_PCMCTL_REG 0x00 50#define BCM2835_CLK_PCMCTL_REG 0x00
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 629ee56a22ce..50693c867e71 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -87,7 +87,7 @@ config SND_SOC_ALL_CODECS
87 select SND_SOC_ML26124 if I2C 87 select SND_SOC_ML26124 if I2C
88 select SND_SOC_NAU8825 if I2C 88 select SND_SOC_NAU8825 if I2C
89 select SND_SOC_PCM1681 if I2C 89 select SND_SOC_PCM1681 if I2C
90 select SND_SOC_PCM1792A if SPI_MASTER 90 select SND_SOC_PCM179X if SPI_MASTER
91 select SND_SOC_PCM3008 91 select SND_SOC_PCM3008
92 select SND_SOC_PCM3168A_I2C if I2C 92 select SND_SOC_PCM3168A_I2C if I2C
93 select SND_SOC_PCM3168A_SPI if SPI_MASTER 93 select SND_SOC_PCM3168A_SPI if SPI_MASTER
@@ -526,8 +526,8 @@ config SND_SOC_PCM1681
526 tristate "Texas Instruments PCM1681 CODEC" 526 tristate "Texas Instruments PCM1681 CODEC"
527 depends on I2C 527 depends on I2C
528 528
529config SND_SOC_PCM1792A 529config SND_SOC_PCM179X
530 tristate "Texas Instruments PCM1792A CODEC" 530 tristate "Texas Instruments PCM179X CODEC"
531 depends on SPI_MASTER 531 depends on SPI_MASTER
532 532
533config SND_SOC_PCM3008 533config SND_SOC_PCM3008
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index fb846e2ad33b..d44f7d347183 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -80,7 +80,7 @@ snd-soc-mc13783-objs := mc13783.o
80snd-soc-ml26124-objs := ml26124.o 80snd-soc-ml26124-objs := ml26124.o
81snd-soc-nau8825-objs := nau8825.o 81snd-soc-nau8825-objs := nau8825.o
82snd-soc-pcm1681-objs := pcm1681.o 82snd-soc-pcm1681-objs := pcm1681.o
83snd-soc-pcm1792a-codec-objs := pcm1792a.o 83snd-soc-pcm179x-codec-objs := pcm179x.o
84snd-soc-pcm3008-objs := pcm3008.o 84snd-soc-pcm3008-objs := pcm3008.o
85snd-soc-pcm3168a-objs := pcm3168a.o 85snd-soc-pcm3168a-objs := pcm3168a.o
86snd-soc-pcm3168a-i2c-objs := pcm3168a-i2c.o 86snd-soc-pcm3168a-i2c-objs := pcm3168a-i2c.o
@@ -284,7 +284,7 @@ obj-$(CONFIG_SND_SOC_MC13783) += snd-soc-mc13783.o
284obj-$(CONFIG_SND_SOC_ML26124) += snd-soc-ml26124.o 284obj-$(CONFIG_SND_SOC_ML26124) += snd-soc-ml26124.o
285obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o 285obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o
286obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o 286obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o
287obj-$(CONFIG_SND_SOC_PCM1792A) += snd-soc-pcm1792a-codec.o 287obj-$(CONFIG_SND_SOC_PCM179X) += snd-soc-pcm179x-codec.o
288obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o 288obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o
289obj-$(CONFIG_SND_SOC_PCM3168A) += snd-soc-pcm3168a.o 289obj-$(CONFIG_SND_SOC_PCM3168A) += snd-soc-pcm3168a.o
290obj-$(CONFIG_SND_SOC_PCM3168A_I2C) += snd-soc-pcm3168a-i2c.o 290obj-$(CONFIG_SND_SOC_PCM3168A_I2C) += snd-soc-pcm3168a-i2c.o
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index fb8f18880524..33143fe1de0b 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1494,6 +1494,9 @@ static int arizona_startup(struct snd_pcm_substream *substream,
1494 const struct snd_pcm_hw_constraint_list *constraint; 1494 const struct snd_pcm_hw_constraint_list *constraint;
1495 unsigned int base_rate; 1495 unsigned int base_rate;
1496 1496
1497 if (!substream->runtime)
1498 return 0;
1499
1497 switch (dai_priv->clk) { 1500 switch (dai_priv->clk) {
1498 case ARIZONA_CLK_SYSCLK: 1501 case ARIZONA_CLK_SYSCLK:
1499 base_rate = priv->sysclk; 1502 base_rate = priv->sysclk;
diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
index 72686517ff54..93575f251866 100644
--- a/sound/soc/codecs/da7218.c
+++ b/sound/soc/codecs/da7218.c
@@ -1954,17 +1954,44 @@ static int da7218_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
1954 return -EINVAL; 1954 return -EINVAL;
1955 } 1955 }
1956 1956
1957 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 1957 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1958 case SND_SOC_DAIFMT_NB_NF: 1958 case SND_SOC_DAIFMT_I2S:
1959 break; 1959 case SND_SOC_DAIFMT_LEFT_J:
1960 case SND_SOC_DAIFMT_NB_IF: 1960 case SND_SOC_DAIFMT_RIGHT_J:
1961 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV; 1961 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1962 break; 1962 case SND_SOC_DAIFMT_NB_NF:
1963 case SND_SOC_DAIFMT_IB_NF: 1963 break;
1964 dai_clk_mode |= DA7218_DAI_CLK_POL_INV; 1964 case SND_SOC_DAIFMT_NB_IF:
1965 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV;
1966 break;
1967 case SND_SOC_DAIFMT_IB_NF:
1968 dai_clk_mode |= DA7218_DAI_CLK_POL_INV;
1969 break;
1970 case SND_SOC_DAIFMT_IB_IF:
1971 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV |
1972 DA7218_DAI_CLK_POL_INV;
1973 break;
1974 default:
1975 return -EINVAL;
1976 }
1965 break; 1977 break;
1966 case SND_SOC_DAIFMT_IB_IF: 1978 case SND_SOC_DAIFMT_DSP_B:
1967 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV | DA7218_DAI_CLK_POL_INV; 1979 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1980 case SND_SOC_DAIFMT_NB_NF:
1981 dai_clk_mode |= DA7218_DAI_CLK_POL_INV;
1982 break;
1983 case SND_SOC_DAIFMT_NB_IF:
1984 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV |
1985 DA7218_DAI_CLK_POL_INV;
1986 break;
1987 case SND_SOC_DAIFMT_IB_NF:
1988 break;
1989 case SND_SOC_DAIFMT_IB_IF:
1990 dai_clk_mode |= DA7218_DAI_WCLK_POL_INV;
1991 break;
1992 default:
1993 return -EINVAL;
1994 }
1968 break; 1995 break;
1969 default: 1996 default:
1970 return -EINVAL; 1997 return -EINVAL;
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index c6d3b32bb4ae..81c0708b85c1 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -1156,18 +1156,44 @@ static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
1156 return -EINVAL; 1156 return -EINVAL;
1157 } 1157 }
1158 1158
1159 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 1159 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1160 case SND_SOC_DAIFMT_NB_NF: 1160 case SND_SOC_DAIFMT_I2S:
1161 break; 1161 case SND_SOC_DAIFMT_LEFT_J:
1162 case SND_SOC_DAIFMT_NB_IF: 1162 case SND_SOC_DAIFMT_RIGHT_J:
1163 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV; 1163 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1164 break; 1164 case SND_SOC_DAIFMT_NB_NF:
1165 case SND_SOC_DAIFMT_IB_NF: 1165 break;
1166 dai_clk_mode |= DA7219_DAI_CLK_POL_INV; 1166 case SND_SOC_DAIFMT_NB_IF:
1167 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV;
1168 break;
1169 case SND_SOC_DAIFMT_IB_NF:
1170 dai_clk_mode |= DA7219_DAI_CLK_POL_INV;
1171 break;
1172 case SND_SOC_DAIFMT_IB_IF:
1173 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV |
1174 DA7219_DAI_CLK_POL_INV;
1175 break;
1176 default:
1177 return -EINVAL;
1178 }
1167 break; 1179 break;
1168 case SND_SOC_DAIFMT_IB_IF: 1180 case SND_SOC_DAIFMT_DSP_B:
1169 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV | 1181 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1170 DA7219_DAI_CLK_POL_INV; 1182 case SND_SOC_DAIFMT_NB_NF:
1183 dai_clk_mode |= DA7219_DAI_CLK_POL_INV;
1184 break;
1185 case SND_SOC_DAIFMT_NB_IF:
1186 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV |
1187 DA7219_DAI_CLK_POL_INV;
1188 break;
1189 case SND_SOC_DAIFMT_IB_NF:
1190 break;
1191 case SND_SOC_DAIFMT_IB_IF:
1192 dai_clk_mode |= DA7219_DAI_WCLK_POL_INV;
1193 break;
1194 default:
1195 return -EINVAL;
1196 }
1171 break; 1197 break;
1172 default: 1198 default:
1173 return -EINVAL; 1199 return -EINVAL;
@@ -1592,9 +1618,14 @@ static void da7219_handle_pdata(struct snd_soc_codec *codec)
1592 } 1618 }
1593} 1619}
1594 1620
1621static struct reg_sequence da7219_rev_aa_patch[] = {
1622 { DA7219_REFERENCES, 0x08 },
1623};
1624
1595static int da7219_probe(struct snd_soc_codec *codec) 1625static int da7219_probe(struct snd_soc_codec *codec)
1596{ 1626{
1597 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 1627 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
1628 unsigned int rev;
1598 int ret; 1629 int ret;
1599 1630
1600 mutex_init(&da7219->lock); 1631 mutex_init(&da7219->lock);
@@ -1604,6 +1635,26 @@ static int da7219_probe(struct snd_soc_codec *codec)
1604 if (ret) 1635 if (ret)
1605 return ret; 1636 return ret;
1606 1637
1638 ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev);
1639 if (ret) {
1640 dev_err(codec->dev, "Failed to read chip revision: %d\n", ret);
1641 goto err_disable_reg;
1642 }
1643
1644 switch (rev & DA7219_CHIP_MINOR_MASK) {
1645 case 0:
1646 ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch,
1647 ARRAY_SIZE(da7219_rev_aa_patch));
1648 if (ret) {
1649 dev_err(codec->dev, "Failed to register AA patch: %d\n",
1650 ret);
1651 goto err_disable_reg;
1652 }
1653 break;
1654 default:
1655 break;
1656 }
1657
1607 /* Handle DT/Platform data */ 1658 /* Handle DT/Platform data */
1608 if (codec->dev->of_node) 1659 if (codec->dev->of_node)
1609 da7219->pdata = da7219_of_to_pdata(codec); 1660 da7219->pdata = da7219_of_to_pdata(codec);
@@ -1774,7 +1825,6 @@ static struct reg_default da7219_reg_defaults[] = {
1774 { DA7219_MIXOUT_R_CTRL, 0x10 }, 1825 { DA7219_MIXOUT_R_CTRL, 0x10 },
1775 { DA7219_CHIP_ID1, 0x23 }, 1826 { DA7219_CHIP_ID1, 0x23 },
1776 { DA7219_CHIP_ID2, 0x93 }, 1827 { DA7219_CHIP_ID2, 0x93 },
1777 { DA7219_CHIP_REVISION, 0x00 },
1778 { DA7219_IO_CTRL, 0x00 }, 1828 { DA7219_IO_CTRL, 0x00 },
1779 { DA7219_GAIN_RAMP_CTRL, 0x00 }, 1829 { DA7219_GAIN_RAMP_CTRL, 0x00 },
1780 { DA7219_PC_COUNT, 0x02 }, 1830 { DA7219_PC_COUNT, 0x02 },
diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index 1a2f33b4abfc..5a1ec0f7a1a6 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -43,11 +43,13 @@ struct hdac_hdmi_cvt_params {
43}; 43};
44 44
45struct hdac_hdmi_cvt { 45struct hdac_hdmi_cvt {
46 struct list_head head;
46 hda_nid_t nid; 47 hda_nid_t nid;
47 struct hdac_hdmi_cvt_params params; 48 struct hdac_hdmi_cvt_params params;
48}; 49};
49 50
50struct hdac_hdmi_pin { 51struct hdac_hdmi_pin {
52 struct list_head head;
51 hda_nid_t nid; 53 hda_nid_t nid;
52 int num_mux_nids; 54 int num_mux_nids;
53 hda_nid_t mux_nids[HDA_MAX_CONNECTIONS]; 55 hda_nid_t mux_nids[HDA_MAX_CONNECTIONS];
@@ -55,21 +57,23 @@ struct hdac_hdmi_pin {
55 57
56struct hdac_hdmi_dai_pin_map { 58struct hdac_hdmi_dai_pin_map {
57 int dai_id; 59 int dai_id;
58 struct hdac_hdmi_pin pin; 60 struct hdac_hdmi_pin *pin;
59 struct hdac_hdmi_cvt cvt; 61 struct hdac_hdmi_cvt *cvt;
60}; 62};
61 63
62struct hdac_hdmi_priv { 64struct hdac_hdmi_priv {
63 hda_nid_t pin_nid[3];
64 hda_nid_t cvt_nid[3];
65 struct hdac_hdmi_dai_pin_map dai_map[3]; 65 struct hdac_hdmi_dai_pin_map dai_map[3];
66 struct list_head pin_list;
67 struct list_head cvt_list;
68 int num_pin;
69 int num_cvt;
66}; 70};
67 71
68static inline struct hdac_ext_device *to_hda_ext_device(struct device *dev) 72static inline struct hdac_ext_device *to_hda_ext_device(struct device *dev)
69{ 73{
70 struct hdac_device *hdac = container_of(dev, struct hdac_device, dev); 74 struct hdac_device *hdac = dev_to_hdac_dev(dev);
71 75
72 return container_of(hdac, struct hdac_ext_device, hdac); 76 return to_ehdac_device(hdac);
73} 77}
74 78
75static int hdac_hdmi_setup_stream(struct hdac_ext_device *hdac, 79static int hdac_hdmi_setup_stream(struct hdac_ext_device *hdac,
@@ -149,13 +153,15 @@ static void hdac_hdmi_set_power_state(struct hdac_ext_device *edev,
149 struct hdac_hdmi_dai_pin_map *dai_map, unsigned int pwr_state) 153 struct hdac_hdmi_dai_pin_map *dai_map, unsigned int pwr_state)
150{ 154{
151 /* Power up pin widget */ 155 /* Power up pin widget */
152 if (!snd_hdac_check_power_state(&edev->hdac, dai_map->pin.nid, pwr_state)) 156 if (!snd_hdac_check_power_state(&edev->hdac, dai_map->pin->nid,
153 snd_hdac_codec_write(&edev->hdac, dai_map->pin.nid, 0, 157 pwr_state))
158 snd_hdac_codec_write(&edev->hdac, dai_map->pin->nid, 0,
154 AC_VERB_SET_POWER_STATE, pwr_state); 159 AC_VERB_SET_POWER_STATE, pwr_state);
155 160
156 /* Power up converter */ 161 /* Power up converter */
157 if (!snd_hdac_check_power_state(&edev->hdac, dai_map->cvt.nid, pwr_state)) 162 if (!snd_hdac_check_power_state(&edev->hdac, dai_map->cvt->nid,
158 snd_hdac_codec_write(&edev->hdac, dai_map->cvt.nid, 0, 163 pwr_state))
164 snd_hdac_codec_write(&edev->hdac, dai_map->cvt->nid, 0,
159 AC_VERB_SET_POWER_STATE, pwr_state); 165 AC_VERB_SET_POWER_STATE, pwr_state);
160} 166}
161 167
@@ -179,13 +185,13 @@ static int hdac_hdmi_playback_prepare(struct snd_pcm_substream *substream,
179 dev_dbg(&hdac->hdac.dev, "stream tag from cpu dai %d format in cvt 0x%x\n", 185 dev_dbg(&hdac->hdac.dev, "stream tag from cpu dai %d format in cvt 0x%x\n",
180 dd->stream_tag, dd->format); 186 dd->stream_tag, dd->format);
181 187
182 ret = hdac_hdmi_setup_audio_infoframe(hdac, dai_map->cvt.nid, 188 ret = hdac_hdmi_setup_audio_infoframe(hdac, dai_map->cvt->nid,
183 dai_map->pin.nid); 189 dai_map->pin->nid);
184 if (ret < 0) 190 if (ret < 0)
185 return ret; 191 return ret;
186 192
187 return hdac_hdmi_setup_stream(hdac, dai_map->cvt.nid, dai_map->pin.nid, 193 return hdac_hdmi_setup_stream(hdac, dai_map->cvt->nid,
188 dd->stream_tag, dd->format); 194 dai_map->pin->nid, dd->stream_tag, dd->format);
189} 195}
190 196
191static int hdac_hdmi_set_hw_params(struct snd_pcm_substream *substream, 197static int hdac_hdmi_set_hw_params(struct snd_pcm_substream *substream,
@@ -221,9 +227,9 @@ static int hdac_hdmi_playback_cleanup(struct snd_pcm_substream *substream,
221 227
222 dai_map = &hdmi->dai_map[dai->id]; 228 dai_map = &hdmi->dai_map[dai->id];
223 229
224 snd_hdac_codec_write(&edev->hdac, dai_map->cvt.nid, 0, 230 snd_hdac_codec_write(&edev->hdac, dai_map->cvt->nid, 0,
225 AC_VERB_SET_CHANNEL_STREAMID, 0); 231 AC_VERB_SET_CHANNEL_STREAMID, 0);
226 snd_hdac_codec_write(&edev->hdac, dai_map->cvt.nid, 0, 232 snd_hdac_codec_write(&edev->hdac, dai_map->cvt->nid, 0,
227 AC_VERB_SET_STREAM_FORMAT, 0); 233 AC_VERB_SET_STREAM_FORMAT, 0);
228 234
229 dd = (struct hdac_ext_dma_params *)snd_soc_dai_get_dma_data(dai, substream); 235 dd = (struct hdac_ext_dma_params *)snd_soc_dai_get_dma_data(dai, substream);
@@ -249,7 +255,7 @@ static int hdac_hdmi_pcm_open(struct snd_pcm_substream *substream,
249 255
250 dai_map = &hdmi->dai_map[dai->id]; 256 dai_map = &hdmi->dai_map[dai->id];
251 257
252 val = snd_hdac_codec_read(&hdac->hdac, dai_map->pin.nid, 0, 258 val = snd_hdac_codec_read(&hdac->hdac, dai_map->pin->nid, 0,
253 AC_VERB_GET_PIN_SENSE, 0); 259 AC_VERB_GET_PIN_SENSE, 0);
254 dev_info(&hdac->hdac.dev, "Val for AC_VERB_GET_PIN_SENSE: %x\n", val); 260 dev_info(&hdac->hdac.dev, "Val for AC_VERB_GET_PIN_SENSE: %x\n", val);
255 261
@@ -260,7 +266,7 @@ static int hdac_hdmi_pcm_open(struct snd_pcm_substream *substream,
260 266
261 hdac_hdmi_set_power_state(hdac, dai_map, AC_PWRST_D0); 267 hdac_hdmi_set_power_state(hdac, dai_map, AC_PWRST_D0);
262 268
263 snd_hdac_codec_write(&hdac->hdac, dai_map->pin.nid, 0, 269 snd_hdac_codec_write(&hdac->hdac, dai_map->pin->nid, 0,
264 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 270 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
265 271
266 snd_pcm_hw_constraint_step(substream->runtime, 0, 272 snd_pcm_hw_constraint_step(substream->runtime, 0,
@@ -280,7 +286,7 @@ static void hdac_hdmi_pcm_close(struct snd_pcm_substream *substream,
280 286
281 hdac_hdmi_set_power_state(hdac, dai_map, AC_PWRST_D3); 287 hdac_hdmi_set_power_state(hdac, dai_map, AC_PWRST_D3);
282 288
283 snd_hdac_codec_write(&hdac->hdac, dai_map->pin.nid, 0, 289 snd_hdac_codec_write(&hdac->hdac, dai_map->pin->nid, 0,
284 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 290 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
285} 291}
286 292
@@ -304,26 +310,6 @@ hdac_hdmi_query_cvt_params(struct hdac_device *hdac, struct hdac_hdmi_cvt *cvt)
304 return err; 310 return err;
305} 311}
306 312
307static int hdac_hdmi_query_pin_connlist(struct hdac_ext_device *hdac,
308 struct hdac_hdmi_pin *pin)
309{
310 if (!(get_wcaps(&hdac->hdac, pin->nid) & AC_WCAP_CONN_LIST)) {
311 dev_warn(&hdac->hdac.dev,
312 "HDMI: pin %d wcaps %#x does not support connection list\n",
313 pin->nid, get_wcaps(&hdac->hdac, pin->nid));
314 return -EINVAL;
315 }
316
317 pin->num_mux_nids = snd_hdac_get_connections(&hdac->hdac, pin->nid,
318 pin->mux_nids, HDA_MAX_CONNECTIONS);
319 if (pin->num_mux_nids == 0) {
320 dev_err(&hdac->hdac.dev, "No connections found\n");
321 return -ENODEV;
322 }
323
324 return pin->num_mux_nids;
325}
326
327static void hdac_hdmi_fill_widget_info(struct snd_soc_dapm_widget *w, 313static void hdac_hdmi_fill_widget_info(struct snd_soc_dapm_widget *w,
328 enum snd_soc_dapm_type id, 314 enum snd_soc_dapm_type id,
329 const char *wname, const char *stream) 315 const char *wname, const char *stream)
@@ -366,40 +352,79 @@ static void create_fill_widget_route_map(struct snd_soc_dapm_context *dapm,
366 snd_soc_dapm_add_routes(dapm, route, ARRAY_SIZE(route)); 352 snd_soc_dapm_add_routes(dapm, route, ARRAY_SIZE(route));
367} 353}
368 354
369static int hdac_hdmi_init_dai_map(struct hdac_ext_device *edev, 355static int hdac_hdmi_init_dai_map(struct hdac_ext_device *edev)
370 struct hdac_hdmi_dai_pin_map *dai_map,
371 hda_nid_t pin_nid, hda_nid_t cvt_nid, int dai_id)
372{ 356{
373 int ret; 357 struct hdac_hdmi_priv *hdmi = edev->private_data;
358 struct hdac_hdmi_dai_pin_map *dai_map = &hdmi->dai_map[0];
359 struct hdac_hdmi_cvt *cvt;
360 struct hdac_hdmi_pin *pin;
374 361
375 dai_map->dai_id = dai_id; 362 if (list_empty(&hdmi->cvt_list) || list_empty(&hdmi->pin_list))
376 dai_map->pin.nid = pin_nid; 363 return -EINVAL;
377 364
378 ret = hdac_hdmi_query_pin_connlist(edev, &dai_map->pin); 365 /*
379 if (ret < 0) { 366 * Currently on board only 1 pin and 1 converter is enabled for
380 dev_err(&edev->hdac.dev, 367 * simplification, more will be added eventually
381 "Error querying connection list: %d\n", ret); 368 * So using fixed map for dai_id:pin:cvt
382 return ret; 369 */
383 } 370 cvt = list_first_entry(&hdmi->cvt_list, struct hdac_hdmi_cvt, head);
371 pin = list_first_entry(&hdmi->pin_list, struct hdac_hdmi_pin, head);
372
373 dai_map->dai_id = 0;
374 dai_map->pin = pin;
384 375
385 dai_map->cvt.nid = cvt_nid; 376 dai_map->cvt = cvt;
386 377
387 /* Enable out path for this pin widget */ 378 /* Enable out path for this pin widget */
388 snd_hdac_codec_write(&edev->hdac, pin_nid, 0, 379 snd_hdac_codec_write(&edev->hdac, pin->nid, 0,
389 AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 380 AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
390 381
391 /* Enable transmission */ 382 /* Enable transmission */
392 snd_hdac_codec_write(&edev->hdac, cvt_nid, 0, 383 snd_hdac_codec_write(&edev->hdac, cvt->nid, 0,
393 AC_VERB_SET_DIGI_CONVERT_1, 1); 384 AC_VERB_SET_DIGI_CONVERT_1, 1);
394 385
395 /* Category Code (CC) to zero */ 386 /* Category Code (CC) to zero */
396 snd_hdac_codec_write(&edev->hdac, cvt_nid, 0, 387 snd_hdac_codec_write(&edev->hdac, cvt->nid, 0,
397 AC_VERB_SET_DIGI_CONVERT_2, 0); 388 AC_VERB_SET_DIGI_CONVERT_2, 0);
398 389
399 snd_hdac_codec_write(&edev->hdac, pin_nid, 0, 390 snd_hdac_codec_write(&edev->hdac, pin->nid, 0,
400 AC_VERB_SET_CONNECT_SEL, 0); 391 AC_VERB_SET_CONNECT_SEL, 0);
401 392
402 return hdac_hdmi_query_cvt_params(&edev->hdac, &dai_map->cvt); 393 return 0;
394}
395
396static int hdac_hdmi_add_cvt(struct hdac_ext_device *edev, hda_nid_t nid)
397{
398 struct hdac_hdmi_priv *hdmi = edev->private_data;
399 struct hdac_hdmi_cvt *cvt;
400
401 cvt = kzalloc(sizeof(*cvt), GFP_KERNEL);
402 if (!cvt)
403 return -ENOMEM;
404
405 cvt->nid = nid;
406
407 list_add_tail(&cvt->head, &hdmi->cvt_list);
408 hdmi->num_cvt++;
409
410 return hdac_hdmi_query_cvt_params(&edev->hdac, cvt);
411}
412
413static int hdac_hdmi_add_pin(struct hdac_ext_device *edev, hda_nid_t nid)
414{
415 struct hdac_hdmi_priv *hdmi = edev->private_data;
416 struct hdac_hdmi_pin *pin;
417
418 pin = kzalloc(sizeof(*pin), GFP_KERNEL);
419 if (!pin)
420 return -ENOMEM;
421
422 pin->nid = nid;
423
424 list_add_tail(&pin->head, &hdmi->pin_list);
425 hdmi->num_pin++;
426
427 return 0;
403} 428}
404 429
405/* 430/*
@@ -412,10 +437,10 @@ static int hdac_hdmi_parse_and_map_nid(struct hdac_ext_device *edev)
412 int i, num_nodes; 437 int i, num_nodes;
413 struct hdac_device *hdac = &edev->hdac; 438 struct hdac_device *hdac = &edev->hdac;
414 struct hdac_hdmi_priv *hdmi = edev->private_data; 439 struct hdac_hdmi_priv *hdmi = edev->private_data;
415 int cvt_nid = 0, pin_nid = 0; 440 int ret;
416 441
417 num_nodes = snd_hdac_get_sub_nodes(hdac, hdac->afg, &nid); 442 num_nodes = snd_hdac_get_sub_nodes(hdac, hdac->afg, &nid);
418 if (!nid || num_nodes < 0) { 443 if (!nid || num_nodes <= 0) {
419 dev_warn(&hdac->dev, "HDMI: failed to get afg sub nodes\n"); 444 dev_warn(&hdac->dev, "HDMI: failed to get afg sub nodes\n");
420 return -EINVAL; 445 return -EINVAL;
421 } 446 }
@@ -436,29 +461,25 @@ static int hdac_hdmi_parse_and_map_nid(struct hdac_ext_device *edev)
436 switch (type) { 461 switch (type) {
437 462
438 case AC_WID_AUD_OUT: 463 case AC_WID_AUD_OUT:
439 hdmi->cvt_nid[cvt_nid] = nid; 464 ret = hdac_hdmi_add_cvt(edev, nid);
440 cvt_nid++; 465 if (ret < 0)
466 return ret;
441 break; 467 break;
442 468
443 case AC_WID_PIN: 469 case AC_WID_PIN:
444 hdmi->pin_nid[pin_nid] = nid; 470 ret = hdac_hdmi_add_pin(edev, nid);
445 pin_nid++; 471 if (ret < 0)
472 return ret;
446 break; 473 break;
447 } 474 }
448 } 475 }
449 476
450 hdac->end_nid = nid; 477 hdac->end_nid = nid;
451 478
452 if (!pin_nid || !cvt_nid) 479 if (!hdmi->num_pin || !hdmi->num_cvt)
453 return -EIO; 480 return -EIO;
454 481
455 /* 482 return hdac_hdmi_init_dai_map(edev);
456 * Currently on board only 1 pin and 1 converter is enabled for
457 * simplification, more will be added eventually
458 * So using fixed map for dai_id:pin:cvt
459 */
460 return hdac_hdmi_init_dai_map(edev, &hdmi->dai_map[0], hdmi->pin_nid[0],
461 hdmi->cvt_nid[0], 0);
462} 483}
463 484
464static int hdmi_codec_probe(struct snd_soc_codec *codec) 485static int hdmi_codec_probe(struct snd_soc_codec *codec)
@@ -542,6 +563,9 @@ static int hdac_hdmi_dev_probe(struct hdac_ext_device *edev)
542 563
543 dev_set_drvdata(&codec->dev, edev); 564 dev_set_drvdata(&codec->dev, edev);
544 565
566 INIT_LIST_HEAD(&hdmi_priv->pin_list);
567 INIT_LIST_HEAD(&hdmi_priv->cvt_list);
568
545 ret = hdac_hdmi_parse_and_map_nid(edev); 569 ret = hdac_hdmi_parse_and_map_nid(edev);
546 if (ret < 0) 570 if (ret < 0)
547 return ret; 571 return ret;
@@ -553,8 +577,22 @@ static int hdac_hdmi_dev_probe(struct hdac_ext_device *edev)
553 577
554static int hdac_hdmi_dev_remove(struct hdac_ext_device *edev) 578static int hdac_hdmi_dev_remove(struct hdac_ext_device *edev)
555{ 579{
580 struct hdac_hdmi_priv *hdmi = edev->private_data;
581 struct hdac_hdmi_pin *pin, *pin_next;
582 struct hdac_hdmi_cvt *cvt, *cvt_next;
583
556 snd_soc_unregister_codec(&edev->hdac.dev); 584 snd_soc_unregister_codec(&edev->hdac.dev);
557 585
586 list_for_each_entry_safe(cvt, cvt_next, &hdmi->cvt_list, head) {
587 list_del(&cvt->head);
588 kfree(cvt);
589 }
590
591 list_for_each_entry_safe(pin, pin_next, &hdmi->pin_list, head) {
592 list_del(&pin->head);
593 kfree(pin);
594 }
595
558 return 0; 596 return 0;
559} 597}
560 598
diff --git a/sound/soc/codecs/pcm1792a.c b/sound/soc/codecs/pcm1792a.c
deleted file mode 100644
index 08bb4863e96f..000000000000
--- a/sound/soc/codecs/pcm1792a.c
+++ /dev/null
@@ -1,271 +0,0 @@
1/*
2 * PCM1792A ASoC codec driver
3 *
4 * Copyright (c) Amarula Solutions B.V. 2013
5 *
6 * Michael Trimarchi <michael@amarulasolutions.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#include <linux/module.h>
20#include <linux/slab.h>
21#include <linux/kernel.h>
22#include <linux/device.h>
23#include <linux/spi/spi.h>
24
25#include <sound/core.h>
26#include <sound/pcm.h>
27#include <sound/pcm_params.h>
28#include <sound/initval.h>
29#include <sound/soc.h>
30#include <sound/tlv.h>
31#include <linux/of.h>
32#include <linux/of_device.h>
33
34#include "pcm1792a.h"
35
36#define PCM1792A_DAC_VOL_LEFT 0x10
37#define PCM1792A_DAC_VOL_RIGHT 0x11
38#define PCM1792A_FMT_CONTROL 0x12
39#define PCM1792A_MODE_CONTROL 0x13
40#define PCM1792A_SOFT_MUTE PCM1792A_FMT_CONTROL
41
42#define PCM1792A_FMT_MASK 0x70
43#define PCM1792A_FMT_SHIFT 4
44#define PCM1792A_MUTE_MASK 0x01
45#define PCM1792A_MUTE_SHIFT 0
46#define PCM1792A_ATLD_ENABLE (1 << 7)
47
48static const struct reg_default pcm1792a_reg_defaults[] = {
49 { 0x10, 0xff },
50 { 0x11, 0xff },
51 { 0x12, 0x50 },
52 { 0x13, 0x00 },
53 { 0x14, 0x00 },
54 { 0x15, 0x01 },
55 { 0x16, 0x00 },
56 { 0x17, 0x00 },
57};
58
59static bool pcm1792a_accessible_reg(struct device *dev, unsigned int reg)
60{
61 return reg >= 0x10 && reg <= 0x17;
62}
63
64static bool pcm1792a_writeable_reg(struct device *dev, unsigned register reg)
65{
66 bool accessible;
67
68 accessible = pcm1792a_accessible_reg(dev, reg);
69
70 return accessible && reg != 0x16 && reg != 0x17;
71}
72
73struct pcm1792a_private {
74 struct regmap *regmap;
75 unsigned int format;
76 unsigned int rate;
77};
78
79static int pcm1792a_set_dai_fmt(struct snd_soc_dai *codec_dai,
80 unsigned int format)
81{
82 struct snd_soc_codec *codec = codec_dai->codec;
83 struct pcm1792a_private *priv = snd_soc_codec_get_drvdata(codec);
84
85 priv->format = format;
86
87 return 0;
88}
89
90static int pcm1792a_digital_mute(struct snd_soc_dai *dai, int mute)
91{
92 struct snd_soc_codec *codec = dai->codec;
93 struct pcm1792a_private *priv = snd_soc_codec_get_drvdata(codec);
94 int ret;
95
96 ret = regmap_update_bits(priv->regmap, PCM1792A_SOFT_MUTE,
97 PCM1792A_MUTE_MASK, !!mute);
98 if (ret < 0)
99 return ret;
100
101 return 0;
102}
103
104static int pcm1792a_hw_params(struct snd_pcm_substream *substream,
105 struct snd_pcm_hw_params *params,
106 struct snd_soc_dai *dai)
107{
108 struct snd_soc_codec *codec = dai->codec;
109 struct pcm1792a_private *priv = snd_soc_codec_get_drvdata(codec);
110 int val = 0, ret;
111
112 priv->rate = params_rate(params);
113
114 switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) {
115 case SND_SOC_DAIFMT_RIGHT_J:
116 switch (params_width(params)) {
117 case 24:
118 case 32:
119 val = 2;
120 break;
121 case 16:
122 val = 0;
123 break;
124 default:
125 return -EINVAL;
126 }
127 break;
128 case SND_SOC_DAIFMT_I2S:
129 switch (params_width(params)) {
130 case 24:
131 case 32:
132 val = 5;
133 break;
134 case 16:
135 val = 4;
136 break;
137 default:
138 return -EINVAL;
139 }
140 break;
141 default:
142 dev_err(codec->dev, "Invalid DAI format\n");
143 return -EINVAL;
144 }
145
146 val = val << PCM1792A_FMT_SHIFT | PCM1792A_ATLD_ENABLE;
147
148 ret = regmap_update_bits(priv->regmap, PCM1792A_FMT_CONTROL,
149 PCM1792A_FMT_MASK | PCM1792A_ATLD_ENABLE, val);
150 if (ret < 0)
151 return ret;
152
153 return 0;
154}
155
156static const struct snd_soc_dai_ops pcm1792a_dai_ops = {
157 .set_fmt = pcm1792a_set_dai_fmt,
158 .hw_params = pcm1792a_hw_params,
159 .digital_mute = pcm1792a_digital_mute,
160};
161
162static const DECLARE_TLV_DB_SCALE(pcm1792a_dac_tlv, -12000, 50, 1);
163
164static const struct snd_kcontrol_new pcm1792a_controls[] = {
165 SOC_DOUBLE_R_RANGE_TLV("DAC Playback Volume", PCM1792A_DAC_VOL_LEFT,
166 PCM1792A_DAC_VOL_RIGHT, 0, 0xf, 0xff, 0,
167 pcm1792a_dac_tlv),
168 SOC_SINGLE("DAC Invert Output Switch", PCM1792A_MODE_CONTROL, 7, 1, 0),
169 SOC_SINGLE("DAC Rolloff Filter Switch", PCM1792A_MODE_CONTROL, 1, 1, 0),
170};
171
172static const struct snd_soc_dapm_widget pcm1792a_dapm_widgets[] = {
173SND_SOC_DAPM_OUTPUT("IOUTL+"),
174SND_SOC_DAPM_OUTPUT("IOUTL-"),
175SND_SOC_DAPM_OUTPUT("IOUTR+"),
176SND_SOC_DAPM_OUTPUT("IOUTR-"),
177};
178
179static const struct snd_soc_dapm_route pcm1792a_dapm_routes[] = {
180 { "IOUTL+", NULL, "Playback" },
181 { "IOUTL-", NULL, "Playback" },
182 { "IOUTR+", NULL, "Playback" },
183 { "IOUTR-", NULL, "Playback" },
184};
185
186static struct snd_soc_dai_driver pcm1792a_dai = {
187 .name = "pcm1792a-hifi",
188 .playback = {
189 .stream_name = "Playback",
190 .channels_min = 2,
191 .channels_max = 2,
192 .rates = PCM1792A_RATES,
193 .formats = PCM1792A_FORMATS, },
194 .ops = &pcm1792a_dai_ops,
195};
196
197static const struct of_device_id pcm1792a_of_match[] = {
198 { .compatible = "ti,pcm1792a", },
199 { }
200};
201MODULE_DEVICE_TABLE(of, pcm1792a_of_match);
202
203static const struct regmap_config pcm1792a_regmap = {
204 .reg_bits = 8,
205 .val_bits = 8,
206 .max_register = 23,
207 .reg_defaults = pcm1792a_reg_defaults,
208 .num_reg_defaults = ARRAY_SIZE(pcm1792a_reg_defaults),
209 .writeable_reg = pcm1792a_writeable_reg,
210 .readable_reg = pcm1792a_accessible_reg,
211};
212
213static struct snd_soc_codec_driver soc_codec_dev_pcm1792a = {
214 .controls = pcm1792a_controls,
215 .num_controls = ARRAY_SIZE(pcm1792a_controls),
216 .dapm_widgets = pcm1792a_dapm_widgets,
217 .num_dapm_widgets = ARRAY_SIZE(pcm1792a_dapm_widgets),
218 .dapm_routes = pcm1792a_dapm_routes,
219 .num_dapm_routes = ARRAY_SIZE(pcm1792a_dapm_routes),
220};
221
222static int pcm1792a_spi_probe(struct spi_device *spi)
223{
224 struct pcm1792a_private *pcm1792a;
225 int ret;
226
227 pcm1792a = devm_kzalloc(&spi->dev, sizeof(struct pcm1792a_private),
228 GFP_KERNEL);
229 if (!pcm1792a)
230 return -ENOMEM;
231
232 spi_set_drvdata(spi, pcm1792a);
233
234 pcm1792a->regmap = devm_regmap_init_spi(spi, &pcm1792a_regmap);
235 if (IS_ERR(pcm1792a->regmap)) {
236 ret = PTR_ERR(pcm1792a->regmap);
237 dev_err(&spi->dev, "Failed to register regmap: %d\n", ret);
238 return ret;
239 }
240
241 return snd_soc_register_codec(&spi->dev,
242 &soc_codec_dev_pcm1792a, &pcm1792a_dai, 1);
243}
244
245static int pcm1792a_spi_remove(struct spi_device *spi)
246{
247 snd_soc_unregister_codec(&spi->dev);
248 return 0;
249}
250
251static const struct spi_device_id pcm1792a_spi_ids[] = {
252 { "pcm1792a", 0 },
253 { },
254};
255MODULE_DEVICE_TABLE(spi, pcm1792a_spi_ids);
256
257static struct spi_driver pcm1792a_codec_driver = {
258 .driver = {
259 .name = "pcm1792a",
260 .of_match_table = of_match_ptr(pcm1792a_of_match),
261 },
262 .id_table = pcm1792a_spi_ids,
263 .probe = pcm1792a_spi_probe,
264 .remove = pcm1792a_spi_remove,
265};
266
267module_spi_driver(pcm1792a_codec_driver);
268
269MODULE_DESCRIPTION("ASoC PCM1792A driver");
270MODULE_AUTHOR("Michael Trimarchi <michael@amarulasolutions.com>");
271MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
new file mode 100644
index 000000000000..a56c7b767d90
--- /dev/null
+++ b/sound/soc/codecs/pcm179x.c
@@ -0,0 +1,271 @@
1/*
2 * PCM179X ASoC codec driver
3 *
4 * Copyright (c) Amarula Solutions B.V. 2013
5 *
6 * Michael Trimarchi <michael@amarulasolutions.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#include <linux/module.h>
20#include <linux/slab.h>
21#include <linux/kernel.h>
22#include <linux/device.h>
23#include <linux/spi/spi.h>
24
25#include <sound/core.h>
26#include <sound/pcm.h>
27#include <sound/pcm_params.h>
28#include <sound/initval.h>
29#include <sound/soc.h>
30#include <sound/tlv.h>
31#include <linux/of.h>
32#include <linux/of_device.h>
33
34#include "pcm179x.h"
35
36#define PCM179X_DAC_VOL_LEFT 0x10
37#define PCM179X_DAC_VOL_RIGHT 0x11
38#define PCM179X_FMT_CONTROL 0x12
39#define PCM179X_MODE_CONTROL 0x13
40#define PCM179X_SOFT_MUTE PCM179X_FMT_CONTROL
41
42#define PCM179X_FMT_MASK 0x70
43#define PCM179X_FMT_SHIFT 4
44#define PCM179X_MUTE_MASK 0x01
45#define PCM179X_MUTE_SHIFT 0
46#define PCM179X_ATLD_ENABLE (1 << 7)
47
48static const struct reg_default pcm179x_reg_defaults[] = {
49 { 0x10, 0xff },
50 { 0x11, 0xff },
51 { 0x12, 0x50 },
52 { 0x13, 0x00 },
53 { 0x14, 0x00 },
54 { 0x15, 0x01 },
55 { 0x16, 0x00 },
56 { 0x17, 0x00 },
57};
58
59static bool pcm179x_accessible_reg(struct device *dev, unsigned int reg)
60{
61 return reg >= 0x10 && reg <= 0x17;
62}
63
64static bool pcm179x_writeable_reg(struct device *dev, unsigned register reg)
65{
66 bool accessible;
67
68 accessible = pcm179x_accessible_reg(dev, reg);
69
70 return accessible && reg != 0x16 && reg != 0x17;
71}
72
73struct pcm179x_private {
74 struct regmap *regmap;
75 unsigned int format;
76 unsigned int rate;
77};
78
79static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai,
80 unsigned int format)
81{
82 struct snd_soc_codec *codec = codec_dai->codec;
83 struct pcm179x_private *priv = snd_soc_codec_get_drvdata(codec);
84
85 priv->format = format;
86
87 return 0;
88}
89
90static int pcm179x_digital_mute(struct snd_soc_dai *dai, int mute)
91{
92 struct snd_soc_codec *codec = dai->codec;
93 struct pcm179x_private *priv = snd_soc_codec_get_drvdata(codec);
94 int ret;
95
96 ret = regmap_update_bits(priv->regmap, PCM179X_SOFT_MUTE,
97 PCM179X_MUTE_MASK, !!mute);
98 if (ret < 0)
99 return ret;
100
101 return 0;
102}
103
104static int pcm179x_hw_params(struct snd_pcm_substream *substream,
105 struct snd_pcm_hw_params *params,
106 struct snd_soc_dai *dai)
107{
108 struct snd_soc_codec *codec = dai->codec;
109 struct pcm179x_private *priv = snd_soc_codec_get_drvdata(codec);
110 int val = 0, ret;
111
112 priv->rate = params_rate(params);
113
114 switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) {
115 case SND_SOC_DAIFMT_RIGHT_J:
116 switch (params_width(params)) {
117 case 24:
118 case 32:
119 val = 2;
120 break;
121 case 16:
122 val = 0;
123 break;
124 default:
125 return -EINVAL;
126 }
127 break;
128 case SND_SOC_DAIFMT_I2S:
129 switch (params_width(params)) {
130 case 24:
131 case 32:
132 val = 5;
133 break;
134 case 16:
135 val = 4;
136 break;
137 default:
138 return -EINVAL;
139 }
140 break;
141 default:
142 dev_err(codec->dev, "Invalid DAI format\n");
143 return -EINVAL;
144 }
145
146 val = val << PCM179X_FMT_SHIFT | PCM179X_ATLD_ENABLE;
147
148 ret = regmap_update_bits(priv->regmap, PCM179X_FMT_CONTROL,
149 PCM179X_FMT_MASK | PCM179X_ATLD_ENABLE, val);
150 if (ret < 0)
151 return ret;
152
153 return 0;
154}
155
156static const struct snd_soc_dai_ops pcm179x_dai_ops = {
157 .set_fmt = pcm179x_set_dai_fmt,
158 .hw_params = pcm179x_hw_params,
159 .digital_mute = pcm179x_digital_mute,
160};
161
162static const DECLARE_TLV_DB_SCALE(pcm179x_dac_tlv, -12000, 50, 1);
163
164static const struct snd_kcontrol_new pcm179x_controls[] = {
165 SOC_DOUBLE_R_RANGE_TLV("DAC Playback Volume", PCM179X_DAC_VOL_LEFT,
166 PCM179X_DAC_VOL_RIGHT, 0, 0xf, 0xff, 0,
167 pcm179x_dac_tlv),
168 SOC_SINGLE("DAC Invert Output Switch", PCM179X_MODE_CONTROL, 7, 1, 0),
169 SOC_SINGLE("DAC Rolloff Filter Switch", PCM179X_MODE_CONTROL, 1, 1, 0),
170};
171
172static const struct snd_soc_dapm_widget pcm179x_dapm_widgets[] = {
173SND_SOC_DAPM_OUTPUT("IOUTL+"),
174SND_SOC_DAPM_OUTPUT("IOUTL-"),
175SND_SOC_DAPM_OUTPUT("IOUTR+"),
176SND_SOC_DAPM_OUTPUT("IOUTR-"),
177};
178
179static const struct snd_soc_dapm_route pcm179x_dapm_routes[] = {
180 { "IOUTL+", NULL, "Playback" },
181 { "IOUTL-", NULL, "Playback" },
182 { "IOUTR+", NULL, "Playback" },
183 { "IOUTR-", NULL, "Playback" },
184};
185
186static struct snd_soc_dai_driver pcm179x_dai = {
187 .name = "pcm179x-hifi",
188 .playback = {
189 .stream_name = "Playback",
190 .channels_min = 2,
191 .channels_max = 2,
192 .rates = PCM1792A_RATES,
193 .formats = PCM1792A_FORMATS, },
194 .ops = &pcm179x_dai_ops,
195};
196
197static const struct of_device_id pcm179x_of_match[] = {
198 { .compatible = "ti,pcm1792a", },
199 { }
200};
201MODULE_DEVICE_TABLE(of, pcm179x_of_match);
202
203static const struct regmap_config pcm179x_regmap = {
204 .reg_bits = 8,
205 .val_bits = 8,
206 .max_register = 23,
207 .reg_defaults = pcm179x_reg_defaults,
208 .num_reg_defaults = ARRAY_SIZE(pcm179x_reg_defaults),
209 .writeable_reg = pcm179x_writeable_reg,
210 .readable_reg = pcm179x_accessible_reg,
211};
212
213static struct snd_soc_codec_driver soc_codec_dev_pcm179x = {
214 .controls = pcm179x_controls,
215 .num_controls = ARRAY_SIZE(pcm179x_controls),
216 .dapm_widgets = pcm179x_dapm_widgets,
217 .num_dapm_widgets = ARRAY_SIZE(pcm179x_dapm_widgets),
218 .dapm_routes = pcm179x_dapm_routes,
219 .num_dapm_routes = ARRAY_SIZE(pcm179x_dapm_routes),
220};
221
222static int pcm179x_spi_probe(struct spi_device *spi)
223{
224 struct pcm179x_private *pcm179x;
225 int ret;
226
227 pcm179x = devm_kzalloc(&spi->dev, sizeof(struct pcm179x_private),
228 GFP_KERNEL);
229 if (!pcm179x)
230 return -ENOMEM;
231
232 spi_set_drvdata(spi, pcm179x);
233
234 pcm179x->regmap = devm_regmap_init_spi(spi, &pcm179x_regmap);
235 if (IS_ERR(pcm179x->regmap)) {
236 ret = PTR_ERR(pcm179x->regmap);
237 dev_err(&spi->dev, "Failed to register regmap: %d\n", ret);
238 return ret;
239 }
240
241 return snd_soc_register_codec(&spi->dev,
242 &soc_codec_dev_pcm179x, &pcm179x_dai, 1);
243}
244
245static int pcm179x_spi_remove(struct spi_device *spi)
246{
247 snd_soc_unregister_codec(&spi->dev);
248 return 0;
249}
250
251static const struct spi_device_id pcm179x_spi_ids[] = {
252 { "pcm179x", 0 },
253 { },
254};
255MODULE_DEVICE_TABLE(spi, pcm179x_spi_ids);
256
257static struct spi_driver pcm179x_codec_driver = {
258 .driver = {
259 .name = "pcm179x",
260 .of_match_table = of_match_ptr(pcm179x_of_match),
261 },
262 .id_table = pcm179x_spi_ids,
263 .probe = pcm179x_spi_probe,
264 .remove = pcm179x_spi_remove,
265};
266
267module_spi_driver(pcm179x_codec_driver);
268
269MODULE_DESCRIPTION("ASoC PCM179X driver");
270MODULE_AUTHOR("Michael Trimarchi <michael@amarulasolutions.com>");
271MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/pcm1792a.h b/sound/soc/codecs/pcm179x.h
index 51d5470fee16..c6fdc062a497 100644
--- a/sound/soc/codecs/pcm1792a.h
+++ b/sound/soc/codecs/pcm179x.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * definitions for PCM1792A 2 * definitions for PCM179X
3 * 3 *
4 * Copyright 2013 Amarula Solutions 4 * Copyright 2013 Amarula Solutions
5 * 5 *
@@ -14,8 +14,8 @@
14 * GNU General Public License for more details. 14 * GNU General Public License for more details.
15 */ 15 */
16 16
17#ifndef __PCM1792A_H__ 17#ifndef __PCM179X_H__
18#define __PCM1792A_H__ 18#define __PCM179X_H__
19 19
20#define PCM1792A_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_8000_48000 | \ 20#define PCM1792A_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_8000_48000 | \
21 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \ 21 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
index f2beb1aa5763..11d032cdc658 100644
--- a/sound/soc/codecs/rt5640.c
+++ b/sound/soc/codecs/rt5640.c
@@ -488,6 +488,18 @@ static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
488 return 0; 488 return 0;
489} 489}
490 490
491static int is_using_asrc(struct snd_soc_dapm_widget *source,
492 struct snd_soc_dapm_widget *sink)
493{
494 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
495 struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
496
497 if (!rt5640->asrc_en)
498 return 0;
499
500 return 1;
501}
502
491/* Digital Mixer */ 503/* Digital Mixer */
492static const struct snd_kcontrol_new rt5640_sto_adc_l_mix[] = { 504static const struct snd_kcontrol_new rt5640_sto_adc_l_mix[] = {
493 SOC_DAPM_SINGLE("ADC1 Switch", RT5640_STO_ADC_MIXER, 505 SOC_DAPM_SINGLE("ADC1 Switch", RT5640_STO_ADC_MIXER,
@@ -1059,6 +1071,20 @@ static int rt5640_hp_post_event(struct snd_soc_dapm_widget *w,
1059static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { 1071static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = {
1060 SND_SOC_DAPM_SUPPLY("PLL1", RT5640_PWR_ANLG2, 1072 SND_SOC_DAPM_SUPPLY("PLL1", RT5640_PWR_ANLG2,
1061 RT5640_PWR_PLL_BIT, 0, NULL, 0), 1073 RT5640_PWR_PLL_BIT, 0, NULL, 0),
1074
1075 /* ASRC */
1076 SND_SOC_DAPM_SUPPLY_S("Stereo Filter ASRC", 1, RT5640_ASRC_1,
1077 15, 0, NULL, 0),
1078 SND_SOC_DAPM_SUPPLY_S("I2S2 Filter ASRC", 1, RT5640_ASRC_1,
1079 12, 0, NULL, 0),
1080 SND_SOC_DAPM_SUPPLY_S("I2S2 ASRC", 1, RT5640_ASRC_1,
1081 11, 0, NULL, 0),
1082 SND_SOC_DAPM_SUPPLY_S("DMIC1 ASRC", 1, RT5640_ASRC_1,
1083 9, 0, NULL, 0),
1084 SND_SOC_DAPM_SUPPLY_S("DMIC2 ASRC", 1, RT5640_ASRC_1,
1085 8, 0, NULL, 0),
1086
1087
1062 /* Input Side */ 1088 /* Input Side */
1063 /* micbias */ 1089 /* micbias */
1064 SND_SOC_DAPM_SUPPLY("LDO2", RT5640_PWR_ANLG1, 1090 SND_SOC_DAPM_SUPPLY("LDO2", RT5640_PWR_ANLG1,
@@ -1319,6 +1345,12 @@ static const struct snd_soc_dapm_widget rt5639_specific_dapm_widgets[] = {
1319}; 1345};
1320 1346
1321static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { 1347static const struct snd_soc_dapm_route rt5640_dapm_routes[] = {
1348 { "I2S1", NULL, "Stereo Filter ASRC", is_using_asrc },
1349 { "I2S2", NULL, "I2S2 ASRC", is_using_asrc },
1350 { "I2S2", NULL, "I2S2 Filter ASRC", is_using_asrc },
1351 { "DMIC1", NULL, "DMIC1 ASRC", is_using_asrc },
1352 { "DMIC2", NULL, "DMIC2 ASRC", is_using_asrc },
1353
1322 {"IN1P", NULL, "LDO2"}, 1354 {"IN1P", NULL, "LDO2"},
1323 {"IN2P", NULL, "LDO2"}, 1355 {"IN2P", NULL, "LDO2"},
1324 {"IN3P", NULL, "LDO2"}, 1356 {"IN3P", NULL, "LDO2"},
@@ -1981,6 +2013,76 @@ int rt5640_dmic_enable(struct snd_soc_codec *codec,
1981} 2013}
1982EXPORT_SYMBOL_GPL(rt5640_dmic_enable); 2014EXPORT_SYMBOL_GPL(rt5640_dmic_enable);
1983 2015
2016int rt5640_sel_asrc_clk_src(struct snd_soc_codec *codec,
2017 unsigned int filter_mask, unsigned int clk_src)
2018{
2019 struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
2020 unsigned int asrc2_mask = 0;
2021 unsigned int asrc2_value = 0;
2022
2023 switch (clk_src) {
2024 case RT5640_CLK_SEL_SYS:
2025 case RT5640_CLK_SEL_ASRC:
2026 break;
2027
2028 default:
2029 return -EINVAL;
2030 }
2031
2032 if (!filter_mask)
2033 return -EINVAL;
2034
2035 if (filter_mask & RT5640_DA_STEREO_FILTER) {
2036 asrc2_mask |= RT5640_STO_DAC_M_MASK;
2037 asrc2_value = (asrc2_value & ~RT5640_STO_DAC_M_MASK)
2038 | (clk_src << RT5640_STO_DAC_M_SFT);
2039 }
2040
2041 if (filter_mask & RT5640_DA_MONO_L_FILTER) {
2042 asrc2_mask |= RT5640_MDA_L_M_MASK;
2043 asrc2_value = (asrc2_value & ~RT5640_MDA_L_M_MASK)
2044 | (clk_src << RT5640_MDA_L_M_SFT);
2045 }
2046
2047 if (filter_mask & RT5640_DA_MONO_R_FILTER) {
2048 asrc2_mask |= RT5640_MDA_R_M_MASK;
2049 asrc2_value = (asrc2_value & ~RT5640_MDA_R_M_MASK)
2050 | (clk_src << RT5640_MDA_R_M_SFT);
2051 }
2052
2053 if (filter_mask & RT5640_AD_STEREO_FILTER) {
2054 asrc2_mask |= RT5640_ADC_M_MASK;
2055 asrc2_value = (asrc2_value & ~RT5640_ADC_M_MASK)
2056 | (clk_src << RT5640_ADC_M_SFT);
2057 }
2058
2059 if (filter_mask & RT5640_AD_MONO_L_FILTER) {
2060 asrc2_mask |= RT5640_MAD_L_M_MASK;
2061 asrc2_value = (asrc2_value & ~RT5640_MAD_L_M_MASK)
2062 | (clk_src << RT5640_MAD_L_M_SFT);
2063 }
2064
2065 if (filter_mask & RT5640_AD_MONO_R_FILTER) {
2066 asrc2_mask |= RT5640_MAD_R_M_MASK;
2067 asrc2_value = (asrc2_value & ~RT5640_MAD_R_M_MASK)
2068 | (clk_src << RT5640_MAD_R_M_SFT);
2069 }
2070
2071 snd_soc_update_bits(codec, RT5640_ASRC_2,
2072 asrc2_mask, asrc2_value);
2073
2074 if (snd_soc_read(codec, RT5640_ASRC_2)) {
2075 rt5640->asrc_en = true;
2076 snd_soc_update_bits(codec, RT5640_JD_CTRL, 0x3, 0x3);
2077 } else {
2078 rt5640->asrc_en = false;
2079 snd_soc_update_bits(codec, RT5640_JD_CTRL, 0x3, 0x0);
2080 }
2081
2082 return 0;
2083}
2084EXPORT_SYMBOL_GPL(rt5640_sel_asrc_clk_src);
2085
1984static int rt5640_probe(struct snd_soc_codec *codec) 2086static int rt5640_probe(struct snd_soc_codec *codec)
1985{ 2087{
1986 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 2088 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
@@ -2175,6 +2277,7 @@ static const struct acpi_device_id rt5640_acpi_match[] = {
2175 { "INT33CA", 0 }, 2277 { "INT33CA", 0 },
2176 { "10EC5640", 0 }, 2278 { "10EC5640", 0 },
2177 { "10EC5642", 0 }, 2279 { "10EC5642", 0 },
2280 { "INTCCFFD", 0 },
2178 { }, 2281 { },
2179}; 2282};
2180MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match); 2283MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match);
diff --git a/sound/soc/codecs/rt5640.h b/sound/soc/codecs/rt5640.h
index 3deb8babeabb..83a7150ddc24 100644
--- a/sound/soc/codecs/rt5640.h
+++ b/sound/soc/codecs/rt5640.h
@@ -1033,6 +1033,10 @@
1033#define RT5640_DMIC_2_M_NOR (0x0 << 8) 1033#define RT5640_DMIC_2_M_NOR (0x0 << 8)
1034#define RT5640_DMIC_2_M_ASYN (0x1 << 8) 1034#define RT5640_DMIC_2_M_ASYN (0x1 << 8)
1035 1035
1036/* ASRC clock source selection (0x84) */
1037#define RT5640_CLK_SEL_SYS (0x0)
1038#define RT5640_CLK_SEL_ASRC (0x1)
1039
1036/* ASRC Control 2 (0x84) */ 1040/* ASRC Control 2 (0x84) */
1037#define RT5640_MDA_L_M_MASK (0x1 << 15) 1041#define RT5640_MDA_L_M_MASK (0x1 << 15)
1038#define RT5640_MDA_L_M_SFT 15 1042#define RT5640_MDA_L_M_SFT 15
@@ -2079,6 +2083,16 @@ enum {
2079 RT5640_DMIC2, 2083 RT5640_DMIC2,
2080}; 2084};
2081 2085
2086/* filter mask */
2087enum {
2088 RT5640_DA_STEREO_FILTER = 0x1,
2089 RT5640_DA_MONO_L_FILTER = (0x1 << 1),
2090 RT5640_DA_MONO_R_FILTER = (0x1 << 2),
2091 RT5640_AD_STEREO_FILTER = (0x1 << 3),
2092 RT5640_AD_MONO_L_FILTER = (0x1 << 4),
2093 RT5640_AD_MONO_R_FILTER = (0x1 << 5),
2094};
2095
2082struct rt5640_priv { 2096struct rt5640_priv {
2083 struct snd_soc_codec *codec; 2097 struct snd_soc_codec *codec;
2084 struct rt5640_platform_data pdata; 2098 struct rt5640_platform_data pdata;
@@ -2095,9 +2109,12 @@ struct rt5640_priv {
2095 int pll_out; 2109 int pll_out;
2096 2110
2097 bool hp_mute; 2111 bool hp_mute;
2112 bool asrc_en;
2098}; 2113};
2099 2114
2100int rt5640_dmic_enable(struct snd_soc_codec *codec, 2115int rt5640_dmic_enable(struct snd_soc_codec *codec,
2101 bool dmic1_data_pin, bool dmic2_data_pin); 2116 bool dmic1_data_pin, bool dmic2_data_pin);
2117int rt5640_sel_asrc_clk_src(struct snd_soc_codec *codec,
2118 unsigned int filter_mask, unsigned int clk_src);
2102 2119
2103#endif 2120#endif
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 6ac9926da330..c61d38b585fb 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -64,7 +64,6 @@ static const struct reg_sequence init_list[] = {
64 {RT5645_PR_BASE + 0x21, 0x4040}, 64 {RT5645_PR_BASE + 0x21, 0x4040},
65 {RT5645_PR_BASE + 0x23, 0x0004}, 65 {RT5645_PR_BASE + 0x23, 0x0004},
66}; 66};
67#define RT5645_INIT_REG_LEN ARRAY_SIZE(init_list)
68 67
69static const struct reg_sequence rt5650_init_list[] = { 68static const struct reg_sequence rt5650_init_list[] = {
70 {0xf6, 0x0100}, 69 {0xf6, 0x0100},
@@ -405,6 +404,7 @@ struct rt5645_priv {
405 struct delayed_work jack_detect_work, rcclock_work; 404 struct delayed_work jack_detect_work, rcclock_work;
406 struct regulator_bulk_data supplies[ARRAY_SIZE(rt5645_supply_names)]; 405 struct regulator_bulk_data supplies[ARRAY_SIZE(rt5645_supply_names)];
407 struct rt5645_eq_param_s *eq_param; 406 struct rt5645_eq_param_s *eq_param;
407 struct timer_list btn_check_timer;
408 408
409 int codec_type; 409 int codec_type;
410 int sysclk; 410 int sysclk;
@@ -3066,6 +3066,7 @@ static void rt5645_enable_push_button_irq(struct snd_soc_codec *codec,
3066 snd_soc_dapm_force_enable_pin(dapm, "ADC R power"); 3066 snd_soc_dapm_force_enable_pin(dapm, "ADC R power");
3067 snd_soc_dapm_sync(dapm); 3067 snd_soc_dapm_sync(dapm);
3068 3068
3069 snd_soc_update_bits(codec, RT5650_4BTN_IL_CMD1, 0x3, 0x3);
3069 snd_soc_update_bits(codec, 3070 snd_soc_update_bits(codec,
3070 RT5645_INT_IRQ_ST, 0x8, 0x8); 3071 RT5645_INT_IRQ_ST, 0x8, 0x8);
3071 snd_soc_update_bits(codec, 3072 snd_soc_update_bits(codec,
@@ -3134,7 +3135,7 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
3134 } 3135 }
3135 if (rt5645->pdata.jd_invert) 3136 if (rt5645->pdata.jd_invert)
3136 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, 3137 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3137 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV); 3138 RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR);
3138 } else { /* jack out */ 3139 } else { /* jack out */
3139 rt5645->jack_type = 0; 3140 rt5645->jack_type = 0;
3140 3141
@@ -3155,7 +3156,7 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
3155 snd_soc_dapm_sync(dapm); 3156 snd_soc_dapm_sync(dapm);
3156 if (rt5645->pdata.jd_invert) 3157 if (rt5645->pdata.jd_invert)
3157 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, 3158 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3158 RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR); 3159 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
3159 } 3160 }
3160 3161
3161 return rt5645->jack_type; 3162 return rt5645->jack_type;
@@ -3279,6 +3280,12 @@ static void rt5645_jack_detect_work(struct work_struct *work)
3279 } 3280 }
3280 if (btn_type == 0)/* button release */ 3281 if (btn_type == 0)/* button release */
3281 report = rt5645->jack_type; 3282 report = rt5645->jack_type;
3283 else {
3284 if (rt5645->pdata.jd_invert) {
3285 mod_timer(&rt5645->btn_check_timer,
3286 msecs_to_jiffies(100));
3287 }
3288 }
3282 3289
3283 break; 3290 break;
3284 /* jack out */ 3291 /* jack out */
@@ -3321,6 +3328,14 @@ static irqreturn_t rt5645_irq(int irq, void *data)
3321 return IRQ_HANDLED; 3328 return IRQ_HANDLED;
3322} 3329}
3323 3330
3331static void rt5645_btn_check_callback(unsigned long data)
3332{
3333 struct rt5645_priv *rt5645 = (struct rt5645_priv *)data;
3334
3335 queue_delayed_work(system_power_efficient_wq,
3336 &rt5645->jack_detect_work, msecs_to_jiffies(5));
3337}
3338
3324static int rt5645_probe(struct snd_soc_codec *codec) 3339static int rt5645_probe(struct snd_soc_codec *codec)
3325{ 3340{
3326 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 3341 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
@@ -3510,7 +3525,7 @@ static const struct i2c_device_id rt5645_i2c_id[] = {
3510MODULE_DEVICE_TABLE(i2c, rt5645_i2c_id); 3525MODULE_DEVICE_TABLE(i2c, rt5645_i2c_id);
3511 3526
3512#ifdef CONFIG_ACPI 3527#ifdef CONFIG_ACPI
3513static struct acpi_device_id rt5645_acpi_match[] = { 3528static const struct acpi_device_id rt5645_acpi_match[] = {
3514 { "10EC5645", 0 }, 3529 { "10EC5645", 0 },
3515 { "10EC5650", 0 }, 3530 { "10EC5650", 0 },
3516 {}, 3531 {},
@@ -3787,6 +3802,13 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
3787 } 3802 }
3788 } 3803 }
3789 3804
3805 if (rt5645->pdata.jd_invert) {
3806 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3807 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
3808 setup_timer(&rt5645->btn_check_timer,
3809 rt5645_btn_check_callback, (unsigned long)rt5645);
3810 }
3811
3790 INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work); 3812 INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);
3791 INIT_DELAYED_WORK(&rt5645->rcclock_work, rt5645_rcclock_work); 3813 INIT_DELAYED_WORK(&rt5645->rcclock_work, rt5645_rcclock_work);
3792 3814
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index 1d4031818966..7a6197042423 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -18,6 +18,7 @@
18#include <linux/regmap.h> 18#include <linux/regmap.h>
19#include <linux/platform_device.h> 19#include <linux/platform_device.h>
20#include <linux/spi/spi.h> 20#include <linux/spi/spi.h>
21#include <linux/acpi.h>
21#include <sound/core.h> 22#include <sound/core.h>
22#include <sound/pcm.h> 23#include <sound/pcm.h>
23#include <sound/pcm_params.h> 24#include <sound/pcm_params.h>
@@ -1735,12 +1736,38 @@ static const struct regmap_config rt5651_regmap = {
1735 .num_ranges = ARRAY_SIZE(rt5651_ranges), 1736 .num_ranges = ARRAY_SIZE(rt5651_ranges),
1736}; 1737};
1737 1738
1739#if defined(CONFIG_OF)
1740static const struct of_device_id rt5651_of_match[] = {
1741 { .compatible = "realtek,rt5651", },
1742 {},
1743};
1744MODULE_DEVICE_TABLE(of, rt5651_of_match);
1745#endif
1746
1747#ifdef CONFIG_ACPI
1748static const struct acpi_device_id rt5651_acpi_match[] = {
1749 { "10EC5651", 0 },
1750 { },
1751};
1752MODULE_DEVICE_TABLE(acpi, rt5651_acpi_match);
1753#endif
1754
1738static const struct i2c_device_id rt5651_i2c_id[] = { 1755static const struct i2c_device_id rt5651_i2c_id[] = {
1739 { "rt5651", 0 }, 1756 { "rt5651", 0 },
1740 { } 1757 { }
1741}; 1758};
1742MODULE_DEVICE_TABLE(i2c, rt5651_i2c_id); 1759MODULE_DEVICE_TABLE(i2c, rt5651_i2c_id);
1743 1760
1761static int rt5651_parse_dt(struct rt5651_priv *rt5651, struct device_node *np)
1762{
1763 rt5651->pdata.in2_diff = of_property_read_bool(np,
1764 "realtek,in2-differential");
1765 rt5651->pdata.dmic_en = of_property_read_bool(np,
1766 "realtek,dmic-en");
1767
1768 return 0;
1769}
1770
1744static int rt5651_i2c_probe(struct i2c_client *i2c, 1771static int rt5651_i2c_probe(struct i2c_client *i2c,
1745 const struct i2c_device_id *id) 1772 const struct i2c_device_id *id)
1746{ 1773{
@@ -1757,6 +1784,8 @@ static int rt5651_i2c_probe(struct i2c_client *i2c,
1757 1784
1758 if (pdata) 1785 if (pdata)
1759 rt5651->pdata = *pdata; 1786 rt5651->pdata = *pdata;
1787 else if (i2c->dev.of_node)
1788 rt5651_parse_dt(rt5651, i2c->dev.of_node);
1760 1789
1761 rt5651->regmap = devm_regmap_init_i2c(i2c, &rt5651_regmap); 1790 rt5651->regmap = devm_regmap_init_i2c(i2c, &rt5651_regmap);
1762 if (IS_ERR(rt5651->regmap)) { 1791 if (IS_ERR(rt5651->regmap)) {
@@ -1806,6 +1835,8 @@ static int rt5651_i2c_remove(struct i2c_client *i2c)
1806static struct i2c_driver rt5651_i2c_driver = { 1835static struct i2c_driver rt5651_i2c_driver = {
1807 .driver = { 1836 .driver = {
1808 .name = "rt5651", 1837 .name = "rt5651",
1838 .acpi_match_table = ACPI_PTR(rt5651_acpi_match),
1839 .of_match_table = of_match_ptr(rt5651_of_match),
1809 }, 1840 },
1810 .probe = rt5651_i2c_probe, 1841 .probe = rt5651_i2c_probe,
1811 .remove = rt5651_i2c_remove, 1842 .remove = rt5651_i2c_remove,
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 4cad8929d262..bc3de2e844e6 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -1097,8 +1097,7 @@ static int twl6040_probe(struct snd_soc_codec *codec)
1097{ 1097{
1098 struct twl6040_data *priv; 1098 struct twl6040_data *priv;
1099 struct twl6040 *twl6040 = dev_get_drvdata(codec->dev->parent); 1099 struct twl6040 *twl6040 = dev_get_drvdata(codec->dev->parent);
1100 struct platform_device *pdev = container_of(codec->dev, 1100 struct platform_device *pdev = to_platform_device(codec->dev);
1101 struct platform_device, dev);
1102 int ret = 0; 1101 int ret = 0;
1103 1102
1104 priv = devm_kzalloc(codec->dev, sizeof(*priv), GFP_KERNEL); 1103 priv = devm_kzalloc(codec->dev, sizeof(*priv), GFP_KERNEL);
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index c36409601835..6088d30962a9 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -360,15 +360,13 @@ static int wm5110_hp_ev(struct snd_soc_dapm_widget *w,
360 360
361static int wm5110_clear_pga_volume(struct arizona *arizona, int output) 361static int wm5110_clear_pga_volume(struct arizona *arizona, int output)
362{ 362{
363 struct reg_sequence clear_pga = { 363 unsigned int reg = ARIZONA_OUTPUT_PATH_CONFIG_1L + output * 4;
364 ARIZONA_OUTPUT_PATH_CONFIG_1L + output * 4, 0x80
365 };
366 int ret; 364 int ret;
367 365
368 ret = regmap_multi_reg_write_bypassed(arizona->regmap, &clear_pga, 1); 366 ret = regmap_write(arizona->regmap, reg, 0x80);
369 if (ret) 367 if (ret)
370 dev_err(arizona->dev, "Failed to clear PGA (0x%x): %d\n", 368 dev_err(arizona->dev, "Failed to clear PGA (0x%x): %d\n",
371 clear_pga.reg, ret); 369 reg, ret);
372 370
373 return ret; 371 return ret;
374} 372}
@@ -439,18 +437,17 @@ static int wm5110_in_pga_get(struct snd_kcontrol *kcontrol,
439{ 437{
440 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 438 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
441 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 439 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
442 struct snd_soc_card *card = dapm->card;
443 int ret; 440 int ret;
444 441
445 /* 442 /*
446 * PGA Volume is also used as part of the enable sequence, so 443 * PGA Volume is also used as part of the enable sequence, so
447 * usage of it should be avoided whilst that is running. 444 * usage of it should be avoided whilst that is running.
448 */ 445 */
449 mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); 446 snd_soc_dapm_mutex_lock(dapm);
450 447
451 ret = snd_soc_get_volsw_range(kcontrol, ucontrol); 448 ret = snd_soc_get_volsw_range(kcontrol, ucontrol);
452 449
453 mutex_unlock(&card->dapm_mutex); 450 snd_soc_dapm_mutex_unlock(dapm);
454 451
455 return ret; 452 return ret;
456} 453}
@@ -460,18 +457,17 @@ static int wm5110_in_pga_put(struct snd_kcontrol *kcontrol,
460{ 457{
461 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 458 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
462 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 459 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
463 struct snd_soc_card *card = dapm->card;
464 int ret; 460 int ret;
465 461
466 /* 462 /*
467 * PGA Volume is also used as part of the enable sequence, so 463 * PGA Volume is also used as part of the enable sequence, so
468 * usage of it should be avoided whilst that is running. 464 * usage of it should be avoided whilst that is running.
469 */ 465 */
470 mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); 466 snd_soc_dapm_mutex_lock(dapm);
471 467
472 ret = snd_soc_put_volsw_range(kcontrol, ucontrol); 468 ret = snd_soc_put_volsw_range(kcontrol, ucontrol);
473 469
474 mutex_unlock(&card->dapm_mutex); 470 snd_soc_dapm_mutex_unlock(dapm);
475 471
476 return ret; 472 return ret;
477} 473}
@@ -2177,10 +2173,23 @@ static int wm5110_open(struct snd_compr_stream *stream)
2177 return wm_adsp_compr_open(&priv->core.adsp[n_adsp], stream); 2173 return wm_adsp_compr_open(&priv->core.adsp[n_adsp], stream);
2178} 2174}
2179 2175
2176static irqreturn_t wm5110_adsp2_irq(int irq, void *data)
2177{
2178 struct wm5110_priv *florida = data;
2179 int ret;
2180
2181 ret = wm_adsp_compr_handle_irq(&florida->core.adsp[2]);
2182 if (ret == -ENODEV)
2183 return IRQ_NONE;
2184
2185 return IRQ_HANDLED;
2186}
2187
2180static int wm5110_codec_probe(struct snd_soc_codec *codec) 2188static int wm5110_codec_probe(struct snd_soc_codec *codec)
2181{ 2189{
2182 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 2190 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
2183 struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec); 2191 struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec);
2192 struct arizona *arizona = priv->core.arizona;
2184 int i, ret; 2193 int i, ret;
2185 2194
2186 priv->core.arizona->dapm = dapm; 2195 priv->core.arizona->dapm = dapm;
@@ -2189,6 +2198,14 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)
2189 arizona_init_gpio(codec); 2198 arizona_init_gpio(codec);
2190 arizona_init_mono(codec); 2199 arizona_init_mono(codec);
2191 2200
2201 ret = arizona_request_irq(arizona, ARIZONA_IRQ_DSP_IRQ1,
2202 "ADSP2 Compressed IRQ", wm5110_adsp2_irq,
2203 priv);
2204 if (ret != 0) {
2205 dev_err(codec->dev, "Failed to request DSP IRQ: %d\n", ret);
2206 return ret;
2207 }
2208
2192 for (i = 0; i < WM5110_NUM_ADSP; ++i) { 2209 for (i = 0; i < WM5110_NUM_ADSP; ++i) {
2193 ret = wm_adsp2_codec_probe(&priv->core.adsp[i], codec); 2210 ret = wm_adsp2_codec_probe(&priv->core.adsp[i], codec);
2194 if (ret) 2211 if (ret)
@@ -2209,12 +2226,15 @@ err_adsp2_codec_probe:
2209 for (--i; i >= 0; --i) 2226 for (--i; i >= 0; --i)
2210 wm_adsp2_codec_remove(&priv->core.adsp[i], codec); 2227 wm_adsp2_codec_remove(&priv->core.adsp[i], codec);
2211 2228
2229 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
2230
2212 return ret; 2231 return ret;
2213} 2232}
2214 2233
2215static int wm5110_codec_remove(struct snd_soc_codec *codec) 2234static int wm5110_codec_remove(struct snd_soc_codec *codec)
2216{ 2235{
2217 struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec); 2236 struct wm5110_priv *priv = snd_soc_codec_get_drvdata(codec);
2237 struct arizona *arizona = priv->core.arizona;
2218 int i; 2238 int i;
2219 2239
2220 for (i = 0; i < WM5110_NUM_ADSP; ++i) 2240 for (i = 0; i < WM5110_NUM_ADSP; ++i)
@@ -2222,6 +2242,8 @@ static int wm5110_codec_remove(struct snd_soc_codec *codec)
2222 2242
2223 priv->core.arizona->dapm = NULL; 2243 priv->core.arizona->dapm = NULL;
2224 2244
2245 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
2246
2225 return 0; 2247 return 0;
2226} 2248}
2227 2249
@@ -2273,6 +2295,8 @@ static struct snd_compr_ops wm5110_compr_ops = {
2273 .set_params = wm_adsp_compr_set_params, 2295 .set_params = wm_adsp_compr_set_params,
2274 .get_caps = wm_adsp_compr_get_caps, 2296 .get_caps = wm_adsp_compr_get_caps,
2275 .trigger = wm_adsp_compr_trigger, 2297 .trigger = wm_adsp_compr_trigger,
2298 .pointer = wm_adsp_compr_pointer,
2299 .copy = wm_adsp_compr_copy,
2276}; 2300};
2277 2301
2278static struct snd_soc_platform_driver wm5110_compr_platform = { 2302static struct snd_soc_platform_driver wm5110_compr_platform = {
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 5380798883b5..ff237726775a 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -147,6 +147,13 @@ static const char *wm8960_3d_upper_cutoff[] = {"High", "Low"};
147static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"}; 147static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"};
148static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"}; 148static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"};
149static const char *wm8960_alcmode[] = {"ALC", "Limiter"}; 149static const char *wm8960_alcmode[] = {"ALC", "Limiter"};
150static const char *wm8960_adc_data_output_sel[] = {
151 "Left Data = Left ADC; Right Data = Right ADC",
152 "Left Data = Left ADC; Right Data = Left ADC",
153 "Left Data = Right ADC; Right Data = Right ADC",
154 "Left Data = Right ADC; Right Data = Left ADC",
155};
156static const char *wm8960_dmonomix[] = {"Stereo", "Mono"};
150 157
151static const struct soc_enum wm8960_enum[] = { 158static const struct soc_enum wm8960_enum[] = {
152 SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity), 159 SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity),
@@ -155,6 +162,8 @@ static const struct soc_enum wm8960_enum[] = {
155 SOC_ENUM_SINGLE(WM8960_3D, 5, 2, wm8960_3d_lower_cutoff), 162 SOC_ENUM_SINGLE(WM8960_3D, 5, 2, wm8960_3d_lower_cutoff),
156 SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc), 163 SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc),
157 SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode), 164 SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode),
165 SOC_ENUM_SINGLE(WM8960_ADDCTL1, 2, 4, wm8960_adc_data_output_sel),
166 SOC_ENUM_SINGLE(WM8960_ADDCTL1, 4, 2, wm8960_dmonomix),
158}; 167};
159 168
160static const int deemph_settings[] = { 0, 32000, 44100, 48000 }; 169static const int deemph_settings[] = { 0, 32000, 44100, 48000 };
@@ -295,6 +304,9 @@ SOC_SINGLE_TLV("Right Output Mixer Boost Bypass Volume",
295 WM8960_BYPASS2, 4, 7, 1, bypass_tlv), 304 WM8960_BYPASS2, 4, 7, 1, bypass_tlv),
296SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume", 305SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume",
297 WM8960_ROUTMIX, 4, 7, 1, bypass_tlv), 306 WM8960_ROUTMIX, 4, 7, 1, bypass_tlv),
307
308SOC_ENUM("ADC Data Output Select", wm8960_enum[6]),
309SOC_ENUM("DAC Mono Mix", wm8960_enum[7]),
298}; 310};
299 311
300static const struct snd_kcontrol_new wm8960_lin_boost[] = { 312static const struct snd_kcontrol_new wm8960_lin_boost[] = {
@@ -401,8 +413,8 @@ static const struct snd_soc_dapm_route audio_paths[] = {
401 { "Left Boost Mixer", "LINPUT2 Switch", "LINPUT2" }, 413 { "Left Boost Mixer", "LINPUT2 Switch", "LINPUT2" },
402 { "Left Boost Mixer", "LINPUT3 Switch", "LINPUT3" }, 414 { "Left Boost Mixer", "LINPUT3 Switch", "LINPUT3" },
403 415
404 { "Left Input Mixer", "Boost Switch", "Left Boost Mixer", }, 416 { "Left Input Mixer", "Boost Switch", "Left Boost Mixer" },
405 { "Left Input Mixer", NULL, "LINPUT1", }, /* Really Boost Switch */ 417 { "Left Input Mixer", "Boost Switch", "LINPUT1" }, /* Really Boost Switch */
406 { "Left Input Mixer", NULL, "LINPUT2" }, 418 { "Left Input Mixer", NULL, "LINPUT2" },
407 { "Left Input Mixer", NULL, "LINPUT3" }, 419 { "Left Input Mixer", NULL, "LINPUT3" },
408 420
@@ -410,8 +422,8 @@ static const struct snd_soc_dapm_route audio_paths[] = {
410 { "Right Boost Mixer", "RINPUT2 Switch", "RINPUT2" }, 422 { "Right Boost Mixer", "RINPUT2 Switch", "RINPUT2" },
411 { "Right Boost Mixer", "RINPUT3 Switch", "RINPUT3" }, 423 { "Right Boost Mixer", "RINPUT3 Switch", "RINPUT3" },
412 424
413 { "Right Input Mixer", "Boost Switch", "Right Boost Mixer", }, 425 { "Right Input Mixer", "Boost Switch", "Right Boost Mixer" },
414 { "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */ 426 { "Right Input Mixer", "Boost Switch", "RINPUT1" }, /* Really Boost Switch */
415 { "Right Input Mixer", NULL, "RINPUT2" }, 427 { "Right Input Mixer", NULL, "RINPUT2" },
416 { "Right Input Mixer", NULL, "RINPUT3" }, 428 { "Right Input Mixer", NULL, "RINPUT3" },
417 429
@@ -419,11 +431,11 @@ static const struct snd_soc_dapm_route audio_paths[] = {
419 { "Right ADC", NULL, "Right Input Mixer" }, 431 { "Right ADC", NULL, "Right Input Mixer" },
420 432
421 { "Left Output Mixer", "LINPUT3 Switch", "LINPUT3" }, 433 { "Left Output Mixer", "LINPUT3 Switch", "LINPUT3" },
422 { "Left Output Mixer", "Boost Bypass Switch", "Left Boost Mixer"} , 434 { "Left Output Mixer", "Boost Bypass Switch", "Left Boost Mixer" },
423 { "Left Output Mixer", "PCM Playback Switch", "Left DAC" }, 435 { "Left Output Mixer", "PCM Playback Switch", "Left DAC" },
424 436
425 { "Right Output Mixer", "RINPUT3 Switch", "RINPUT3" }, 437 { "Right Output Mixer", "RINPUT3 Switch", "RINPUT3" },
426 { "Right Output Mixer", "Boost Bypass Switch", "Right Boost Mixer" } , 438 { "Right Output Mixer", "Boost Bypass Switch", "Right Boost Mixer" },
427 { "Right Output Mixer", "PCM Playback Switch", "Right DAC" }, 439 { "Right Output Mixer", "PCM Playback Switch", "Right DAC" },
428 440
429 { "LOUT1 PGA", NULL, "Left Output Mixer" }, 441 { "LOUT1 PGA", NULL, "Left Output Mixer" },
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index ac879d16c6a6..33806d487b8a 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -279,6 +279,11 @@ struct wm_adsp_compr_buf {
279 279
280 struct wm_adsp_buffer_region *regions; 280 struct wm_adsp_buffer_region *regions;
281 u32 host_buf_ptr; 281 u32 host_buf_ptr;
282
283 u32 error;
284 u32 irq_count;
285 int read_index;
286 int avail;
282}; 287};
283 288
284struct wm_adsp_compr { 289struct wm_adsp_compr {
@@ -287,6 +292,9 @@ struct wm_adsp_compr {
287 292
288 struct snd_compr_stream *stream; 293 struct snd_compr_stream *stream;
289 struct snd_compressed_buffer size; 294 struct snd_compressed_buffer size;
295
296 u32 *raw_buf;
297 unsigned int copied_total;
290}; 298};
291 299
292#define WM_ADSP_DATA_WORD_SIZE 3 300#define WM_ADSP_DATA_WORD_SIZE 3
@@ -2378,6 +2386,7 @@ int wm_adsp_compr_free(struct snd_compr_stream *stream)
2378 2386
2379 dsp->compr = NULL; 2387 dsp->compr = NULL;
2380 2388
2389 kfree(compr->raw_buf);
2381 kfree(compr); 2390 kfree(compr);
2382 2391
2383 mutex_unlock(&dsp->pwr_lock); 2392 mutex_unlock(&dsp->pwr_lock);
@@ -2436,10 +2445,16 @@ static int wm_adsp_compr_check_params(struct snd_compr_stream *stream,
2436 return -EINVAL; 2445 return -EINVAL;
2437} 2446}
2438 2447
2448static inline unsigned int wm_adsp_compr_frag_words(struct wm_adsp_compr *compr)
2449{
2450 return compr->size.fragment_size / WM_ADSP_DATA_WORD_SIZE;
2451}
2452
2439int wm_adsp_compr_set_params(struct snd_compr_stream *stream, 2453int wm_adsp_compr_set_params(struct snd_compr_stream *stream,
2440 struct snd_compr_params *params) 2454 struct snd_compr_params *params)
2441{ 2455{
2442 struct wm_adsp_compr *compr = stream->runtime->private_data; 2456 struct wm_adsp_compr *compr = stream->runtime->private_data;
2457 unsigned int size;
2443 int ret; 2458 int ret;
2444 2459
2445 ret = wm_adsp_compr_check_params(stream, params); 2460 ret = wm_adsp_compr_check_params(stream, params);
@@ -2451,6 +2466,11 @@ int wm_adsp_compr_set_params(struct snd_compr_stream *stream,
2451 adsp_dbg(compr->dsp, "fragment_size=%d fragments=%d\n", 2466 adsp_dbg(compr->dsp, "fragment_size=%d fragments=%d\n",
2452 compr->size.fragment_size, compr->size.fragments); 2467 compr->size.fragment_size, compr->size.fragments);
2453 2468
2469 size = wm_adsp_compr_frag_words(compr) * sizeof(*compr->raw_buf);
2470 compr->raw_buf = kmalloc(size, GFP_DMA | GFP_KERNEL);
2471 if (!compr->raw_buf)
2472 return -ENOMEM;
2473
2454 return 0; 2474 return 0;
2455} 2475}
2456EXPORT_SYMBOL_GPL(wm_adsp_compr_set_params); 2476EXPORT_SYMBOL_GPL(wm_adsp_compr_set_params);
@@ -2622,6 +2642,8 @@ static int wm_adsp_buffer_init(struct wm_adsp *dsp)
2622 return -ENOMEM; 2642 return -ENOMEM;
2623 2643
2624 buf->dsp = dsp; 2644 buf->dsp = dsp;
2645 buf->read_index = -1;
2646 buf->irq_count = 0xFFFFFFFF;
2625 2647
2626 ret = wm_adsp_buffer_locate(buf); 2648 ret = wm_adsp_buffer_locate(buf);
2627 if (ret < 0) { 2649 if (ret < 0) {
@@ -2705,6 +2727,16 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
2705 ret); 2727 ret);
2706 break; 2728 break;
2707 } 2729 }
2730
2731 /* Trigger the IRQ at one fragment of data */
2732 ret = wm_adsp_buffer_write(compr->buf,
2733 HOST_BUFFER_FIELD(high_water_mark),
2734 wm_adsp_compr_frag_words(compr));
2735 if (ret < 0) {
2736 adsp_err(dsp, "Failed to set high water mark: %d\n",
2737 ret);
2738 break;
2739 }
2708 break; 2740 break;
2709 case SNDRV_PCM_TRIGGER_STOP: 2741 case SNDRV_PCM_TRIGGER_STOP:
2710 break; 2742 break;
@@ -2719,4 +2751,298 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
2719} 2751}
2720EXPORT_SYMBOL_GPL(wm_adsp_compr_trigger); 2752EXPORT_SYMBOL_GPL(wm_adsp_compr_trigger);
2721 2753
2754static inline int wm_adsp_buffer_size(struct wm_adsp_compr_buf *buf)
2755{
2756 int last_region = wm_adsp_fw[buf->dsp->fw].caps->num_regions - 1;
2757
2758 return buf->regions[last_region].cumulative_size;
2759}
2760
2761static int wm_adsp_buffer_update_avail(struct wm_adsp_compr_buf *buf)
2762{
2763 u32 next_read_index, next_write_index;
2764 int write_index, read_index, avail;
2765 int ret;
2766
2767 /* Only sync read index if we haven't already read a valid index */
2768 if (buf->read_index < 0) {
2769 ret = wm_adsp_buffer_read(buf,
2770 HOST_BUFFER_FIELD(next_read_index),
2771 &next_read_index);
2772 if (ret < 0)
2773 return ret;
2774
2775 read_index = sign_extend32(next_read_index, 23);
2776
2777 if (read_index < 0) {
2778 adsp_dbg(buf->dsp, "Avail check on unstarted stream\n");
2779 return 0;
2780 }
2781
2782 buf->read_index = read_index;
2783 }
2784
2785 ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(next_write_index),
2786 &next_write_index);
2787 if (ret < 0)
2788 return ret;
2789
2790 write_index = sign_extend32(next_write_index, 23);
2791
2792 avail = write_index - buf->read_index;
2793 if (avail < 0)
2794 avail += wm_adsp_buffer_size(buf);
2795
2796 adsp_dbg(buf->dsp, "readindex=0x%x, writeindex=0x%x, avail=%d\n",
2797 buf->read_index, write_index, avail);
2798
2799 buf->avail = avail;
2800
2801 return 0;
2802}
2803
2804int wm_adsp_compr_handle_irq(struct wm_adsp *dsp)
2805{
2806 struct wm_adsp_compr_buf *buf = dsp->buffer;
2807 struct wm_adsp_compr *compr = dsp->compr;
2808 int ret = 0;
2809
2810 mutex_lock(&dsp->pwr_lock);
2811
2812 if (!buf) {
2813 adsp_err(dsp, "Spurious buffer IRQ\n");
2814 ret = -ENODEV;
2815 goto out;
2816 }
2817
2818 adsp_dbg(dsp, "Handling buffer IRQ\n");
2819
2820 ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(error), &buf->error);
2821 if (ret < 0) {
2822 adsp_err(dsp, "Failed to check buffer error: %d\n", ret);
2823 goto out;
2824 }
2825 if (buf->error != 0) {
2826 adsp_err(dsp, "Buffer error occurred: %d\n", buf->error);
2827 ret = -EIO;
2828 goto out;
2829 }
2830
2831 ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(irq_count),
2832 &buf->irq_count);
2833 if (ret < 0) {
2834 adsp_err(dsp, "Failed to get irq_count: %d\n", ret);
2835 goto out;
2836 }
2837
2838 ret = wm_adsp_buffer_update_avail(buf);
2839 if (ret < 0) {
2840 adsp_err(dsp, "Error reading avail: %d\n", ret);
2841 goto out;
2842 }
2843
2844 if (compr->stream)
2845 snd_compr_fragment_elapsed(compr->stream);
2846
2847out:
2848 mutex_unlock(&dsp->pwr_lock);
2849
2850 return ret;
2851}
2852EXPORT_SYMBOL_GPL(wm_adsp_compr_handle_irq);
2853
2854static int wm_adsp_buffer_reenable_irq(struct wm_adsp_compr_buf *buf)
2855{
2856 if (buf->irq_count & 0x01)
2857 return 0;
2858
2859 adsp_dbg(buf->dsp, "Enable IRQ(0x%x) for next fragment\n",
2860 buf->irq_count);
2861
2862 buf->irq_count |= 0x01;
2863
2864 return wm_adsp_buffer_write(buf, HOST_BUFFER_FIELD(irq_ack),
2865 buf->irq_count);
2866}
2867
2868int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
2869 struct snd_compr_tstamp *tstamp)
2870{
2871 struct wm_adsp_compr *compr = stream->runtime->private_data;
2872 struct wm_adsp_compr_buf *buf = compr->buf;
2873 struct wm_adsp *dsp = compr->dsp;
2874 int ret = 0;
2875
2876 adsp_dbg(dsp, "Pointer request\n");
2877
2878 mutex_lock(&dsp->pwr_lock);
2879
2880 if (!compr->buf) {
2881 ret = -ENXIO;
2882 goto out;
2883 }
2884
2885 if (compr->buf->error) {
2886 ret = -EIO;
2887 goto out;
2888 }
2889
2890 if (buf->avail < wm_adsp_compr_frag_words(compr)) {
2891 ret = wm_adsp_buffer_update_avail(buf);
2892 if (ret < 0) {
2893 adsp_err(dsp, "Error reading avail: %d\n", ret);
2894 goto out;
2895 }
2896
2897 /*
2898 * If we really have less than 1 fragment available tell the
2899 * DSP to inform us once a whole fragment is available.
2900 */
2901 if (buf->avail < wm_adsp_compr_frag_words(compr)) {
2902 ret = wm_adsp_buffer_reenable_irq(buf);
2903 if (ret < 0) {
2904 adsp_err(dsp,
2905 "Failed to re-enable buffer IRQ: %d\n",
2906 ret);
2907 goto out;
2908 }
2909 }
2910 }
2911
2912 tstamp->copied_total = compr->copied_total;
2913 tstamp->copied_total += buf->avail * WM_ADSP_DATA_WORD_SIZE;
2914
2915out:
2916 mutex_unlock(&dsp->pwr_lock);
2917
2918 return ret;
2919}
2920EXPORT_SYMBOL_GPL(wm_adsp_compr_pointer);
2921
2922static int wm_adsp_buffer_capture_block(struct wm_adsp_compr *compr, int target)
2923{
2924 struct wm_adsp_compr_buf *buf = compr->buf;
2925 u8 *pack_in = (u8 *)compr->raw_buf;
2926 u8 *pack_out = (u8 *)compr->raw_buf;
2927 unsigned int adsp_addr;
2928 int mem_type, nwords, max_read;
2929 int i, j, ret;
2930
2931 /* Calculate read parameters */
2932 for (i = 0; i < wm_adsp_fw[buf->dsp->fw].caps->num_regions; ++i)
2933 if (buf->read_index < buf->regions[i].cumulative_size)
2934 break;
2935
2936 if (i == wm_adsp_fw[buf->dsp->fw].caps->num_regions)
2937 return -EINVAL;
2938
2939 mem_type = buf->regions[i].mem_type;
2940 adsp_addr = buf->regions[i].base_addr +
2941 (buf->read_index - buf->regions[i].offset);
2942
2943 max_read = wm_adsp_compr_frag_words(compr);
2944 nwords = buf->regions[i].cumulative_size - buf->read_index;
2945
2946 if (nwords > target)
2947 nwords = target;
2948 if (nwords > buf->avail)
2949 nwords = buf->avail;
2950 if (nwords > max_read)
2951 nwords = max_read;
2952 if (!nwords)
2953 return 0;
2954
2955 /* Read data from DSP */
2956 ret = wm_adsp_read_data_block(buf->dsp, mem_type, adsp_addr,
2957 nwords, compr->raw_buf);
2958 if (ret < 0)
2959 return ret;
2960
2961 /* Remove the padding bytes from the data read from the DSP */
2962 for (i = 0; i < nwords; i++) {
2963 for (j = 0; j < WM_ADSP_DATA_WORD_SIZE; j++)
2964 *pack_out++ = *pack_in++;
2965
2966 pack_in += sizeof(*(compr->raw_buf)) - WM_ADSP_DATA_WORD_SIZE;
2967 }
2968
2969 /* update read index to account for words read */
2970 buf->read_index += nwords;
2971 if (buf->read_index == wm_adsp_buffer_size(buf))
2972 buf->read_index = 0;
2973
2974 ret = wm_adsp_buffer_write(buf, HOST_BUFFER_FIELD(next_read_index),
2975 buf->read_index);
2976 if (ret < 0)
2977 return ret;
2978
2979 /* update avail to account for words read */
2980 buf->avail -= nwords;
2981
2982 return nwords;
2983}
2984
2985static int wm_adsp_compr_read(struct wm_adsp_compr *compr,
2986 char __user *buf, size_t count)
2987{
2988 struct wm_adsp *dsp = compr->dsp;
2989 int ntotal = 0;
2990 int nwords, nbytes;
2991
2992 adsp_dbg(dsp, "Requested read of %zu bytes\n", count);
2993
2994 if (!compr->buf)
2995 return -ENXIO;
2996
2997 if (compr->buf->error)
2998 return -EIO;
2999
3000 count /= WM_ADSP_DATA_WORD_SIZE;
3001
3002 do {
3003 nwords = wm_adsp_buffer_capture_block(compr, count);
3004 if (nwords < 0) {
3005 adsp_err(dsp, "Failed to capture block: %d\n", nwords);
3006 return nwords;
3007 }
3008
3009 nbytes = nwords * WM_ADSP_DATA_WORD_SIZE;
3010
3011 adsp_dbg(dsp, "Read %d bytes\n", nbytes);
3012
3013 if (copy_to_user(buf + ntotal, compr->raw_buf, nbytes)) {
3014 adsp_err(dsp, "Failed to copy data to user: %d, %d\n",
3015 ntotal, nbytes);
3016 return -EFAULT;
3017 }
3018
3019 count -= nwords;
3020 ntotal += nbytes;
3021 } while (nwords > 0 && count > 0);
3022
3023 compr->copied_total += ntotal;
3024
3025 return ntotal;
3026}
3027
3028int wm_adsp_compr_copy(struct snd_compr_stream *stream, char __user *buf,
3029 size_t count)
3030{
3031 struct wm_adsp_compr *compr = stream->runtime->private_data;
3032 struct wm_adsp *dsp = compr->dsp;
3033 int ret;
3034
3035 mutex_lock(&dsp->pwr_lock);
3036
3037 if (stream->direction == SND_COMPRESS_CAPTURE)
3038 ret = wm_adsp_compr_read(compr, buf, count);
3039 else
3040 ret = -ENOTSUPP;
3041
3042 mutex_unlock(&dsp->pwr_lock);
3043
3044 return ret;
3045}
3046EXPORT_SYMBOL_GPL(wm_adsp_compr_copy);
3047
2722MODULE_LICENSE("GPL v2"); 3048MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h
index 43af093fafcf..1a928ec54741 100644
--- a/sound/soc/codecs/wm_adsp.h
+++ b/sound/soc/codecs/wm_adsp.h
@@ -112,5 +112,10 @@ extern int wm_adsp_compr_set_params(struct snd_compr_stream *stream,
112extern int wm_adsp_compr_get_caps(struct snd_compr_stream *stream, 112extern int wm_adsp_compr_get_caps(struct snd_compr_stream *stream,
113 struct snd_compr_caps *caps); 113 struct snd_compr_caps *caps);
114extern int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd); 114extern int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd);
115extern int wm_adsp_compr_handle_irq(struct wm_adsp *dsp);
116extern int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
117 struct snd_compr_tstamp *tstamp);
118extern int wm_adsp_compr_copy(struct snd_compr_stream *stream,
119 char __user *buf, size_t count);
115 120
116#endif 121#endif
diff --git a/sound/soc/dwc/designware_i2s.c b/sound/soc/dwc/designware_i2s.c
index 825a1f480aab..ce664c239be3 100644
--- a/sound/soc/dwc/designware_i2s.c
+++ b/sound/soc/dwc/designware_i2s.c
@@ -500,6 +500,10 @@ static int dw_configure_dai(struct dw_i2s_dev *dev,
500 u32 comp2 = i2s_read_reg(dev->i2s_base, dev->i2s_reg_comp2); 500 u32 comp2 = i2s_read_reg(dev->i2s_base, dev->i2s_reg_comp2);
501 u32 idx; 501 u32 idx;
502 502
503 if (dev->capability & DWC_I2S_RECORD &&
504 dev->quirks & DW_I2S_QUIRK_COMP_PARAM1)
505 comp1 = comp1 & ~BIT(5);
506
503 if (COMP1_TX_ENABLED(comp1)) { 507 if (COMP1_TX_ENABLED(comp1)) {
504 dev_dbg(dev->dev, " designware: play supported\n"); 508 dev_dbg(dev->dev, " designware: play supported\n");
505 idx = COMP1_TX_WORDSIZE_0(comp1); 509 idx = COMP1_TX_WORDSIZE_0(comp1);
diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c
index dd1263b95dc7..c1a0e01cb8e7 100644
--- a/sound/soc/fsl/fsl_asrc.c
+++ b/sound/soc/fsl/fsl_asrc.c
@@ -996,6 +996,9 @@ static int fsl_asrc_suspend(struct device *dev)
996{ 996{
997 struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); 997 struct fsl_asrc *asrc_priv = dev_get_drvdata(dev);
998 998
999 regmap_read(asrc_priv->regmap, REG_ASRCFG,
1000 &asrc_priv->regcache_cfg);
1001
999 regcache_cache_only(asrc_priv->regmap, true); 1002 regcache_cache_only(asrc_priv->regmap, true);
1000 regcache_mark_dirty(asrc_priv->regmap); 1003 regcache_mark_dirty(asrc_priv->regmap);
1001 1004
@@ -1016,6 +1019,10 @@ static int fsl_asrc_resume(struct device *dev)
1016 regcache_cache_only(asrc_priv->regmap, false); 1019 regcache_cache_only(asrc_priv->regmap, false);
1017 regcache_sync(asrc_priv->regmap); 1020 regcache_sync(asrc_priv->regmap);
1018 1021
1022 regmap_update_bits(asrc_priv->regmap, REG_ASRCFG,
1023 ASRCFG_NDPRi_ALL_MASK | ASRCFG_POSTMODi_ALL_MASK |
1024 ASRCFG_PREMODi_ALL_MASK, asrc_priv->regcache_cfg);
1025
1019 /* Restart enabled pairs */ 1026 /* Restart enabled pairs */
1020 regmap_update_bits(asrc_priv->regmap, REG_ASRCTR, 1027 regmap_update_bits(asrc_priv->regmap, REG_ASRCTR,
1021 ASRCTR_ASRCEi_ALL_MASK, asrctr); 1028 ASRCTR_ASRCEi_ALL_MASK, asrctr);
diff --git a/sound/soc/fsl/fsl_asrc.h b/sound/soc/fsl/fsl_asrc.h
index 68802cdc3f28..0f163abe4ba3 100644
--- a/sound/soc/fsl/fsl_asrc.h
+++ b/sound/soc/fsl/fsl_asrc.h
@@ -132,10 +132,13 @@
132#define ASRCFG_INIRQi (1 << ASRCFG_INIRQi_SHIFT(i)) 132#define ASRCFG_INIRQi (1 << ASRCFG_INIRQi_SHIFT(i))
133#define ASRCFG_NDPRi_SHIFT(i) (18 + i) 133#define ASRCFG_NDPRi_SHIFT(i) (18 + i)
134#define ASRCFG_NDPRi_MASK(i) (1 << ASRCFG_NDPRi_SHIFT(i)) 134#define ASRCFG_NDPRi_MASK(i) (1 << ASRCFG_NDPRi_SHIFT(i))
135#define ASRCFG_NDPRi_ALL_SHIFT 18
136#define ASRCFG_NDPRi_ALL_MASK (7 << ASRCFG_NDPRi_ALL_SHIFT)
135#define ASRCFG_NDPRi (1 << ASRCFG_NDPRi_SHIFT(i)) 137#define ASRCFG_NDPRi (1 << ASRCFG_NDPRi_SHIFT(i))
136#define ASRCFG_POSTMODi_SHIFT(i) (8 + (i << 2)) 138#define ASRCFG_POSTMODi_SHIFT(i) (8 + (i << 2))
137#define ASRCFG_POSTMODi_WIDTH 2 139#define ASRCFG_POSTMODi_WIDTH 2
138#define ASRCFG_POSTMODi_MASK(i) (((1 << ASRCFG_POSTMODi_WIDTH) - 1) << ASRCFG_POSTMODi_SHIFT(i)) 140#define ASRCFG_POSTMODi_MASK(i) (((1 << ASRCFG_POSTMODi_WIDTH) - 1) << ASRCFG_POSTMODi_SHIFT(i))
141#define ASRCFG_POSTMODi_ALL_MASK (ASRCFG_POSTMODi_MASK(0) | ASRCFG_POSTMODi_MASK(1) | ASRCFG_POSTMODi_MASK(2))
139#define ASRCFG_POSTMOD(i, v) ((v) << ASRCFG_POSTMODi_SHIFT(i)) 142#define ASRCFG_POSTMOD(i, v) ((v) << ASRCFG_POSTMODi_SHIFT(i))
140#define ASRCFG_POSTMODi_UP(i) (0 << ASRCFG_POSTMODi_SHIFT(i)) 143#define ASRCFG_POSTMODi_UP(i) (0 << ASRCFG_POSTMODi_SHIFT(i))
141#define ASRCFG_POSTMODi_DCON(i) (1 << ASRCFG_POSTMODi_SHIFT(i)) 144#define ASRCFG_POSTMODi_DCON(i) (1 << ASRCFG_POSTMODi_SHIFT(i))
@@ -143,6 +146,7 @@
143#define ASRCFG_PREMODi_SHIFT(i) (6 + (i << 2)) 146#define ASRCFG_PREMODi_SHIFT(i) (6 + (i << 2))
144#define ASRCFG_PREMODi_WIDTH 2 147#define ASRCFG_PREMODi_WIDTH 2
145#define ASRCFG_PREMODi_MASK(i) (((1 << ASRCFG_PREMODi_WIDTH) - 1) << ASRCFG_PREMODi_SHIFT(i)) 148#define ASRCFG_PREMODi_MASK(i) (((1 << ASRCFG_PREMODi_WIDTH) - 1) << ASRCFG_PREMODi_SHIFT(i))
149#define ASRCFG_PREMODi_ALL_MASK (ASRCFG_PREMODi_MASK(0) | ASRCFG_PREMODi_MASK(1) | ASRCFG_PREMODi_MASK(2))
146#define ASRCFG_PREMOD(i, v) ((v) << ASRCFG_PREMODi_SHIFT(i)) 150#define ASRCFG_PREMOD(i, v) ((v) << ASRCFG_PREMODi_SHIFT(i))
147#define ASRCFG_PREMODi_UP(i) (0 << ASRCFG_PREMODi_SHIFT(i)) 151#define ASRCFG_PREMODi_UP(i) (0 << ASRCFG_PREMODi_SHIFT(i))
148#define ASRCFG_PREMODi_DCON(i) (1 << ASRCFG_PREMODi_SHIFT(i)) 152#define ASRCFG_PREMODi_DCON(i) (1 << ASRCFG_PREMODi_SHIFT(i))
@@ -434,6 +438,7 @@ struct fsl_asrc_pair {
434 * @channel_avail: non-occupied channel numbers 438 * @channel_avail: non-occupied channel numbers
435 * @asrc_rate: default sample rate for ASoC Back-Ends 439 * @asrc_rate: default sample rate for ASoC Back-Ends
436 * @asrc_width: default sample width for ASoC Back-Ends 440 * @asrc_width: default sample width for ASoC Back-Ends
441 * @regcache_cfg: store register value of REG_ASRCFG
437 */ 442 */
438struct fsl_asrc { 443struct fsl_asrc {
439 struct snd_dmaengine_dai_dma_data dma_params_rx; 444 struct snd_dmaengine_dai_dma_data dma_params_rx;
@@ -453,6 +458,8 @@ struct fsl_asrc {
453 458
454 int asrc_rate; 459 int asrc_rate;
455 int asrc_width; 460 int asrc_width;
461
462 u32 regcache_cfg;
456}; 463};
457 464
458extern struct snd_soc_platform_driver fsl_asrc_platform; 465extern struct snd_soc_platform_driver fsl_asrc_platform;
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index e3abad5f980a..40dfd8a36484 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -146,6 +146,7 @@ static bool fsl_ssi_volatile_reg(struct device *dev, unsigned int reg)
146 case CCSR_SSI_SRX1: 146 case CCSR_SSI_SRX1:
147 case CCSR_SSI_SISR: 147 case CCSR_SSI_SISR:
148 case CCSR_SSI_SFCSR: 148 case CCSR_SSI_SFCSR:
149 case CCSR_SSI_SACNT:
149 case CCSR_SSI_SACADD: 150 case CCSR_SSI_SACADD:
150 case CCSR_SSI_SACDAT: 151 case CCSR_SSI_SACDAT:
151 case CCSR_SSI_SATAG: 152 case CCSR_SSI_SATAG:
@@ -156,6 +157,21 @@ static bool fsl_ssi_volatile_reg(struct device *dev, unsigned int reg)
156 } 157 }
157} 158}
158 159
160static bool fsl_ssi_precious_reg(struct device *dev, unsigned int reg)
161{
162 switch (reg) {
163 case CCSR_SSI_SRX0:
164 case CCSR_SSI_SRX1:
165 case CCSR_SSI_SISR:
166 case CCSR_SSI_SACADD:
167 case CCSR_SSI_SACDAT:
168 case CCSR_SSI_SATAG:
169 return true;
170 default:
171 return false;
172 }
173}
174
159static bool fsl_ssi_writeable_reg(struct device *dev, unsigned int reg) 175static bool fsl_ssi_writeable_reg(struct device *dev, unsigned int reg)
160{ 176{
161 switch (reg) { 177 switch (reg) {
@@ -178,6 +194,7 @@ static const struct regmap_config fsl_ssi_regconfig = {
178 .num_reg_defaults = ARRAY_SIZE(fsl_ssi_reg_defaults), 194 .num_reg_defaults = ARRAY_SIZE(fsl_ssi_reg_defaults),
179 .readable_reg = fsl_ssi_readable_reg, 195 .readable_reg = fsl_ssi_readable_reg,
180 .volatile_reg = fsl_ssi_volatile_reg, 196 .volatile_reg = fsl_ssi_volatile_reg,
197 .precious_reg = fsl_ssi_precious_reg,
181 .writeable_reg = fsl_ssi_writeable_reg, 198 .writeable_reg = fsl_ssi_writeable_reg,
182 .cache_type = REGCACHE_RBTREE, 199 .cache_type = REGCACHE_RBTREE,
183}; 200};
@@ -239,8 +256,9 @@ struct fsl_ssi_private {
239 unsigned int baudclk_streams; 256 unsigned int baudclk_streams;
240 unsigned int bitclk_freq; 257 unsigned int bitclk_freq;
241 258
242 /*regcache for SFCSR*/ 259 /* regcache for volatile regs */
243 u32 regcache_sfcsr; 260 u32 regcache_sfcsr;
261 u32 regcache_sacnt;
244 262
245 /* DMA params */ 263 /* DMA params */
246 struct snd_dmaengine_dai_dma_data dma_params_tx; 264 struct snd_dmaengine_dai_dma_data dma_params_tx;
@@ -1587,6 +1605,8 @@ static int fsl_ssi_suspend(struct device *dev)
1587 1605
1588 regmap_read(regs, CCSR_SSI_SFCSR, 1606 regmap_read(regs, CCSR_SSI_SFCSR,
1589 &ssi_private->regcache_sfcsr); 1607 &ssi_private->regcache_sfcsr);
1608 regmap_read(regs, CCSR_SSI_SACNT,
1609 &ssi_private->regcache_sacnt);
1590 1610
1591 regcache_cache_only(regs, true); 1611 regcache_cache_only(regs, true);
1592 regcache_mark_dirty(regs); 1612 regcache_mark_dirty(regs);
@@ -1605,6 +1625,8 @@ static int fsl_ssi_resume(struct device *dev)
1605 CCSR_SSI_SFCSR_RFWM1_MASK | CCSR_SSI_SFCSR_TFWM1_MASK | 1625 CCSR_SSI_SFCSR_RFWM1_MASK | CCSR_SSI_SFCSR_TFWM1_MASK |
1606 CCSR_SSI_SFCSR_RFWM0_MASK | CCSR_SSI_SFCSR_TFWM0_MASK, 1626 CCSR_SSI_SFCSR_RFWM0_MASK | CCSR_SSI_SFCSR_TFWM0_MASK,
1607 ssi_private->regcache_sfcsr); 1627 ssi_private->regcache_sfcsr);
1628 regmap_write(regs, CCSR_SSI_SACNT,
1629 ssi_private->regcache_sacnt);
1608 1630
1609 return regcache_sync(regs); 1631 return regcache_sync(regs);
1610} 1632}
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index 6f236f170cf5..ddf49f30b23f 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -189,8 +189,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
189{ 189{
190 struct device *dev = pdev->dev.parent; 190 struct device *dev = pdev->dev.parent;
191 /* ssi_pdev is the platform device for the SSI node that probed us */ 191 /* ssi_pdev is the platform device for the SSI node that probed us */
192 struct platform_device *ssi_pdev = 192 struct platform_device *ssi_pdev = to_platform_device(dev);
193 container_of(dev, struct platform_device, dev);
194 struct device_node *np = ssi_pdev->dev.of_node; 193 struct device_node *np = ssi_pdev->dev.of_node;
195 struct device_node *codec_np = NULL; 194 struct device_node *codec_np = NULL;
196 struct mpc8610_hpcd_data *machine_data; 195 struct mpc8610_hpcd_data *machine_data;
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
index 747aab0602bd..a1f780ecadf5 100644
--- a/sound/soc/fsl/p1022_ds.c
+++ b/sound/soc/fsl/p1022_ds.c
@@ -199,8 +199,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
199{ 199{
200 struct device *dev = pdev->dev.parent; 200 struct device *dev = pdev->dev.parent;
201 /* ssi_pdev is the platform device for the SSI node that probed us */ 201 /* ssi_pdev is the platform device for the SSI node that probed us */
202 struct platform_device *ssi_pdev = 202 struct platform_device *ssi_pdev = to_platform_device(dev);
203 container_of(dev, struct platform_device, dev);
204 struct device_node *np = ssi_pdev->dev.of_node; 203 struct device_node *np = ssi_pdev->dev.of_node;
205 struct device_node *codec_np = NULL; 204 struct device_node *codec_np = NULL;
206 struct machine_data *mdata; 205 struct machine_data *mdata;
diff --git a/sound/soc/fsl/p1022_rdk.c b/sound/soc/fsl/p1022_rdk.c
index 1dd49e5f9675..d4d88a8cb9c0 100644
--- a/sound/soc/fsl/p1022_rdk.c
+++ b/sound/soc/fsl/p1022_rdk.c
@@ -203,8 +203,7 @@ static int p1022_rdk_probe(struct platform_device *pdev)
203{ 203{
204 struct device *dev = pdev->dev.parent; 204 struct device *dev = pdev->dev.parent;
205 /* ssi_pdev is the platform device for the SSI node that probed us */ 205 /* ssi_pdev is the platform device for the SSI node that probed us */
206 struct platform_device *ssi_pdev = 206 struct platform_device *ssi_pdev = to_platform_device(dev);
207 container_of(dev, struct platform_device, dev);
208 struct device_node *np = ssi_pdev->dev.of_node; 207 struct device_node *np = ssi_pdev->dev.of_node;
209 struct device_node *codec_np = NULL; 208 struct device_node *codec_np = NULL;
210 struct machine_data *mdata; 209 struct machine_data *mdata;
diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
index 337e178c1acb..803f95e40679 100644
--- a/sound/soc/intel/Kconfig
+++ b/sound/soc/intel/Kconfig
@@ -103,6 +103,18 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH
103 Say Y if you have such a device 103 Say Y if you have such a device
104 If unsure select "N". 104 If unsure select "N".
105 105
106config SND_SOC_INTEL_BYTCR_RT5651_MACH
107 tristate "ASoC Audio driver for Intel Baytrail and Baytrail-CR with RT5651 codec"
108 depends on X86 && I2C
109 select SND_SOC_RT5651
110 select SND_SST_MFLD_PLATFORM
111 select SND_SST_IPC_ACPI
112 help
113 This adds support for ASoC machine driver for Intel(R) Baytrail and Baytrail-CR
114 platforms with RT5651 audio codec.
115 Say Y if you have such a device
116 If unsure select "N".
117
106config SND_SOC_INTEL_CHT_BSW_RT5672_MACH 118config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
107 tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec" 119 tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec"
108 depends on X86_INTEL_LPSS && I2C 120 depends on X86_INTEL_LPSS && I2C
diff --git a/sound/soc/intel/atom/sst/sst_acpi.c b/sound/soc/intel/atom/sst/sst_acpi.c
index f424460b917e..4fce03fc1870 100644
--- a/sound/soc/intel/atom/sst/sst_acpi.c
+++ b/sound/soc/intel/atom/sst/sst_acpi.c
@@ -247,16 +247,23 @@ static int sst_acpi_probe(struct platform_device *pdev)
247 247
248 dev_dbg(dev, "ACPI device id: %x\n", dev_id); 248 dev_dbg(dev, "ACPI device id: %x\n", dev_id);
249 249
250 plat_dev = platform_device_register_data(dev, pdata->platform, -1, NULL, 0); 250 plat_dev = platform_device_register_data(dev, pdata->platform, -1,
251 NULL, 0);
251 if (IS_ERR(plat_dev)) { 252 if (IS_ERR(plat_dev)) {
252 dev_err(dev, "Failed to create machine device: %s\n", pdata->platform); 253 dev_err(dev, "Failed to create machine device: %s\n",
254 pdata->platform);
253 return PTR_ERR(plat_dev); 255 return PTR_ERR(plat_dev);
254 } 256 }
255 257
256 /* Create platform device for sst machine driver */ 258 /*
257 mdev = platform_device_register_data(dev, mach->drv_name, -1, NULL, 0); 259 * Create platform device for sst machine driver,
260 * pass machine info as pdata
261 */
262 mdev = platform_device_register_data(dev, mach->drv_name, -1,
263 (const void *)mach, sizeof(*mach));
258 if (IS_ERR(mdev)) { 264 if (IS_ERR(mdev)) {
259 dev_err(dev, "Failed to create machine device: %s\n", mach->drv_name); 265 dev_err(dev, "Failed to create machine device: %s\n",
266 mach->drv_name);
260 return PTR_ERR(mdev); 267 return PTR_ERR(mdev);
261 } 268 }
262 269
@@ -316,6 +323,12 @@ static int sst_acpi_remove(struct platform_device *pdev)
316static struct sst_acpi_mach sst_acpi_bytcr[] = { 323static struct sst_acpi_mach sst_acpi_bytcr[] = {
317 {"10EC5640", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL, 324 {"10EC5640", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL,
318 &byt_rvp_platform_data }, 325 &byt_rvp_platform_data },
326 {"10EC5642", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL,
327 &byt_rvp_platform_data },
328 {"INTCCFFD", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL,
329 &byt_rvp_platform_data },
330 {"10EC5651", "bytcr_rt5651", "intel/fw_sst_0f28.bin", "bytcr_rt5651", NULL,
331 &byt_rvp_platform_data },
319 {}, 332 {},
320}; 333};
321 334
diff --git a/sound/soc/intel/boards/Makefile b/sound/soc/intel/boards/Makefile
index 2485ea9434ad..3310c0f9c356 100644
--- a/sound/soc/intel/boards/Makefile
+++ b/sound/soc/intel/boards/Makefile
@@ -3,6 +3,7 @@ snd-soc-sst-byt-rt5640-mach-objs := byt-rt5640.o
3snd-soc-sst-byt-max98090-mach-objs := byt-max98090.o 3snd-soc-sst-byt-max98090-mach-objs := byt-max98090.o
4snd-soc-sst-broadwell-objs := broadwell.o 4snd-soc-sst-broadwell-objs := broadwell.o
5snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o 5snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o
6snd-soc-sst-bytcr-rt5651-objs := bytcr_rt5651.o
6snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o 7snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o
7snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o 8snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o
8snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o 9snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o
@@ -15,6 +16,7 @@ obj-$(CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH) += snd-soc-sst-byt-rt5640-mach.o
15obj-$(CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH) += snd-soc-sst-byt-max98090-mach.o 16obj-$(CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH) += snd-soc-sst-byt-max98090-mach.o
16obj-$(CONFIG_SND_SOC_INTEL_BROADWELL_MACH) += snd-soc-sst-broadwell.o 17obj-$(CONFIG_SND_SOC_INTEL_BROADWELL_MACH) += snd-soc-sst-broadwell.o
17obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH) += snd-soc-sst-bytcr-rt5640.o 18obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH) += snd-soc-sst-bytcr-rt5640.o
19obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH) += snd-soc-sst-bytcr-rt5651.o
18obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o 20obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o
19obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o 21obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o
20obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o 22obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o
diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
index a81389d10e17..9a1752df45a9 100644
--- a/sound/soc/intel/boards/bytcr_rt5640.c
+++ b/sound/soc/intel/boards/bytcr_rt5640.c
@@ -30,6 +30,7 @@
30#include <sound/jack.h> 30#include <sound/jack.h>
31#include "../../codecs/rt5640.h" 31#include "../../codecs/rt5640.h"
32#include "../atom/sst-atom-controls.h" 32#include "../atom/sst-atom-controls.h"
33#include "../common/sst-acpi.h"
33 34
34static const struct snd_soc_dapm_widget byt_rt5640_widgets[] = { 35static const struct snd_soc_dapm_widget byt_rt5640_widgets[] = {
35 SND_SOC_DAPM_HP("Headphone", NULL), 36 SND_SOC_DAPM_HP("Headphone", NULL),
@@ -140,6 +141,14 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
140 .driver_data = (unsigned long *)(BYT_RT5640_DMIC2_MAP | 141 .driver_data = (unsigned long *)(BYT_RT5640_DMIC2_MAP |
141 BYT_RT5640_DMIC_EN), 142 BYT_RT5640_DMIC_EN),
142 }, 143 },
144 {
145 .callback = byt_rt5640_quirk_cb,
146 .matches = {
147 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
148 DMI_MATCH(DMI_PRODUCT_NAME, "HP ElitePad 1000 G2"),
149 },
150 .driver_data = (unsigned long *)BYT_RT5640_IN1_MAP,
151 },
143 {} 152 {}
144}; 153};
145 154
@@ -153,6 +162,11 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime)
153 162
154 card->dapm.idle_bias_off = true; 163 card->dapm.idle_bias_off = true;
155 164
165 rt5640_sel_asrc_clk_src(codec,
166 RT5640_DA_STEREO_FILTER |
167 RT5640_AD_STEREO_FILTER,
168 RT5640_CLK_SEL_ASRC);
169
156 ret = snd_soc_add_card_controls(card, byt_rt5640_controls, 170 ret = snd_soc_add_card_controls(card, byt_rt5640_controls,
157 ARRAY_SIZE(byt_rt5640_controls)); 171 ARRAY_SIZE(byt_rt5640_controls));
158 if (ret) { 172 if (ret) {
@@ -296,7 +310,7 @@ static struct snd_soc_dai_link byt_rt5640_dais[] = {
296 .platform_name = "sst-mfld-platform", 310 .platform_name = "sst-mfld-platform",
297 .no_pcm = 1, 311 .no_pcm = 1,
298 .codec_dai_name = "rt5640-aif1", 312 .codec_dai_name = "rt5640-aif1",
299 .codec_name = "i2c-10EC5640:00", 313 .codec_name = "i2c-10EC5640:00", /* overwritten with HID */
300 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF 314 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
301 | SND_SOC_DAIFMT_CBS_CFS, 315 | SND_SOC_DAIFMT_CBS_CFS,
302 .be_hw_params_fixup = byt_rt5640_codec_fixup, 316 .be_hw_params_fixup = byt_rt5640_codec_fixup,
@@ -321,12 +335,21 @@ static struct snd_soc_card byt_rt5640_card = {
321 .fully_routed = true, 335 .fully_routed = true,
322}; 336};
323 337
338static char byt_rt5640_codec_name[16]; /* i2c-<HID>:00 with HID being 8 chars */
339
324static int snd_byt_rt5640_mc_probe(struct platform_device *pdev) 340static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
325{ 341{
326 int ret_val = 0; 342 int ret_val = 0;
343 struct sst_acpi_mach *mach;
327 344
328 /* register the soc card */ 345 /* register the soc card */
329 byt_rt5640_card.dev = &pdev->dev; 346 byt_rt5640_card.dev = &pdev->dev;
347 mach = byt_rt5640_card.dev->platform_data;
348
349 /* fixup codec name based on HID */
350 snprintf(byt_rt5640_codec_name, sizeof(byt_rt5640_codec_name),
351 "%s%s%s", "i2c-", mach->id, ":00");
352 byt_rt5640_dais[MERR_DPCM_COMPR+1].codec_name = byt_rt5640_codec_name;
330 353
331 ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5640_card); 354 ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5640_card);
332 355
diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
new file mode 100644
index 000000000000..1c95ccc886c4
--- /dev/null
+++ b/sound/soc/intel/boards/bytcr_rt5651.c
@@ -0,0 +1,332 @@
1/*
2 * bytcr_rt5651.c - ASoc Machine driver for Intel Byt CR platform
3 * (derived from bytcr_rt5640.c)
4 *
5 * Copyright (C) 2015 Intel Corp
6 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 */
19
20#include <linux/init.h>
21#include <linux/module.h>
22#include <linux/platform_device.h>
23#include <linux/acpi.h>
24#include <linux/device.h>
25#include <linux/dmi.h>
26#include <linux/slab.h>
27#include <sound/pcm.h>
28#include <sound/pcm_params.h>
29#include <sound/soc.h>
30#include <sound/jack.h>
31#include "../../codecs/rt5651.h"
32#include "../atom/sst-atom-controls.h"
33
34static const struct snd_soc_dapm_widget byt_rt5651_widgets[] = {
35 SND_SOC_DAPM_HP("Headphone", NULL),
36 SND_SOC_DAPM_MIC("Headset Mic", NULL),
37 SND_SOC_DAPM_MIC("Internal Mic", NULL),
38 SND_SOC_DAPM_SPK("Speaker", NULL),
39};
40
41static const struct snd_soc_dapm_route byt_rt5651_audio_map[] = {
42 {"AIF1 Playback", NULL, "ssp2 Tx"},
43 {"ssp2 Tx", NULL, "codec_out0"},
44 {"ssp2 Tx", NULL, "codec_out1"},
45 {"codec_in0", NULL, "ssp2 Rx"},
46 {"codec_in1", NULL, "ssp2 Rx"},
47 {"ssp2 Rx", NULL, "AIF1 Capture"},
48
49 {"Headset Mic", NULL, "micbias1"}, /* lowercase for rt5651 */
50 {"IN2P", NULL, "Headset Mic"},
51 {"Headphone", NULL, "HPOL"},
52 {"Headphone", NULL, "HPOR"},
53 {"Speaker", NULL, "LOUTL"},
54 {"Speaker", NULL, "LOUTR"},
55};
56
57static const struct snd_soc_dapm_route byt_rt5651_intmic_dmic1_map[] = {
58 {"DMIC1", NULL, "Internal Mic"},
59};
60
61static const struct snd_soc_dapm_route byt_rt5651_intmic_dmic2_map[] = {
62 {"DMIC2", NULL, "Internal Mic"},
63};
64
65static const struct snd_soc_dapm_route byt_rt5651_intmic_in1_map[] = {
66 {"Internal Mic", NULL, "micbias1"},
67 {"IN1P", NULL, "Internal Mic"},
68};
69
70enum {
71 BYT_RT5651_DMIC1_MAP,
72 BYT_RT5651_DMIC2_MAP,
73 BYT_RT5651_IN1_MAP,
74};
75
76#define BYT_RT5651_MAP(quirk) ((quirk) & 0xff)
77#define BYT_RT5651_DMIC_EN BIT(16)
78
79static unsigned long byt_rt5651_quirk = BYT_RT5651_DMIC1_MAP |
80 BYT_RT5651_DMIC_EN;
81
82static const struct snd_kcontrol_new byt_rt5651_controls[] = {
83 SOC_DAPM_PIN_SWITCH("Headphone"),
84 SOC_DAPM_PIN_SWITCH("Headset Mic"),
85 SOC_DAPM_PIN_SWITCH("Internal Mic"),
86 SOC_DAPM_PIN_SWITCH("Speaker"),
87};
88
89static int byt_rt5651_aif1_hw_params(struct snd_pcm_substream *substream,
90 struct snd_pcm_hw_params *params)
91{
92 struct snd_soc_pcm_runtime *rtd = substream->private_data;
93 struct snd_soc_dai *codec_dai = rtd->codec_dai;
94 int ret;
95
96 snd_soc_dai_set_bclk_ratio(codec_dai, 50);
97
98 ret = snd_soc_dai_set_sysclk(codec_dai, RT5651_SCLK_S_PLL1,
99 params_rate(params) * 512,
100 SND_SOC_CLOCK_IN);
101 if (ret < 0) {
102 dev_err(rtd->dev, "can't set codec clock %d\n", ret);
103 return ret;
104 }
105
106 ret = snd_soc_dai_set_pll(codec_dai, 0, RT5651_PLL1_S_BCLK1,
107 params_rate(params) * 50,
108 params_rate(params) * 512);
109 if (ret < 0) {
110 dev_err(rtd->dev, "can't set codec pll: %d\n", ret);
111 return ret;
112 }
113
114 return 0;
115}
116
117static const struct dmi_system_id byt_rt5651_quirk_table[] = {
118 {}
119};
120
121static int byt_rt5651_init(struct snd_soc_pcm_runtime *runtime)
122{
123 int ret;
124 struct snd_soc_card *card = runtime->card;
125 const struct snd_soc_dapm_route *custom_map;
126 int num_routes;
127
128 card->dapm.idle_bias_off = true;
129
130 dmi_check_system(byt_rt5651_quirk_table);
131 switch (BYT_RT5651_MAP(byt_rt5651_quirk)) {
132 case BYT_RT5651_IN1_MAP:
133 custom_map = byt_rt5651_intmic_in1_map;
134 num_routes = ARRAY_SIZE(byt_rt5651_intmic_in1_map);
135 break;
136 case BYT_RT5651_DMIC2_MAP:
137 custom_map = byt_rt5651_intmic_dmic2_map;
138 num_routes = ARRAY_SIZE(byt_rt5651_intmic_dmic2_map);
139 break;
140 default:
141 custom_map = byt_rt5651_intmic_dmic1_map;
142 num_routes = ARRAY_SIZE(byt_rt5651_intmic_dmic1_map);
143 }
144
145 ret = snd_soc_add_card_controls(card, byt_rt5651_controls,
146 ARRAY_SIZE(byt_rt5651_controls));
147 if (ret) {
148 dev_err(card->dev, "unable to add card controls\n");
149 return ret;
150 }
151 snd_soc_dapm_ignore_suspend(&card->dapm, "Headphone");
152 snd_soc_dapm_ignore_suspend(&card->dapm, "Speaker");
153
154 return ret;
155}
156
157static const struct snd_soc_pcm_stream byt_rt5651_dai_params = {
158 .formats = SNDRV_PCM_FMTBIT_S24_LE,
159 .rate_min = 48000,
160 .rate_max = 48000,
161 .channels_min = 2,
162 .channels_max = 2,
163};
164
165static int byt_rt5651_codec_fixup(struct snd_soc_pcm_runtime *rtd,
166 struct snd_pcm_hw_params *params)
167{
168 struct snd_interval *rate = hw_param_interval(params,
169 SNDRV_PCM_HW_PARAM_RATE);
170 struct snd_interval *channels = hw_param_interval(params,
171 SNDRV_PCM_HW_PARAM_CHANNELS);
172 int ret;
173
174 /* The DSP will covert the FE rate to 48k, stereo, 24bits */
175 rate->min = rate->max = 48000;
176 channels->min = channels->max = 2;
177
178 /* set SSP2 to 24-bit */
179 params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
180
181 /*
182 * Default mode for SSP configuration is TDM 4 slot, override config
183 * with explicit setting to I2S 2ch 24-bit. The word length is set with
184 * dai_set_tdm_slot() since there is no other API exposed
185 */
186 ret = snd_soc_dai_set_fmt(rtd->cpu_dai,
187 SND_SOC_DAIFMT_I2S |
188 SND_SOC_DAIFMT_NB_IF |
189 SND_SOC_DAIFMT_CBS_CFS
190 );
191
192 if (ret < 0) {
193 dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
194 return ret;
195 }
196
197 ret = snd_soc_dai_set_tdm_slot(rtd->cpu_dai, 0x3, 0x3, 2, 24);
198 if (ret < 0) {
199 dev_err(rtd->dev, "can't set I2S config, err %d\n", ret);
200 return ret;
201 }
202
203 return 0;
204}
205
206static unsigned int rates_48000[] = {
207 48000,
208};
209
210static struct snd_pcm_hw_constraint_list constraints_48000 = {
211 .count = ARRAY_SIZE(rates_48000),
212 .list = rates_48000,
213};
214
215static int byt_rt5651_aif1_startup(struct snd_pcm_substream *substream)
216{
217 return snd_pcm_hw_constraint_list(substream->runtime, 0,
218 SNDRV_PCM_HW_PARAM_RATE,
219 &constraints_48000);
220}
221
222static struct snd_soc_ops byt_rt5651_aif1_ops = {
223 .startup = byt_rt5651_aif1_startup,
224};
225
226static struct snd_soc_ops byt_rt5651_be_ssp2_ops = {
227 .hw_params = byt_rt5651_aif1_hw_params,
228};
229
230static struct snd_soc_dai_link byt_rt5651_dais[] = {
231 [MERR_DPCM_AUDIO] = {
232 .name = "Audio Port",
233 .stream_name = "Audio",
234 .cpu_dai_name = "media-cpu-dai",
235 .codec_dai_name = "snd-soc-dummy-dai",
236 .codec_name = "snd-soc-dummy",
237 .platform_name = "sst-mfld-platform",
238 .ignore_suspend = 1,
239 .nonatomic = true,
240 .dynamic = 1,
241 .dpcm_playback = 1,
242 .dpcm_capture = 1,
243 .ops = &byt_rt5651_aif1_ops,
244 },
245 [MERR_DPCM_DEEP_BUFFER] = {
246 .name = "Deep-Buffer Audio Port",
247 .stream_name = "Deep-Buffer Audio",
248 .cpu_dai_name = "deepbuffer-cpu-dai",
249 .codec_dai_name = "snd-soc-dummy-dai",
250 .codec_name = "snd-soc-dummy",
251 .platform_name = "sst-mfld-platform",
252 .ignore_suspend = 1,
253 .nonatomic = true,
254 .dynamic = 1,
255 .dpcm_playback = 1,
256 .ops = &byt_rt5651_aif1_ops,
257 },
258 [MERR_DPCM_COMPR] = {
259 .name = "Compressed Port",
260 .stream_name = "Compress",
261 .cpu_dai_name = "compress-cpu-dai",
262 .codec_dai_name = "snd-soc-dummy-dai",
263 .codec_name = "snd-soc-dummy",
264 .platform_name = "sst-mfld-platform",
265 },
266 /* CODEC<->CODEC link */
267 /* back ends */
268 {
269 .name = "SSP2-Codec",
270 .be_id = 1,
271 .cpu_dai_name = "ssp2-port",
272 .platform_name = "sst-mfld-platform",
273 .no_pcm = 1,
274 .codec_dai_name = "rt5651-aif1",
275 .codec_name = "i2c-10EC5651:00",
276 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
277 | SND_SOC_DAIFMT_CBS_CFS,
278 .be_hw_params_fixup = byt_rt5651_codec_fixup,
279 .ignore_suspend = 1,
280 .nonatomic = true,
281 .dpcm_playback = 1,
282 .dpcm_capture = 1,
283 .init = byt_rt5651_init,
284 .ops = &byt_rt5651_be_ssp2_ops,
285 },
286};
287
288/* SoC card */
289static struct snd_soc_card byt_rt5651_card = {
290 .name = "bytcr-rt5651",
291 .owner = THIS_MODULE,
292 .dai_link = byt_rt5651_dais,
293 .num_links = ARRAY_SIZE(byt_rt5651_dais),
294 .dapm_widgets = byt_rt5651_widgets,
295 .num_dapm_widgets = ARRAY_SIZE(byt_rt5651_widgets),
296 .dapm_routes = byt_rt5651_audio_map,
297 .num_dapm_routes = ARRAY_SIZE(byt_rt5651_audio_map),
298 .fully_routed = true,
299};
300
301static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
302{
303 int ret_val = 0;
304
305 /* register the soc card */
306 byt_rt5651_card.dev = &pdev->dev;
307
308 ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5651_card);
309
310 if (ret_val) {
311 dev_err(&pdev->dev, "devm_snd_soc_register_card failed %d\n",
312 ret_val);
313 return ret_val;
314 }
315 platform_set_drvdata(pdev, &byt_rt5651_card);
316 return ret_val;
317}
318
319static struct platform_driver snd_byt_rt5651_mc_driver = {
320 .driver = {
321 .name = "bytcr_rt5651",
322 .pm = &snd_soc_pm_ops,
323 },
324 .probe = snd_byt_rt5651_mc_probe,
325};
326
327module_platform_driver(snd_byt_rt5651_mc_driver);
328
329MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver for RT5651");
330MODULE_AUTHOR("Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>");
331MODULE_LICENSE("GPL v2");
332MODULE_ALIAS("platform:bytcr_rt5651");
diff --git a/sound/soc/intel/common/Makefile b/sound/soc/intel/common/Makefile
index 3b9332e7a094..668fdeee195e 100644
--- a/sound/soc/intel/common/Makefile
+++ b/sound/soc/intel/common/Makefile
@@ -1,5 +1,10 @@
1snd-soc-sst-dsp-objs := sst-dsp.o 1snd-soc-sst-dsp-objs := sst-dsp.o
2ifneq ($(CONFIG_SND_SST_IPC_ACPI),)
3snd-soc-sst-acpi-objs := sst-match-acpi.o
4else
2snd-soc-sst-acpi-objs := sst-acpi.o sst-match-acpi.o 5snd-soc-sst-acpi-objs := sst-acpi.o sst-match-acpi.o
6endif
7
3snd-soc-sst-ipc-objs := sst-ipc.o 8snd-soc-sst-ipc-objs := sst-ipc.o
4 9
5snd-soc-sst-dsp-$(CONFIG_DW_DMAC_CORE) += sst-firmware.o 10snd-soc-sst-dsp-$(CONFIG_DW_DMAC_CORE) += sst-firmware.o
diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
index b89ae6f7c096..f3553258091a 100644
--- a/sound/soc/intel/skylake/skl-pcm.c
+++ b/sound/soc/intel/skylake/skl-pcm.c
@@ -25,6 +25,8 @@
25#include <sound/soc.h> 25#include <sound/soc.h>
26#include "skl.h" 26#include "skl.h"
27#include "skl-topology.h" 27#include "skl-topology.h"
28#include "skl-sst-dsp.h"
29#include "skl-sst-ipc.h"
28 30
29#define HDA_MONO 1 31#define HDA_MONO 1
30#define HDA_STEREO 2 32#define HDA_STEREO 2
@@ -36,6 +38,7 @@ static struct snd_pcm_hardware azx_pcm_hw = {
36 SNDRV_PCM_INFO_BLOCK_TRANSFER | 38 SNDRV_PCM_INFO_BLOCK_TRANSFER |
37 SNDRV_PCM_INFO_MMAP_VALID | 39 SNDRV_PCM_INFO_MMAP_VALID |
38 SNDRV_PCM_INFO_PAUSE | 40 SNDRV_PCM_INFO_PAUSE |
41 SNDRV_PCM_INFO_RESUME |
39 SNDRV_PCM_INFO_SYNC_START | 42 SNDRV_PCM_INFO_SYNC_START |
40 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */ 43 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
41 SNDRV_PCM_INFO_HAS_LINK_ATIME | 44 SNDRV_PCM_INFO_HAS_LINK_ATIME |
@@ -272,6 +275,7 @@ static void skl_pcm_close(struct snd_pcm_substream *substream,
272 struct hdac_ext_stream *stream = get_hdac_ext_stream(substream); 275 struct hdac_ext_stream *stream = get_hdac_ext_stream(substream);
273 struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev); 276 struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);
274 struct skl_dma_params *dma_params = NULL; 277 struct skl_dma_params *dma_params = NULL;
278 struct skl *skl = ebus_to_skl(ebus);
275 279
276 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name); 280 dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name);
277 281
@@ -285,6 +289,16 @@ static void skl_pcm_close(struct snd_pcm_substream *substream,
285 snd_soc_dai_set_dma_data(dai, substream, NULL); 289 snd_soc_dai_set_dma_data(dai, substream, NULL);
286 skl_set_suspend_active(substream, dai, false); 290 skl_set_suspend_active(substream, dai, false);
287 291
292 /*
293 * check if close is for "Reference Pin" and set back the
294 * CGCTL.MISCBDCGE if disabled by driver
295 */
296 if (!strncmp(dai->name, "Reference Pin", 13) &&
297 skl->skl_sst->miscbdcg_disabled) {
298 skl->skl_sst->enable_miscbdcge(dai->dev, true);
299 skl->skl_sst->miscbdcg_disabled = false;
300 }
301
288 kfree(dma_params); 302 kfree(dma_params);
289} 303}
290 304
@@ -380,6 +394,15 @@ static int skl_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
380 switch (cmd) { 394 switch (cmd) {
381 case SNDRV_PCM_TRIGGER_RESUME: 395 case SNDRV_PCM_TRIGGER_RESUME:
382 skl_pcm_prepare(substream, dai); 396 skl_pcm_prepare(substream, dai);
397 /*
398 * enable DMA Resume enable bit for the stream, set the dpib
399 * & lpib position to resune before starting the DMA
400 */
401 snd_hdac_ext_stream_drsm_enable(ebus, true,
402 hdac_stream(stream)->index);
403 snd_hdac_ext_stream_set_dpibr(ebus, stream, stream->dpib);
404 snd_hdac_ext_stream_set_lpib(stream, stream->lpib);
405
383 case SNDRV_PCM_TRIGGER_START: 406 case SNDRV_PCM_TRIGGER_START:
384 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 407 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
385 /* 408 /*
@@ -408,8 +431,17 @@ static int skl_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
408 return ret; 431 return ret;
409 432
410 ret = skl_decoupled_trigger(substream, cmd); 433 ret = skl_decoupled_trigger(substream, cmd);
411 if (cmd == SNDRV_PCM_TRIGGER_SUSPEND) 434 if (cmd == SNDRV_PCM_TRIGGER_SUSPEND) {
435 /* save the dpib and lpib positions */
436 stream->dpib = readl(ebus->bus.remap_addr +
437 AZX_REG_VS_SDXDPIB_XBASE +
438 (AZX_REG_VS_SDXDPIB_XINTERVAL *
439 hdac_stream(stream)->index));
440
441 stream->lpib = snd_hdac_stream_get_pos_lpib(
442 hdac_stream(stream));
412 snd_hdac_ext_stream_decouple(ebus, stream, false); 443 snd_hdac_ext_stream_decouple(ebus, stream, false);
444 }
413 break; 445 break;
414 446
415 default: 447 default:
@@ -465,11 +497,6 @@ static int skl_link_pcm_prepare(struct snd_pcm_substream *substream,
465 struct snd_soc_dai *codec_dai = rtd->codec_dai; 497 struct snd_soc_dai *codec_dai = rtd->codec_dai;
466 struct hdac_ext_link *link; 498 struct hdac_ext_link *link;
467 499
468 if (link_dev->link_prepared) {
469 dev_dbg(dai->dev, "already stream is prepared - returning\n");
470 return 0;
471 }
472
473 dma_params = (struct skl_dma_params *) 500 dma_params = (struct skl_dma_params *)
474 snd_soc_dai_get_dma_data(codec_dai, substream); 501 snd_soc_dai_get_dma_data(codec_dai, substream);
475 if (dma_params) 502 if (dma_params)
@@ -477,14 +504,15 @@ static int skl_link_pcm_prepare(struct snd_pcm_substream *substream,
477 dev_dbg(dai->dev, "stream_tag=%d formatvalue=%d codec_dai_name=%s\n", 504 dev_dbg(dai->dev, "stream_tag=%d formatvalue=%d codec_dai_name=%s\n",
478 hdac_stream(link_dev)->stream_tag, format_val, codec_dai->name); 505 hdac_stream(link_dev)->stream_tag, format_val, codec_dai->name);
479 506
480 snd_hdac_ext_link_stream_reset(link_dev);
481
482 snd_hdac_ext_link_stream_setup(link_dev, format_val);
483
484 link = snd_hdac_ext_bus_get_link(ebus, rtd->codec->component.name); 507 link = snd_hdac_ext_bus_get_link(ebus, rtd->codec->component.name);
485 if (!link) 508 if (!link)
486 return -EINVAL; 509 return -EINVAL;
487 510
511 snd_hdac_ext_bus_link_power_up(link);
512 snd_hdac_ext_link_stream_reset(link_dev);
513
514 snd_hdac_ext_link_stream_setup(link_dev, format_val);
515
488 snd_hdac_ext_link_set_stream_id(link, hdac_stream(link_dev)->stream_tag); 516 snd_hdac_ext_link_set_stream_id(link, hdac_stream(link_dev)->stream_tag);
489 link_dev->link_prepared = 1; 517 link_dev->link_prepared = 1;
490 518
@@ -496,12 +524,16 @@ static int skl_link_pcm_trigger(struct snd_pcm_substream *substream,
496{ 524{
497 struct hdac_ext_stream *link_dev = 525 struct hdac_ext_stream *link_dev =
498 snd_soc_dai_get_dma_data(dai, substream); 526 snd_soc_dai_get_dma_data(dai, substream);
527 struct hdac_ext_bus *ebus = get_bus_ctx(substream);
528 struct hdac_ext_stream *stream = get_hdac_ext_stream(substream);
499 529
500 dev_dbg(dai->dev, "In %s cmd=%d\n", __func__, cmd); 530 dev_dbg(dai->dev, "In %s cmd=%d\n", __func__, cmd);
501 switch (cmd) { 531 switch (cmd) {
532 case SNDRV_PCM_TRIGGER_RESUME:
533 skl_link_pcm_prepare(substream, dai);
502 case SNDRV_PCM_TRIGGER_START: 534 case SNDRV_PCM_TRIGGER_START:
503 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 535 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
504 case SNDRV_PCM_TRIGGER_RESUME: 536 snd_hdac_ext_stream_decouple(ebus, stream, true);
505 snd_hdac_ext_link_stream_start(link_dev); 537 snd_hdac_ext_link_stream_start(link_dev);
506 break; 538 break;
507 539
@@ -509,6 +541,8 @@ static int skl_link_pcm_trigger(struct snd_pcm_substream *substream,
509 case SNDRV_PCM_TRIGGER_SUSPEND: 541 case SNDRV_PCM_TRIGGER_SUSPEND:
510 case SNDRV_PCM_TRIGGER_STOP: 542 case SNDRV_PCM_TRIGGER_STOP:
511 snd_hdac_ext_link_stream_clear(link_dev); 543 snd_hdac_ext_link_stream_clear(link_dev);
544 if (cmd == SNDRV_PCM_TRIGGER_SUSPEND)
545 snd_hdac_ext_stream_decouple(ebus, stream, false);
512 break; 546 break;
513 547
514 default: 548 default:
diff --git a/sound/soc/intel/skylake/skl-sst-ipc.c b/sound/soc/intel/skylake/skl-sst-ipc.c
index 62e665a3b8f7..543460293b00 100644
--- a/sound/soc/intel/skylake/skl-sst-ipc.c
+++ b/sound/soc/intel/skylake/skl-sst-ipc.c
@@ -16,8 +16,10 @@
16 16
17#include "../common/sst-dsp.h" 17#include "../common/sst-dsp.h"
18#include "../common/sst-dsp-priv.h" 18#include "../common/sst-dsp-priv.h"
19#include "skl.h"
19#include "skl-sst-dsp.h" 20#include "skl-sst-dsp.h"
20#include "skl-sst-ipc.h" 21#include "skl-sst-ipc.h"
22#include "sound/hdaudio_ext.h"
21 23
22 24
23#define IPC_IXC_STATUS_BITS 24 25#define IPC_IXC_STATUS_BITS 24
@@ -322,6 +324,19 @@ static int skl_ipc_process_notification(struct sst_generic_ipc *ipc,
322 wake_up(&skl->boot_wait); 324 wake_up(&skl->boot_wait);
323 break; 325 break;
324 326
327 case IPC_GLB_NOTIFY_PHRASE_DETECTED:
328 dev_dbg(ipc->dev, "***** Phrase Detected **********\n");
329
330 /*
331 * Per HW recomendation, After phrase detection,
332 * clear the CGCTL.MISCBDCGE.
333 *
334 * This will be set back on stream closure
335 */
336 skl->enable_miscbdcge(ipc->dev, false);
337 skl->miscbdcg_disabled = true;
338 break;
339
325 default: 340 default:
326 dev_err(ipc->dev, "ipc: Unhandled error msg=%x", 341 dev_err(ipc->dev, "ipc: Unhandled error msg=%x",
327 header.primary); 342 header.primary);
diff --git a/sound/soc/intel/skylake/skl-sst-ipc.h b/sound/soc/intel/skylake/skl-sst-ipc.h
index 1bbcdb471cf2..d59d1ba62a43 100644
--- a/sound/soc/intel/skylake/skl-sst-ipc.h
+++ b/sound/soc/intel/skylake/skl-sst-ipc.h
@@ -55,6 +55,11 @@ struct skl_sst {
55 55
56 /* IPC messaging */ 56 /* IPC messaging */
57 struct sst_generic_ipc ipc; 57 struct sst_generic_ipc ipc;
58
59 /* callback for miscbdge */
60 void (*enable_miscbdcge)(struct device *dev, bool enable);
61 /*Is CGCTL.MISCBDCGE disabled*/
62 bool miscbdcg_disabled;
58}; 63};
59 64
60struct skl_ipc_init_instance_msg { 65struct skl_ipc_init_instance_msg {
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c
index b69649aa7809..443a15de94b5 100644
--- a/sound/soc/intel/skylake/skl.c
+++ b/sound/soc/intel/skylake/skl.c
@@ -29,6 +29,8 @@
29#include <sound/pcm.h> 29#include <sound/pcm.h>
30#include "../common/sst-acpi.h" 30#include "../common/sst-acpi.h"
31#include "skl.h" 31#include "skl.h"
32#include "skl-sst-dsp.h"
33#include "skl-sst-ipc.h"
32 34
33/* 35/*
34 * initialize the PCI registers 36 * initialize the PCI registers
@@ -59,6 +61,49 @@ static void skl_init_pci(struct skl *skl)
59 skl_update_pci_byte(skl->pci, AZX_PCIREG_TCSEL, 0x07, 0); 61 skl_update_pci_byte(skl->pci, AZX_PCIREG_TCSEL, 0x07, 0);
60} 62}
61 63
64static void update_pci_dword(struct pci_dev *pci,
65 unsigned int reg, u32 mask, u32 val)
66{
67 u32 data = 0;
68
69 pci_read_config_dword(pci, reg, &data);
70 data &= ~mask;
71 data |= (val & mask);
72 pci_write_config_dword(pci, reg, data);
73}
74
75/*
76 * skl_enable_miscbdcge - enable/dsiable CGCTL.MISCBDCGE bits
77 *
78 * @dev: device pointer
79 * @enable: enable/disable flag
80 */
81static void skl_enable_miscbdcge(struct device *dev, bool enable)
82{
83 struct pci_dev *pci = to_pci_dev(dev);
84 u32 val;
85
86 val = enable ? AZX_CGCTL_MISCBDCGE_MASK : 0;
87
88 update_pci_dword(pci, AZX_PCIREG_CGCTL, AZX_CGCTL_MISCBDCGE_MASK, val);
89}
90
91/*
92 * While performing reset, controller may not come back properly causing
93 * issues, so recommendation is to set CGCTL.MISCBDCGE to 0 then do reset
94 * (init chip) and then again set CGCTL.MISCBDCGE to 1
95 */
96static int skl_init_chip(struct hdac_bus *bus, bool full_reset)
97{
98 int ret;
99
100 skl_enable_miscbdcge(bus->dev, false);
101 ret = snd_hdac_bus_init_chip(bus, full_reset);
102 skl_enable_miscbdcge(bus->dev, true);
103
104 return ret;
105}
106
62/* called from IRQ */ 107/* called from IRQ */
63static void skl_stream_update(struct hdac_bus *bus, struct hdac_stream *hstr) 108static void skl_stream_update(struct hdac_bus *bus, struct hdac_stream *hstr)
64{ 109{
@@ -145,7 +190,9 @@ static int _skl_suspend(struct hdac_ext_bus *ebus)
145 return ret; 190 return ret;
146 191
147 snd_hdac_bus_stop_chip(bus); 192 snd_hdac_bus_stop_chip(bus);
193 skl_enable_miscbdcge(bus->dev, false);
148 snd_hdac_bus_enter_link_reset(bus); 194 snd_hdac_bus_enter_link_reset(bus);
195 skl_enable_miscbdcge(bus->dev, true);
149 196
150 return 0; 197 return 0;
151} 198}
@@ -156,7 +203,7 @@ static int _skl_resume(struct hdac_ext_bus *ebus)
156 struct hdac_bus *bus = ebus_to_hbus(ebus); 203 struct hdac_bus *bus = ebus_to_hbus(ebus);
157 204
158 skl_init_pci(skl); 205 skl_init_pci(skl);
159 snd_hdac_bus_init_chip(bus, true); 206 skl_init_chip(bus, true);
160 207
161 return skl_resume_dsp(skl); 208 return skl_resume_dsp(skl);
162} 209}
@@ -171,12 +218,15 @@ static int skl_suspend(struct device *dev)
171 struct pci_dev *pci = to_pci_dev(dev); 218 struct pci_dev *pci = to_pci_dev(dev);
172 struct hdac_ext_bus *ebus = pci_get_drvdata(pci); 219 struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
173 struct skl *skl = ebus_to_skl(ebus); 220 struct skl *skl = ebus_to_skl(ebus);
221 struct hdac_bus *bus = ebus_to_hbus(ebus);
174 222
175 /* 223 /*
176 * Do not suspend if streams which are marked ignore suspend are 224 * Do not suspend if streams which are marked ignore suspend are
177 * running, we need to save the state for these and continue 225 * running, we need to save the state for these and continue
178 */ 226 */
179 if (skl->supend_active) { 227 if (skl->supend_active) {
228 snd_hdac_ext_bus_link_power_down_all(ebus);
229 enable_irq_wake(bus->irq);
180 pci_save_state(pci); 230 pci_save_state(pci);
181 pci_disable_device(pci); 231 pci_disable_device(pci);
182 return 0; 232 return 0;
@@ -190,6 +240,7 @@ static int skl_resume(struct device *dev)
190 struct pci_dev *pci = to_pci_dev(dev); 240 struct pci_dev *pci = to_pci_dev(dev);
191 struct hdac_ext_bus *ebus = pci_get_drvdata(pci); 241 struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
192 struct skl *skl = ebus_to_skl(ebus); 242 struct skl *skl = ebus_to_skl(ebus);
243 struct hdac_bus *bus = ebus_to_hbus(ebus);
193 int ret; 244 int ret;
194 245
195 /* 246 /*
@@ -199,6 +250,8 @@ static int skl_resume(struct device *dev)
199 if (skl->supend_active) { 250 if (skl->supend_active) {
200 pci_restore_state(pci); 251 pci_restore_state(pci);
201 ret = pci_enable_device(pci); 252 ret = pci_enable_device(pci);
253 snd_hdac_ext_bus_link_power_up_all(ebus);
254 disable_irq_wake(bus->irq);
202 } else { 255 } else {
203 ret = _skl_resume(ebus); 256 ret = _skl_resume(ebus);
204 } 257 }
@@ -380,7 +433,7 @@ static int skl_codec_create(struct hdac_ext_bus *ebus)
380 * back to the sanity state. 433 * back to the sanity state.
381 */ 434 */
382 snd_hdac_bus_stop_chip(bus); 435 snd_hdac_bus_stop_chip(bus);
383 snd_hdac_bus_init_chip(bus, true); 436 skl_init_chip(bus, true);
384 } 437 }
385 } 438 }
386 } 439 }
@@ -490,7 +543,7 @@ static int skl_first_init(struct hdac_ext_bus *ebus)
490 /* initialize chip */ 543 /* initialize chip */
491 skl_init_pci(skl); 544 skl_init_pci(skl);
492 545
493 snd_hdac_bus_init_chip(bus, true); 546 skl_init_chip(bus, true);
494 547
495 /* codec detection */ 548 /* codec detection */
496 if (!bus->codec_mask) { 549 if (!bus->codec_mask) {
@@ -539,6 +592,8 @@ static int skl_probe(struct pci_dev *pci,
539 dev_dbg(bus->dev, "error failed to register dsp\n"); 592 dev_dbg(bus->dev, "error failed to register dsp\n");
540 goto out_mach_free; 593 goto out_mach_free;
541 } 594 }
595 skl->skl_sst->enable_miscbdcge = skl_enable_miscbdcge;
596
542 } 597 }
543 if (ebus->mlcap) 598 if (ebus->mlcap)
544 snd_hdac_ext_bus_get_ml_capabilities(ebus); 599 snd_hdac_ext_bus_get_ml_capabilities(ebus);
diff --git a/sound/soc/intel/skylake/skl.h b/sound/soc/intel/skylake/skl.h
index deec048f00c7..4d18293b5537 100644
--- a/sound/soc/intel/skylake/skl.h
+++ b/sound/soc/intel/skylake/skl.h
@@ -48,6 +48,9 @@
48#define AZX_REG_VS_SDXEFIFOS_XBASE 0x1094 48#define AZX_REG_VS_SDXEFIFOS_XBASE 0x1094
49#define AZX_REG_VS_SDXEFIFOS_XINTERVAL 0x20 49#define AZX_REG_VS_SDXEFIFOS_XINTERVAL 0x20
50 50
51#define AZX_PCIREG_CGCTL 0x48
52#define AZX_CGCTL_MISCBDCGE_MASK (1 << 6)
53
51struct skl_dsp_resource { 54struct skl_dsp_resource {
52 u32 max_mcps; 55 u32 max_mcps;
53 u32 max_mem; 56 u32 max_mem;
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index 8b0a588ed622..6561c4cc2edd 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -242,6 +242,9 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
242 case SNDRV_PCM_FORMAT_S24_LE: 242 case SNDRV_PCM_FORMAT_S24_LE:
243 val |= I2S_TXCR_VDW(24); 243 val |= I2S_TXCR_VDW(24);
244 break; 244 break;
245 case SNDRV_PCM_FORMAT_S32_LE:
246 val |= I2S_TXCR_VDW(32);
247 break;
245 default: 248 default:
246 return -EINVAL; 249 return -EINVAL;
247 } 250 }
@@ -360,7 +363,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
360 .formats = (SNDRV_PCM_FMTBIT_S8 | 363 .formats = (SNDRV_PCM_FMTBIT_S8 |
361 SNDRV_PCM_FMTBIT_S16_LE | 364 SNDRV_PCM_FMTBIT_S16_LE |
362 SNDRV_PCM_FMTBIT_S20_3LE | 365 SNDRV_PCM_FMTBIT_S20_3LE |
363 SNDRV_PCM_FMTBIT_S24_LE), 366 SNDRV_PCM_FMTBIT_S24_LE |
367 SNDRV_PCM_FMTBIT_S32_LE),
364 }, 368 },
365 .capture = { 369 .capture = {
366 .stream_name = "Capture", 370 .stream_name = "Capture",
@@ -370,7 +374,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
370 .formats = (SNDRV_PCM_FMTBIT_S8 | 374 .formats = (SNDRV_PCM_FMTBIT_S8 |
371 SNDRV_PCM_FMTBIT_S16_LE | 375 SNDRV_PCM_FMTBIT_S16_LE |
372 SNDRV_PCM_FMTBIT_S20_3LE | 376 SNDRV_PCM_FMTBIT_S20_3LE |
373 SNDRV_PCM_FMTBIT_S24_LE), 377 SNDRV_PCM_FMTBIT_S24_LE |
378 SNDRV_PCM_FMTBIT_S32_LE),
374 }, 379 },
375 .ops = &rockchip_i2s_dai_ops, 380 .ops = &rockchip_i2s_dai_ops,
376 .symmetric_rates = 1, 381 .symmetric_rates = 1,
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 7db05fdfb656..7ee89da4dd5f 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -403,29 +403,30 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod,
403 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); 403 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
404 struct device *dev = rsnd_priv_to_dev(priv); 404 struct device *dev = rsnd_priv_to_dev(priv);
405 405
406 if (rsnd_ssi_is_parent(mod, io)) 406 if (!ssi->usrcnt) {
407 goto rsnd_ssi_quit_end; 407 dev_err(dev, "%s[%d] usrcnt error\n",
408 rsnd_mod_name(mod), rsnd_mod_id(mod));
409 return -EIO;
410 }
408 411
409 if (ssi->err > 0) 412 if (!rsnd_ssi_is_parent(mod, io)) {
410 dev_warn(dev, "%s[%d] under/over flow err = %d\n", 413 if (ssi->err > 0)
411 rsnd_mod_name(mod), rsnd_mod_id(mod), ssi->err); 414 dev_warn(dev, "%s[%d] under/over flow err = %d\n",
415 rsnd_mod_name(mod), rsnd_mod_id(mod),
416 ssi->err);
412 417
413 ssi->cr_own = 0; 418 ssi->cr_own = 0;
414 ssi->err = 0; 419 ssi->err = 0;
415 420
416 rsnd_ssi_irq_disable(mod); 421 rsnd_ssi_irq_disable(mod);
422 }
417 423
418rsnd_ssi_quit_end:
419 rsnd_ssi_master_clk_stop(ssi, io); 424 rsnd_ssi_master_clk_stop(ssi, io);
420 425
421 rsnd_mod_power_off(mod); 426 rsnd_mod_power_off(mod);
422 427
423 ssi->usrcnt--; 428 ssi->usrcnt--;
424 429
425 if (ssi->usrcnt < 0)
426 dev_err(dev, "%s[%d] usrcnt error\n",
427 rsnd_mod_name(mod), rsnd_mod_id(mod));
428
429 return 0; 430 return 0;
430} 431}
431 432
diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index 3fe9e08e81a3..06d72828e5bc 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -73,7 +73,7 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod,
73 switch (multi_ssi_slaves) { 73 switch (multi_ssi_slaves) {
74 case 0x0206: /* SSI0/1/2/9 */ 74 case 0x0206: /* SSI0/1/2/9 */
75 val2 = (1 << 4) | /* SSI0129 sync */ 75 val2 = (1 << 4) | /* SSI0129 sync */
76 rsnd_rdai_is_clk_master(rdai) ? 0x2 : 0x1; 76 (rsnd_rdai_is_clk_master(rdai) ? 0x2 : 0x1);
77 /* fall through */ 77 /* fall through */
78 case 0x0006: /* SSI0/1/2 */ 78 case 0x0006: /* SSI0/1/2 */
79 val1 = rsnd_rdai_is_clk_master(rdai) ? 79 val1 = rsnd_rdai_is_clk_master(rdai) ?
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index fffbe6f87273..875733c52953 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -630,6 +630,7 @@ int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
630 struct snd_pcm *be_pcm; 630 struct snd_pcm *be_pcm;
631 char new_name[64]; 631 char new_name[64];
632 int ret = 0, direction = 0; 632 int ret = 0, direction = 0;
633 int playback = 0, capture = 0;
633 634
634 if (rtd->num_codecs > 1) { 635 if (rtd->num_codecs > 1) {
635 dev_err(rtd->card->dev, "Multicodec not supported for compressed stream\n"); 636 dev_err(rtd->card->dev, "Multicodec not supported for compressed stream\n");
@@ -641,11 +642,27 @@ int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
641 rtd->dai_link->stream_name, codec_dai->name, num); 642 rtd->dai_link->stream_name, codec_dai->name, num);
642 643
643 if (codec_dai->driver->playback.channels_min) 644 if (codec_dai->driver->playback.channels_min)
645 playback = 1;
646 if (codec_dai->driver->capture.channels_min)
647 capture = 1;
648
649 capture = capture && cpu_dai->driver->capture.channels_min;
650 playback = playback && cpu_dai->driver->playback.channels_min;
651
652 /*
653 * Compress devices are unidirectional so only one of the directions
654 * should be set, check for that (xor)
655 */
656 if (playback + capture != 1) {
657 dev_err(rtd->card->dev, "Invalid direction for compress P %d, C %d\n",
658 playback, capture);
659 return -EINVAL;
660 }
661
662 if(playback)
644 direction = SND_COMPRESS_PLAYBACK; 663 direction = SND_COMPRESS_PLAYBACK;
645 else if (codec_dai->driver->capture.channels_min)
646 direction = SND_COMPRESS_CAPTURE;
647 else 664 else
648 return -EINVAL; 665 direction = SND_COMPRESS_CAPTURE;
649 666
650 compr = kzalloc(sizeof(*compr), GFP_KERNEL); 667 compr = kzalloc(sizeof(*compr), GFP_KERNEL);
651 if (compr == NULL) { 668 if (compr == NULL) {
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 19f7486bf335..790ee2bf1a47 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1413,6 +1413,16 @@ static int soc_probe_component(struct snd_soc_card *card,
1413 component->name); 1413 component->name);
1414 } 1414 }
1415 1415
1416 /* machine specific init */
1417 if (component->init) {
1418 ret = component->init(component);
1419 if (ret < 0) {
1420 dev_err(component->dev,
1421 "Failed to do machine specific init %d\n", ret);
1422 goto err_probe;
1423 }
1424 }
1425
1416 if (component->controls) 1426 if (component->controls)
1417 snd_soc_add_component_controls(component, component->controls, 1427 snd_soc_add_component_controls(component, component->controls,
1418 component->num_controls); 1428 component->num_controls);
@@ -1657,65 +1667,81 @@ static int soc_probe_link_dais(struct snd_soc_card *card,
1657 1667
1658static int soc_bind_aux_dev(struct snd_soc_card *card, int num) 1668static int soc_bind_aux_dev(struct snd_soc_card *card, int num)
1659{ 1669{
1660 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num];
1661 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1670 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
1662 const char *name = aux_dev->codec_name; 1671 struct snd_soc_component *component;
1663 1672 const char *name;
1664 rtd->component = soc_find_component(aux_dev->codec_of_node, name); 1673 struct device_node *codec_of_node;
1665 if (!rtd->component) { 1674
1666 if (aux_dev->codec_of_node) 1675 if (aux_dev->codec_of_node || aux_dev->codec_name) {
1667 name = of_node_full_name(aux_dev->codec_of_node); 1676 /* codecs, usually analog devices */
1668 1677 name = aux_dev->codec_name;
1669 dev_err(card->dev, "ASoC: %s not registered\n", name); 1678 codec_of_node = aux_dev->codec_of_node;
1670 return -EPROBE_DEFER; 1679 component = soc_find_component(codec_of_node, name);
1680 if (!component) {
1681 if (codec_of_node)
1682 name = of_node_full_name(codec_of_node);
1683 goto err_defer;
1684 }
1685 } else if (aux_dev->name) {
1686 /* generic components */
1687 name = aux_dev->name;
1688 component = soc_find_component(NULL, name);
1689 if (!component)
1690 goto err_defer;
1691 } else {
1692 dev_err(card->dev, "ASoC: Invalid auxiliary device\n");
1693 return -EINVAL;
1671 } 1694 }
1672 1695
1673 /* 1696 component->init = aux_dev->init;
1674 * Some places still reference rtd->codec, so we have to keep that 1697 list_add(&component->list_aux, &card->aux_comp_list);
1675 * initialized if the component is a CODEC. Once all those references
1676 * have been removed, this code can be removed as well.
1677 */
1678 rtd->codec = rtd->component->codec;
1679
1680 return 0; 1698 return 0;
1699
1700err_defer:
1701 dev_err(card->dev, "ASoC: %s not registered\n", name);
1702 return -EPROBE_DEFER;
1681} 1703}
1682 1704
1683static int soc_probe_aux_dev(struct snd_soc_card *card, int num) 1705static int soc_probe_aux_devices(struct snd_soc_card *card)
1684{ 1706{
1685 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1707 struct snd_soc_component *comp;
1686 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1708 int order;
1687 int ret; 1709 int ret;
1688 1710
1689 ret = soc_probe_component(card, rtd->component); 1711 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1690 if (ret < 0) 1712 order++) {
1691 return ret; 1713 list_for_each_entry(comp, &card->aux_comp_list, list_aux) {
1692 1714 if (comp->driver->probe_order == order) {
1693 /* do machine specific initialization */ 1715 ret = soc_probe_component(card, comp);
1694 if (aux_dev->init) { 1716 if (ret < 0) {
1695 ret = aux_dev->init(rtd->component); 1717 dev_err(card->dev,
1696 if (ret < 0) { 1718 "ASoC: failed to probe aux component %s %d\n",
1697 dev_err(card->dev, "ASoC: failed to init %s: %d\n", 1719 comp->name, ret);
1698 aux_dev->name, ret); 1720 return ret;
1699 return ret; 1721 }
1722 }
1700 } 1723 }
1701 } 1724 }
1702 1725
1703 return soc_post_component_init(rtd, aux_dev->name); 1726 return 0;
1704} 1727}
1705 1728
1706static void soc_remove_aux_dev(struct snd_soc_card *card, int num) 1729static void soc_remove_aux_devices(struct snd_soc_card *card)
1707{ 1730{
1708 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1731 struct snd_soc_component *comp, *_comp;
1709 struct snd_soc_component *component = rtd->component; 1732 int order;
1710 1733
1711 /* unregister the rtd device */ 1734 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1712 if (rtd->dev_registered) { 1735 order++) {
1713 device_unregister(rtd->dev); 1736 list_for_each_entry_safe(comp, _comp,
1714 rtd->dev_registered = 0; 1737 &card->aux_comp_list, list_aux) {
1738 if (comp->driver->remove_order == order) {
1739 soc_remove_component(comp);
1740 /* remove it from the card's aux_comp_list */
1741 list_del(&comp->list_aux);
1742 }
1743 }
1715 } 1744 }
1716
1717 if (component)
1718 soc_remove_component(component);
1719} 1745}
1720 1746
1721static int snd_soc_init_codec_cache(struct snd_soc_codec *codec) 1747static int snd_soc_init_codec_cache(struct snd_soc_codec *codec)
@@ -1894,6 +1920,11 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
1894 } 1920 }
1895 } 1921 }
1896 1922
1923 /* probe auxiliary components */
1924 ret = soc_probe_aux_devices(card);
1925 if (ret < 0)
1926 goto probe_dai_err;
1927
1897 /* Find new DAI links added during probing components and bind them. 1928 /* Find new DAI links added during probing components and bind them.
1898 * Components with topology may bring new DAIs and DAI links. 1929 * Components with topology may bring new DAIs and DAI links.
1899 */ 1930 */
@@ -1923,16 +1954,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
1923 } 1954 }
1924 } 1955 }
1925 1956
1926 for (i = 0; i < card->num_aux_devs; i++) {
1927 ret = soc_probe_aux_dev(card, i);
1928 if (ret < 0) {
1929 dev_err(card->dev,
1930 "ASoC: failed to add auxiliary devices %d\n",
1931 ret);
1932 goto probe_aux_dev_err;
1933 }
1934 }
1935
1936 snd_soc_dapm_link_dai_widgets(card); 1957 snd_soc_dapm_link_dai_widgets(card);
1937 snd_soc_dapm_connect_dai_link_widgets(card); 1958 snd_soc_dapm_connect_dai_link_widgets(card);
1938 1959
@@ -1992,8 +2013,7 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
1992 return 0; 2013 return 0;
1993 2014
1994probe_aux_dev_err: 2015probe_aux_dev_err:
1995 for (i = 0; i < card->num_aux_devs; i++) 2016 soc_remove_aux_devices(card);
1996 soc_remove_aux_dev(card, i);
1997 2017
1998probe_dai_err: 2018probe_dai_err:
1999 soc_remove_dai_links(card); 2019 soc_remove_dai_links(card);
@@ -2039,20 +2059,18 @@ static int soc_probe(struct platform_device *pdev)
2039static int soc_cleanup_card_resources(struct snd_soc_card *card) 2059static int soc_cleanup_card_resources(struct snd_soc_card *card)
2040{ 2060{
2041 struct snd_soc_pcm_runtime *rtd; 2061 struct snd_soc_pcm_runtime *rtd;
2042 int i;
2043 2062
2044 /* make sure any delayed work runs */ 2063 /* make sure any delayed work runs */
2045 list_for_each_entry(rtd, &card->rtd_list, list) 2064 list_for_each_entry(rtd, &card->rtd_list, list)
2046 flush_delayed_work(&rtd->delayed_work); 2065 flush_delayed_work(&rtd->delayed_work);
2047 2066
2048 /* remove auxiliary devices */
2049 for (i = 0; i < card->num_aux_devs; i++)
2050 soc_remove_aux_dev(card, i);
2051
2052 /* remove and free each DAI */ 2067 /* remove and free each DAI */
2053 soc_remove_dai_links(card); 2068 soc_remove_dai_links(card);
2054 soc_remove_pcm_runtimes(card); 2069 soc_remove_pcm_runtimes(card);
2055 2070
2071 /* remove auxiliary devices */
2072 soc_remove_aux_devices(card);
2073
2056 soc_cleanup_card_debugfs(card); 2074 soc_cleanup_card_debugfs(card);
2057 2075
2058 /* remove the card */ 2076 /* remove the card */
@@ -2608,16 +2626,6 @@ int snd_soc_register_card(struct snd_soc_card *card)
2608 INIT_LIST_HEAD(&card->rtd_list); 2626 INIT_LIST_HEAD(&card->rtd_list);
2609 card->num_rtd = 0; 2627 card->num_rtd = 0;
2610 2628
2611 card->rtd_aux = devm_kzalloc(card->dev,
2612 sizeof(struct snd_soc_pcm_runtime) *
2613 card->num_aux_devs,
2614 GFP_KERNEL);
2615 if (card->rtd_aux == NULL)
2616 return -ENOMEM;
2617
2618 for (i = 0; i < card->num_aux_devs; i++)
2619 card->rtd_aux[i].card = card;
2620
2621 INIT_LIST_HEAD(&card->dapm_dirty); 2629 INIT_LIST_HEAD(&card->dapm_dirty);
2622 INIT_LIST_HEAD(&card->dobj_list); 2630 INIT_LIST_HEAD(&card->dobj_list);
2623 card->instantiated = 0; 2631 card->instantiated = 0;
@@ -2744,6 +2752,56 @@ static void snd_soc_unregister_dais(struct snd_soc_component *component)
2744 } 2752 }
2745} 2753}
2746 2754
2755/* Create a DAI and add it to the component's DAI list */
2756static struct snd_soc_dai *soc_add_dai(struct snd_soc_component *component,
2757 struct snd_soc_dai_driver *dai_drv,
2758 bool legacy_dai_naming)
2759{
2760 struct device *dev = component->dev;
2761 struct snd_soc_dai *dai;
2762
2763 dev_dbg(dev, "ASoC: dynamically register DAI %s\n", dev_name(dev));
2764
2765 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
2766 if (dai == NULL)
2767 return NULL;
2768
2769 /*
2770 * Back in the old days when we still had component-less DAIs,
2771 * instead of having a static name, component-less DAIs would
2772 * inherit the name of the parent device so it is possible to
2773 * register multiple instances of the DAI. We still need to keep
2774 * the same naming style even though those DAIs are not
2775 * component-less anymore.
2776 */
2777 if (legacy_dai_naming &&
2778 (dai_drv->id == 0 || dai_drv->name == NULL)) {
2779 dai->name = fmt_single_name(dev, &dai->id);
2780 } else {
2781 dai->name = fmt_multiple_name(dev, dai_drv);
2782 if (dai_drv->id)
2783 dai->id = dai_drv->id;
2784 else
2785 dai->id = component->num_dai;
2786 }
2787 if (dai->name == NULL) {
2788 kfree(dai);
2789 return NULL;
2790 }
2791
2792 dai->component = component;
2793 dai->dev = dev;
2794 dai->driver = dai_drv;
2795 if (!dai->driver->ops)
2796 dai->driver->ops = &null_dai_ops;
2797
2798 list_add(&dai->list, &component->dai_list);
2799 component->num_dai++;
2800
2801 dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name);
2802 return dai;
2803}
2804
2747/** 2805/**
2748 * snd_soc_register_dais - Register a DAI with the ASoC core 2806 * snd_soc_register_dais - Register a DAI with the ASoC core
2749 * 2807 *
@@ -2765,58 +2823,66 @@ static int snd_soc_register_dais(struct snd_soc_component *component,
2765 dev_dbg(dev, "ASoC: dai register %s #%Zu\n", dev_name(dev), count); 2823 dev_dbg(dev, "ASoC: dai register %s #%Zu\n", dev_name(dev), count);
2766 2824
2767 component->dai_drv = dai_drv; 2825 component->dai_drv = dai_drv;
2768 component->num_dai = count;
2769 2826
2770 for (i = 0; i < count; i++) { 2827 for (i = 0; i < count; i++) {
2771 2828
2772 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 2829 dai = soc_add_dai(component, dai_drv + i,
2830 count == 1 && legacy_dai_naming);
2773 if (dai == NULL) { 2831 if (dai == NULL) {
2774 ret = -ENOMEM; 2832 ret = -ENOMEM;
2775 goto err; 2833 goto err;
2776 } 2834 }
2835 }
2777 2836
2778 /* 2837 return 0;
2779 * Back in the old days when we still had component-less DAIs,
2780 * instead of having a static name, component-less DAIs would
2781 * inherit the name of the parent device so it is possible to
2782 * register multiple instances of the DAI. We still need to keep
2783 * the same naming style even though those DAIs are not
2784 * component-less anymore.
2785 */
2786 if (count == 1 && legacy_dai_naming &&
2787 (dai_drv[i].id == 0 || dai_drv[i].name == NULL)) {
2788 dai->name = fmt_single_name(dev, &dai->id);
2789 } else {
2790 dai->name = fmt_multiple_name(dev, &dai_drv[i]);
2791 if (dai_drv[i].id)
2792 dai->id = dai_drv[i].id;
2793 else
2794 dai->id = i;
2795 }
2796 if (dai->name == NULL) {
2797 kfree(dai);
2798 ret = -ENOMEM;
2799 goto err;
2800 }
2801 2838
2802 dai->component = component; 2839err:
2803 dai->dev = dev; 2840 snd_soc_unregister_dais(component);
2804 dai->driver = &dai_drv[i];
2805 if (!dai->driver->ops)
2806 dai->driver->ops = &null_dai_ops;
2807 2841
2808 list_add(&dai->list, &component->dai_list); 2842 return ret;
2843}
2809 2844
2810 dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name); 2845/**
2846 * snd_soc_register_dai - Register a DAI dynamically & create its widgets
2847 *
2848 * @component: The component the DAIs are registered for
2849 * @dai_drv: DAI driver to use for the DAI
2850 *
2851 * Topology can use this API to register DAIs when probing a component.
2852 * These DAIs's widgets will be freed in the card cleanup and the DAIs
2853 * will be freed in the component cleanup.
2854 */
2855int snd_soc_register_dai(struct snd_soc_component *component,
2856 struct snd_soc_dai_driver *dai_drv)
2857{
2858 struct snd_soc_dapm_context *dapm =
2859 snd_soc_component_get_dapm(component);
2860 struct snd_soc_dai *dai;
2861 int ret;
2862
2863 if (dai_drv->dobj.type != SND_SOC_DOBJ_PCM) {
2864 dev_err(component->dev, "Invalid dai type %d\n",
2865 dai_drv->dobj.type);
2866 return -EINVAL;
2811 } 2867 }
2812 2868
2813 return 0; 2869 lockdep_assert_held(&client_mutex);
2870 dai = soc_add_dai(component, dai_drv, false);
2871 if (!dai)
2872 return -ENOMEM;
2814 2873
2815err: 2874 /* Create the DAI widgets here. After adding DAIs, topology may
2816 snd_soc_unregister_dais(component); 2875 * also add routes that need these widgets as source or sink.
2876 */
2877 ret = snd_soc_dapm_new_dai_widgets(dapm, dai);
2878 if (ret != 0) {
2879 dev_err(component->dev,
2880 "Failed to create DAI widgets %d\n", ret);
2881 }
2817 2882
2818 return ret; 2883 return ret;
2819} 2884}
2885EXPORT_SYMBOL_GPL(snd_soc_register_dai);
2820 2886
2821static void snd_soc_component_seq_notifier(struct snd_soc_dapm_context *dapm, 2887static void snd_soc_component_seq_notifier(struct snd_soc_dapm_context *dapm,
2822 enum snd_soc_dapm_type type, int subseq) 2888 enum snd_soc_dapm_type type, int subseq)
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 2a2ca2209656..e898b427be7e 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -599,10 +599,15 @@ platform_err:
599out: 599out:
600 mutex_unlock(&rtd->pcm_mutex); 600 mutex_unlock(&rtd->pcm_mutex);
601 601
602 pm_runtime_put(platform->dev); 602 pm_runtime_mark_last_busy(platform->dev);
603 for (i = 0; i < rtd->num_codecs; i++) 603 pm_runtime_put_autosuspend(platform->dev);
604 pm_runtime_put(rtd->codec_dais[i]->dev); 604 for (i = 0; i < rtd->num_codecs; i++) {
605 pm_runtime_put(cpu_dai->dev); 605 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev);
606 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev);
607 }
608
609 pm_runtime_mark_last_busy(cpu_dai->dev);
610 pm_runtime_put_autosuspend(cpu_dai->dev);
606 for (i = 0; i < rtd->num_codecs; i++) { 611 for (i = 0; i < rtd->num_codecs; i++) {
607 if (!rtd->codec_dais[i]->active) 612 if (!rtd->codec_dais[i]->active)
608 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 613 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);
@@ -706,10 +711,17 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
706 711
707 mutex_unlock(&rtd->pcm_mutex); 712 mutex_unlock(&rtd->pcm_mutex);
708 713
709 pm_runtime_put(platform->dev); 714 pm_runtime_mark_last_busy(platform->dev);
710 for (i = 0; i < rtd->num_codecs; i++) 715 pm_runtime_put_autosuspend(platform->dev);
711 pm_runtime_put(rtd->codec_dais[i]->dev); 716
712 pm_runtime_put(cpu_dai->dev); 717 for (i = 0; i < rtd->num_codecs; i++) {
718 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev);
719 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev);
720 }
721
722 pm_runtime_mark_last_busy(cpu_dai->dev);
723 pm_runtime_put_autosuspend(cpu_dai->dev);
724
713 for (i = 0; i < rtd->num_codecs; i++) { 725 for (i = 0; i < rtd->num_codecs; i++) {
714 if (!rtd->codec_dais[i]->active) 726 if (!rtd->codec_dais[i]->active)
715 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 727 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);