0001
0002
0003
0004
0005
0006
0007
0008 #include "mt6797-afe-common.h"
0009
0010
0011 static const struct snd_soc_dapm_route mtk_dai_hostless_routes[] = {
0012
0013 {"ADDA_DL_CH1", "ADDA_UL_CH1", "Hostless LPBK DL"},
0014 {"ADDA_DL_CH1", "ADDA_UL_CH2", "Hostless LPBK DL"},
0015 {"ADDA_DL_CH2", "ADDA_UL_CH1", "Hostless LPBK DL"},
0016 {"ADDA_DL_CH2", "ADDA_UL_CH2", "Hostless LPBK DL"},
0017 {"Hostless LPBK UL", NULL, "ADDA Capture"},
0018
0019
0020 {"ADDA_DL_CH1", "PCM_1_CAP_CH1", "Hostless Speech DL"},
0021 {"ADDA_DL_CH2", "PCM_1_CAP_CH1", "Hostless Speech DL"},
0022 {"ADDA_DL_CH2", "PCM_1_CAP_CH2", "Hostless Speech DL"},
0023 {"ADDA_DL_CH1", "PCM_2_CAP_CH1", "Hostless Speech DL"},
0024 {"ADDA_DL_CH2", "PCM_2_CAP_CH1", "Hostless Speech DL"},
0025 {"ADDA_DL_CH2", "PCM_2_CAP_CH2", "Hostless Speech DL"},
0026 {"PCM_1_PB_CH1", "ADDA_UL_CH1", "Hostless Speech DL"},
0027 {"PCM_1_PB_CH2", "ADDA_UL_CH2", "Hostless Speech DL"},
0028 {"PCM_2_PB_CH1", "ADDA_UL_CH1", "Hostless Speech DL"},
0029 {"PCM_2_PB_CH2", "ADDA_UL_CH2", "Hostless Speech DL"},
0030
0031 {"Hostless Speech UL", NULL, "PCM 1 Capture"},
0032 {"Hostless Speech UL", NULL, "PCM 2 Capture"},
0033 {"Hostless Speech UL", NULL, "ADDA Capture"},
0034 };
0035
0036
0037 static int mtk_dai_hostless_startup(struct snd_pcm_substream *substream,
0038 struct snd_soc_dai *dai)
0039 {
0040 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
0041
0042 return snd_soc_set_runtime_hwparams(substream, afe->mtk_afe_hardware);
0043 }
0044
0045 static const struct snd_soc_dai_ops mtk_dai_hostless_ops = {
0046 .startup = mtk_dai_hostless_startup,
0047 };
0048
0049
0050 #define MTK_HOSTLESS_RATES (SNDRV_PCM_RATE_8000_48000 |\
0051 SNDRV_PCM_RATE_88200 |\
0052 SNDRV_PCM_RATE_96000 |\
0053 SNDRV_PCM_RATE_176400 |\
0054 SNDRV_PCM_RATE_192000)
0055
0056 #define MTK_HOSTLESS_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
0057 SNDRV_PCM_FMTBIT_S24_LE |\
0058 SNDRV_PCM_FMTBIT_S32_LE)
0059
0060 static struct snd_soc_dai_driver mtk_dai_hostless_driver[] = {
0061 {
0062 .name = "Hostless LPBK DAI",
0063 .id = MT6797_DAI_HOSTLESS_LPBK,
0064 .playback = {
0065 .stream_name = "Hostless LPBK DL",
0066 .channels_min = 1,
0067 .channels_max = 2,
0068 .rates = MTK_HOSTLESS_RATES,
0069 .formats = MTK_HOSTLESS_FORMATS,
0070 },
0071 .capture = {
0072 .stream_name = "Hostless LPBK UL",
0073 .channels_min = 1,
0074 .channels_max = 2,
0075 .rates = MTK_HOSTLESS_RATES,
0076 .formats = MTK_HOSTLESS_FORMATS,
0077 },
0078 .ops = &mtk_dai_hostless_ops,
0079 },
0080 {
0081 .name = "Hostless Speech DAI",
0082 .id = MT6797_DAI_HOSTLESS_SPEECH,
0083 .playback = {
0084 .stream_name = "Hostless Speech DL",
0085 .channels_min = 1,
0086 .channels_max = 2,
0087 .rates = MTK_HOSTLESS_RATES,
0088 .formats = MTK_HOSTLESS_FORMATS,
0089 },
0090 .capture = {
0091 .stream_name = "Hostless Speech UL",
0092 .channels_min = 1,
0093 .channels_max = 2,
0094 .rates = MTK_HOSTLESS_RATES,
0095 .formats = MTK_HOSTLESS_FORMATS,
0096 },
0097 .ops = &mtk_dai_hostless_ops,
0098 },
0099 };
0100
0101 int mt6797_dai_hostless_register(struct mtk_base_afe *afe)
0102 {
0103 struct mtk_base_afe_dai *dai;
0104
0105 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
0106 if (!dai)
0107 return -ENOMEM;
0108
0109 list_add(&dai->list, &afe->sub_dais);
0110
0111 dai->dai_drivers = mtk_dai_hostless_driver;
0112 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_hostless_driver);
0113
0114 dai->dapm_routes = mtk_dai_hostless_routes;
0115 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_hostless_routes);
0116
0117 return 0;
0118 }