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