File Index
Files and directories
Sign in
FILE

mt8186-afe-control.c

File preview with syntax highlighting.

linux-6.19.14/sound/soc/mediatek/mt8186/mt8186-afe-control.c C
  1// SPDX-License-Identifier: GPL-2.0
  2//
  3// MediaTek ALSA SoC Audio Control
  4//
  5// Copyright (c) 2022 MediaTek Inc.
  6// Author: Jiaxin Yu <jiaxin.yu@mediatek.com>
  7
  8#include "mt8186-afe-common.h"
  9
 10enum {
 11	MTK_AFE_RATE_8K = 0,
 12	MTK_AFE_RATE_11K,
 13	MTK_AFE_RATE_12K,
 14	MTK_AFE_RATE_384K,
 15	MTK_AFE_RATE_16K,
 16	MTK_AFE_RATE_22K,
 17	MTK_AFE_RATE_24K,
 18	MTK_AFE_RATE_352K,
 19	MTK_AFE_RATE_32K,
 20	MTK_AFE_RATE_44K,
 21	MTK_AFE_RATE_48K,
 22	MTK_AFE_RATE_88K,
 23	MTK_AFE_RATE_96K,
 24	MTK_AFE_RATE_176K,
 25	MTK_AFE_RATE_192K,
 26	MTK_AFE_RATE_260K,
 27};
 28
 29enum {
 30	MTK_AFE_PCM_RATE_8K = 0,
 31	MTK_AFE_PCM_RATE_16K,
 32	MTK_AFE_PCM_RATE_32K,
 33	MTK_AFE_PCM_RATE_48K,
 34};
 35
 36enum {
 37	MTK_AFE_TDM_RATE_8K = 0,
 38	MTK_AFE_TDM_RATE_12K,
 39	MTK_AFE_TDM_RATE_16K,
 40	MTK_AFE_TDM_RATE_24K,
 41	MTK_AFE_TDM_RATE_32K,
 42	MTK_AFE_TDM_RATE_48K,
 43	MTK_AFE_TDM_RATE_64K,
 44	MTK_AFE_TDM_RATE_96K,
 45	MTK_AFE_TDM_RATE_128K,
 46	MTK_AFE_TDM_RATE_192K,
 47	MTK_AFE_TDM_RATE_256K,
 48	MTK_AFE_TDM_RATE_384K,
 49	MTK_AFE_TDM_RATE_11K,
 50	MTK_AFE_TDM_RATE_22K,
 51	MTK_AFE_TDM_RATE_44K,
 52	MTK_AFE_TDM_RATE_88K,
 53	MTK_AFE_TDM_RATE_176K,
 54	MTK_AFE_TDM_RATE_352K,
 55};
 56
 57enum {
 58	MTK_AFE_TDM_RELATCH_RATE_8K = 0,
 59	MTK_AFE_TDM_RELATCH_RATE_11K,
 60	MTK_AFE_TDM_RELATCH_RATE_12K,
 61	MTK_AFE_TDM_RELATCH_RATE_16K,
 62	MTK_AFE_TDM_RELATCH_RATE_22K,
 63	MTK_AFE_TDM_RELATCH_RATE_24K,
 64	MTK_AFE_TDM_RELATCH_RATE_32K,
 65	MTK_AFE_TDM_RELATCH_RATE_44K,
 66	MTK_AFE_TDM_RELATCH_RATE_48K,
 67	MTK_AFE_TDM_RELATCH_RATE_88K,
 68	MTK_AFE_TDM_RELATCH_RATE_96K,
 69	MTK_AFE_TDM_RELATCH_RATE_176K,
 70	MTK_AFE_TDM_RELATCH_RATE_192K,
 71	MTK_AFE_TDM_RELATCH_RATE_352K,
 72	MTK_AFE_TDM_RELATCH_RATE_384K,
 73};
 74
 75unsigned int mt8186_general_rate_transform(struct device *dev, unsigned int rate)
 76{
 77	switch (rate) {
 78	case 8000:
 79		return MTK_AFE_RATE_8K;
 80	case 11025:
 81		return MTK_AFE_RATE_11K;
 82	case 12000:
 83		return MTK_AFE_RATE_12K;
 84	case 16000:
 85		return MTK_AFE_RATE_16K;
 86	case 22050:
 87		return MTK_AFE_RATE_22K;
 88	case 24000:
 89		return MTK_AFE_RATE_24K;
 90	case 32000:
 91		return MTK_AFE_RATE_32K;
 92	case 44100:
 93		return MTK_AFE_RATE_44K;
 94	case 48000:
 95		return MTK_AFE_RATE_48K;
 96	case 88200:
 97		return MTK_AFE_RATE_88K;
 98	case 96000:
 99		return MTK_AFE_RATE_96K;
100	case 176400:
101		return MTK_AFE_RATE_176K;
102	case 192000:
103		return MTK_AFE_RATE_192K;
104	case 260000:
105		return MTK_AFE_RATE_260K;
106	case 352800:
107		return MTK_AFE_RATE_352K;
108	case 384000:
109		return MTK_AFE_RATE_384K;
110	default:
111		dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
112			__func__, rate, MTK_AFE_RATE_48K);
113	}
114
115	return MTK_AFE_RATE_48K;
116}
117
118static unsigned int tdm_rate_transform(struct device *dev, unsigned int rate)
119{
120	switch (rate) {
121	case 8000:
122		return MTK_AFE_TDM_RATE_8K;
123	case 11025:
124		return MTK_AFE_TDM_RATE_11K;
125	case 12000:
126		return MTK_AFE_TDM_RATE_12K;
127	case 16000:
128		return MTK_AFE_TDM_RATE_16K;
129	case 22050:
130		return MTK_AFE_TDM_RATE_22K;
131	case 24000:
132		return MTK_AFE_TDM_RATE_24K;
133	case 32000:
134		return MTK_AFE_TDM_RATE_32K;
135	case 44100:
136		return MTK_AFE_TDM_RATE_44K;
137	case 48000:
138		return MTK_AFE_TDM_RATE_48K;
139	case 64000:
140		return MTK_AFE_TDM_RATE_64K;
141	case 88200:
142		return MTK_AFE_TDM_RATE_88K;
143	case 96000:
144		return MTK_AFE_TDM_RATE_96K;
145	case 128000:
146		return MTK_AFE_TDM_RATE_128K;
147	case 176400:
148		return MTK_AFE_TDM_RATE_176K;
149	case 192000:
150		return MTK_AFE_TDM_RATE_192K;
151	case 256000:
152		return MTK_AFE_TDM_RATE_256K;
153	case 352800:
154		return MTK_AFE_TDM_RATE_352K;
155	case 384000:
156		return MTK_AFE_TDM_RATE_384K;
157	default:
158		dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
159			__func__, rate, MTK_AFE_TDM_RATE_48K);
160	}
161
162	return MTK_AFE_TDM_RATE_48K;
163}
164
165static unsigned int pcm_rate_transform(struct device *dev, unsigned int rate)
166{
167	switch (rate) {
168	case 8000:
169		return MTK_AFE_PCM_RATE_8K;
170	case 16000:
171		return MTK_AFE_PCM_RATE_16K;
172	case 32000:
173		return MTK_AFE_PCM_RATE_32K;
174	case 48000:
175		return MTK_AFE_PCM_RATE_48K;
176	default:
177		dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
178			__func__, rate, MTK_AFE_PCM_RATE_48K);
179	}
180
181	return MTK_AFE_PCM_RATE_48K;
182}
183
184unsigned int mt8186_tdm_relatch_rate_transform(struct device *dev, unsigned int rate)
185{
186	switch (rate) {
187	case 8000:
188		return MTK_AFE_TDM_RELATCH_RATE_8K;
189	case 11025:
190		return MTK_AFE_TDM_RELATCH_RATE_11K;
191	case 12000:
192		return MTK_AFE_TDM_RELATCH_RATE_12K;
193	case 16000:
194		return MTK_AFE_TDM_RELATCH_RATE_16K;
195	case 22050:
196		return MTK_AFE_TDM_RELATCH_RATE_22K;
197	case 24000:
198		return MTK_AFE_TDM_RELATCH_RATE_24K;
199	case 32000:
200		return MTK_AFE_TDM_RELATCH_RATE_32K;
201	case 44100:
202		return MTK_AFE_TDM_RELATCH_RATE_44K;
203	case 48000:
204		return MTK_AFE_TDM_RELATCH_RATE_48K;
205	case 88200:
206		return MTK_AFE_TDM_RELATCH_RATE_88K;
207	case 96000:
208		return MTK_AFE_TDM_RELATCH_RATE_96K;
209	case 176400:
210		return MTK_AFE_TDM_RELATCH_RATE_176K;
211	case 192000:
212		return MTK_AFE_TDM_RELATCH_RATE_192K;
213	case 352800:
214		return MTK_AFE_TDM_RELATCH_RATE_352K;
215	case 384000:
216		return MTK_AFE_TDM_RELATCH_RATE_384K;
217	default:
218		dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
219			__func__, rate, MTK_AFE_TDM_RELATCH_RATE_48K);
220	}
221
222	return MTK_AFE_TDM_RELATCH_RATE_48K;
223}
224
225unsigned int mt8186_rate_transform(struct device *dev, unsigned int rate, int aud_blk)
226{
227	switch (aud_blk) {
228	case MT8186_DAI_PCM:
229		return pcm_rate_transform(dev, rate);
230	case MT8186_DAI_TDM_IN:
231		return tdm_rate_transform(dev, rate);
232	default:
233		return mt8186_general_rate_transform(dev, rate);
234	}
235}
236
237int mt8186_dai_set_priv(struct mtk_base_afe *afe, int id, int priv_size, const void *priv_data)
238{
239	struct mt8186_afe_private *afe_priv = afe->platform_priv;
240	void *temp_data;
241
242	temp_data = devm_kzalloc(afe->dev,
243				 priv_size,
244				 GFP_KERNEL);
245	if (!temp_data)
246		return -ENOMEM;
247
248	if (priv_data)
249		memcpy(temp_data, priv_data, priv_size);
250
251	afe_priv->dai_priv[id] = temp_data;
252
253	return 0;
254}
~/ Read-only file preview.