Lines Matching refs:component
293 static void soc_init_component_debugfs(struct snd_soc_component *component) in soc_init_component_debugfs() argument
295 if (!component->card->debugfs_card_root) in soc_init_component_debugfs()
298 if (component->debugfs_prefix) { in soc_init_component_debugfs()
302 component->debugfs_prefix, component->name); in soc_init_component_debugfs()
304 component->debugfs_root = debugfs_create_dir(name, in soc_init_component_debugfs()
305 component->card->debugfs_card_root); in soc_init_component_debugfs()
309 component->debugfs_root = debugfs_create_dir(component->name, in soc_init_component_debugfs()
310 component->card->debugfs_card_root); in soc_init_component_debugfs()
313 if (!component->debugfs_root) { in soc_init_component_debugfs()
314 dev_warn(component->dev, in soc_init_component_debugfs()
319 snd_soc_dapm_debugfs_init(snd_soc_component_get_dapm(component), in soc_init_component_debugfs()
320 component->debugfs_root); in soc_init_component_debugfs()
322 if (component->init_debugfs) in soc_init_component_debugfs()
323 component->init_debugfs(component); in soc_init_component_debugfs()
326 static void soc_cleanup_component_debugfs(struct snd_soc_component *component) in soc_cleanup_component_debugfs() argument
328 debugfs_remove_recursive(component->debugfs_root); in soc_cleanup_component_debugfs()
331 static void soc_init_codec_debugfs(struct snd_soc_component *component) in soc_init_codec_debugfs() argument
333 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); in soc_init_codec_debugfs()
336 codec->component.debugfs_root, in soc_init_codec_debugfs()
357 codec->component.name); in codec_list_read_file()
386 struct snd_soc_component *component; in dai_list_read_file() local
394 list_for_each_entry(component, &component_list, list) { in dai_list_read_file()
395 list_for_each_entry(dai, &component->dai_list, list) { in dai_list_read_file()
436 platform->component.name); in platform_list_read_file()
518 struct snd_soc_component *component) in soc_init_component_debugfs() argument
523 struct snd_soc_component *component) in soc_cleanup_component_debugfs() argument
686 if (codec->component.regmap) in snd_soc_suspend()
687 regcache_mark_dirty(codec->component.regmap); in snd_soc_suspend()
886 struct snd_soc_component *component; in soc_find_component() local
890 list_for_each_entry(component, &component_list, list) { in soc_find_component()
892 if (component->dev->of_node == of_node) in soc_find_component()
893 return component; in soc_find_component()
894 } else if (strcmp(component->name, name) == 0) { in soc_find_component()
895 return component; in soc_find_component()
905 struct snd_soc_component *component; in snd_soc_find_dai() local
911 list_for_each_entry(component, &component_list, list) { in snd_soc_find_dai()
912 if (dlc->of_node && component->dev->of_node != dlc->of_node) in snd_soc_find_dai()
914 if (dlc->name && strcmp(component->name, dlc->name)) in snd_soc_find_dai()
916 list_for_each_entry(dai, &component->dai_list, list) { in snd_soc_find_dai()
978 if (strcmp(platform->component.name, platform_name)) in soc_bind_dai_link()
995 static void soc_remove_component(struct snd_soc_component *component) in soc_remove_component() argument
997 if (!component->probed) in soc_remove_component()
1001 if (component->codec) in soc_remove_component()
1002 list_del(&component->codec->card_list); in soc_remove_component()
1004 if (component->remove) in soc_remove_component()
1005 component->remove(component); in soc_remove_component()
1007 snd_soc_dapm_free(snd_soc_component_get_dapm(component)); in soc_remove_component()
1009 soc_cleanup_component_debugfs(component); in soc_remove_component()
1010 component->probed = 0; in soc_remove_component()
1011 module_put(component->dev->driver->owner); in soc_remove_component()
1055 struct snd_soc_component *component; in soc_remove_link_components() local
1059 if (platform && platform->component.driver->remove_order == order) in soc_remove_link_components()
1060 soc_remove_component(&platform->component); in soc_remove_link_components()
1064 component = rtd->codec_dais[i]->component; in soc_remove_link_components()
1065 if (component->driver->remove_order == order) in soc_remove_link_components()
1066 soc_remove_component(component); in soc_remove_link_components()
1071 if (cpu_dai->component->driver->remove_order == order) in soc_remove_link_components()
1072 soc_remove_component(cpu_dai->component); in soc_remove_link_components()
1096 struct snd_soc_component *component) in soc_set_name_prefix() argument
1105 if (map->of_node && component->dev->of_node != map->of_node) in soc_set_name_prefix()
1107 if (map->dev_name && strcmp(component->name, map->dev_name)) in soc_set_name_prefix()
1109 component->name_prefix = map->name_prefix; in soc_set_name_prefix()
1115 struct snd_soc_component *component) in soc_probe_component() argument
1117 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); in soc_probe_component()
1121 if (component->probed) in soc_probe_component()
1124 component->card = card; in soc_probe_component()
1126 soc_set_name_prefix(card, component); in soc_probe_component()
1128 if (!try_module_get(component->dev->driver->owner)) in soc_probe_component()
1131 soc_init_component_debugfs(component); in soc_probe_component()
1133 if (component->dapm_widgets) { in soc_probe_component()
1134 ret = snd_soc_dapm_new_controls(dapm, component->dapm_widgets, in soc_probe_component()
1135 component->num_dapm_widgets); in soc_probe_component()
1138 dev_err(component->dev, in soc_probe_component()
1144 list_for_each_entry(dai, &component->dai_list, list) { in soc_probe_component()
1147 dev_err(component->dev, in soc_probe_component()
1153 if (component->probe) { in soc_probe_component()
1154 ret = component->probe(component); in soc_probe_component()
1156 dev_err(component->dev, in soc_probe_component()
1164 component->name); in soc_probe_component()
1167 if (component->controls) in soc_probe_component()
1168 snd_soc_add_component_controls(component, component->controls, in soc_probe_component()
1169 component->num_controls); in soc_probe_component()
1170 if (component->dapm_routes) in soc_probe_component()
1171 snd_soc_dapm_add_routes(dapm, component->dapm_routes, in soc_probe_component()
1172 component->num_dapm_routes); in soc_probe_component()
1174 component->probed = 1; in soc_probe_component()
1178 if (component->codec) in soc_probe_component()
1179 list_add(&component->codec->card_list, &card->codec_dev_list); in soc_probe_component()
1184 soc_cleanup_component_debugfs(component); in soc_probe_component()
1185 module_put(component->dev->driver->owner); in soc_probe_component()
1232 struct snd_soc_component *component; in soc_probe_link_components() local
1236 component = rtd->cpu_dai->component; in soc_probe_link_components()
1237 if (component->driver->probe_order == order) { in soc_probe_link_components()
1238 ret = soc_probe_component(card, component); in soc_probe_link_components()
1245 component = rtd->codec_dais[i]->component; in soc_probe_link_components()
1246 if (component->driver->probe_order == order) { in soc_probe_link_components()
1247 ret = soc_probe_component(card, component); in soc_probe_link_components()
1254 if (platform->component.driver->probe_order == order) { in soc_probe_link_components()
1255 ret = soc_probe_component(card, &platform->component); in soc_probe_link_components()
1415 rtd->component = soc_find_component(aux_dev->codec_of_node, name); in soc_bind_aux_dev()
1416 if (!rtd->component) { in soc_bind_aux_dev()
1429 rtd->codec = rtd->component->codec; in soc_bind_aux_dev()
1440 ret = soc_probe_component(card, rtd->component); in soc_probe_aux_dev()
1446 ret = aux_dev->init(rtd->component); in soc_probe_aux_dev()
1460 struct snd_soc_component *component = rtd->component; in soc_remove_aux_dev() local
1468 if (component && component->probed) in soc_remove_aux_dev()
1469 soc_remove_component(component); in soc_remove_aux_dev()
1948 int snd_soc_add_component_controls(struct snd_soc_component *component, in snd_soc_add_component_controls() argument
1951 struct snd_card *card = component->card->snd_card; in snd_soc_add_component_controls()
1953 return snd_soc_add_controls(card, component->dev, controls, in snd_soc_add_component_controls()
1954 num_controls, component->name_prefix, component); in snd_soc_add_component_controls()
1972 return snd_soc_add_component_controls(&codec->component, controls, in snd_soc_add_codec_controls()
1990 return snd_soc_add_component_controls(&platform->component, controls, in snd_soc_add_platform_controls()
2028 struct snd_card *card = dai->component->card->snd_card; in snd_soc_add_dai_controls()
2550 static void snd_soc_unregister_dais(struct snd_soc_component *component) in snd_soc_unregister_dais() argument
2554 list_for_each_entry_safe(dai, _dai, &component->dai_list, list) { in snd_soc_unregister_dais()
2555 dev_dbg(component->dev, "ASoC: Unregistered DAI '%s'\n", in snd_soc_unregister_dais()
2572 static int snd_soc_register_dais(struct snd_soc_component *component, in snd_soc_register_dais() argument
2576 struct device *dev = component->dev; in snd_soc_register_dais()
2583 component->dai_drv = dai_drv; in snd_soc_register_dais()
2584 component->num_dai = count; in snd_soc_register_dais()
2617 dai->component = component; in snd_soc_register_dais()
2623 list_add(&dai->list, &component->dai_list); in snd_soc_register_dais()
2631 snd_soc_unregister_dais(component); in snd_soc_register_dais()
2639 struct snd_soc_component *component = dapm->component; in snd_soc_component_seq_notifier() local
2641 component->driver->seq_notifier(component, type, subseq); in snd_soc_component_seq_notifier()
2647 struct snd_soc_component *component = dapm->component; in snd_soc_component_stream_event() local
2649 return component->driver->stream_event(component, event); in snd_soc_component_stream_event()
2652 static int snd_soc_component_initialize(struct snd_soc_component *component, in snd_soc_component_initialize() argument
2657 component->name = fmt_single_name(dev, &component->id); in snd_soc_component_initialize()
2658 if (!component->name) { in snd_soc_component_initialize()
2663 component->dev = dev; in snd_soc_component_initialize()
2664 component->driver = driver; in snd_soc_component_initialize()
2665 component->probe = component->driver->probe; in snd_soc_component_initialize()
2666 component->remove = component->driver->remove; in snd_soc_component_initialize()
2668 if (!component->dapm_ptr) in snd_soc_component_initialize()
2669 component->dapm_ptr = &component->dapm; in snd_soc_component_initialize()
2671 dapm = component->dapm_ptr; in snd_soc_component_initialize()
2673 dapm->component = component; in snd_soc_component_initialize()
2681 component->controls = driver->controls; in snd_soc_component_initialize()
2682 component->num_controls = driver->num_controls; in snd_soc_component_initialize()
2683 component->dapm_widgets = driver->dapm_widgets; in snd_soc_component_initialize()
2684 component->num_dapm_widgets = driver->num_dapm_widgets; in snd_soc_component_initialize()
2685 component->dapm_routes = driver->dapm_routes; in snd_soc_component_initialize()
2686 component->num_dapm_routes = driver->num_dapm_routes; in snd_soc_component_initialize()
2688 INIT_LIST_HEAD(&component->dai_list); in snd_soc_component_initialize()
2689 mutex_init(&component->io_mutex); in snd_soc_component_initialize()
2694 static void snd_soc_component_setup_regmap(struct snd_soc_component *component) in snd_soc_component_setup_regmap() argument
2696 int val_bytes = regmap_get_val_bytes(component->regmap); in snd_soc_component_setup_regmap()
2700 component->val_bytes = val_bytes; in snd_soc_component_setup_regmap()
2715 void snd_soc_component_init_regmap(struct snd_soc_component *component, in snd_soc_component_init_regmap() argument
2718 component->regmap = regmap; in snd_soc_component_init_regmap()
2719 snd_soc_component_setup_regmap(component); in snd_soc_component_init_regmap()
2733 void snd_soc_component_exit_regmap(struct snd_soc_component *component) in snd_soc_component_exit_regmap() argument
2735 regmap_exit(component->regmap); in snd_soc_component_exit_regmap()
2736 component->regmap = NULL; in snd_soc_component_exit_regmap()
2742 static void snd_soc_component_add_unlocked(struct snd_soc_component *component) in snd_soc_component_add_unlocked() argument
2744 if (!component->write && !component->read) { in snd_soc_component_add_unlocked()
2745 if (!component->regmap) in snd_soc_component_add_unlocked()
2746 component->regmap = dev_get_regmap(component->dev, NULL); in snd_soc_component_add_unlocked()
2747 if (component->regmap) in snd_soc_component_add_unlocked()
2748 snd_soc_component_setup_regmap(component); in snd_soc_component_add_unlocked()
2751 list_add(&component->list, &component_list); in snd_soc_component_add_unlocked()
2754 static void snd_soc_component_add(struct snd_soc_component *component) in snd_soc_component_add() argument
2757 snd_soc_component_add_unlocked(component); in snd_soc_component_add()
2761 static void snd_soc_component_cleanup(struct snd_soc_component *component) in snd_soc_component_cleanup() argument
2763 snd_soc_unregister_dais(component); in snd_soc_component_cleanup()
2764 kfree(component->name); in snd_soc_component_cleanup()
2767 static void snd_soc_component_del_unlocked(struct snd_soc_component *component) in snd_soc_component_del_unlocked() argument
2769 list_del(&component->list); in snd_soc_component_del_unlocked()
2835 static int snd_soc_platform_drv_probe(struct snd_soc_component *component) in snd_soc_platform_drv_probe() argument
2837 struct snd_soc_platform *platform = snd_soc_component_to_platform(component); in snd_soc_platform_drv_probe()
2842 static void snd_soc_platform_drv_remove(struct snd_soc_component *component) in snd_soc_platform_drv_remove() argument
2844 struct snd_soc_platform *platform = snd_soc_component_to_platform(component); in snd_soc_platform_drv_remove()
2860 ret = snd_soc_component_initialize(&platform->component, in snd_soc_add_platform()
2869 platform->component.probe = snd_soc_platform_drv_probe; in snd_soc_add_platform()
2871 platform->component.remove = snd_soc_platform_drv_remove; in snd_soc_add_platform()
2874 platform->component.debugfs_prefix = "platform"; in snd_soc_add_platform()
2878 snd_soc_component_add_unlocked(&platform->component); in snd_soc_add_platform()
2883 platform->component.name); in snd_soc_add_platform()
2923 snd_soc_component_del_unlocked(&platform->component); in snd_soc_remove_platform()
2927 platform->component.name); in snd_soc_remove_platform()
2929 snd_soc_component_cleanup(&platform->component); in snd_soc_remove_platform()
3001 static int snd_soc_codec_drv_probe(struct snd_soc_component *component) in snd_soc_codec_drv_probe() argument
3003 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); in snd_soc_codec_drv_probe()
3008 static void snd_soc_codec_drv_remove(struct snd_soc_component *component) in snd_soc_codec_drv_remove() argument
3010 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); in snd_soc_codec_drv_remove()
3015 static int snd_soc_codec_drv_write(struct snd_soc_component *component, in snd_soc_codec_drv_write() argument
3018 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); in snd_soc_codec_drv_write()
3023 static int snd_soc_codec_drv_read(struct snd_soc_component *component, in snd_soc_codec_drv_read() argument
3026 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); in snd_soc_codec_drv_read()
3061 codec->component.dapm_ptr = &codec->dapm; in snd_soc_register_codec()
3062 codec->component.codec = codec; in snd_soc_register_codec()
3064 ret = snd_soc_component_initialize(&codec->component, in snd_soc_register_codec()
3070 codec->component.controls = codec_drv->controls; in snd_soc_register_codec()
3071 codec->component.num_controls = codec_drv->num_controls; in snd_soc_register_codec()
3074 codec->component.dapm_widgets = codec_drv->dapm_widgets; in snd_soc_register_codec()
3075 codec->component.num_dapm_widgets = codec_drv->num_dapm_widgets; in snd_soc_register_codec()
3078 codec->component.dapm_routes = codec_drv->dapm_routes; in snd_soc_register_codec()
3079 codec->component.num_dapm_routes = codec_drv->num_dapm_routes; in snd_soc_register_codec()
3083 codec->component.probe = snd_soc_codec_drv_probe; in snd_soc_register_codec()
3085 codec->component.remove = snd_soc_codec_drv_remove; in snd_soc_register_codec()
3087 codec->component.write = snd_soc_codec_drv_write; in snd_soc_register_codec()
3089 codec->component.read = snd_soc_codec_drv_read; in snd_soc_register_codec()
3090 codec->component.ignore_pmdown_time = codec_drv->ignore_pmdown_time; in snd_soc_register_codec()
3099 codec->component.val_bytes = codec_drv->reg_word_size; in snd_soc_register_codec()
3102 codec->component.init_debugfs = soc_init_codec_debugfs; in snd_soc_register_codec()
3103 codec->component.debugfs_prefix = "codec"; in snd_soc_register_codec()
3107 codec->component.regmap = codec_drv->get_regmap(dev); in snd_soc_register_codec()
3114 ret = snd_soc_register_dais(&codec->component, dai_drv, num_dai, false); in snd_soc_register_codec()
3120 list_for_each_entry(dai, &codec->component.dai_list, list) in snd_soc_register_codec()
3124 snd_soc_component_add_unlocked(&codec->component); in snd_soc_register_codec()
3129 codec->component.name); in snd_soc_register_codec()
3133 snd_soc_component_cleanup(&codec->component); in snd_soc_register_codec()
3159 snd_soc_component_del_unlocked(&codec->component); in snd_soc_unregister_codec()
3163 codec->component.name); in snd_soc_unregister_codec()
3165 snd_soc_component_cleanup(&codec->component); in snd_soc_unregister_codec()
3572 struct snd_soc_dai_link_component *component; in snd_soc_of_get_dai_link_codecs() local
3587 component = devm_kzalloc(dev, in snd_soc_of_get_dai_link_codecs()
3588 sizeof *component * num_codecs, in snd_soc_of_get_dai_link_codecs()
3590 if (!component) in snd_soc_of_get_dai_link_codecs()
3592 dai_link->codecs = component; in snd_soc_of_get_dai_link_codecs()
3596 for (index = 0, component = dai_link->codecs; in snd_soc_of_get_dai_link_codecs()
3598 index++, component++) { in snd_soc_of_get_dai_link_codecs()
3604 component->of_node = args.np; in snd_soc_of_get_dai_link_codecs()
3605 ret = snd_soc_get_dai_name(&args, &component->dai_name); in snd_soc_of_get_dai_link_codecs()
3611 for (index = 0, component = dai_link->codecs; in snd_soc_of_get_dai_link_codecs()
3613 index++, component++) { in snd_soc_of_get_dai_link_codecs()
3614 if (!component->of_node) in snd_soc_of_get_dai_link_codecs()
3616 of_node_put(component->of_node); in snd_soc_of_get_dai_link_codecs()
3617 component->of_node = NULL; in snd_soc_of_get_dai_link_codecs()