forked from Minki/linux
ASoC: mt6797: sub dai use list_head
Signed-off-by: KaiChieh Chuang <kaichieh.chuang@mediatek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f11c5db770
commit
c1d9b4196b
@ -10,6 +10,7 @@
|
||||
#define _MT_6797_AFE_COMMON_H_
|
||||
|
||||
#include <sound/soc.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/regmap.h>
|
||||
#include "../common/mtk-base-afe.h"
|
||||
|
||||
|
@ -733,6 +733,34 @@ static const struct snd_soc_component_driver mt6797_afe_component = {
|
||||
.probe = mt6797_afe_component_probe,
|
||||
};
|
||||
|
||||
static int mt6797_dai_memif_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mtk_base_afe_dai *dai;
|
||||
|
||||
dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
|
||||
if (!dai)
|
||||
return -ENOMEM;
|
||||
|
||||
list_add(&dai->list, &afe->sub_dais);
|
||||
|
||||
dai->dai_drivers = mt6797_memif_dai_driver;
|
||||
dai->num_dai_drivers = ARRAY_SIZE(mt6797_memif_dai_driver);
|
||||
|
||||
dai->dapm_widgets = mt6797_memif_widgets;
|
||||
dai->num_dapm_widgets = ARRAY_SIZE(mt6797_memif_widgets);
|
||||
dai->dapm_routes = mt6797_memif_routes;
|
||||
dai->num_dapm_routes = ARRAY_SIZE(mt6797_memif_routes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef int (*dai_register_cb)(struct mtk_base_afe *);
|
||||
static const dai_register_cb dai_register_cbs[] = {
|
||||
mt6797_dai_adda_register,
|
||||
mt6797_dai_pcm_register,
|
||||
mt6797_dai_hostless_register,
|
||||
mt6797_dai_memif_register,
|
||||
};
|
||||
|
||||
static int mt6797_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct mtk_base_afe *afe;
|
||||
@ -811,29 +839,24 @@ static int mt6797_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
/* init sub_dais */
|
||||
afe->num_sub_dais = MT6797_DAI_NUM;
|
||||
afe->sub_dais = devm_kcalloc(dev, afe->num_sub_dais,
|
||||
sizeof(*afe->sub_dais),
|
||||
GFP_KERNEL);
|
||||
if (!afe->sub_dais)
|
||||
return -ENOMEM;
|
||||
INIT_LIST_HEAD(&afe->sub_dais);
|
||||
|
||||
mt6797_dai_adda_register(afe);
|
||||
mt6797_dai_pcm_register(afe);
|
||||
mt6797_dai_hostless_register(afe);
|
||||
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].dai_drivers = mt6797_memif_dai_driver;
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].num_dai_drivers =
|
||||
ARRAY_SIZE(mt6797_memif_dai_driver);
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].dapm_widgets = mt6797_memif_widgets;
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].num_dapm_widgets =
|
||||
ARRAY_SIZE(mt6797_memif_widgets);
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].dapm_routes = mt6797_memif_routes;
|
||||
afe->sub_dais[MT6797_MEMIF_DL1].num_dapm_routes =
|
||||
ARRAY_SIZE(mt6797_memif_routes);
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* init dai_driver and component_driver */
|
||||
mtk_afe_combine_sub_dai(afe);
|
||||
ret = mtk_afe_combine_sub_dai(afe);
|
||||
if (ret) {
|
||||
dev_warn(afe->dev, "mtk_afe_combine_sub_dai fail, ret %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
afe->mtk_afe_hardware = &mt6797_afe_hardware;
|
||||
afe->memif_fs = mt6797_memif_fs;
|
||||
|
@ -383,14 +383,20 @@ static struct snd_soc_dai_driver mtk_dai_adda_driver[] = {
|
||||
|
||||
int mt6797_dai_adda_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
int id = MT6797_DAI_ADDA;
|
||||
struct mtk_base_afe_dai *dai;
|
||||
|
||||
afe->sub_dais[id].dai_drivers = mtk_dai_adda_driver;
|
||||
afe->sub_dais[id].num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver);
|
||||
dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
|
||||
if (!dai)
|
||||
return -ENOMEM;
|
||||
|
||||
afe->sub_dais[id].dapm_widgets = mtk_dai_adda_widgets;
|
||||
afe->sub_dais[id].num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets);
|
||||
afe->sub_dais[id].dapm_routes = mtk_dai_adda_routes;
|
||||
afe->sub_dais[id].num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes);
|
||||
list_add(&dai->list, &afe->sub_dais);
|
||||
|
||||
dai->dai_drivers = mtk_dai_adda_driver;
|
||||
dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver);
|
||||
|
||||
dai->dapm_widgets = mtk_dai_adda_widgets;
|
||||
dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets);
|
||||
dai->dapm_routes = mtk_dai_adda_routes;
|
||||
dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes);
|
||||
return 0;
|
||||
}
|
||||
|
@ -100,13 +100,19 @@ static struct snd_soc_dai_driver mtk_dai_hostless_driver[] = {
|
||||
|
||||
int mt6797_dai_hostless_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
int id = MT6797_DAI_HOSTLESS_LPBK;
|
||||
struct mtk_base_afe_dai *dai;
|
||||
|
||||
afe->sub_dais[id].dai_drivers = mtk_dai_hostless_driver;
|
||||
afe->sub_dais[id].num_dai_drivers = ARRAY_SIZE(mtk_dai_hostless_driver);
|
||||
dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
|
||||
if (!dai)
|
||||
return -ENOMEM;
|
||||
|
||||
afe->sub_dais[id].dapm_routes = mtk_dai_hostless_routes;
|
||||
afe->sub_dais[id].num_dapm_routes = ARRAY_SIZE(mtk_dai_hostless_routes);
|
||||
list_add(&dai->list, &afe->sub_dais);
|
||||
|
||||
dai->dai_drivers = mtk_dai_hostless_driver;
|
||||
dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_hostless_driver);
|
||||
|
||||
dai->dapm_routes = mtk_dai_hostless_routes;
|
||||
dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_hostless_routes);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -298,15 +298,20 @@ static struct snd_soc_dai_driver mtk_dai_pcm_driver[] = {
|
||||
|
||||
int mt6797_dai_pcm_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
int id = MT6797_DAI_PCM_1;
|
||||
struct mtk_base_afe_dai *dai;
|
||||
|
||||
afe->sub_dais[id].dai_drivers = mtk_dai_pcm_driver;
|
||||
afe->sub_dais[id].num_dai_drivers = ARRAY_SIZE(mtk_dai_pcm_driver);
|
||||
dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
|
||||
if (!dai)
|
||||
return -ENOMEM;
|
||||
|
||||
afe->sub_dais[id].dapm_widgets = mtk_dai_pcm_widgets;
|
||||
afe->sub_dais[id].num_dapm_widgets = ARRAY_SIZE(mtk_dai_pcm_widgets);
|
||||
afe->sub_dais[id].dapm_routes = mtk_dai_pcm_routes;
|
||||
afe->sub_dais[id].num_dapm_routes = ARRAY_SIZE(mtk_dai_pcm_routes);
|
||||
list_add(&dai->list, &afe->sub_dais);
|
||||
|
||||
dai->dai_drivers = mtk_dai_pcm_driver;
|
||||
dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_pcm_driver);
|
||||
|
||||
dai->dapm_widgets = mtk_dai_pcm_widgets;
|
||||
dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_pcm_widgets);
|
||||
dai->dapm_routes = mtk_dai_pcm_routes;
|
||||
dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_pcm_routes);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user