Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: topology: Use unload() op directly

struct snd_soc_dobj only needs pointer to the unload function, instead
however, there is pointer to all topology operations. Change code to use
the function pointer instead of pointer to structure containing all
operations.

Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Link: https://lore.kernel.org/r/20230127231111.937721-12-amadeuszx.slawinski@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Amadeusz Sławiński and committed by
Mark Brown
31e92739 fdfa3661

+29 -21
+1 -1
include/sound/soc-topology.h
··· 62 62 enum snd_soc_dobj_type type; 63 63 unsigned int index; /* objects can belong in different groups */ 64 64 struct list_head list; 65 - struct snd_soc_tplg_ops *ops; 65 + int (*unload)(struct snd_soc_component *comp, struct snd_soc_dobj *dobj); 66 66 union { 67 67 struct snd_soc_dobj_control control; 68 68 struct snd_soc_dobj_widget widget;
+28 -20
sound/soc/soc-topology.c
··· 359 359 if (pass != SOC_TPLG_PASS_CONTROL) 360 360 return; 361 361 362 - if (dobj->ops && dobj->ops->control_unload) 363 - dobj->ops->control_unload(comp, dobj); 362 + if (dobj->unload) 363 + dobj->unload(comp, dobj); 364 364 365 365 snd_ctl_remove(card, dobj->control.kcontrol); 366 366 list_del(&dobj->list); ··· 373 373 if (pass != SOC_TPLG_PASS_GRAPH) 374 374 return; 375 375 376 - if (dobj->ops && dobj->ops->dapm_route_unload) 377 - dobj->ops->dapm_route_unload(comp, dobj); 376 + if (dobj->unload) 377 + dobj->unload(comp, dobj); 378 378 379 379 list_del(&dobj->list); 380 380 } ··· 391 391 if (pass != SOC_TPLG_PASS_WIDGET) 392 392 return; 393 393 394 - if (dobj->ops && dobj->ops->widget_unload) 395 - dobj->ops->widget_unload(comp, dobj); 394 + if (dobj->unload) 395 + dobj->unload(comp, dobj); 396 396 397 397 if (!w->kcontrols) 398 398 goto free_news; ··· 418 418 if (pass != SOC_TPLG_PASS_PCM_DAI) 419 419 return; 420 420 421 - if (dobj->ops && dobj->ops->dai_unload) 422 - dobj->ops->dai_unload(comp, dobj); 421 + if (dobj->unload) 422 + dobj->unload(comp, dobj); 423 423 424 424 for_each_component_dais_safe(comp, dai, _dai) 425 425 if (dai->driver == dai_drv) ··· 438 438 if (pass != SOC_TPLG_PASS_PCM_DAI) 439 439 return; 440 440 441 - if (dobj->ops && dobj->ops->link_unload) 442 - dobj->ops->link_unload(comp, dobj); 441 + if (dobj->unload) 442 + dobj->unload(comp, dobj); 443 443 444 444 list_del(&dobj->list); 445 445 snd_soc_remove_pcm_runtime(comp->card, ··· 453 453 if (pass != SOC_TPLG_PASS_LINK) 454 454 return; 455 455 456 - if (dobj->ops && dobj->ops->link_unload) 457 - dobj->ops->link_unload(comp, dobj); 456 + if (dobj->unload) 457 + dobj->unload(comp, dobj); 458 458 459 459 /* 460 460 * We don't free the link here as what soc_tplg_remove_link() do since BE ··· 678 678 679 679 sbe->max = le32_to_cpu(be->max); 680 680 sbe->dobj.type = SND_SOC_DOBJ_BYTES; 681 - sbe->dobj.ops = tplg->ops; 681 + if (tplg->ops) 682 + sbe->dobj.unload = tplg->ops->control_unload; 682 683 INIT_LIST_HEAD(&sbe->dobj.list); 683 684 684 685 /* map io handlers */ ··· 755 754 sm->invert = le32_to_cpu(mc->invert); 756 755 sm->platform_max = le32_to_cpu(mc->platform_max); 757 756 sm->dobj.index = tplg->index; 758 - sm->dobj.ops = tplg->ops; 759 757 sm->dobj.type = SND_SOC_DOBJ_MIXER; 758 + if (tplg->ops) 759 + sm->dobj.unload = tplg->ops->control_unload; 760 760 INIT_LIST_HEAD(&sm->dobj.list); 761 761 762 762 /* map io handlers */ ··· 902 900 se->mask = le32_to_cpu(ec->mask); 903 901 se->dobj.index = tplg->index; 904 902 se->dobj.type = SND_SOC_DOBJ_ENUM; 905 - se->dobj.ops = tplg->ops; 903 + if (tplg->ops) 904 + se->dobj.unload = tplg->ops->control_unload; 906 905 INIT_LIST_HEAD(&se->dobj.list); 907 906 908 907 switch (le32_to_cpu(ec->hdr.ops.info)) { ··· 1080 1077 1081 1078 /* add route dobj to dobj_list */ 1082 1079 route->dobj.type = SND_SOC_DOBJ_GRAPH; 1083 - route->dobj.ops = tplg->ops; 1080 + if (tplg->ops) 1081 + route->dobj.unload = tplg->ops->control_unload; 1084 1082 route->dobj.index = tplg->index; 1085 1083 list_add(&route->dobj.list, &tplg->comp->dobj_list); 1086 1084 ··· 1447 1443 1448 1444 widget->dobj.type = SND_SOC_DOBJ_WIDGET; 1449 1445 widget->dobj.widget.kcontrol_type = kcontrol_type; 1450 - widget->dobj.ops = tplg->ops; 1446 + if (tplg->ops) 1447 + widget->dobj.unload = tplg->ops->widget_unload; 1451 1448 widget->dobj.index = tplg->index; 1452 1449 list_add(&widget->dobj.list, &tplg->comp->dobj_list); 1453 1450 ··· 1626 1621 } 1627 1622 1628 1623 dai_drv->dobj.index = tplg->index; 1629 - dai_drv->dobj.ops = tplg->ops; 1630 1624 dai_drv->dobj.type = SND_SOC_DOBJ_PCM; 1625 + if (tplg->ops) 1626 + dai_drv->dobj.unload = tplg->ops->dai_unload; 1631 1627 list_add(&dai_drv->dobj.list, &tplg->comp->dobj_list); 1632 1628 1633 1629 /* register the DAI to the component */ ··· 1697 1691 link->num_platforms = 1; 1698 1692 1699 1693 link->dobj.index = tplg->index; 1700 - link->dobj.ops = tplg->ops; 1701 1694 link->dobj.type = SND_SOC_DOBJ_DAI_LINK; 1695 + if (tplg->ops) 1696 + link->dobj.unload = tplg->ops->link_unload; 1702 1697 1703 1698 if (strlen(pcm->pcm_name)) { 1704 1699 link->name = devm_kstrdup(tplg->dev, pcm->pcm_name, GFP_KERNEL); ··· 2106 2099 2107 2100 /* for unloading it in snd_soc_tplg_component_remove */ 2108 2101 link->dobj.index = tplg->index; 2109 - link->dobj.ops = tplg->ops; 2110 2102 link->dobj.type = SND_SOC_DOBJ_BACKEND_LINK; 2103 + if (tplg->ops) 2104 + link->dobj.unload = tplg->ops->link_unload; 2111 2105 list_add(&link->dobj.list, &tplg->comp->dobj_list); 2112 2106 2113 2107 return 0;