~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/mediatek/mt8186/mt8186-afe-control.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 10 enum {
 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 
 29 enum {
 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 
 36 enum {
 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 
 57 enum {
 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 
 75 unsigned 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 
118 static 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 
165 static 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 
184 unsigned 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 
225 unsigned 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 
237 int 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 }
255 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php