Commit f11c5db7 authored by KaiChieh Chuang's avatar KaiChieh Chuang Committed by Mark Brown

ASoC: mediatek: sub dai use list_head

use list_head for sub_dais,
since original sub_dais array is sparsely occupied
Signed-off-by: default avatarKaiChieh Chuang <kaichieh.chuang@mediatek.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0a94cf34
...@@ -15,20 +15,12 @@ ...@@ -15,20 +15,12 @@
int mtk_afe_combine_sub_dai(struct mtk_base_afe *afe) int mtk_afe_combine_sub_dai(struct mtk_base_afe *afe)
{ {
struct snd_soc_dai_driver *sub_dai_drivers; struct mtk_base_afe_dai *dai;
size_t num_dai_drivers = 0, dai_idx = 0; size_t num_dai_drivers = 0, dai_idx = 0;
int i;
if (!afe->sub_dais) {
dev_err(afe->dev, "%s(), sub_dais == NULL\n", __func__);
return -EINVAL;
}
/* calcualte total dai driver size */ /* calcualte total dai driver size */
for (i = 0; i < afe->num_sub_dais; i++) { list_for_each_entry(dai, &afe->sub_dais, list) {
if (afe->sub_dais[i].dai_drivers && num_dai_drivers += dai->num_dai_drivers;
afe->sub_dais[i].num_dai_drivers != 0)
num_dai_drivers += afe->sub_dais[i].num_dai_drivers;
} }
dev_info(afe->dev, "%s(), num of dai %zd\n", __func__, num_dai_drivers); dev_info(afe->dev, "%s(), num of dai %zd\n", __func__, num_dai_drivers);
...@@ -42,19 +34,14 @@ int mtk_afe_combine_sub_dai(struct mtk_base_afe *afe) ...@@ -42,19 +34,14 @@ int mtk_afe_combine_sub_dai(struct mtk_base_afe *afe)
if (!afe->dai_drivers) if (!afe->dai_drivers)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < afe->num_sub_dais; i++) { list_for_each_entry(dai, &afe->sub_dais, list) {
if (afe->sub_dais[i].dai_drivers &&
afe->sub_dais[i].num_dai_drivers != 0) {
sub_dai_drivers = afe->sub_dais[i].dai_drivers;
/* dai driver */ /* dai driver */
memcpy(&afe->dai_drivers[dai_idx], memcpy(&afe->dai_drivers[dai_idx],
sub_dai_drivers, dai->dai_drivers,
afe->sub_dais[i].num_dai_drivers * dai->num_dai_drivers *
sizeof(struct snd_soc_dai_driver)); sizeof(struct snd_soc_dai_driver));
dai_idx += afe->sub_dais[i].num_dai_drivers; dai_idx += dai->num_dai_drivers;
} }
}
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(mtk_afe_combine_sub_dai); EXPORT_SYMBOL_GPL(mtk_afe_combine_sub_dai);
...@@ -62,28 +49,25 @@ EXPORT_SYMBOL_GPL(mtk_afe_combine_sub_dai); ...@@ -62,28 +49,25 @@ EXPORT_SYMBOL_GPL(mtk_afe_combine_sub_dai);
int mtk_afe_add_sub_dai_control(struct snd_soc_component *component) int mtk_afe_add_sub_dai_control(struct snd_soc_component *component)
{ {
struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
int i; struct mtk_base_afe_dai *dai;
if (!afe->sub_dais) { list_for_each_entry(dai, &afe->sub_dais, list) {
dev_err(afe->dev, "%s(), sub_dais == NULL\n", __func__); if (dai->controls)
return -EINVAL;
}
for (i = 0; i < afe->num_sub_dais; i++) {
if (afe->sub_dais[i].controls)
snd_soc_add_component_controls(component, snd_soc_add_component_controls(component,
afe->sub_dais[i].controls, dai->controls,
afe->sub_dais[i].num_controls); dai->num_controls);
if (afe->sub_dais[i].dapm_widgets) if (dai->dapm_widgets)
snd_soc_dapm_new_controls(&component->dapm, snd_soc_dapm_new_controls(&component->dapm,
afe->sub_dais[i].dapm_widgets, dai->dapm_widgets,
afe->sub_dais[i].num_dapm_widgets); dai->num_dapm_widgets);
}
if (afe->sub_dais[i].dapm_routes) /* add routes after all widgets are added */
list_for_each_entry(dai, &afe->sub_dais, list) {
if (dai->dapm_routes)
snd_soc_dapm_add_routes(&component->dapm, snd_soc_dapm_add_routes(&component->dapm,
afe->sub_dais[i].dapm_routes, dai->dapm_routes,
afe->sub_dais[i].num_dapm_routes); dai->num_dapm_routes);
} }
snd_soc_dapm_new_widgets(component->dapm.card); snd_soc_dapm_new_widgets(component->dapm.card);
......
...@@ -46,6 +46,7 @@ struct mtk_base_irq_data { ...@@ -46,6 +46,7 @@ struct mtk_base_irq_data {
}; };
struct device; struct device;
struct list_head;
struct mtk_base_afe_memif; struct mtk_base_afe_memif;
struct mtk_base_afe_irq; struct mtk_base_afe_irq;
struct mtk_base_afe_dai; struct mtk_base_afe_dai;
...@@ -72,8 +73,7 @@ struct mtk_base_afe { ...@@ -72,8 +73,7 @@ struct mtk_base_afe {
struct mtk_base_afe_irq *irqs; struct mtk_base_afe_irq *irqs;
int irqs_size; int irqs_size;
struct mtk_base_afe_dai *sub_dais; struct list_head sub_dais;
int num_sub_dais;
struct snd_soc_dai_driver *dai_drivers; struct snd_soc_dai_driver *dai_drivers;
unsigned int num_dai_drivers; unsigned int num_dai_drivers;
...@@ -110,6 +110,8 @@ struct mtk_base_afe_dai { ...@@ -110,6 +110,8 @@ struct mtk_base_afe_dai {
unsigned int num_dapm_widgets; unsigned int num_dapm_widgets;
const struct snd_soc_dapm_route *dapm_routes; const struct snd_soc_dapm_route *dapm_routes;
unsigned int num_dapm_routes; unsigned int num_dapm_routes;
struct list_head list;
}; };
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment