mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-07 14:24:18 +08:00
SoC: Cleanup MediaTek soundcard machine drivers
Merge series from AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>: This is the start of a series cleaning up the Mediatek drivers with some preparatory cleanups and improvements.
This commit is contained in:
commit
6c26dac593
@ -1,6 +1,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# platform driver
|
||||
snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o mtk-soundcard-driver.o
|
||||
snd-soc-mtk-common-objs += mtk-dai-adda-common.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_MEDIATEK) += snd-soc-mtk-common.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += mtk-btcvsd.o
|
||||
|
70
sound/soc/mediatek/common/mtk-dai-adda-common.c
Normal file
70
sound/soc/mediatek/common/mtk-dai-adda-common.c
Normal file
@ -0,0 +1,70 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* MediaTek ALSA SoC Audio DAI ADDA Common
|
||||
*
|
||||
* Copyright (c) 2021 MediaTek Inc.
|
||||
* Copyright (c) 2024 Collabora Ltd.
|
||||
* AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dev_printk.h>
|
||||
|
||||
#include "mtk-base-afe.h"
|
||||
#include "mtk-dai-adda-common.h"
|
||||
|
||||
unsigned int mtk_adda_dl_rate_transform(struct mtk_base_afe *afe, u32 rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_adda_dl_rate_transform);
|
||||
|
||||
unsigned int mtk_adda_ul_rate_transform(struct mtk_base_afe *afe, u32 rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_adda_ul_rate_transform);
|
45
sound/soc/mediatek/common/mtk-dai-adda-common.h
Normal file
45
sound/soc/mediatek/common/mtk-dai-adda-common.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (c) 2021 MediaTek Inc.
|
||||
* Copyright (c) 2024 Collabora Ltd.
|
||||
* AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||
*/
|
||||
|
||||
#ifndef _MTK_DAI_ADDA_COMMON_H_
|
||||
#define _MTK_DAI_ADDA_COMMON_H_
|
||||
|
||||
struct mtk_base_afe;
|
||||
|
||||
enum adda_input_mode_rate {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum adda_voice_mode_rate {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
MTK_AFE_ADDA_UL_RATE_48K_HD = 6,
|
||||
};
|
||||
|
||||
enum adda_rxif_delay_data {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO0 = 1,
|
||||
DELAY_DATA_MISO2 = 1,
|
||||
};
|
||||
|
||||
unsigned int mtk_adda_dl_rate_transform(struct mtk_base_afe *afe, u32 rate);
|
||||
unsigned int mtk_adda_ul_rate_transform(struct mtk_base_afe *afe, u32 rate);
|
||||
#endif
|
@ -22,7 +22,11 @@ static int set_card_codec_info(struct snd_soc_card *card,
|
||||
|
||||
codec_node = of_get_child_by_name(sub_node, "codec");
|
||||
if (!codec_node) {
|
||||
dev_dbg(dev, "%s no specified codec\n", dai_link->name);
|
||||
dev_dbg(dev, "%s no specified codec: setting dummy.\n", dai_link->name);
|
||||
|
||||
dai_link->codecs = &snd_soc_dummy_dlc;
|
||||
dai_link->num_codecs = 1;
|
||||
dai_link->dynamic = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -10,86 +10,7 @@
|
||||
#include "mt6797-afe-common.h"
|
||||
#include "mt6797-interconnection.h"
|
||||
#include "mt6797-reg.h"
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
MTK_AFE_ADDA_UL_RATE_48K_HD = 6,
|
||||
};
|
||||
|
||||
static unsigned int adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
/* dai component */
|
||||
static const struct snd_kcontrol_new mtk_adda_dl_ch1_mix[] = {
|
||||
@ -246,7 +167,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON1, 0);
|
||||
|
||||
/* set input sampling rate */
|
||||
dl_src2_con0 = adda_dl_rate_transform(afe, rate) << 28;
|
||||
dl_src2_con0 = mtk_adda_dl_rate_transform(afe, rate) << 28;
|
||||
|
||||
/* set output mode */
|
||||
switch (rate) {
|
||||
@ -296,7 +217,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
0x1 << 0,
|
||||
0x0 << 0);
|
||||
|
||||
voice_mode = adda_ul_rate_transform(afe, rate);
|
||||
voice_mode = mtk_adda_ul_rate_transform(afe, rate);
|
||||
|
||||
ul_src_con0 |= (voice_mode << 17) & (0x7 << 17);
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "mt8183-afe-common.h"
|
||||
#include "mt8183-interconnection.h"
|
||||
#include "mt8183-reg.h"
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
enum {
|
||||
AUDIO_SDM_LEVEL_MUTE = 0,
|
||||
@ -18,91 +19,6 @@ enum {
|
||||
/* you need to change formula of hp impedance and dc trim too */
|
||||
};
|
||||
|
||||
enum {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO2,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
MTK_AFE_ADDA_UL_RATE_48K_HD = 6,
|
||||
};
|
||||
|
||||
static unsigned int adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
/* dai component */
|
||||
static const struct snd_kcontrol_new mtk_adda_dl_ch1_mix[] = {
|
||||
SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN3, I_DL1_CH1, 1, 0),
|
||||
@ -369,7 +285,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON1, 0);
|
||||
|
||||
/* set sampling rate */
|
||||
dl_src2_con0 = adda_dl_rate_transform(afe, rate) << 28;
|
||||
dl_src2_con0 = mtk_adda_dl_rate_transform(afe, rate) << 28;
|
||||
|
||||
/* set output mode */
|
||||
switch (rate) {
|
||||
@ -420,7 +336,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
0x1 << 0,
|
||||
0x0 << 0);
|
||||
|
||||
voice_mode = adda_ul_rate_transform(afe, rate);
|
||||
voice_mode = mtk_adda_ul_rate_transform(afe, rate);
|
||||
|
||||
ul_src_con0 |= (voice_mode << 17) & (0x7 << 17);
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "mt8186-afe-common.h"
|
||||
#include "mt8186-afe-gpio.h"
|
||||
#include "mt8186-interconnection.h"
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
enum {
|
||||
UL_IIR_SW = 0,
|
||||
@ -33,35 +34,6 @@ enum {
|
||||
AUDIO_SDM_3RD,
|
||||
};
|
||||
|
||||
enum {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO2,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
MTK_AFE_ADDA_UL_RATE_48K_HD = 6,
|
||||
};
|
||||
|
||||
#define SDM_AUTO_RESET_THRESHOLD 0x190000
|
||||
|
||||
struct mtk_afe_adda_priv {
|
||||
@ -83,64 +55,6 @@ static struct mtk_afe_adda_priv *get_adda_priv_by_name(struct mtk_base_afe *afe,
|
||||
return afe_priv->dai_priv[dai_id];
|
||||
}
|
||||
|
||||
static unsigned int adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_dbg(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
}
|
||||
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
|
||||
static unsigned int adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_dbg(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
}
|
||||
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
|
||||
/* dai component */
|
||||
static const struct snd_kcontrol_new mtk_adda_dl_ch1_mix[] = {
|
||||
SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN3, I_DL1_CH1, 1, 0),
|
||||
@ -658,7 +572,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
adda_priv->dl_rate = rate;
|
||||
|
||||
/* set sampling rate */
|
||||
dl_src2_con0 = adda_dl_rate_transform(afe, rate) <<
|
||||
dl_src2_con0 = mtk_adda_dl_rate_transform(afe, rate) <<
|
||||
DL_2_INPUT_MODE_CTL_SFT;
|
||||
|
||||
/* set output mode, UP_SAMPLING_RATE_X8 */
|
||||
@ -721,7 +635,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
}
|
||||
} else {
|
||||
unsigned int ul_src_con0 = 0;
|
||||
unsigned int voice_mode = adda_ul_rate_transform(afe, rate);
|
||||
unsigned int voice_mode = mtk_adda_ul_rate_transform(afe, rate);
|
||||
|
||||
adda_priv->ul_rate = rate;
|
||||
ul_src_con0 |= (voice_mode << 17) & (0x7 << 17);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "mt8188-afe-clk.h"
|
||||
#include "mt8188-afe-common.h"
|
||||
#include "mt8188-reg.h"
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
#define ADDA_HIRES_THRES 48000
|
||||
|
||||
@ -24,94 +25,10 @@ enum {
|
||||
SUPPLY_SEQ_ADDA_AFE_ON,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
};
|
||||
|
||||
enum {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO0 = 1,
|
||||
};
|
||||
|
||||
struct mtk_dai_adda_priv {
|
||||
bool hires_required;
|
||||
};
|
||||
|
||||
static unsigned int afe_adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int afe_adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static int mt8188_adda_mtkaif_init(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8188_afe_private *afe_priv = afe->platform_priv;
|
||||
@ -440,7 +357,7 @@ static int mtk_dai_da_configure(struct mtk_base_afe *afe,
|
||||
/* set sampling rate */
|
||||
mask |= DL_2_INPUT_MODE_CTL_MASK;
|
||||
val |= FIELD_PREP(DL_2_INPUT_MODE_CTL_MASK,
|
||||
afe_adda_dl_rate_transform(afe, rate));
|
||||
mtk_adda_dl_rate_transform(afe, rate));
|
||||
|
||||
/* turn off saturation */
|
||||
mask |= DL_2_CH1_SATURATION_EN_CTL;
|
||||
@ -474,7 +391,7 @@ static int mtk_dai_ad_configure(struct mtk_base_afe *afe,
|
||||
|
||||
mask = UL_VOICE_MODE_CTL_MASK;
|
||||
val = FIELD_PREP(UL_VOICE_MODE_CTL_MASK,
|
||||
afe_adda_ul_rate_transform(afe, rate));
|
||||
mtk_adda_ul_rate_transform(afe, rate));
|
||||
|
||||
regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0,
|
||||
mask, val);
|
||||
|
@ -2205,44 +2205,34 @@ static int mt8192_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
|
||||
/* reset controller to reset audio regs before regmap cache */
|
||||
rstc = devm_reset_control_get_exclusive(dev, "audiosys");
|
||||
if (IS_ERR(rstc)) {
|
||||
ret = PTR_ERR(rstc);
|
||||
dev_err(dev, "could not get audiosys reset:%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(rstc))
|
||||
return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n");
|
||||
|
||||
ret = reset_control_reset(rstc);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to trigger audio reset:%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "failed to trigger audio reset\n");
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
if (!pm_runtime_enabled(&pdev->dev))
|
||||
goto err_pm_disable;
|
||||
ret = devm_pm_runtime_enable(&pdev->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* regmap init */
|
||||
afe->regmap = syscon_node_to_regmap(dev->parent->of_node);
|
||||
if (IS_ERR(afe->regmap)) {
|
||||
dev_err(dev, "could not get regmap from parent\n");
|
||||
ret = PTR_ERR(afe->regmap);
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (IS_ERR(afe->regmap))
|
||||
return dev_err_probe(dev, PTR_ERR(afe->regmap),
|
||||
"could not get regmap from parent");
|
||||
|
||||
ret = regmap_attach_dev(dev, afe->regmap, &mt8192_afe_regmap_config);
|
||||
if (ret) {
|
||||
dev_warn(dev, "regmap_attach_dev fail, ret %d\n", ret);
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "regmap_attach_dev fail\n");
|
||||
|
||||
/* enable clock for regcache get default value from hw */
|
||||
afe_priv->pm_runtime_bypass_reg_ctl = true;
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
|
||||
ret = regmap_reinit_cache(afe->regmap, &mt8192_afe_regmap_config);
|
||||
if (ret) {
|
||||
dev_err(dev, "regmap_reinit_cache fail, ret %d\n", ret);
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "regmap_reinit_cache fail\n");
|
||||
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
afe_priv->pm_runtime_bypass_reg_ctl = false;
|
||||
@ -2254,10 +2244,8 @@ static int mt8192_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
afe->memif_size = MT8192_MEMIF_NUM;
|
||||
afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),
|
||||
GFP_KERNEL);
|
||||
if (!afe->memif) {
|
||||
ret = -ENOMEM;
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (!afe->memif)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < afe->memif_size; i++) {
|
||||
afe->memif[i].data = &memif_data[i];
|
||||
@ -2271,47 +2259,35 @@ static int mt8192_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
afe->irqs_size = MT8192_IRQ_NUM;
|
||||
afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),
|
||||
GFP_KERNEL);
|
||||
if (!afe->irqs) {
|
||||
ret = -ENOMEM;
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (!afe->irqs)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < afe->irqs_size; i++)
|
||||
afe->irqs[i].irq_data = &irq_data[i];
|
||||
|
||||
/* request irq */
|
||||
irq_id = platform_get_irq(pdev, 0);
|
||||
if (irq_id < 0) {
|
||||
ret = irq_id;
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (irq_id < 0)
|
||||
return irq_id;
|
||||
|
||||
ret = devm_request_irq(dev, irq_id, mt8192_afe_irq_handler,
|
||||
IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
|
||||
if (ret) {
|
||||
dev_err(dev, "could not request_irq for Afe_ISR_Handle\n");
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "could not request_irq for Afe_ISR_Handle\n");
|
||||
|
||||
/* init sub_dais */
|
||||
INIT_LIST_HEAD(&afe->sub_dais);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
|
||||
ret = dai_register_cbs[i](afe);
|
||||
if (ret) {
|
||||
dev_warn(afe->dev, "dai register i %d fail, ret %d\n",
|
||||
i, ret);
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(afe->dev, ret, "dai %d register fail", i);
|
||||
}
|
||||
|
||||
/* init dai_driver and component_driver */
|
||||
ret = mtk_afe_combine_sub_dai(afe);
|
||||
if (ret) {
|
||||
dev_warn(afe->dev, "mtk_afe_combine_sub_dai fail, ret %d\n",
|
||||
ret);
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(afe->dev, ret, "mtk_afe_combine_sub_dai fail\n");
|
||||
|
||||
/* others */
|
||||
afe->mtk_afe_hardware = &mt8192_afe_hardware;
|
||||
@ -2327,26 +2303,17 @@ static int mt8192_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
/* register platform */
|
||||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&mt8192_afe_component, NULL, 0);
|
||||
if (ret) {
|
||||
dev_warn(dev, "err_platform\n");
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Couldn't register AFE component\n");
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&mt8192_afe_pcm_component,
|
||||
afe->dai_drivers,
|
||||
afe->num_dai_drivers);
|
||||
if (ret) {
|
||||
dev_warn(dev, "err_dai_component\n");
|
||||
goto err_pm_disable;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Couldn't register AFE-PCM component\n");
|
||||
|
||||
return 0;
|
||||
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mt8192_afe_pcm_dev_remove(struct platform_device *pdev)
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "mt8192-afe-common.h"
|
||||
#include "mt8192-afe-gpio.h"
|
||||
#include "mt8192-interconnection.h"
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
enum {
|
||||
UL_IIR_SW = 0,
|
||||
@ -35,93 +36,8 @@ enum {
|
||||
AUDIO_SDM_3RD,
|
||||
};
|
||||
|
||||
enum {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO2,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
MTK_AFE_ADDA_UL_RATE_48K_HD = 6,
|
||||
};
|
||||
|
||||
#define SDM_AUTO_RESET_THRESHOLD 0x190000
|
||||
|
||||
static unsigned int adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
/* dai component */
|
||||
static const struct snd_kcontrol_new mtk_adda_dl_ch1_mix[] = {
|
||||
SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN3, I_DL1_CH1, 1, 0),
|
||||
@ -1156,7 +1072,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
unsigned int dl_src2_con1 = 0;
|
||||
|
||||
/* set sampling rate */
|
||||
dl_src2_con0 = adda_dl_rate_transform(afe, rate) <<
|
||||
dl_src2_con0 = mtk_adda_dl_rate_transform(afe, rate) <<
|
||||
DL_2_INPUT_MODE_CTL_SFT;
|
||||
|
||||
/* set output mode, UP_SAMPLING_RATE_X8 */
|
||||
@ -1246,7 +1162,7 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
|
||||
unsigned int voice_mode = 0;
|
||||
unsigned int ul_src_con0 = 0; /* default value */
|
||||
|
||||
voice_mode = adda_ul_rate_transform(afe, rate);
|
||||
voice_mode = mtk_adda_ul_rate_transform(afe, rate);
|
||||
|
||||
ul_src_con0 |= (voice_mode << 17) & (0x7 << 17);
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "mt8195-afe-clk.h"
|
||||
#include "mt8195-afe-common.h"
|
||||
#include "mt8195-reg.h"
|
||||
#include "../common/mtk-dai-adda-common.h"
|
||||
|
||||
#define ADDA_DL_GAIN_LOOPBACK 0x1800
|
||||
#define ADDA_HIRES_THRES 48000
|
||||
@ -25,35 +26,6 @@ enum {
|
||||
SUPPLY_SEQ_ADDA_AFE_ON,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_DL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_DL_RATE_11K = 1,
|
||||
MTK_AFE_ADDA_DL_RATE_12K = 2,
|
||||
MTK_AFE_ADDA_DL_RATE_16K = 3,
|
||||
MTK_AFE_ADDA_DL_RATE_22K = 4,
|
||||
MTK_AFE_ADDA_DL_RATE_24K = 5,
|
||||
MTK_AFE_ADDA_DL_RATE_32K = 6,
|
||||
MTK_AFE_ADDA_DL_RATE_44K = 7,
|
||||
MTK_AFE_ADDA_DL_RATE_48K = 8,
|
||||
MTK_AFE_ADDA_DL_RATE_96K = 9,
|
||||
MTK_AFE_ADDA_DL_RATE_192K = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA_UL_RATE_8K = 0,
|
||||
MTK_AFE_ADDA_UL_RATE_16K = 1,
|
||||
MTK_AFE_ADDA_UL_RATE_32K = 2,
|
||||
MTK_AFE_ADDA_UL_RATE_48K = 3,
|
||||
MTK_AFE_ADDA_UL_RATE_96K = 4,
|
||||
MTK_AFE_ADDA_UL_RATE_192K = 5,
|
||||
};
|
||||
|
||||
enum {
|
||||
DELAY_DATA_MISO1 = 0,
|
||||
DELAY_DATA_MISO0 = 1,
|
||||
DELAY_DATA_MISO2 = 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
MTK_AFE_ADDA,
|
||||
MTK_AFE_ADDA6,
|
||||
@ -63,62 +35,6 @@ struct mtk_dai_adda_priv {
|
||||
bool hires_required;
|
||||
};
|
||||
|
||||
static unsigned int afe_adda_dl_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_DL_RATE_8K;
|
||||
case 11025:
|
||||
return MTK_AFE_ADDA_DL_RATE_11K;
|
||||
case 12000:
|
||||
return MTK_AFE_ADDA_DL_RATE_12K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_DL_RATE_16K;
|
||||
case 22050:
|
||||
return MTK_AFE_ADDA_DL_RATE_22K;
|
||||
case 24000:
|
||||
return MTK_AFE_ADDA_DL_RATE_24K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_DL_RATE_32K;
|
||||
case 44100:
|
||||
return MTK_AFE_ADDA_DL_RATE_44K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_DL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_DL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_DL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int afe_adda_ul_rate_transform(struct mtk_base_afe *afe,
|
||||
unsigned int rate)
|
||||
{
|
||||
switch (rate) {
|
||||
case 8000:
|
||||
return MTK_AFE_ADDA_UL_RATE_8K;
|
||||
case 16000:
|
||||
return MTK_AFE_ADDA_UL_RATE_16K;
|
||||
case 32000:
|
||||
return MTK_AFE_ADDA_UL_RATE_32K;
|
||||
case 48000:
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
case 96000:
|
||||
return MTK_AFE_ADDA_UL_RATE_96K;
|
||||
case 192000:
|
||||
return MTK_AFE_ADDA_UL_RATE_192K;
|
||||
default:
|
||||
dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
|
||||
__func__, rate);
|
||||
return MTK_AFE_ADDA_UL_RATE_48K;
|
||||
}
|
||||
}
|
||||
|
||||
static int mt8195_adda_mtkaif_init(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8195_afe_private *afe_priv = afe->platform_priv;
|
||||
@ -644,7 +560,7 @@ static int mtk_dai_da_configure(struct mtk_base_afe *afe,
|
||||
|
||||
/* set sampling rate */
|
||||
mask |= DL_2_INPUT_MODE_CTL_MASK;
|
||||
val |= DL_2_INPUT_MODE_CTL(afe_adda_dl_rate_transform(afe, rate));
|
||||
val |= DL_2_INPUT_MODE_CTL(mtk_adda_dl_rate_transform(afe, rate));
|
||||
|
||||
/* turn off saturation */
|
||||
mask |= DL_2_CH1_SATURATION_EN_CTL;
|
||||
@ -681,7 +597,7 @@ static int mtk_dai_ad_configure(struct mtk_base_afe *afe,
|
||||
unsigned int mask = 0;
|
||||
|
||||
mask |= UL_VOICE_MODE_CTL_MASK;
|
||||
val |= UL_VOICE_MODE_CTL(afe_adda_ul_rate_transform(afe, rate));
|
||||
val |= UL_VOICE_MODE_CTL(mtk_adda_ul_rate_transform(afe, rate));
|
||||
|
||||
switch (id) {
|
||||
case MT8195_AFE_IO_UL_SRC1:
|
||||
|
Loading…
Reference in New Issue
Block a user