ASoC: mediatek: sub dai use list_head
use list_head for sub_dais, since original sub_dais array is sparsely occupied Signed-off-by: KaiChieh Chuang <kaichieh.chuang@mediatek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0a94cf3457
commit
f11c5db770
|
@ -15,20 +15,12 @@
|
|||
|
||||
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;
|
||||
int i;
|
||||
|
||||
if (!afe->sub_dais) {
|
||||
dev_err(afe->dev, "%s(), sub_dais == NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* calcualte total dai driver size */
|
||||
for (i = 0; i < afe->num_sub_dais; i++) {
|
||||
if (afe->sub_dais[i].dai_drivers &&
|
||||
afe->sub_dais[i].num_dai_drivers != 0)
|
||||
num_dai_drivers += afe->sub_dais[i].num_dai_drivers;
|
||||
list_for_each_entry(dai, &afe->sub_dais, list) {
|
||||
num_dai_drivers += dai->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)
|
|||
if (!afe->dai_drivers)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < afe->num_sub_dais; i++) {
|
||||
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 */
|
||||
memcpy(&afe->dai_drivers[dai_idx],
|
||||
sub_dai_drivers,
|
||||
afe->sub_dais[i].num_dai_drivers *
|
||||
sizeof(struct snd_soc_dai_driver));
|
||||
dai_idx += afe->sub_dais[i].num_dai_drivers;
|
||||
}
|
||||
list_for_each_entry(dai, &afe->sub_dais, list) {
|
||||
/* dai driver */
|
||||
memcpy(&afe->dai_drivers[dai_idx],
|
||||
dai->dai_drivers,
|
||||
dai->num_dai_drivers *
|
||||
sizeof(struct snd_soc_dai_driver));
|
||||
dai_idx += dai->num_dai_drivers;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
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)
|
||||
{
|
||||
struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
|
||||
int i;
|
||||
struct mtk_base_afe_dai *dai;
|
||||
|
||||
if (!afe->sub_dais) {
|
||||
dev_err(afe->dev, "%s(), sub_dais == NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < afe->num_sub_dais; i++) {
|
||||
if (afe->sub_dais[i].controls)
|
||||
list_for_each_entry(dai, &afe->sub_dais, list) {
|
||||
if (dai->controls)
|
||||
snd_soc_add_component_controls(component,
|
||||
afe->sub_dais[i].controls,
|
||||
afe->sub_dais[i].num_controls);
|
||||
dai->controls,
|
||||
dai->num_controls);
|
||||
|
||||
if (afe->sub_dais[i].dapm_widgets)
|
||||
if (dai->dapm_widgets)
|
||||
snd_soc_dapm_new_controls(&component->dapm,
|
||||
afe->sub_dais[i].dapm_widgets,
|
||||
afe->sub_dais[i].num_dapm_widgets);
|
||||
|
||||
if (afe->sub_dais[i].dapm_routes)
|
||||
dai->dapm_widgets,
|
||||
dai->num_dapm_widgets);
|
||||
}
|
||||
/* 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,
|
||||
afe->sub_dais[i].dapm_routes,
|
||||
afe->sub_dais[i].num_dapm_routes);
|
||||
dai->dapm_routes,
|
||||
dai->num_dapm_routes);
|
||||
}
|
||||
|
||||
snd_soc_dapm_new_widgets(component->dapm.card);
|
||||
|
|
|
@ -46,6 +46,7 @@ struct mtk_base_irq_data {
|
|||
};
|
||||
|
||||
struct device;
|
||||
struct list_head;
|
||||
struct mtk_base_afe_memif;
|
||||
struct mtk_base_afe_irq;
|
||||
struct mtk_base_afe_dai;
|
||||
|
@ -72,8 +73,7 @@ struct mtk_base_afe {
|
|||
struct mtk_base_afe_irq *irqs;
|
||||
int irqs_size;
|
||||
|
||||
struct mtk_base_afe_dai *sub_dais;
|
||||
int num_sub_dais;
|
||||
struct list_head sub_dais;
|
||||
struct snd_soc_dai_driver *dai_drivers;
|
||||
unsigned int num_dai_drivers;
|
||||
|
||||
|
@ -110,6 +110,8 @@ struct mtk_base_afe_dai {
|
|||
unsigned int num_dapm_widgets;
|
||||
const struct snd_soc_dapm_route *dapm_routes;
|
||||
unsigned int num_dapm_routes;
|
||||
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue