Lines Matching refs:card
295 if (!component->card->debugfs_card_root) in soc_init_component_debugfs()
305 component->card->debugfs_card_root); in soc_init_component_debugfs()
310 component->card->debugfs_card_root); in soc_init_component_debugfs()
459 static void soc_init_card_debugfs(struct snd_soc_card *card) in soc_init_card_debugfs() argument
464 card->debugfs_card_root = debugfs_create_dir(card->name, in soc_init_card_debugfs()
466 if (!card->debugfs_card_root) { in soc_init_card_debugfs()
467 dev_warn(card->dev, in soc_init_card_debugfs()
472 card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644, in soc_init_card_debugfs()
473 card->debugfs_card_root, in soc_init_card_debugfs()
474 &card->pop_time); in soc_init_card_debugfs()
475 if (!card->debugfs_pop_time) in soc_init_card_debugfs()
476 dev_warn(card->dev, in soc_init_card_debugfs()
480 static void soc_cleanup_card_debugfs(struct snd_soc_card *card) in soc_cleanup_card_debugfs() argument
482 debugfs_remove_recursive(card->debugfs_card_root); in soc_cleanup_card_debugfs()
527 static inline void soc_init_card_debugfs(struct snd_soc_card *card) in soc_init_card_debugfs() argument
531 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) in soc_cleanup_card_debugfs() argument
545 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card, in snd_soc_get_dai_substream() argument
550 for (i = 0; i < card->num_links; i++) { in snd_soc_get_dai_substream()
551 if (card->rtd[i].dai_link->no_pcm && in snd_soc_get_dai_substream()
552 !strcmp(card->rtd[i].dai_link->name, dai_link)) in snd_soc_get_dai_substream()
553 return card->rtd[i].pcm->streams[stream].substream; in snd_soc_get_dai_substream()
555 dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link); in snd_soc_get_dai_substream()
560 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card, in snd_soc_get_pcm_runtime() argument
565 for (i = 0; i < card->num_links; i++) { in snd_soc_get_pcm_runtime()
566 if (!strcmp(card->rtd[i].dai_link->name, dai_link)) in snd_soc_get_pcm_runtime()
567 return &card->rtd[i]; in snd_soc_get_pcm_runtime()
569 dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link); in snd_soc_get_pcm_runtime()
587 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_suspend() local
592 if (!card->instantiated) in snd_soc_suspend()
598 snd_power_lock(card->snd_card); in snd_soc_suspend()
599 snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); in snd_soc_suspend()
600 snd_power_unlock(card->snd_card); in snd_soc_suspend()
603 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); in snd_soc_suspend()
606 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
608 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
611 for (j = 0; j < card->rtd[i].num_codecs; j++) { in snd_soc_suspend()
612 struct snd_soc_dai *dai = card->rtd[i].codec_dais[j]; in snd_soc_suspend()
621 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
622 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
625 snd_pcm_suspend_all(card->rtd[i].pcm); in snd_soc_suspend()
628 if (card->suspend_pre) in snd_soc_suspend()
629 card->suspend_pre(card); in snd_soc_suspend()
631 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
632 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_suspend()
634 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
642 for (i = 0; i < card->num_rtd; i++) in snd_soc_suspend()
643 flush_delayed_work(&card->rtd[i].delayed_work); in snd_soc_suspend()
645 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
647 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
650 snd_soc_dapm_stream_event(&card->rtd[i], in snd_soc_suspend()
654 snd_soc_dapm_stream_event(&card->rtd[i], in snd_soc_suspend()
660 dapm_mark_endpoints_dirty(card); in snd_soc_suspend()
661 snd_soc_dapm_sync(&card->dapm); in snd_soc_suspend()
664 list_for_each_entry(codec, &card->codec_dev_list, card_list) { in snd_soc_suspend()
699 for (i = 0; i < card->num_rtd; i++) { in snd_soc_suspend()
700 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_suspend()
702 if (card->rtd[i].dai_link->ignore_suspend) in snd_soc_suspend()
712 if (card->suspend_post) in snd_soc_suspend()
713 card->suspend_post(card); in snd_soc_suspend()
724 struct snd_soc_card *card = in soc_resume_deferred() local
733 dev_dbg(card->dev, "ASoC: starting resume work\n"); in soc_resume_deferred()
736 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2); in soc_resume_deferred()
738 if (card->resume_pre) in soc_resume_deferred()
739 card->resume_pre(card); in soc_resume_deferred()
742 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
743 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in soc_resume_deferred()
745 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
752 list_for_each_entry(codec, &card->codec_dev_list, card_list) { in soc_resume_deferred()
773 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
775 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
778 snd_soc_dapm_stream_event(&card->rtd[i], in soc_resume_deferred()
782 snd_soc_dapm_stream_event(&card->rtd[i], in soc_resume_deferred()
788 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
790 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
793 for (j = 0; j < card->rtd[i].num_codecs; j++) { in soc_resume_deferred()
794 struct snd_soc_dai *dai = card->rtd[i].codec_dais[j]; in soc_resume_deferred()
802 for (i = 0; i < card->num_rtd; i++) { in soc_resume_deferred()
803 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in soc_resume_deferred()
805 if (card->rtd[i].dai_link->ignore_suspend) in soc_resume_deferred()
812 if (card->resume_post) in soc_resume_deferred()
813 card->resume_post(card); in soc_resume_deferred()
815 dev_dbg(card->dev, "ASoC: resume work completed\n"); in soc_resume_deferred()
818 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0); in soc_resume_deferred()
821 dapm_mark_endpoints_dirty(card); in soc_resume_deferred()
822 snd_soc_dapm_sync(&card->dapm); in soc_resume_deferred()
828 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_resume() local
833 if (!card->instantiated) in snd_soc_resume()
837 for (i = 0; i < card->num_rtd; i++) { in snd_soc_resume()
838 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_resume()
859 for (i = 0; i < card->num_rtd; i++) { in snd_soc_resume()
860 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; in snd_soc_resume()
865 soc_resume_deferred(&card->deferred_resume_work); in snd_soc_resume()
868 if (!schedule_work(&card->deferred_resume_work)) in snd_soc_resume()
927 static int soc_bind_dai_link(struct snd_soc_card *card, int num) in soc_bind_dai_link() argument
929 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; in soc_bind_dai_link()
930 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_bind_dai_link()
938 dev_dbg(card->dev, "ASoC: binding %s at idx %d\n", dai_link->name, num); in soc_bind_dai_link()
945 dev_err(card->dev, "ASoC: CPU DAI %s not registered\n", in soc_bind_dai_link()
956 dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n", in soc_bind_dai_link()
985 dev_err(card->dev, "ASoC: platform %s not registered\n", in soc_bind_dai_link()
990 card->num_rtd++; in soc_bind_dai_link()
1031 static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) in soc_remove_link_dais() argument
1033 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_remove_link_dais()
1049 static void soc_remove_link_components(struct snd_soc_card *card, int num, in soc_remove_link_components() argument
1052 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_remove_link_components()
1076 static void soc_remove_dai_links(struct snd_soc_card *card) in soc_remove_dai_links() argument
1082 for (dai = 0; dai < card->num_rtd; dai++) in soc_remove_dai_links()
1083 soc_remove_link_dais(card, dai, order); in soc_remove_dai_links()
1088 for (dai = 0; dai < card->num_rtd; dai++) in soc_remove_dai_links()
1089 soc_remove_link_components(card, dai, order); in soc_remove_dai_links()
1092 card->num_rtd = 0; in soc_remove_dai_links()
1095 static void soc_set_name_prefix(struct snd_soc_card *card, in soc_set_name_prefix() argument
1100 if (card->codec_conf == NULL) in soc_set_name_prefix()
1103 for (i = 0; i < card->num_configs; i++) { in soc_set_name_prefix()
1104 struct snd_soc_codec_conf *map = &card->codec_conf[i]; in soc_set_name_prefix()
1114 static int soc_probe_component(struct snd_soc_card *card, in soc_probe_component() argument
1124 component->card = card; in soc_probe_component()
1125 dapm->card = card; in soc_probe_component()
1126 soc_set_name_prefix(card, component); in soc_probe_component()
1175 list_add(&dapm->list, &card->dapm_list); in soc_probe_component()
1179 list_add(&component->codec->card_list, &card->codec_dev_list); in soc_probe_component()
1205 rtd->dev->parent = rtd->card->dev; in soc_post_component_init()
1219 dev_err(rtd->card->dev, in soc_post_component_init()
1227 static int soc_probe_link_components(struct snd_soc_card *card, int num, in soc_probe_link_components() argument
1230 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_probe_link_components()
1238 ret = soc_probe_component(card, component); in soc_probe_link_components()
1247 ret = soc_probe_component(card, component); in soc_probe_link_components()
1255 ret = soc_probe_component(card, &platform->component); in soc_probe_link_components()
1284 static int soc_link_dai_widgets(struct snd_soc_card *card, in soc_link_dai_widgets() argument
1294 dev_warn(card->dev, "ASoC: Multiple codecs not supported yet\n"); in soc_link_dai_widgets()
1300 ret = snd_soc_dapm_new_pcm(card, dai_link->params, in soc_link_dai_widgets()
1304 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", in soc_link_dai_widgets()
1313 ret = snd_soc_dapm_new_pcm(card, dai_link->params, in soc_link_dai_widgets()
1317 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", in soc_link_dai_widgets()
1326 static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) in soc_probe_link_dais() argument
1328 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; in soc_probe_link_dais()
1329 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; in soc_probe_link_dais()
1333 dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n", in soc_probe_link_dais()
1334 card->name, num, order); in soc_probe_link_dais()
1358 dev_err(card->dev, "ASoC: failed to init %s: %d\n", in soc_probe_link_dais()
1381 dev_err(card->dev, "ASoC: can't create compress %s\n", in soc_probe_link_dais()
1391 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", in soc_probe_link_dais()
1400 ret = soc_link_dai_widgets(card, dai_link, rtd); in soc_probe_link_dais()
1409 static int soc_bind_aux_dev(struct snd_soc_card *card, int num) in soc_bind_aux_dev() argument
1411 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_bind_aux_dev()
1412 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; in soc_bind_aux_dev()
1420 dev_err(card->dev, "ASoC: %s not registered\n", name); in soc_bind_aux_dev()
1434 static int soc_probe_aux_dev(struct snd_soc_card *card, int num) in soc_probe_aux_dev() argument
1436 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_probe_aux_dev()
1437 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; in soc_probe_aux_dev()
1440 ret = soc_probe_component(card, rtd->component); in soc_probe_aux_dev()
1448 dev_err(card->dev, "ASoC: failed to init %s: %d\n", in soc_probe_aux_dev()
1457 static void soc_remove_aux_dev(struct snd_soc_card *card, int num) in soc_remove_aux_dev() argument
1459 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; in soc_remove_aux_dev()
1556 static int snd_soc_instantiate_card(struct snd_soc_card *card) in snd_soc_instantiate_card() argument
1562 mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); in snd_soc_instantiate_card()
1565 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1566 ret = soc_bind_dai_link(card, i); in snd_soc_instantiate_card()
1572 for (i = 0; i < card->num_aux_devs; i++) { in snd_soc_instantiate_card()
1573 ret = soc_bind_aux_dev(card, i); in snd_soc_instantiate_card()
1588 ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, in snd_soc_instantiate_card()
1589 card->owner, 0, &card->snd_card); in snd_soc_instantiate_card()
1591 dev_err(card->dev, in snd_soc_instantiate_card()
1593 card->name, ret); in snd_soc_instantiate_card()
1597 soc_init_card_debugfs(card); in snd_soc_instantiate_card()
1599 card->dapm.bias_level = SND_SOC_BIAS_OFF; in snd_soc_instantiate_card()
1600 card->dapm.dev = card->dev; in snd_soc_instantiate_card()
1601 card->dapm.card = card; in snd_soc_instantiate_card()
1602 list_add(&card->dapm.list, &card->dapm_list); in snd_soc_instantiate_card()
1605 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); in snd_soc_instantiate_card()
1610 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); in snd_soc_instantiate_card()
1613 if (card->dapm_widgets) in snd_soc_instantiate_card()
1614 snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, in snd_soc_instantiate_card()
1615 card->num_dapm_widgets); in snd_soc_instantiate_card()
1617 if (card->of_dapm_widgets) in snd_soc_instantiate_card()
1618 snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets, in snd_soc_instantiate_card()
1619 card->num_of_dapm_widgets); in snd_soc_instantiate_card()
1622 if (card->probe) { in snd_soc_instantiate_card()
1623 ret = card->probe(card); in snd_soc_instantiate_card()
1631 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1632 ret = soc_probe_link_components(card, i, order); in snd_soc_instantiate_card()
1634 dev_err(card->dev, in snd_soc_instantiate_card()
1645 for (i = 0; i < card->num_links; i++) { in snd_soc_instantiate_card()
1646 ret = soc_probe_link_dais(card, i, order); in snd_soc_instantiate_card()
1648 dev_err(card->dev, in snd_soc_instantiate_card()
1656 for (i = 0; i < card->num_aux_devs; i++) { in snd_soc_instantiate_card()
1657 ret = soc_probe_aux_dev(card, i); in snd_soc_instantiate_card()
1659 dev_err(card->dev, in snd_soc_instantiate_card()
1666 snd_soc_dapm_link_dai_widgets(card); in snd_soc_instantiate_card()
1667 snd_soc_dapm_connect_dai_link_widgets(card); in snd_soc_instantiate_card()
1669 if (card->controls) in snd_soc_instantiate_card()
1670 snd_soc_add_card_controls(card, card->controls, card->num_controls); in snd_soc_instantiate_card()
1672 if (card->dapm_routes) in snd_soc_instantiate_card()
1673 snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, in snd_soc_instantiate_card()
1674 card->num_dapm_routes); in snd_soc_instantiate_card()
1676 if (card->of_dapm_routes) in snd_soc_instantiate_card()
1677 snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes, in snd_soc_instantiate_card()
1678 card->num_of_dapm_routes); in snd_soc_instantiate_card()
1680 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), in snd_soc_instantiate_card()
1681 "%s", card->name); in snd_soc_instantiate_card()
1682 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), in snd_soc_instantiate_card()
1683 "%s", card->long_name ? card->long_name : card->name); in snd_soc_instantiate_card()
1684 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), in snd_soc_instantiate_card()
1685 "%s", card->driver_name ? card->driver_name : card->name); in snd_soc_instantiate_card()
1686 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { in snd_soc_instantiate_card()
1687 switch (card->snd_card->driver[i]) { in snd_soc_instantiate_card()
1693 if (!isalnum(card->snd_card->driver[i])) in snd_soc_instantiate_card()
1694 card->snd_card->driver[i] = '_'; in snd_soc_instantiate_card()
1699 if (card->late_probe) { in snd_soc_instantiate_card()
1700 ret = card->late_probe(card); in snd_soc_instantiate_card()
1702 dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n", in snd_soc_instantiate_card()
1703 card->name, ret); in snd_soc_instantiate_card()
1708 snd_soc_dapm_new_widgets(card); in snd_soc_instantiate_card()
1710 ret = snd_card_register(card->snd_card); in snd_soc_instantiate_card()
1712 dev_err(card->dev, "ASoC: failed to register soundcard %d\n", in snd_soc_instantiate_card()
1717 card->instantiated = 1; in snd_soc_instantiate_card()
1718 snd_soc_dapm_sync(&card->dapm); in snd_soc_instantiate_card()
1719 mutex_unlock(&card->mutex); in snd_soc_instantiate_card()
1725 for (i = 0; i < card->num_aux_devs; i++) in snd_soc_instantiate_card()
1726 soc_remove_aux_dev(card, i); in snd_soc_instantiate_card()
1729 soc_remove_dai_links(card); in snd_soc_instantiate_card()
1732 if (card->remove) in snd_soc_instantiate_card()
1733 card->remove(card); in snd_soc_instantiate_card()
1735 soc_cleanup_card_debugfs(card); in snd_soc_instantiate_card()
1736 snd_card_free(card->snd_card); in snd_soc_instantiate_card()
1739 mutex_unlock(&card->mutex); in snd_soc_instantiate_card()
1748 struct snd_soc_card *card = platform_get_drvdata(pdev); in soc_probe() local
1754 if (!card) in soc_probe()
1759 card->name); in soc_probe()
1762 card->dev = &pdev->dev; in soc_probe()
1764 return snd_soc_register_card(card); in soc_probe()
1767 static int soc_cleanup_card_resources(struct snd_soc_card *card) in soc_cleanup_card_resources() argument
1772 for (i = 0; i < card->num_rtd; i++) { in soc_cleanup_card_resources()
1773 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in soc_cleanup_card_resources()
1778 for (i = 0; i < card->num_aux_devs; i++) in soc_cleanup_card_resources()
1779 soc_remove_aux_dev(card, i); in soc_cleanup_card_resources()
1782 soc_remove_dai_links(card); in soc_cleanup_card_resources()
1784 soc_cleanup_card_debugfs(card); in soc_cleanup_card_resources()
1787 if (card->remove) in soc_cleanup_card_resources()
1788 card->remove(card); in soc_cleanup_card_resources()
1790 snd_soc_dapm_free(&card->dapm); in soc_cleanup_card_resources()
1792 snd_card_free(card->snd_card); in soc_cleanup_card_resources()
1800 struct snd_soc_card *card = platform_get_drvdata(pdev); in soc_remove() local
1802 snd_soc_unregister_card(card); in soc_remove()
1808 struct snd_soc_card *card = dev_get_drvdata(dev); in snd_soc_poweroff() local
1811 if (!card->instantiated) in snd_soc_poweroff()
1816 for (i = 0; i < card->num_rtd; i++) { in snd_soc_poweroff()
1817 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_poweroff()
1821 snd_soc_dapm_shutdown(card); in snd_soc_poweroff()
1824 for (i = 0; i < card->num_rtd; i++) { in snd_soc_poweroff()
1825 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_poweroff()
1903 static int snd_soc_add_controls(struct snd_card *card, struct device *dev, in snd_soc_add_controls() argument
1911 err = snd_ctl_add(card, snd_soc_cnew(control, data, in snd_soc_add_controls()
1926 struct snd_card *card = soc_card->snd_card; in snd_soc_card_get_kcontrol() local
1932 list_for_each_entry(kctl, &card->controls, list) in snd_soc_card_get_kcontrol()
1951 struct snd_card *card = component->card->snd_card; in snd_soc_add_component_controls() local
1953 return snd_soc_add_controls(card, component->dev, controls, in snd_soc_add_component_controls()
2008 struct snd_card *card = soc_card->snd_card; in snd_soc_add_card_controls() local
2010 return snd_soc_add_controls(card, soc_card->dev, controls, num_controls, in snd_soc_add_card_controls()
2028 struct snd_card *card = dai->component->card->snd_card; in snd_soc_add_dai_controls() local
2030 return snd_soc_add_controls(card, dai->dev, controls, num_controls, in snd_soc_add_dai_controls()
2307 static int snd_soc_init_multicodec(struct snd_soc_card *card, in snd_soc_init_multicodec() argument
2315 dai_link->codecs = devm_kzalloc(card->dev, in snd_soc_init_multicodec()
2327 dev_err(card->dev, "ASoC: DAI link has no CODECs\n"); in snd_soc_init_multicodec()
2340 int snd_soc_register_card(struct snd_soc_card *card) in snd_soc_register_card() argument
2344 if (!card->name || !card->dev) in snd_soc_register_card()
2347 for (i = 0; i < card->num_links; i++) { in snd_soc_register_card()
2348 struct snd_soc_dai_link *link = &card->dai_link[i]; in snd_soc_register_card()
2350 ret = snd_soc_init_multicodec(card, link); in snd_soc_register_card()
2352 dev_err(card->dev, "ASoC: failed to init multicodec\n"); in snd_soc_register_card()
2363 dev_err(card->dev, "ASoC: Neither/both codec name/of_node are set for %s\n", in snd_soc_register_card()
2369 dev_err(card->dev, "ASoC: codec_dai_name not set for %s\n", in snd_soc_register_card()
2380 dev_err(card->dev, in snd_soc_register_card()
2392 dev_err(card->dev, in snd_soc_register_card()
2403 dev_err(card->dev, in snd_soc_register_card()
2410 dev_set_drvdata(card->dev, card); in snd_soc_register_card()
2412 snd_soc_initialize_card_lists(card); in snd_soc_register_card()
2414 card->rtd = devm_kzalloc(card->dev, in snd_soc_register_card()
2416 (card->num_links + card->num_aux_devs), in snd_soc_register_card()
2418 if (card->rtd == NULL) in snd_soc_register_card()
2420 card->num_rtd = 0; in snd_soc_register_card()
2421 card->rtd_aux = &card->rtd[card->num_links]; in snd_soc_register_card()
2423 for (i = 0; i < card->num_links; i++) { in snd_soc_register_card()
2424 card->rtd[i].card = card; in snd_soc_register_card()
2425 card->rtd[i].dai_link = &card->dai_link[i]; in snd_soc_register_card()
2426 card->rtd[i].codec_dais = devm_kzalloc(card->dev, in snd_soc_register_card()
2428 (card->rtd[i].dai_link->num_codecs), in snd_soc_register_card()
2430 if (card->rtd[i].codec_dais == NULL) in snd_soc_register_card()
2434 for (i = 0; i < card->num_aux_devs; i++) in snd_soc_register_card()
2435 card->rtd_aux[i].card = card; in snd_soc_register_card()
2437 INIT_LIST_HEAD(&card->dapm_dirty); in snd_soc_register_card()
2438 card->instantiated = 0; in snd_soc_register_card()
2439 mutex_init(&card->mutex); in snd_soc_register_card()
2440 mutex_init(&card->dapm_mutex); in snd_soc_register_card()
2442 ret = snd_soc_instantiate_card(card); in snd_soc_register_card()
2447 for (i = 0; i < card->num_rtd; i++) { in snd_soc_register_card()
2448 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; in snd_soc_register_card()
2472 int snd_soc_unregister_card(struct snd_soc_card *card) in snd_soc_unregister_card() argument
2474 if (card->instantiated) { in snd_soc_unregister_card()
2475 card->instantiated = false; in snd_soc_unregister_card()
2476 snd_soc_dapm_shutdown(card); in snd_soc_unregister_card()
2477 soc_cleanup_card_resources(card); in snd_soc_unregister_card()
2478 dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); in snd_soc_unregister_card()
3172 int snd_soc_of_parse_card_name(struct snd_soc_card *card, in snd_soc_of_parse_card_name() argument
3178 if (!card->dev) { in snd_soc_of_parse_card_name()
3183 np = card->dev->of_node; in snd_soc_of_parse_card_name()
3185 ret = of_property_read_string_index(np, propname, 0, &card->name); in snd_soc_of_parse_card_name()
3192 dev_err(card->dev, in snd_soc_of_parse_card_name()
3209 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card, in snd_soc_of_parse_audio_simple_widgets() argument
3212 struct device_node *np = card->dev->of_node; in snd_soc_of_parse_audio_simple_widgets()
3219 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3224 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3231 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", in snd_soc_of_parse_audio_simple_widgets()
3236 widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets), in snd_soc_of_parse_audio_simple_widgets()
3239 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3248 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3263 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3273 dev_err(card->dev, in snd_soc_of_parse_audio_simple_widgets()
3282 card->of_dapm_widgets = widgets; in snd_soc_of_parse_audio_simple_widgets()
3283 card->num_of_dapm_widgets = num_widgets; in snd_soc_of_parse_audio_simple_widgets()
3318 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, in snd_soc_of_parse_audio_routing() argument
3321 struct device_node *np = card->dev->of_node; in snd_soc_of_parse_audio_routing()
3328 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3335 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", in snd_soc_of_parse_audio_routing()
3340 routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes), in snd_soc_of_parse_audio_routing()
3343 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3352 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3360 dev_err(card->dev, in snd_soc_of_parse_audio_routing()
3367 card->num_of_dapm_routes = num_routes; in snd_soc_of_parse_audio_routing()
3368 card->of_dapm_routes = routes; in snd_soc_of_parse_audio_routing()