255 lines · c
1// SPDX-License-Identifier: GPL-2.02//3// MediaTek ALSA SoC Audio Control4//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}255