Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/mediatek/common/mtk-base-afe.h
26450 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* mtk-base-afe.h -- Mediatek base afe structure
4
*
5
* Copyright (c) 2016 MediaTek Inc.
6
* Author: Garlic Tseng <[email protected]>
7
*/
8
9
#ifndef _MTK_BASE_AFE_H_
10
#define _MTK_BASE_AFE_H_
11
12
#include <linux/soc/mediatek/mtk_sip_svc.h>
13
14
#define MTK_STREAM_NUM (SNDRV_PCM_STREAM_LAST + 1)
15
#define MTK_SIP_AUDIO_CONTROL MTK_SIP_SMC_CMD(0x517)
16
17
/* SMC CALL Operations */
18
enum mtk_audio_smc_call_op {
19
MTK_AUDIO_SMC_OP_INIT = 0,
20
MTK_AUDIO_SMC_OP_DRAM_REQUEST,
21
MTK_AUDIO_SMC_OP_DRAM_RELEASE,
22
MTK_AUDIO_SMC_OP_SRAM_REQUEST,
23
MTK_AUDIO_SMC_OP_SRAM_RELEASE,
24
MTK_AUDIO_SMC_OP_ADSP_REQUEST,
25
MTK_AUDIO_SMC_OP_ADSP_RELEASE,
26
MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,
27
MTK_AUDIO_SMC_OP_BTCVSD_WRITE,
28
MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_CLEAR,
29
MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_UNDERFLOW,
30
MTK_AUDIO_SMC_OP_NUM
31
};
32
33
struct mtk_base_memif_data {
34
int id;
35
const char *name;
36
int reg_ofs_base;
37
int reg_ofs_cur;
38
int reg_ofs_end;
39
int reg_ofs_base_msb;
40
int reg_ofs_cur_msb;
41
int reg_ofs_end_msb;
42
int fs_reg;
43
int fs_shift;
44
int fs_maskbit;
45
int mono_reg;
46
int mono_shift;
47
int mono_invert;
48
int quad_ch_reg;
49
int quad_ch_mask;
50
int quad_ch_shift;
51
int int_odd_flag_reg;
52
int int_odd_flag_shift;
53
int enable_reg;
54
int enable_shift;
55
int hd_reg;
56
int hd_shift;
57
int hd_align_reg;
58
int hd_align_mshift;
59
int msb_reg;
60
int msb_shift;
61
int msb_end_reg;
62
int msb_end_shift;
63
int agent_disable_reg;
64
int agent_disable_shift;
65
int ch_num_reg;
66
int ch_num_shift;
67
int ch_num_maskbit;
68
/* playback memif only */
69
int pbuf_reg;
70
int pbuf_mask;
71
int pbuf_shift;
72
int minlen_reg;
73
int minlen_mask;
74
int minlen_shift;
75
};
76
77
struct mtk_base_irq_data {
78
int id;
79
int irq_cnt_reg;
80
int irq_cnt_shift;
81
int irq_cnt_maskbit;
82
int irq_fs_reg;
83
int irq_fs_shift;
84
int irq_fs_maskbit;
85
int irq_en_reg;
86
int irq_en_shift;
87
int irq_clr_reg;
88
int irq_clr_shift;
89
int irq_status_shift;
90
};
91
92
struct device;
93
struct list_head;
94
struct mtk_base_afe_memif;
95
struct mtk_base_afe_irq;
96
struct mtk_base_afe_dai;
97
struct regmap;
98
struct snd_pcm_substream;
99
struct snd_soc_dai;
100
101
struct mtk_base_afe {
102
void __iomem *base_addr;
103
struct device *dev;
104
struct regmap *regmap;
105
struct mutex irq_alloc_lock; /* dynamic alloc irq lock */
106
107
unsigned int const *reg_back_up_list;
108
unsigned int *reg_back_up;
109
unsigned int reg_back_up_list_num;
110
111
int (*runtime_suspend)(struct device *dev);
112
int (*runtime_resume)(struct device *dev);
113
bool suspended;
114
115
struct mtk_base_afe_memif *memif;
116
int memif_size;
117
struct mtk_base_afe_irq *irqs;
118
int irqs_size;
119
int memif_32bit_supported;
120
bool preallocate_buffers;
121
122
struct list_head sub_dais;
123
struct snd_soc_dai_driver *dai_drivers;
124
unsigned int num_dai_drivers;
125
126
const struct snd_pcm_hardware *mtk_afe_hardware;
127
int (*memif_fs)(struct snd_pcm_substream *substream,
128
unsigned int rate);
129
int (*irq_fs)(struct snd_pcm_substream *substream,
130
unsigned int rate);
131
int (*get_dai_fs)(struct mtk_base_afe *afe,
132
int dai_id, unsigned int rate);
133
int (*get_memif_pbuf_size)(struct snd_pcm_substream *substream);
134
135
int (*request_dram_resource)(struct device *dev);
136
int (*release_dram_resource)(struct device *dev);
137
138
void *platform_priv;
139
};
140
141
struct mtk_base_afe_memif {
142
unsigned int phys_buf_addr;
143
int buffer_size;
144
struct snd_pcm_substream *substream;
145
const struct mtk_base_memif_data *data;
146
int irq_usage;
147
int const_irq;
148
unsigned char *dma_area;
149
dma_addr_t dma_addr;
150
size_t dma_bytes;
151
};
152
153
struct mtk_base_afe_irq {
154
const struct mtk_base_irq_data *irq_data;
155
int irq_occupyed;
156
};
157
158
struct mtk_base_afe_dai {
159
struct snd_soc_dai_driver *dai_drivers;
160
unsigned int num_dai_drivers;
161
162
const struct snd_kcontrol_new *controls;
163
unsigned int num_controls;
164
const struct snd_soc_dapm_widget *dapm_widgets;
165
unsigned int num_dapm_widgets;
166
const struct snd_soc_dapm_route *dapm_routes;
167
unsigned int num_dapm_routes;
168
169
struct list_head list;
170
};
171
172
#endif
173
174
175