diff options
author | Takashi Iwai <tiwai@suse.de> | 2016-01-11 10:24:58 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2016-01-11 11:50:15 -0500 |
commit | 815ad8623695c7f2aafc216b923b131f1ee12df6 (patch) | |
tree | f66eeed2a0dfd011a6207360b81c18e3ffabb583 /sound | |
parent | 56f27013482c0803d978b667fe85de04ce9357cd (diff) | |
parent | d0021d3bdfe9d551859bca1f58da0e6be8e26043 (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')
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) | |||
282 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down); | 288 | EXPORT_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 | */ | ||
294 | int 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 | } | ||
309 | EXPORT_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 | } |
499 | EXPORT_SYMBOL_GPL(snd_hdac_ext_stop_streams); | 504 | EXPORT_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 | */ | ||
512 | void 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 | } | ||
535 | EXPORT_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 | */ | ||
543 | int 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 | } | ||
557 | EXPORT_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 | */ | ||
565 | int 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 | } | ||
571 | EXPORT_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 |
40 | source "sound/soc/adi/Kconfig" | 40 | source "sound/soc/adi/Kconfig" |
41 | source "sound/soc/amd/Kconfig" | ||
41 | source "sound/soc/atmel/Kconfig" | 42 | source "sound/soc/atmel/Kconfig" |
42 | source "sound/soc/au1x/Kconfig" | 43 | source "sound/soc/au1x/Kconfig" |
43 | source "sound/soc/bcm/Kconfig" | 44 | source "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 | |||
18 | obj-$(CONFIG_SND_SOC) += codecs/ | 18 | obj-$(CONFIG_SND_SOC) += codecs/ |
19 | obj-$(CONFIG_SND_SOC) += generic/ | 19 | obj-$(CONFIG_SND_SOC) += generic/ |
20 | obj-$(CONFIG_SND_SOC) += adi/ | 20 | obj-$(CONFIG_SND_SOC) += adi/ |
21 | obj-$(CONFIG_SND_SOC) += amd/ | ||
21 | obj-$(CONFIG_SND_SOC) += atmel/ | 22 | obj-$(CONFIG_SND_SOC) += atmel/ |
22 | obj-$(CONFIG_SND_SOC) += au1x/ | 23 | obj-$(CONFIG_SND_SOC) += au1x/ |
23 | obj-$(CONFIG_SND_SOC) += bcm/ | 24 | obj-$(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 @@ | |||
1 | config 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 @@ | |||
1 | snd-soc-acp-pcm-objs := acp-pcm-dma.o | ||
2 | |||
3 | obj-$(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 | |||
38 | static 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 | |||
57 | static 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 | |||
76 | struct audio_drv_data { | ||
77 | struct snd_pcm_substream *play_stream; | ||
78 | struct snd_pcm_substream *capture_stream; | ||
79 | void __iomem *acp_mmio; | ||
80 | }; | ||
81 | |||
82 | static u32 acp_reg_read(void __iomem *acp_mmio, u32 reg) | ||
83 | { | ||
84 | return readl(acp_mmio + (reg * 4)); | ||
85 | } | ||
86 | |||
87 | static 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 | */ | ||
95 | static 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 */ | ||
122 | static 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 | */ | ||
145 | static 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 | */ | ||
194 | static 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 */ | ||
238 | static 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 | |||
272 | static 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 */ | ||
295 | static 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 */ | ||
333 | static 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 | |||
380 | static 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. */ | ||
428 | static 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 */ | ||
510 | static 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 */ | ||
554 | static 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 | |||
616 | static 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 | |||
667 | static 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 | |||
713 | static int acp_dma_hw_free(struct snd_pcm_substream *substream) | ||
714 | { | ||
715 | return snd_pcm_lib_free_pages(substream); | ||
716 | } | ||
717 | |||
718 | static 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 | |||
755 | static 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 | |||
761 | static 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 | |||
801 | static 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 | |||
860 | static 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 | |||
868 | static 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 | |||
899 | static 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 | |||
911 | static struct snd_soc_platform_driver acp_asoc_platform = { | ||
912 | .ops = &acp_dma_ops, | ||
913 | .pcm_new = acp_dma_new, | ||
914 | }; | ||
915 | |||
916 | static 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 | |||
969 | static 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 | |||
980 | static 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 | |||
1005 | static 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 | |||
1014 | static 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 | |||
1023 | static 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 | |||
1029 | static 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 | |||
1038 | module_platform_driver(acp_dma_driver); | ||
1039 | |||
1040 | MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com"); | ||
1041 | MODULE_DESCRIPTION("AMD ACP PCM Driver"); | ||
1042 | MODULE_LICENSE("GPL v2"); | ||
1043 | MODULE_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 | |||
70 | enum 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 | |||
78 | struct 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 | |||
87 | enum { | ||
88 | ACP_TILE_P1 = 0, | ||
89 | ACP_TILE_P2, | ||
90 | ACP_TILE_DSP0, | ||
91 | ACP_TILE_DSP1, | ||
92 | ACP_TILE_DSP2, | ||
93 | }; | ||
94 | |||
95 | enum { | ||
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 | |||
103 | typedef 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 | |||
27 | typedef 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; | ||
284 | typedef 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; | ||
406 | typedef 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; | ||
468 | typedef 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; | ||
500 | typedef 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; | ||
517 | typedef enum SurfaceEndian { | ||
518 | ENDIAN_NONE = 0x0, | ||
519 | ENDIAN_8IN16 = 0x1, | ||
520 | ENDIAN_8IN32 = 0x2, | ||
521 | ENDIAN_8IN64 = 0x3, | ||
522 | } SurfaceEndian; | ||
523 | typedef 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; | ||
541 | typedef enum PipeTiling { | ||
542 | CONFIG_1_PIPE = 0x0, | ||
543 | CONFIG_2_PIPE = 0x1, | ||
544 | CONFIG_4_PIPE = 0x2, | ||
545 | CONFIG_8_PIPE = 0x3, | ||
546 | } PipeTiling; | ||
547 | typedef enum BankTiling { | ||
548 | CONFIG_4_BANK = 0x0, | ||
549 | CONFIG_8_BANK = 0x1, | ||
550 | } BankTiling; | ||
551 | typedef enum GroupInterleave { | ||
552 | CONFIG_256B_GROUP = 0x0, | ||
553 | CONFIG_512B_GROUP = 0x1, | ||
554 | } GroupInterleave; | ||
555 | typedef 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; | ||
565 | typedef enum BankSwapBytes { | ||
566 | CONFIG_128B_SWAPS = 0x0, | ||
567 | CONFIG_256B_SWAPS = 0x1, | ||
568 | CONFIG_512B_SWAPS = 0x2, | ||
569 | CONFIG_1KB_SWAPS = 0x3, | ||
570 | } BankSwapBytes; | ||
571 | typedef enum SampleSplitBytes { | ||
572 | CONFIG_1KB_SPLIT = 0x0, | ||
573 | CONFIG_2KB_SPLIT = 0x1, | ||
574 | CONFIG_4KB_SPLIT = 0x2, | ||
575 | CONFIG_8KB_SPLIT = 0x3, | ||
576 | } SampleSplitBytes; | ||
577 | typedef 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; | ||
583 | typedef enum PipeInterleaveSize { | ||
584 | ADDR_CONFIG_PIPE_INTERLEAVE_256B = 0x0, | ||
585 | ADDR_CONFIG_PIPE_INTERLEAVE_512B = 0x1, | ||
586 | } PipeInterleaveSize; | ||
587 | typedef 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; | ||
593 | typedef enum NumShaderEngines { | ||
594 | ADDR_CONFIG_1_SHADER_ENGINE = 0x0, | ||
595 | ADDR_CONFIG_2_SHADER_ENGINE = 0x1, | ||
596 | } NumShaderEngines; | ||
597 | typedef enum ShaderEngineTileSize { | ||
598 | ADDR_CONFIG_SE_TILE_16 = 0x0, | ||
599 | ADDR_CONFIG_SE_TILE_32 = 0x1, | ||
600 | } ShaderEngineTileSize; | ||
601 | typedef enum NumGPUs { | ||
602 | ADDR_CONFIG_1_GPU = 0x0, | ||
603 | ADDR_CONFIG_2_GPU = 0x1, | ||
604 | ADDR_CONFIG_4_GPU = 0x2, | ||
605 | } NumGPUs; | ||
606 | typedef 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; | ||
612 | typedef enum RowSize { | ||
613 | ADDR_CONFIG_1KB_ROW = 0x0, | ||
614 | ADDR_CONFIG_2KB_ROW = 0x1, | ||
615 | ADDR_CONFIG_4KB_ROW = 0x2, | ||
616 | } RowSize; | ||
617 | typedef enum NumLowerPipes { | ||
618 | ADDR_CONFIG_1_LOWER_PIPES = 0x0, | ||
619 | ADDR_CONFIG_2_LOWER_PIPES = 0x1, | ||
620 | } NumLowerPipes; | ||
621 | typedef 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; | ||
627 | typedef 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; | ||
637 | typedef enum ReadSize { | ||
638 | READ_256_BITS = 0x0, | ||
639 | READ_512_BITS = 0x1, | ||
640 | } ReadSize; | ||
641 | typedef 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; | ||
651 | typedef enum ZFormat { | ||
652 | Z_INVALID = 0x0, | ||
653 | Z_16 = 0x1, | ||
654 | Z_24 = 0x2, | ||
655 | Z_32_FLOAT = 0x3, | ||
656 | } ZFormat; | ||
657 | typedef enum StencilFormat { | ||
658 | STENCIL_INVALID = 0x0, | ||
659 | STENCIL_8 = 0x1, | ||
660 | } StencilFormat; | ||
661 | typedef 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; | ||
679 | typedef 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; | ||
689 | typedef 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; | ||
697 | typedef 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; | ||
723 | typedef 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; | ||
789 | typedef 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; | ||
807 | typedef 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; | ||
873 | typedef 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; | ||
883 | typedef 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; | ||
901 | typedef enum TileType { | ||
902 | ARRAY_COLOR_TILE = 0x0, | ||
903 | ARRAY_DEPTH_TILE = 0x1, | ||
904 | } TileType; | ||
905 | typedef enum NonDispTilingOrder { | ||
906 | ADDR_SURF_MICRO_TILING_DISPLAY = 0x0, | ||
907 | ADDR_SURF_MICRO_TILING_NON_DISPLAY = 0x1, | ||
908 | } NonDispTilingOrder; | ||
909 | typedef 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; | ||
916 | typedef 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; | ||
925 | typedef 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; | ||
931 | typedef 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; | ||
951 | typedef 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; | ||
957 | typedef 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; | ||
963 | typedef 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; | ||
969 | typedef 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; | ||
975 | typedef 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; | ||
981 | typedef enum GATCL1RequestType { | ||
982 | GATCL1_TYPE_NORMAL = 0x0, | ||
983 | GATCL1_TYPE_SHOOTDOWN = 0x1, | ||
984 | GATCL1_TYPE_BYPASS = 0x2, | ||
985 | } GATCL1RequestType; | ||
986 | typedef enum TCC_CACHE_POLICIES { | ||
987 | TCC_CACHE_POLICY_LRU = 0x0, | ||
988 | TCC_CACHE_POLICY_STREAM = 0x1, | ||
989 | } TCC_CACHE_POLICIES; | ||
990 | typedef enum MTYPE { | ||
991 | MTYPE_NC_NV = 0x0, | ||
992 | MTYPE_NC = 0x1, | ||
993 | MTYPE_CC = 0x2, | ||
994 | MTYPE_UC = 0x3, | ||
995 | } MTYPE; | ||
996 | typedef 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; | ||
1009 | typedef 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; | ||
1022 | typedef enum SurfaceTiling { | ||
1023 | ARRAY_LINEAR = 0x0, | ||
1024 | ARRAY_TILED = 0x1, | ||
1025 | } SurfaceTiling; | ||
1026 | typedef enum SurfaceArray { | ||
1027 | ARRAY_1D = 0x0, | ||
1028 | ARRAY_2D = 0x1, | ||
1029 | ARRAY_3D = 0x2, | ||
1030 | ARRAY_3D_SLICE = 0x3, | ||
1031 | } SurfaceArray; | ||
1032 | typedef enum ColorArray { | ||
1033 | ARRAY_2D_ALT_COLOR = 0x0, | ||
1034 | ARRAY_2D_COLOR = 0x1, | ||
1035 | ARRAY_3D_SLICE_COLOR = 0x3, | ||
1036 | } ColorArray; | ||
1037 | typedef enum DepthArray { | ||
1038 | ARRAY_2D_ALT_DEPTH = 0x0, | ||
1039 | ARRAY_2D_DEPTH = 0x1, | ||
1040 | } DepthArray; | ||
1041 | typedef enum ENUM_NUM_SIMD_PER_CU { | ||
1042 | NUM_SIMD_PER_CU = 0x4, | ||
1043 | } ENUM_NUM_SIMD_PER_CU; | ||
1044 | typedef 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; | ||
1050 | typedef enum MEM_PWR_FORCE_CTRL2 { | ||
1051 | NO_FORCE_REQ = 0x0, | ||
1052 | FORCE_LIGHT_SLEEP_REQ = 0x1, | ||
1053 | } MEM_PWR_FORCE_CTRL2; | ||
1054 | typedef enum MEM_PWR_DIS_CTRL { | ||
1055 | ENABLE_MEM_PWR_CTRL = 0x0, | ||
1056 | DISABLE_MEM_PWR_CTRL = 0x1, | ||
1057 | } MEM_PWR_DIS_CTRL; | ||
1058 | typedef 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; | ||
1063 | typedef 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 | ||
529 | config SND_SOC_PCM1792A | 529 | config 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 | ||
533 | config SND_SOC_PCM3008 | 533 | config 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 | |||
80 | snd-soc-ml26124-objs := ml26124.o | 80 | snd-soc-ml26124-objs := ml26124.o |
81 | snd-soc-nau8825-objs := nau8825.o | 81 | snd-soc-nau8825-objs := nau8825.o |
82 | snd-soc-pcm1681-objs := pcm1681.o | 82 | snd-soc-pcm1681-objs := pcm1681.o |
83 | snd-soc-pcm1792a-codec-objs := pcm1792a.o | 83 | snd-soc-pcm179x-codec-objs := pcm179x.o |
84 | snd-soc-pcm3008-objs := pcm3008.o | 84 | snd-soc-pcm3008-objs := pcm3008.o |
85 | snd-soc-pcm3168a-objs := pcm3168a.o | 85 | snd-soc-pcm3168a-objs := pcm3168a.o |
86 | snd-soc-pcm3168a-i2c-objs := pcm3168a-i2c.o | 86 | snd-soc-pcm3168a-i2c-objs := pcm3168a-i2c.o |
@@ -284,7 +284,7 @@ obj-$(CONFIG_SND_SOC_MC13783) += snd-soc-mc13783.o | |||
284 | obj-$(CONFIG_SND_SOC_ML26124) += snd-soc-ml26124.o | 284 | obj-$(CONFIG_SND_SOC_ML26124) += snd-soc-ml26124.o |
285 | obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o | 285 | obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o |
286 | obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o | 286 | obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o |
287 | obj-$(CONFIG_SND_SOC_PCM1792A) += snd-soc-pcm1792a-codec.o | 287 | obj-$(CONFIG_SND_SOC_PCM179X) += snd-soc-pcm179x-codec.o |
288 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o | 288 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o |
289 | obj-$(CONFIG_SND_SOC_PCM3168A) += snd-soc-pcm3168a.o | 289 | obj-$(CONFIG_SND_SOC_PCM3168A) += snd-soc-pcm3168a.o |
290 | obj-$(CONFIG_SND_SOC_PCM3168A_I2C) += snd-soc-pcm3168a-i2c.o | 290 | obj-$(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 | ||
1621 | static struct reg_sequence da7219_rev_aa_patch[] = { | ||
1622 | { DA7219_REFERENCES, 0x08 }, | ||
1623 | }; | ||
1624 | |||
1595 | static int da7219_probe(struct snd_soc_codec *codec) | 1625 | static 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 | ||
45 | struct hdac_hdmi_cvt { | 45 | struct 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 | ||
50 | struct hdac_hdmi_pin { | 51 | struct 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 | ||
56 | struct hdac_hdmi_dai_pin_map { | 58 | struct 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 | ||
62 | struct hdac_hdmi_priv { | 64 | struct 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 | ||
68 | static inline struct hdac_ext_device *to_hda_ext_device(struct device *dev) | 72 | static 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 | ||
75 | static int hdac_hdmi_setup_stream(struct hdac_ext_device *hdac, | 79 | static 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 | ||
191 | static int hdac_hdmi_set_hw_params(struct snd_pcm_substream *substream, | 197 | static 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 | ||
307 | static 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 | |||
327 | static void hdac_hdmi_fill_widget_info(struct snd_soc_dapm_widget *w, | 313 | static 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 | ||
369 | static int hdac_hdmi_init_dai_map(struct hdac_ext_device *edev, | 355 | static 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 | |||
396 | static 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 | |||
413 | static 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 | ||
464 | static int hdmi_codec_probe(struct snd_soc_codec *codec) | 485 | static 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 | ||
554 | static int hdac_hdmi_dev_remove(struct hdac_ext_device *edev) | 578 | static 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 | |||
48 | static 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 | |||
59 | static bool pcm1792a_accessible_reg(struct device *dev, unsigned int reg) | ||
60 | { | ||
61 | return reg >= 0x10 && reg <= 0x17; | ||
62 | } | ||
63 | |||
64 | static 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 | |||
73 | struct pcm1792a_private { | ||
74 | struct regmap *regmap; | ||
75 | unsigned int format; | ||
76 | unsigned int rate; | ||
77 | }; | ||
78 | |||
79 | static 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 | |||
90 | static 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 | |||
104 | static 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 | |||
156 | static 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 | |||
162 | static const DECLARE_TLV_DB_SCALE(pcm1792a_dac_tlv, -12000, 50, 1); | ||
163 | |||
164 | static 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 | |||
172 | static const struct snd_soc_dapm_widget pcm1792a_dapm_widgets[] = { | ||
173 | SND_SOC_DAPM_OUTPUT("IOUTL+"), | ||
174 | SND_SOC_DAPM_OUTPUT("IOUTL-"), | ||
175 | SND_SOC_DAPM_OUTPUT("IOUTR+"), | ||
176 | SND_SOC_DAPM_OUTPUT("IOUTR-"), | ||
177 | }; | ||
178 | |||
179 | static 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 | |||
186 | static 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 | |||
197 | static const struct of_device_id pcm1792a_of_match[] = { | ||
198 | { .compatible = "ti,pcm1792a", }, | ||
199 | { } | ||
200 | }; | ||
201 | MODULE_DEVICE_TABLE(of, pcm1792a_of_match); | ||
202 | |||
203 | static 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 | |||
213 | static 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 | |||
222 | static 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 | |||
245 | static int pcm1792a_spi_remove(struct spi_device *spi) | ||
246 | { | ||
247 | snd_soc_unregister_codec(&spi->dev); | ||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | static const struct spi_device_id pcm1792a_spi_ids[] = { | ||
252 | { "pcm1792a", 0 }, | ||
253 | { }, | ||
254 | }; | ||
255 | MODULE_DEVICE_TABLE(spi, pcm1792a_spi_ids); | ||
256 | |||
257 | static 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 | |||
267 | module_spi_driver(pcm1792a_codec_driver); | ||
268 | |||
269 | MODULE_DESCRIPTION("ASoC PCM1792A driver"); | ||
270 | MODULE_AUTHOR("Michael Trimarchi <michael@amarulasolutions.com>"); | ||
271 | MODULE_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 | |||
48 | static 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 | |||
59 | static bool pcm179x_accessible_reg(struct device *dev, unsigned int reg) | ||
60 | { | ||
61 | return reg >= 0x10 && reg <= 0x17; | ||
62 | } | ||
63 | |||
64 | static 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 | |||
73 | struct pcm179x_private { | ||
74 | struct regmap *regmap; | ||
75 | unsigned int format; | ||
76 | unsigned int rate; | ||
77 | }; | ||
78 | |||
79 | static 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 | |||
90 | static 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 | |||
104 | static 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 | |||
156 | static 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 | |||
162 | static const DECLARE_TLV_DB_SCALE(pcm179x_dac_tlv, -12000, 50, 1); | ||
163 | |||
164 | static 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 | |||
172 | static const struct snd_soc_dapm_widget pcm179x_dapm_widgets[] = { | ||
173 | SND_SOC_DAPM_OUTPUT("IOUTL+"), | ||
174 | SND_SOC_DAPM_OUTPUT("IOUTL-"), | ||
175 | SND_SOC_DAPM_OUTPUT("IOUTR+"), | ||
176 | SND_SOC_DAPM_OUTPUT("IOUTR-"), | ||
177 | }; | ||
178 | |||
179 | static 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 | |||
186 | static 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 | |||
197 | static const struct of_device_id pcm179x_of_match[] = { | ||
198 | { .compatible = "ti,pcm1792a", }, | ||
199 | { } | ||
200 | }; | ||
201 | MODULE_DEVICE_TABLE(of, pcm179x_of_match); | ||
202 | |||
203 | static 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 | |||
213 | static 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 | |||
222 | static 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 | |||
245 | static int pcm179x_spi_remove(struct spi_device *spi) | ||
246 | { | ||
247 | snd_soc_unregister_codec(&spi->dev); | ||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | static const struct spi_device_id pcm179x_spi_ids[] = { | ||
252 | { "pcm179x", 0 }, | ||
253 | { }, | ||
254 | }; | ||
255 | MODULE_DEVICE_TABLE(spi, pcm179x_spi_ids); | ||
256 | |||
257 | static 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 | |||
267 | module_spi_driver(pcm179x_codec_driver); | ||
268 | |||
269 | MODULE_DESCRIPTION("ASoC PCM179X driver"); | ||
270 | MODULE_AUTHOR("Michael Trimarchi <michael@amarulasolutions.com>"); | ||
271 | MODULE_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 | ||
491 | static 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 */ |
492 | static const struct snd_kcontrol_new rt5640_sto_adc_l_mix[] = { | 504 | static 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, | |||
1059 | static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { | 1071 | static 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 | ||
1321 | static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | 1347 | static 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 | } |
1982 | EXPORT_SYMBOL_GPL(rt5640_dmic_enable); | 2014 | EXPORT_SYMBOL_GPL(rt5640_dmic_enable); |
1983 | 2015 | ||
2016 | int 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 | } | ||
2084 | EXPORT_SYMBOL_GPL(rt5640_sel_asrc_clk_src); | ||
2085 | |||
1984 | static int rt5640_probe(struct snd_soc_codec *codec) | 2086 | static 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 | }; |
2180 | MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match); | 2283 | MODULE_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 */ | ||
2087 | enum { | ||
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 | |||
2082 | struct rt5640_priv { | 2096 | struct 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 | ||
2100 | int rt5640_dmic_enable(struct snd_soc_codec *codec, | 2115 | int 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); |
2117 | int 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 | ||
69 | static const struct reg_sequence rt5650_init_list[] = { | 68 | static 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 | ||
3331 | static 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 | |||
3324 | static int rt5645_probe(struct snd_soc_codec *codec) | 3339 | static 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[] = { | |||
3510 | MODULE_DEVICE_TABLE(i2c, rt5645_i2c_id); | 3525 | MODULE_DEVICE_TABLE(i2c, rt5645_i2c_id); |
3511 | 3526 | ||
3512 | #ifdef CONFIG_ACPI | 3527 | #ifdef CONFIG_ACPI |
3513 | static struct acpi_device_id rt5645_acpi_match[] = { | 3528 | static 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) | ||
1740 | static const struct of_device_id rt5651_of_match[] = { | ||
1741 | { .compatible = "realtek,rt5651", }, | ||
1742 | {}, | ||
1743 | }; | ||
1744 | MODULE_DEVICE_TABLE(of, rt5651_of_match); | ||
1745 | #endif | ||
1746 | |||
1747 | #ifdef CONFIG_ACPI | ||
1748 | static const struct acpi_device_id rt5651_acpi_match[] = { | ||
1749 | { "10EC5651", 0 }, | ||
1750 | { }, | ||
1751 | }; | ||
1752 | MODULE_DEVICE_TABLE(acpi, rt5651_acpi_match); | ||
1753 | #endif | ||
1754 | |||
1738 | static const struct i2c_device_id rt5651_i2c_id[] = { | 1755 | static const struct i2c_device_id rt5651_i2c_id[] = { |
1739 | { "rt5651", 0 }, | 1756 | { "rt5651", 0 }, |
1740 | { } | 1757 | { } |
1741 | }; | 1758 | }; |
1742 | MODULE_DEVICE_TABLE(i2c, rt5651_i2c_id); | 1759 | MODULE_DEVICE_TABLE(i2c, rt5651_i2c_id); |
1743 | 1760 | ||
1761 | static 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 | |||
1744 | static int rt5651_i2c_probe(struct i2c_client *i2c, | 1771 | static 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) | |||
1806 | static struct i2c_driver rt5651_i2c_driver = { | 1835 | static 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 | ||
361 | static int wm5110_clear_pga_volume(struct arizona *arizona, int output) | 361 | static 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 | ||
2176 | static 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 | |||
2180 | static int wm5110_codec_probe(struct snd_soc_codec *codec) | 2188 | static 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 | ||
2215 | static int wm5110_codec_remove(struct snd_soc_codec *codec) | 2234 | static 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 | ||
2278 | static struct snd_soc_platform_driver wm5110_compr_platform = { | 2302 | static 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"}; | |||
147 | static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"}; | 147 | static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"}; |
148 | static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"}; | 148 | static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"}; |
149 | static const char *wm8960_alcmode[] = {"ALC", "Limiter"}; | 149 | static const char *wm8960_alcmode[] = {"ALC", "Limiter"}; |
150 | static 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 | }; | ||
156 | static const char *wm8960_dmonomix[] = {"Stereo", "Mono"}; | ||
150 | 157 | ||
151 | static const struct soc_enum wm8960_enum[] = { | 158 | static 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 | ||
160 | static const int deemph_settings[] = { 0, 32000, 44100, 48000 }; | 169 | static 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), |
296 | SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume", | 305 | SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume", |
297 | WM8960_ROUTMIX, 4, 7, 1, bypass_tlv), | 306 | WM8960_ROUTMIX, 4, 7, 1, bypass_tlv), |
307 | |||
308 | SOC_ENUM("ADC Data Output Select", wm8960_enum[6]), | ||
309 | SOC_ENUM("DAC Mono Mix", wm8960_enum[7]), | ||
298 | }; | 310 | }; |
299 | 311 | ||
300 | static const struct snd_kcontrol_new wm8960_lin_boost[] = { | 312 | static 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 | ||
284 | struct wm_adsp_compr { | 289 | struct 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 | ||
2448 | static 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 | |||
2439 | int wm_adsp_compr_set_params(struct snd_compr_stream *stream, | 2453 | int 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 | } |
2456 | EXPORT_SYMBOL_GPL(wm_adsp_compr_set_params); | 2476 | EXPORT_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 | } |
2720 | EXPORT_SYMBOL_GPL(wm_adsp_compr_trigger); | 2752 | EXPORT_SYMBOL_GPL(wm_adsp_compr_trigger); |
2721 | 2753 | ||
2754 | static 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 | |||
2761 | static 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 | |||
2804 | int 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 | |||
2847 | out: | ||
2848 | mutex_unlock(&dsp->pwr_lock); | ||
2849 | |||
2850 | return ret; | ||
2851 | } | ||
2852 | EXPORT_SYMBOL_GPL(wm_adsp_compr_handle_irq); | ||
2853 | |||
2854 | static 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 | |||
2868 | int 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 | |||
2915 | out: | ||
2916 | mutex_unlock(&dsp->pwr_lock); | ||
2917 | |||
2918 | return ret; | ||
2919 | } | ||
2920 | EXPORT_SYMBOL_GPL(wm_adsp_compr_pointer); | ||
2921 | |||
2922 | static 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 | |||
2985 | static 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 | |||
3028 | int 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 | } | ||
3046 | EXPORT_SYMBOL_GPL(wm_adsp_compr_copy); | ||
3047 | |||
2722 | MODULE_LICENSE("GPL v2"); | 3048 | MODULE_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, | |||
112 | extern int wm_adsp_compr_get_caps(struct snd_compr_stream *stream, | 112 | extern int wm_adsp_compr_get_caps(struct snd_compr_stream *stream, |
113 | struct snd_compr_caps *caps); | 113 | struct snd_compr_caps *caps); |
114 | extern int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd); | 114 | extern int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd); |
115 | extern int wm_adsp_compr_handle_irq(struct wm_adsp *dsp); | ||
116 | extern int wm_adsp_compr_pointer(struct snd_compr_stream *stream, | ||
117 | struct snd_compr_tstamp *tstamp); | ||
118 | extern 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 | */ |
438 | struct fsl_asrc { | 443 | struct 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 | ||
458 | extern struct snd_soc_platform_driver fsl_asrc_platform; | 465 | extern 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 | ||
160 | static 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 | |||
159 | static bool fsl_ssi_writeable_reg(struct device *dev, unsigned int reg) | 175 | static 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 | ||
106 | config 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 | |||
106 | config SND_SOC_INTEL_CHT_BSW_RT5672_MACH | 118 | config 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) | |||
316 | static struct sst_acpi_mach sst_acpi_bytcr[] = { | 323 | static 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 | |||
3 | snd-soc-sst-byt-max98090-mach-objs := byt-max98090.o | 3 | snd-soc-sst-byt-max98090-mach-objs := byt-max98090.o |
4 | snd-soc-sst-broadwell-objs := broadwell.o | 4 | snd-soc-sst-broadwell-objs := broadwell.o |
5 | snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o | 5 | snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o |
6 | snd-soc-sst-bytcr-rt5651-objs := bytcr_rt5651.o | ||
6 | snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o | 7 | snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o |
7 | snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o | 8 | snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o |
8 | snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o | 9 | snd-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 | |||
15 | obj-$(CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH) += snd-soc-sst-byt-max98090-mach.o | 16 | obj-$(CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH) += snd-soc-sst-byt-max98090-mach.o |
16 | obj-$(CONFIG_SND_SOC_INTEL_BROADWELL_MACH) += snd-soc-sst-broadwell.o | 17 | obj-$(CONFIG_SND_SOC_INTEL_BROADWELL_MACH) += snd-soc-sst-broadwell.o |
17 | obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH) += snd-soc-sst-bytcr-rt5640.o | 18 | obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH) += snd-soc-sst-bytcr-rt5640.o |
19 | obj-$(CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH) += snd-soc-sst-bytcr-rt5651.o | ||
18 | obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o | 20 | obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o |
19 | obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o | 21 | obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o |
20 | obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o | 22 | obj-$(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 | ||
34 | static const struct snd_soc_dapm_widget byt_rt5640_widgets[] = { | 35 | static 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 | ||
338 | static char byt_rt5640_codec_name[16]; /* i2c-<HID>:00 with HID being 8 chars */ | ||
339 | |||
324 | static int snd_byt_rt5640_mc_probe(struct platform_device *pdev) | 340 | static 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 | |||
34 | static 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 | |||
41 | static 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 | |||
57 | static const struct snd_soc_dapm_route byt_rt5651_intmic_dmic1_map[] = { | ||
58 | {"DMIC1", NULL, "Internal Mic"}, | ||
59 | }; | ||
60 | |||
61 | static const struct snd_soc_dapm_route byt_rt5651_intmic_dmic2_map[] = { | ||
62 | {"DMIC2", NULL, "Internal Mic"}, | ||
63 | }; | ||
64 | |||
65 | static const struct snd_soc_dapm_route byt_rt5651_intmic_in1_map[] = { | ||
66 | {"Internal Mic", NULL, "micbias1"}, | ||
67 | {"IN1P", NULL, "Internal Mic"}, | ||
68 | }; | ||
69 | |||
70 | enum { | ||
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 | |||
79 | static unsigned long byt_rt5651_quirk = BYT_RT5651_DMIC1_MAP | | ||
80 | BYT_RT5651_DMIC_EN; | ||
81 | |||
82 | static 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 | |||
89 | static 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 | |||
117 | static const struct dmi_system_id byt_rt5651_quirk_table[] = { | ||
118 | {} | ||
119 | }; | ||
120 | |||
121 | static 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 | |||
157 | static 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 | |||
165 | static 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 | |||
206 | static unsigned int rates_48000[] = { | ||
207 | 48000, | ||
208 | }; | ||
209 | |||
210 | static struct snd_pcm_hw_constraint_list constraints_48000 = { | ||
211 | .count = ARRAY_SIZE(rates_48000), | ||
212 | .list = rates_48000, | ||
213 | }; | ||
214 | |||
215 | static 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 | |||
222 | static struct snd_soc_ops byt_rt5651_aif1_ops = { | ||
223 | .startup = byt_rt5651_aif1_startup, | ||
224 | }; | ||
225 | |||
226 | static struct snd_soc_ops byt_rt5651_be_ssp2_ops = { | ||
227 | .hw_params = byt_rt5651_aif1_hw_params, | ||
228 | }; | ||
229 | |||
230 | static 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 */ | ||
289 | static 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 | |||
301 | static 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 | |||
319 | static 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 | |||
327 | module_platform_driver(snd_byt_rt5651_mc_driver); | ||
328 | |||
329 | MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver for RT5651"); | ||
330 | MODULE_AUTHOR("Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>"); | ||
331 | MODULE_LICENSE("GPL v2"); | ||
332 | MODULE_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 @@ | |||
1 | snd-soc-sst-dsp-objs := sst-dsp.o | 1 | snd-soc-sst-dsp-objs := sst-dsp.o |
2 | ifneq ($(CONFIG_SND_SST_IPC_ACPI),) | ||
3 | snd-soc-sst-acpi-objs := sst-match-acpi.o | ||
4 | else | ||
2 | snd-soc-sst-acpi-objs := sst-acpi.o sst-match-acpi.o | 5 | snd-soc-sst-acpi-objs := sst-acpi.o sst-match-acpi.o |
6 | endif | ||
7 | |||
3 | snd-soc-sst-ipc-objs := sst-ipc.o | 8 | snd-soc-sst-ipc-objs := sst-ipc.o |
4 | 9 | ||
5 | snd-soc-sst-dsp-$(CONFIG_DW_DMAC_CORE) += sst-firmware.o | 10 | snd-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 | ||
60 | struct skl_ipc_init_instance_msg { | 65 | struct 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 | ||
64 | static 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 | */ | ||
81 | static 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 | */ | ||
96 | static 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 */ |
63 | static void skl_stream_update(struct hdac_bus *bus, struct hdac_stream *hstr) | 108 | static 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 | |||
51 | struct skl_dsp_resource { | 54 | struct 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 | ||
418 | rsnd_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 | ||
1658 | static int soc_bind_aux_dev(struct snd_soc_card *card, int num) | 1668 | static 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 | |||
1700 | err_defer: | ||
1701 | dev_err(card->dev, "ASoC: %s not registered\n", name); | ||
1702 | return -EPROBE_DEFER; | ||
1681 | } | 1703 | } |
1682 | 1704 | ||
1683 | static int soc_probe_aux_dev(struct snd_soc_card *card, int num) | 1705 | static 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 | ||
1706 | static void soc_remove_aux_dev(struct snd_soc_card *card, int num) | 1729 | static 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 | ||
1721 | static int snd_soc_init_codec_cache(struct snd_soc_codec *codec) | 1747 | static 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 | ||
1994 | probe_aux_dev_err: | 2015 | probe_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 | ||
1998 | probe_dai_err: | 2018 | probe_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) | |||
2039 | static int soc_cleanup_card_resources(struct snd_soc_card *card) | 2059 | static 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 */ | ||
2756 | static 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; | 2839 | err: |
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 | */ | ||
2855 | int 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 | ||
2815 | err: | 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 | } |
2885 | EXPORT_SYMBOL_GPL(snd_soc_register_dai); | ||
2820 | 2886 | ||
2821 | static void snd_soc_component_seq_notifier(struct snd_soc_dapm_context *dapm, | 2887 | static 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: | |||
599 | out: | 599 | out: |
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); |