Loading sound/soc/mediatek/common/Makefile +2 −0 Original line number Diff line number Diff line # 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 sound/soc/mediatek/common/mtk-dai-adda-common.c 0 → 100644 +70 −0 Original line number Diff line number Diff line // 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); sound/soc/mediatek/common/mtk-dai-adda-common.h 0 → 100644 +45 −0 Original line number Diff line number Diff line /* 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 sound/soc/mediatek/common/mtk-soundcard-driver.c +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading sound/soc/mediatek/mt6797/mt6797-dai-adda.c +3 −82 Original line number Diff line number Diff line Loading @@ -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[] = { Loading Loading @@ -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) { Loading Loading @@ -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); Loading Loading
sound/soc/mediatek/common/Makefile +2 −0 Original line number Diff line number Diff line # 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
sound/soc/mediatek/common/mtk-dai-adda-common.c 0 → 100644 +70 −0 Original line number Diff line number Diff line // 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);
sound/soc/mediatek/common/mtk-dai-adda-common.h 0 → 100644 +45 −0 Original line number Diff line number Diff line /* 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
sound/soc/mediatek/common/mtk-soundcard-driver.c +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
sound/soc/mediatek/mt6797/mt6797-dai-adda.c +3 −82 Original line number Diff line number Diff line Loading @@ -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[] = { Loading Loading @@ -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) { Loading Loading @@ -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); Loading