Path: blob/master/sound/soc/mediatek/mt8192/mt8192-afe-control.c
26488 views
// SPDX-License-Identifier: GPL-2.01//2// MediaTek ALSA SoC Audio Control3//4// Copyright (c) 2020 MediaTek Inc.5// Author: Shane Chien <[email protected]>6//78#include "mt8192-afe-common.h"910enum {11MTK_AFE_RATE_8K = 0,12MTK_AFE_RATE_11K = 1,13MTK_AFE_RATE_12K = 2,14MTK_AFE_RATE_384K = 3,15MTK_AFE_RATE_16K = 4,16MTK_AFE_RATE_22K = 5,17MTK_AFE_RATE_24K = 6,18MTK_AFE_RATE_352K = 7,19MTK_AFE_RATE_32K = 8,20MTK_AFE_RATE_44K = 9,21MTK_AFE_RATE_48K = 10,22MTK_AFE_RATE_88K = 11,23MTK_AFE_RATE_96K = 12,24MTK_AFE_RATE_176K = 13,25MTK_AFE_RATE_192K = 14,26MTK_AFE_RATE_260K = 15,27};2829enum {30MTK_AFE_DAI_MEMIF_RATE_8K = 0,31MTK_AFE_DAI_MEMIF_RATE_16K = 1,32MTK_AFE_DAI_MEMIF_RATE_32K = 2,33MTK_AFE_DAI_MEMIF_RATE_48K = 3,34};3536enum {37MTK_AFE_PCM_RATE_8K = 0,38MTK_AFE_PCM_RATE_16K = 1,39MTK_AFE_PCM_RATE_32K = 2,40MTK_AFE_PCM_RATE_48K = 3,41};4243unsigned int mt8192_general_rate_transform(struct device *dev,44unsigned int rate)45{46switch (rate) {47case 8000:48return MTK_AFE_RATE_8K;49case 11025:50return MTK_AFE_RATE_11K;51case 12000:52return MTK_AFE_RATE_12K;53case 16000:54return MTK_AFE_RATE_16K;55case 22050:56return MTK_AFE_RATE_22K;57case 24000:58return MTK_AFE_RATE_24K;59case 32000:60return MTK_AFE_RATE_32K;61case 44100:62return MTK_AFE_RATE_44K;63case 48000:64return MTK_AFE_RATE_48K;65case 88200:66return MTK_AFE_RATE_88K;67case 96000:68return MTK_AFE_RATE_96K;69case 176400:70return MTK_AFE_RATE_176K;71case 192000:72return MTK_AFE_RATE_192K;73case 260000:74return MTK_AFE_RATE_260K;75case 352800:76return MTK_AFE_RATE_352K;77case 384000:78return MTK_AFE_RATE_384K;79default:80dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",81__func__,82rate, MTK_AFE_RATE_48K);83return MTK_AFE_RATE_48K;84}85}8687static unsigned int dai_memif_rate_transform(struct device *dev,88unsigned int rate)89{90switch (rate) {91case 8000:92return MTK_AFE_DAI_MEMIF_RATE_8K;93case 16000:94return MTK_AFE_DAI_MEMIF_RATE_16K;95case 32000:96return MTK_AFE_DAI_MEMIF_RATE_32K;97case 48000:98return MTK_AFE_DAI_MEMIF_RATE_48K;99default:100dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",101__func__,102rate, MTK_AFE_DAI_MEMIF_RATE_16K);103return MTK_AFE_DAI_MEMIF_RATE_16K;104}105}106107static unsigned int pcm_rate_transform(struct device *dev,108unsigned int rate)109{110switch (rate) {111case 8000:112return MTK_AFE_PCM_RATE_8K;113case 16000:114return MTK_AFE_PCM_RATE_16K;115case 32000:116return MTK_AFE_PCM_RATE_32K;117case 48000:118return MTK_AFE_PCM_RATE_48K;119default:120dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",121__func__,122rate, MTK_AFE_PCM_RATE_32K);123return MTK_AFE_PCM_RATE_32K;124}125}126127unsigned int mt8192_rate_transform(struct device *dev,128unsigned int rate, int aud_blk)129{130switch (aud_blk) {131case MT8192_MEMIF_DAI:132case MT8192_MEMIF_MOD_DAI:133return dai_memif_rate_transform(dev, rate);134case MT8192_DAI_PCM_1:135case MT8192_DAI_PCM_2:136return pcm_rate_transform(dev, rate);137default:138return mt8192_general_rate_transform(dev, rate);139}140}141142int mt8192_dai_set_priv(struct mtk_base_afe *afe, int id,143int priv_size, const void *priv_data)144{145struct mt8192_afe_private *afe_priv = afe->platform_priv;146void *temp_data;147148temp_data = devm_kzalloc(afe->dev,149priv_size,150GFP_KERNEL);151if (!temp_data)152return -ENOMEM;153154if (priv_data)155memcpy(temp_data, priv_data, priv_size);156157afe_priv->dai_priv[id] = temp_data;158159return 0;160}161162163