Lines Matching refs:card

287 	if (!component->card->debugfs_card_root)  in soc_init_component_debugfs()
297 component->card->debugfs_card_root); in soc_init_component_debugfs()
302 component->card->debugfs_card_root); in soc_init_component_debugfs()
451 static void soc_init_card_debugfs(struct snd_soc_card *card) in soc_init_card_debugfs() argument
456 card->debugfs_card_root = debugfs_create_dir(card->name, in soc_init_card_debugfs()
458 if (!card->debugfs_card_root) { in soc_init_card_debugfs()
459 dev_warn(card->dev, in soc_init_card_debugfs()
464 card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644, in soc_init_card_debugfs()
465 card->debugfs_card_root, in soc_init_card_debugfs()
466 &card->pop_time); in soc_init_card_debugfs()
467 if (!card->debugfs_pop_time) in soc_init_card_debugfs()
468 dev_warn(card->dev, in soc_init_card_debugfs()
472 static void soc_cleanup_card_debugfs(struct snd_soc_card *card) in soc_cleanup_card_debugfs() argument
474 debugfs_remove_recursive(card->debugfs_card_root); in soc_cleanup_card_debugfs()
519 static inline void soc_init_card_debugfs(struct snd_soc_card *card) in soc_init_card_debugfs() argument
523 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) in soc_cleanup_card_debugfs() argument
537 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card, in snd_soc_get_dai_substream() argument
542 for (i = 0; i < card->num_links; i++) { in snd_soc_get_dai_substream()
543 if (card->rtd[i].dai_link->no_pcm && in snd_soc_get_dai_substream()
544 !strcmp(card->rtd[i].dai_link->name, dai_link)) in snd_soc_get_dai_substream()
545 return card->rtd[i].pcm->streams[stream].substream; in snd_soc_get_dai_substream()
547 dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link); in snd_soc_get_dai_substream()
552 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card, in snd_soc_get_pcm_runtime() argument
557 for (i = 0; i < card->num_links; i++) { in snd_soc_get_pcm_runtime()
558 if (!strcmp(card->rtd[i].dai_link->name, dai_link)) in snd_soc_get_pcm_runtime()
559 return &card->rtd[i]; in snd_soc_get_pcm_runtime()
561 dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link); in snd_soc_get_pcm_runtime()
579 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_suspend() local
584 if (!card->instantiated) in snd_soc_suspend()
590 snd_power_lock(card->snd_card); in snd_soc_suspend()
591 snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); in snd_soc_suspend()
592 snd_power_unlock(card->snd_card); in snd_soc_suspend()
595 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); in snd_soc_suspend()
598 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
600 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
603 for (j = 0; j < card->rtd[i].num_codecs; j++) { in snd_soc_suspend()
604 struct snd_soc_dai *dai = card->rtd[i].codec_dais[j]; in snd_soc_suspend()
613 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
614 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
617 snd_pcm_suspend_all(card->rtd[i].pcm); in snd_soc_suspend()
620 if (card->suspend_pre) in snd_soc_suspend()
621 card->suspend_pre(card); in snd_soc_suspend()
623 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
624 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_suspend()
626 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
634 for (i = 0; i < card->num_rtd; i++) in snd_soc_suspend()
635 flush_delayed_work(&card->rtd[i].delayed_work); in snd_soc_suspend()
637 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
639 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
642 snd_soc_dapm_stream_event(&card->rtd[i], in snd_soc_suspend()
646 snd_soc_dapm_stream_event(&card->rtd[i], in snd_soc_suspend()
652 dapm_mark_endpoints_dirty(card); in snd_soc_suspend()
653 snd_soc_dapm_sync(&card->dapm); in snd_soc_suspend()
656 list_for_each_entry(codec, &card->codec_dev_list, card_list) { in snd_soc_suspend()
693 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
694 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_suspend()
696 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
706 if (card->suspend_post) in snd_soc_suspend()
707 card->suspend_post(card); in snd_soc_suspend()
718 struct snd_soc_card *card = in soc_resume_deferred() local
727 dev_dbg(card->dev, "ASoC: starting resume work\n"); in soc_resume_deferred()
730 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2); in soc_resume_deferred()
732 if (card->resume_pre) in soc_resume_deferred()
733 card->resume_pre(card); in soc_resume_deferred()
736 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
737 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in soc_resume_deferred()
739 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
746 list_for_each_entry(codec, &card->codec_dev_list, card_list) { in soc_resume_deferred()
754 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
756 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
759 snd_soc_dapm_stream_event(&card->rtd[i], in soc_resume_deferred()
763 snd_soc_dapm_stream_event(&card->rtd[i], in soc_resume_deferred()
769 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
771 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
774 for (j = 0; j < card->rtd[i].num_codecs; j++) { in soc_resume_deferred()
775 struct snd_soc_dai *dai = card->rtd[i].codec_dais[j]; in soc_resume_deferred()
783 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
784 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in soc_resume_deferred()
786 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
793 if (card->resume_post) in soc_resume_deferred()
794 card->resume_post(card); in soc_resume_deferred()
796 dev_dbg(card->dev, "ASoC: resume work completed\n"); in soc_resume_deferred()
799 dapm_mark_endpoints_dirty(card); in soc_resume_deferred()
800 snd_soc_dapm_sync(&card->dapm); in soc_resume_deferred()
803 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0); in soc_resume_deferred()
809 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_resume() local
814 if (!card->instantiated) in snd_soc_resume()
818 for (i = 0; i < card->num_rtd; i++) { in snd_soc_resume()
819 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_resume()
840 for (i = 0; i < card->num_rtd; i++) { in snd_soc_resume()
841 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_resume()
846 soc_resume_deferred(&card->deferred_resume_work); in snd_soc_resume()
849 if (!schedule_work(&card->deferred_resume_work)) in snd_soc_resume()
913 static int soc_bind_dai_link(struct snd_soc_card *card, int num) in soc_bind_dai_link() argument
915 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; in soc_bind_dai_link()
916 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_bind_dai_link()
924 dev_dbg(card->dev, "ASoC: binding %s at idx %d\n", dai_link->name, num); in soc_bind_dai_link()
931 dev_err(card->dev, "ASoC: CPU DAI %s not registered\n", in soc_bind_dai_link()
942 dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n", in soc_bind_dai_link()
971 dev_err(card->dev, "ASoC: platform %s not registered\n", in soc_bind_dai_link()
976 card->num_rtd++; in soc_bind_dai_link()
983 if (!component->card) in soc_remove_component()
996 component->card = NULL; in soc_remove_component()
1017 static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) in soc_remove_link_dais() argument
1019 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_remove_link_dais()
1035 static void soc_remove_link_components(struct snd_soc_card *card, int num, in soc_remove_link_components() argument
1038 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_remove_link_components()
1062 static void soc_remove_dai_links(struct snd_soc_card *card) in soc_remove_dai_links() argument
1068 for (dai = 0; dai < card->num_rtd; dai++) in soc_remove_dai_links()
1069 soc_remove_link_dais(card, dai, order); in soc_remove_dai_links()
1074 for (dai = 0; dai < card->num_rtd; dai++) in soc_remove_dai_links()
1075 soc_remove_link_components(card, dai, order); in soc_remove_dai_links()
1078 card->num_rtd = 0; in soc_remove_dai_links()
1081 static void soc_set_name_prefix(struct snd_soc_card *card, in soc_set_name_prefix() argument
1086 if (card->codec_conf == NULL) in soc_set_name_prefix()
1089 for (i = 0; i < card->num_configs; i++) { in soc_set_name_prefix()
1090 struct snd_soc_codec_conf *map = &card->codec_conf[i]; in soc_set_name_prefix()
1100 static int soc_probe_component(struct snd_soc_card *card, in soc_probe_component() argument
1110 if (component->card) { in soc_probe_component()
1111 if (component->card != card) { in soc_probe_component()
1114 card->name, component->card->name); in soc_probe_component()
1123 component->card = card; in soc_probe_component()
1124 dapm->card = card; in soc_probe_component()
1125 soc_set_name_prefix(card, component); in soc_probe_component()
1170 list_add(&dapm->list, &card->dapm_list); in soc_probe_component()
1174 list_add(&component->codec->card_list, &card->codec_dev_list); in soc_probe_component()
1180 component->card = NULL; in soc_probe_component()
1201 rtd->dev->parent = rtd->card->dev; in soc_post_component_init()
1215 dev_err(rtd->card->dev, in soc_post_component_init()
1223 static int soc_probe_link_components(struct snd_soc_card *card, int num, in soc_probe_link_components() argument
1226 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_probe_link_components()
1234 ret = soc_probe_component(card, component); in soc_probe_link_components()
1243 ret = soc_probe_component(card, component); in soc_probe_link_components()
1251 ret = soc_probe_component(card, &platform->component); in soc_probe_link_components()
1280 static int soc_link_dai_widgets(struct snd_soc_card *card, in soc_link_dai_widgets() argument
1290 dev_warn(card->dev, "ASoC: Multiple codecs not supported yet\n"); in soc_link_dai_widgets()
1296 ret = snd_soc_dapm_new_pcm(card, dai_link->params, in soc_link_dai_widgets()
1300 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", in soc_link_dai_widgets()
1309 ret = snd_soc_dapm_new_pcm(card, dai_link->params, in soc_link_dai_widgets()
1313 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", in soc_link_dai_widgets()
1322 static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) in soc_probe_link_dais() argument
1324 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; in soc_probe_link_dais()
1325 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_probe_link_dais()
1329 dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n", in soc_probe_link_dais()
1330 card->name, num, order); in soc_probe_link_dais()
1354 dev_err(card->dev, "ASoC: failed to init %s: %d\n", in soc_probe_link_dais()
1377 dev_err(card->dev, "ASoC: can't create compress %s\n", in soc_probe_link_dais()
1387 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", in soc_probe_link_dais()
1396 ret = soc_link_dai_widgets(card, dai_link, rtd); in soc_probe_link_dais()
1405 static int soc_bind_aux_dev(struct snd_soc_card *card, int num) in soc_bind_aux_dev() argument
1407 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_bind_aux_dev()
1408 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; in soc_bind_aux_dev()
1416 dev_err(card->dev, "ASoC: %s not registered\n", name); in soc_bind_aux_dev()
1430 static int soc_probe_aux_dev(struct snd_soc_card *card, int num) in soc_probe_aux_dev() argument
1432 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_probe_aux_dev()
1433 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; in soc_probe_aux_dev()
1436 ret = soc_probe_component(card, rtd->component); in soc_probe_aux_dev()
1444 dev_err(card->dev, "ASoC: failed to init %s: %d\n", in soc_probe_aux_dev()
1453 static void soc_remove_aux_dev(struct snd_soc_card *card, int num) in soc_remove_aux_dev() argument
1455 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_remove_aux_dev()
1552 static int snd_soc_instantiate_card(struct snd_soc_card *card) in snd_soc_instantiate_card() argument
1558 mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); in snd_soc_instantiate_card()
1561 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1562 ret = soc_bind_dai_link(card, i); in snd_soc_instantiate_card()
1568 for (i = 0; i < card->num_aux_devs; i++) { in snd_soc_instantiate_card()
1569 ret = soc_bind_aux_dev(card, i); in snd_soc_instantiate_card()
1584 ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, in snd_soc_instantiate_card()
1585 card->owner, 0, &card->snd_card); in snd_soc_instantiate_card()
1587 dev_err(card->dev, in snd_soc_instantiate_card()
1589 card->name, ret); in snd_soc_instantiate_card()
1593 soc_init_card_debugfs(card); in snd_soc_instantiate_card()
1595 card->dapm.bias_level = SND_SOC_BIAS_OFF; in snd_soc_instantiate_card()
1596 card->dapm.dev = card->dev; in snd_soc_instantiate_card()
1597 card->dapm.card = card; in snd_soc_instantiate_card()
1598 list_add(&card->dapm.list, &card->dapm_list); in snd_soc_instantiate_card()
1601 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); in snd_soc_instantiate_card()
1606 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); in snd_soc_instantiate_card()
1609 if (card->dapm_widgets) in snd_soc_instantiate_card()
1610 snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, in snd_soc_instantiate_card()
1611 card->num_dapm_widgets); in snd_soc_instantiate_card()
1613 if (card->of_dapm_widgets) in snd_soc_instantiate_card()
1614 snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets, in snd_soc_instantiate_card()
1615 card->num_of_dapm_widgets); in snd_soc_instantiate_card()
1618 if (card->probe) { in snd_soc_instantiate_card()
1619 ret = card->probe(card); in snd_soc_instantiate_card()
1627 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1628 ret = soc_probe_link_components(card, i, order); in snd_soc_instantiate_card()
1630 dev_err(card->dev, in snd_soc_instantiate_card()
1641 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1642 ret = soc_probe_link_dais(card, i, order); in snd_soc_instantiate_card()
1644 dev_err(card->dev, in snd_soc_instantiate_card()
1652 for (i = 0; i < card->num_aux_devs; i++) { in snd_soc_instantiate_card()
1653 ret = soc_probe_aux_dev(card, i); in snd_soc_instantiate_card()
1655 dev_err(card->dev, in snd_soc_instantiate_card()
1662 snd_soc_dapm_link_dai_widgets(card); in snd_soc_instantiate_card()
1663 snd_soc_dapm_connect_dai_link_widgets(card); in snd_soc_instantiate_card()
1665 if (card->controls) in snd_soc_instantiate_card()
1666 snd_soc_add_card_controls(card, card->controls, card->num_controls); in snd_soc_instantiate_card()
1668 if (card->dapm_routes) in snd_soc_instantiate_card()
1669 snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, in snd_soc_instantiate_card()
1670 card->num_dapm_routes); in snd_soc_instantiate_card()
1672 if (card->of_dapm_routes) in snd_soc_instantiate_card()
1673 snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes, in snd_soc_instantiate_card()
1674 card->num_of_dapm_routes); in snd_soc_instantiate_card()
1676 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), in snd_soc_instantiate_card()
1677 "%s", card->name); in snd_soc_instantiate_card()
1678 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), in snd_soc_instantiate_card()
1679 "%s", card->long_name ? card->long_name : card->name); in snd_soc_instantiate_card()
1680 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), in snd_soc_instantiate_card()
1681 "%s", card->driver_name ? card->driver_name : card->name); in snd_soc_instantiate_card()
1682 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { in snd_soc_instantiate_card()
1683 switch (card->snd_card->driver[i]) { in snd_soc_instantiate_card()
1689 if (!isalnum(card->snd_card->driver[i])) in snd_soc_instantiate_card()
1690 card->snd_card->driver[i] = '_'; in snd_soc_instantiate_card()
1695 if (card->late_probe) { in snd_soc_instantiate_card()
1696 ret = card->late_probe(card); in snd_soc_instantiate_card()
1698 dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n", in snd_soc_instantiate_card()
1699 card->name, ret); in snd_soc_instantiate_card()
1704 snd_soc_dapm_new_widgets(card); in snd_soc_instantiate_card()
1706 ret = snd_card_register(card->snd_card); in snd_soc_instantiate_card()
1708 dev_err(card->dev, "ASoC: failed to register soundcard %d\n", in snd_soc_instantiate_card()
1713 card->instantiated = 1; in snd_soc_instantiate_card()
1714 snd_soc_dapm_sync(&card->dapm); in snd_soc_instantiate_card()
1715 mutex_unlock(&card->mutex); in snd_soc_instantiate_card()
1721 for (i = 0; i < card->num_aux_devs; i++) in snd_soc_instantiate_card()
1722 soc_remove_aux_dev(card, i); in snd_soc_instantiate_card()
1725 soc_remove_dai_links(card); in snd_soc_instantiate_card()
1728 if (card->remove) in snd_soc_instantiate_card()
1729 card->remove(card); in snd_soc_instantiate_card()
1731 snd_soc_dapm_free(&card->dapm); in snd_soc_instantiate_card()
1732 soc_cleanup_card_debugfs(card); in snd_soc_instantiate_card()
1733 snd_card_free(card->snd_card); in snd_soc_instantiate_card()
1736 mutex_unlock(&card->mutex); in snd_soc_instantiate_card()
1745 struct snd_soc_card *card = platform_get_drvdata(pdev); in soc_probe() local
1751 if (!card) in soc_probe()
1756 card->name); in soc_probe()
1759 card->dev = &pdev->dev; in soc_probe()
1761 return snd_soc_register_card(card); in soc_probe()
1764 static int soc_cleanup_card_resources(struct snd_soc_card *card) in soc_cleanup_card_resources() argument
1769 for (i = 0; i < card->num_rtd; i++) { in soc_cleanup_card_resources()
1770 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in soc_cleanup_card_resources()
1775 for (i = 0; i < card->num_aux_devs; i++) in soc_cleanup_card_resources()
1776 soc_remove_aux_dev(card, i); in soc_cleanup_card_resources()
1779 soc_remove_dai_links(card); in soc_cleanup_card_resources()
1781 soc_cleanup_card_debugfs(card); in soc_cleanup_card_resources()
1784 if (card->remove) in soc_cleanup_card_resources()
1785 card->remove(card); in soc_cleanup_card_resources()
1787 snd_soc_dapm_free(&card->dapm); in soc_cleanup_card_resources()
1789 snd_card_free(card->snd_card); in soc_cleanup_card_resources()
1797 struct snd_soc_card *card = platform_get_drvdata(pdev); in soc_remove() local
1799 snd_soc_unregister_card(card); in soc_remove()
1805 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_poweroff() local
1808 if (!card->instantiated) in snd_soc_poweroff()
1813 for (i = 0; i < card->num_rtd; i++) { in snd_soc_poweroff()
1814 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_poweroff()
1818 snd_soc_dapm_shutdown(card); in snd_soc_poweroff()
1821 for (i = 0; i < card->num_rtd; i++) { in snd_soc_poweroff()
1822 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_poweroff()
1900 static int snd_soc_add_controls(struct snd_card *card, struct device *dev, in snd_soc_add_controls() argument
1908 err = snd_ctl_add(card, snd_soc_cnew(control, data, in snd_soc_add_controls()
1923 struct snd_card *card = soc_card->snd_card; in snd_soc_card_get_kcontrol() local
1929 list_for_each_entry(kctl, &card->controls, list) in snd_soc_card_get_kcontrol()
1948 struct snd_card *card = component->card->snd_card; in snd_soc_add_component_controls() local
1950 return snd_soc_add_controls(card, component->dev, controls, in snd_soc_add_component_controls()
2005 struct snd_card *card = soc_card->snd_card; in snd_soc_add_card_controls() local
2007 return snd_soc_add_controls(card, soc_card->dev, controls, num_controls, in snd_soc_add_card_controls()
2025 struct snd_card *card = dai->component->card->snd_card; in snd_soc_add_dai_controls() local
2027 return snd_soc_add_controls(card, dai->dev, controls, num_controls, in snd_soc_add_dai_controls()
2304 static int snd_soc_init_multicodec(struct snd_soc_card *card, in snd_soc_init_multicodec() argument
2312 dai_link->codecs = devm_kzalloc(card->dev, in snd_soc_init_multicodec()
2324 dev_err(card->dev, "ASoC: DAI link has no CODECs\n"); in snd_soc_init_multicodec()
2337 int snd_soc_register_card(struct snd_soc_card *card) in snd_soc_register_card() argument
2341 if (!card->name || !card->dev) in snd_soc_register_card()
2344 for (i = 0; i < card->num_links; i++) { in snd_soc_register_card()
2345 struct snd_soc_dai_link *link = &card->dai_link[i]; in snd_soc_register_card()
2347 ret = snd_soc_init_multicodec(card, link); in snd_soc_register_card()
2349 dev_err(card->dev, "ASoC: failed to init multicodec\n"); in snd_soc_register_card()
2360 dev_err(card->dev, "ASoC: Neither/both codec name/of_node are set for %s\n", in snd_soc_register_card()
2366 dev_err(card->dev, "ASoC: codec_dai_name not set for %s\n", in snd_soc_register_card()
2377 dev_err(card->dev, in snd_soc_register_card()
2389 dev_err(card->dev, in snd_soc_register_card()
2400 dev_err(card->dev, in snd_soc_register_card()
2407 dev_set_drvdata(card->dev, card); in snd_soc_register_card()
2409 snd_soc_initialize_card_lists(card); in snd_soc_register_card()
2411 card->rtd = devm_kzalloc(card->dev, in snd_soc_register_card()
2413 (card->num_links + card->num_aux_devs), in snd_soc_register_card()
2415 if (card->rtd == NULL) in snd_soc_register_card()
2417 card->num_rtd = 0; in snd_soc_register_card()
2418 card->rtd_aux = &card->rtd[card->num_links]; in snd_soc_register_card()
2420 for (i = 0; i < card->num_links; i++) { in snd_soc_register_card()
2421 card->rtd[i].card = card; in snd_soc_register_card()
2422 card->rtd[i].dai_link = &card->dai_link[i]; in snd_soc_register_card()
2423 card->rtd[i].codec_dais = devm_kzalloc(card->dev, in snd_soc_register_card()
2425 (card->rtd[i].dai_link->num_codecs), in snd_soc_register_card()
2427 if (card->rtd[i].codec_dais == NULL) in snd_soc_register_card()
2431 for (i = 0; i < card->num_aux_devs; i++) in snd_soc_register_card()
2432 card->rtd_aux[i].card = card; in snd_soc_register_card()
2434 INIT_LIST_HEAD(&card->dapm_dirty); in snd_soc_register_card()
2435 INIT_LIST_HEAD(&card->dobj_list); in snd_soc_register_card()
2436 card->instantiated = 0; in snd_soc_register_card()
2437 mutex_init(&card->mutex); in snd_soc_register_card()
2438 mutex_init(&card->dapm_mutex); in snd_soc_register_card()
2440 ret = snd_soc_instantiate_card(card); in snd_soc_register_card()
2445 for (i = 0; i < card->num_rtd; i++) { in snd_soc_register_card()
2446 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_register_card()
2470 int snd_soc_unregister_card(struct snd_soc_card *card) in snd_soc_unregister_card() argument
2472 if (card->instantiated) { in snd_soc_unregister_card()
2473 card->instantiated = false; in snd_soc_unregister_card()
2474 snd_soc_dapm_shutdown(card); in snd_soc_unregister_card()
2475 soc_cleanup_card_resources(card); in snd_soc_unregister_card()
2476 dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); in snd_soc_unregister_card()
3177 int snd_soc_of_parse_card_name(struct snd_soc_card *card, in snd_soc_of_parse_card_name() argument
3183 if (!card->dev) { in snd_soc_of_parse_card_name()
3188 np = card->dev->of_node; in snd_soc_of_parse_card_name()
3190 ret = of_property_read_string_index(np, propname, 0, &card->name); in snd_soc_of_parse_card_name()
3197 dev_err(card->dev, in snd_soc_of_parse_card_name()
3214 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card, in snd_soc_of_parse_audio_simple_widgets() argument
3217 struct device_node *np = card->dev->of_node; in snd_soc_of_parse_audio_simple_widgets()
3224 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3229 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3236 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", in snd_soc_of_parse_audio_simple_widgets()
3241 widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets), in snd_soc_of_parse_audio_simple_widgets()
3244 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3253 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3268 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3278 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3287 card->of_dapm_widgets = widgets; in snd_soc_of_parse_audio_simple_widgets()
3288 card->num_of_dapm_widgets = num_widgets; in snd_soc_of_parse_audio_simple_widgets()
3348 void snd_soc_of_parse_audio_prefix(struct snd_soc_card *card, in snd_soc_of_parse_audio_prefix() argument
3353 struct device_node *np = card->dev->of_node; in snd_soc_of_parse_audio_prefix()
3368 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, in snd_soc_of_parse_audio_routing() argument
3371 struct device_node *np = card->dev->of_node; in snd_soc_of_parse_audio_routing()
3378 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3385 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", in snd_soc_of_parse_audio_routing()
3390 routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes), in snd_soc_of_parse_audio_routing()
3393 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3402 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3410 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3417 card->num_of_dapm_routes = num_routes; in snd_soc_of_parse_audio_routing()
3418 card->of_dapm_routes = routes; in snd_soc_of_parse_audio_routing()