# 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
 
--- /dev/null
+// 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);
 
--- /dev/null
+/* 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
 
 #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[] = {
                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) {
                                   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);
 
 
 #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,
        /* 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),
                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) {
                                   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);
 
 
 #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,
        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 {
        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),
                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 */
                }
        } 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);
 
 #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
 
        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;
        /* 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;
 
        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);
 
 #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,
        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),
                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 */
                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);
 
 
 #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
        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,
        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;
 
        /* 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;
        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: