Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 //
0003 // MediaTek ALSA SoC Audio Control
0004 //
0005 // Copyright (c) 2022 MediaTek Inc.
0006 // Author: Jiaxin Yu <jiaxin.yu@mediatek.com>
0007 
0008 #include "mt8186-afe-common.h"
0009 #include <linux/pm_runtime.h>
0010 
0011 enum {
0012     MTK_AFE_RATE_8K = 0,
0013     MTK_AFE_RATE_11K,
0014     MTK_AFE_RATE_12K,
0015     MTK_AFE_RATE_384K,
0016     MTK_AFE_RATE_16K,
0017     MTK_AFE_RATE_22K,
0018     MTK_AFE_RATE_24K,
0019     MTK_AFE_RATE_352K,
0020     MTK_AFE_RATE_32K,
0021     MTK_AFE_RATE_44K,
0022     MTK_AFE_RATE_48K,
0023     MTK_AFE_RATE_88K,
0024     MTK_AFE_RATE_96K,
0025     MTK_AFE_RATE_176K,
0026     MTK_AFE_RATE_192K,
0027     MTK_AFE_RATE_260K,
0028 };
0029 
0030 enum {
0031     MTK_AFE_PCM_RATE_8K = 0,
0032     MTK_AFE_PCM_RATE_16K,
0033     MTK_AFE_PCM_RATE_32K,
0034     MTK_AFE_PCM_RATE_48K,
0035 };
0036 
0037 enum {
0038     MTK_AFE_TDM_RATE_8K = 0,
0039     MTK_AFE_TDM_RATE_12K,
0040     MTK_AFE_TDM_RATE_16K,
0041     MTK_AFE_TDM_RATE_24K,
0042     MTK_AFE_TDM_RATE_32K,
0043     MTK_AFE_TDM_RATE_48K,
0044     MTK_AFE_TDM_RATE_64K,
0045     MTK_AFE_TDM_RATE_96K,
0046     MTK_AFE_TDM_RATE_128K,
0047     MTK_AFE_TDM_RATE_192K,
0048     MTK_AFE_TDM_RATE_256K,
0049     MTK_AFE_TDM_RATE_384K,
0050     MTK_AFE_TDM_RATE_11K,
0051     MTK_AFE_TDM_RATE_22K,
0052     MTK_AFE_TDM_RATE_44K,
0053     MTK_AFE_TDM_RATE_88K,
0054     MTK_AFE_TDM_RATE_176K,
0055     MTK_AFE_TDM_RATE_352K,
0056 };
0057 
0058 enum {
0059     MTK_AFE_TDM_RELATCH_RATE_8K = 0,
0060     MTK_AFE_TDM_RELATCH_RATE_11K,
0061     MTK_AFE_TDM_RELATCH_RATE_12K,
0062     MTK_AFE_TDM_RELATCH_RATE_16K,
0063     MTK_AFE_TDM_RELATCH_RATE_22K,
0064     MTK_AFE_TDM_RELATCH_RATE_24K,
0065     MTK_AFE_TDM_RELATCH_RATE_32K,
0066     MTK_AFE_TDM_RELATCH_RATE_44K,
0067     MTK_AFE_TDM_RELATCH_RATE_48K,
0068     MTK_AFE_TDM_RELATCH_RATE_88K,
0069     MTK_AFE_TDM_RELATCH_RATE_96K,
0070     MTK_AFE_TDM_RELATCH_RATE_176K,
0071     MTK_AFE_TDM_RELATCH_RATE_192K,
0072     MTK_AFE_TDM_RELATCH_RATE_352K,
0073     MTK_AFE_TDM_RELATCH_RATE_384K,
0074 };
0075 
0076 unsigned int mt8186_general_rate_transform(struct device *dev, unsigned int rate)
0077 {
0078     switch (rate) {
0079     case 8000:
0080         return MTK_AFE_RATE_8K;
0081     case 11025:
0082         return MTK_AFE_RATE_11K;
0083     case 12000:
0084         return MTK_AFE_RATE_12K;
0085     case 16000:
0086         return MTK_AFE_RATE_16K;
0087     case 22050:
0088         return MTK_AFE_RATE_22K;
0089     case 24000:
0090         return MTK_AFE_RATE_24K;
0091     case 32000:
0092         return MTK_AFE_RATE_32K;
0093     case 44100:
0094         return MTK_AFE_RATE_44K;
0095     case 48000:
0096         return MTK_AFE_RATE_48K;
0097     case 88200:
0098         return MTK_AFE_RATE_88K;
0099     case 96000:
0100         return MTK_AFE_RATE_96K;
0101     case 176400:
0102         return MTK_AFE_RATE_176K;
0103     case 192000:
0104         return MTK_AFE_RATE_192K;
0105     case 260000:
0106         return MTK_AFE_RATE_260K;
0107     case 352800:
0108         return MTK_AFE_RATE_352K;
0109     case 384000:
0110         return MTK_AFE_RATE_384K;
0111     default:
0112         dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
0113             __func__, rate, MTK_AFE_RATE_48K);
0114     }
0115 
0116     return MTK_AFE_RATE_48K;
0117 }
0118 
0119 static unsigned int tdm_rate_transform(struct device *dev, unsigned int rate)
0120 {
0121     switch (rate) {
0122     case 8000:
0123         return MTK_AFE_TDM_RATE_8K;
0124     case 11025:
0125         return MTK_AFE_TDM_RATE_11K;
0126     case 12000:
0127         return MTK_AFE_TDM_RATE_12K;
0128     case 16000:
0129         return MTK_AFE_TDM_RATE_16K;
0130     case 22050:
0131         return MTK_AFE_TDM_RATE_22K;
0132     case 24000:
0133         return MTK_AFE_TDM_RATE_24K;
0134     case 32000:
0135         return MTK_AFE_TDM_RATE_32K;
0136     case 44100:
0137         return MTK_AFE_TDM_RATE_44K;
0138     case 48000:
0139         return MTK_AFE_TDM_RATE_48K;
0140     case 64000:
0141         return MTK_AFE_TDM_RATE_64K;
0142     case 88200:
0143         return MTK_AFE_TDM_RATE_88K;
0144     case 96000:
0145         return MTK_AFE_TDM_RATE_96K;
0146     case 128000:
0147         return MTK_AFE_TDM_RATE_128K;
0148     case 176400:
0149         return MTK_AFE_TDM_RATE_176K;
0150     case 192000:
0151         return MTK_AFE_TDM_RATE_192K;
0152     case 256000:
0153         return MTK_AFE_TDM_RATE_256K;
0154     case 352800:
0155         return MTK_AFE_TDM_RATE_352K;
0156     case 384000:
0157         return MTK_AFE_TDM_RATE_384K;
0158     default:
0159         dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
0160             __func__, rate, MTK_AFE_TDM_RATE_48K);
0161     }
0162 
0163     return MTK_AFE_TDM_RATE_48K;
0164 }
0165 
0166 static unsigned int pcm_rate_transform(struct device *dev, unsigned int rate)
0167 {
0168     switch (rate) {
0169     case 8000:
0170         return MTK_AFE_PCM_RATE_8K;
0171     case 16000:
0172         return MTK_AFE_PCM_RATE_16K;
0173     case 32000:
0174         return MTK_AFE_PCM_RATE_32K;
0175     case 48000:
0176         return MTK_AFE_PCM_RATE_48K;
0177     default:
0178         dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
0179             __func__, rate, MTK_AFE_PCM_RATE_48K);
0180     }
0181 
0182     return MTK_AFE_PCM_RATE_48K;
0183 }
0184 
0185 unsigned int mt8186_tdm_relatch_rate_transform(struct device *dev, unsigned int rate)
0186 {
0187     switch (rate) {
0188     case 8000:
0189         return MTK_AFE_TDM_RELATCH_RATE_8K;
0190     case 11025:
0191         return MTK_AFE_TDM_RELATCH_RATE_11K;
0192     case 12000:
0193         return MTK_AFE_TDM_RELATCH_RATE_12K;
0194     case 16000:
0195         return MTK_AFE_TDM_RELATCH_RATE_16K;
0196     case 22050:
0197         return MTK_AFE_TDM_RELATCH_RATE_22K;
0198     case 24000:
0199         return MTK_AFE_TDM_RELATCH_RATE_24K;
0200     case 32000:
0201         return MTK_AFE_TDM_RELATCH_RATE_32K;
0202     case 44100:
0203         return MTK_AFE_TDM_RELATCH_RATE_44K;
0204     case 48000:
0205         return MTK_AFE_TDM_RELATCH_RATE_48K;
0206     case 88200:
0207         return MTK_AFE_TDM_RELATCH_RATE_88K;
0208     case 96000:
0209         return MTK_AFE_TDM_RELATCH_RATE_96K;
0210     case 176400:
0211         return MTK_AFE_TDM_RELATCH_RATE_176K;
0212     case 192000:
0213         return MTK_AFE_TDM_RELATCH_RATE_192K;
0214     case 352800:
0215         return MTK_AFE_TDM_RELATCH_RATE_352K;
0216     case 384000:
0217         return MTK_AFE_TDM_RELATCH_RATE_384K;
0218     default:
0219         dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
0220             __func__, rate, MTK_AFE_TDM_RELATCH_RATE_48K);
0221     }
0222 
0223     return MTK_AFE_TDM_RELATCH_RATE_48K;
0224 }
0225 
0226 unsigned int mt8186_rate_transform(struct device *dev, unsigned int rate, int aud_blk)
0227 {
0228     switch (aud_blk) {
0229     case MT8186_DAI_PCM:
0230         return pcm_rate_transform(dev, rate);
0231     case MT8186_DAI_TDM_IN:
0232         return tdm_rate_transform(dev, rate);
0233     default:
0234         return mt8186_general_rate_transform(dev, rate);
0235     }
0236 }
0237 
0238 int mt8186_dai_set_priv(struct mtk_base_afe *afe, int id, int priv_size, const void *priv_data)
0239 {
0240     struct mt8186_afe_private *afe_priv = afe->platform_priv;
0241     void *temp_data;
0242 
0243     temp_data = devm_kzalloc(afe->dev,
0244                  priv_size,
0245                  GFP_KERNEL);
0246     if (!temp_data)
0247         return -ENOMEM;
0248 
0249     if (priv_data)
0250         memcpy(temp_data, priv_data, priv_size);
0251 
0252     afe_priv->dai_priv[id] = temp_data;
0253 
0254     return 0;
0255 }