4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
11 #include <linux/module.h>
12 #include <linux/device.h>
14 #include <sound/core.h>
15 #include <sound/pcm.h>
16 #include <sound/soc.h>
33 Get audio-codec and audio-controller in this fun,
34 and get oher infos in fun snd_soc_of_parse_daifmt().
39 audio-codec = <&codec_of_node>;
40 audio-controller = <&cpu_of_node>;
50 audio-codec = <&codec_of_node>;
51 audio-controller = <&cpu_of_node>;
61 int rockchip_of_get_sound_card_info_(struct snd_soc_card *card,
64 struct device_node *dai_node, *child_dai_node;
67 dai_node = of_get_child_by_name(card->dev->of_node, "dais");
69 dev_err(card->dev, "%s() Can not get child: dais\n",
76 for_each_child_of_node(dai_node, child_dai_node) {
78 card->dai_link[dai_num].dai_fmt =
79 snd_soc_of_parse_daifmt(child_dai_node, NULL);
80 if ((card->dai_link[dai_num].dai_fmt &
81 SND_SOC_DAIFMT_MASTER_MASK) == 0) {
83 "Property 'format' missing or invalid\n");
88 card->dai_link[dai_num].codec_name = NULL;
89 card->dai_link[dai_num].cpu_dai_name = NULL;
90 card->dai_link[dai_num].platform_name = NULL;
92 card->dai_link[dai_num].codec_of_node = of_parse_phandle(
95 if (!card->dai_link[dai_num].codec_of_node) {
97 "Property 'audio-codec' missing or invalid\n");
101 card->dai_link[dai_num].cpu_of_node = of_parse_phandle(
103 "audio-controller", 0);
104 if (!card->dai_link[dai_num].cpu_of_node) {
106 "Property 'audio-controller' missing or invalid\n");
110 card->dai_link[dai_num].platform_of_node =
111 card->dai_link[dai_num].cpu_of_node;
113 if (++dai_num >= card->num_links)
117 if (dai_num < card->num_links) {
118 dev_err(card->dev, "%s() Can not get enough property for dais, dai: %d, max dai num: %d\n",
119 __func__, dai_num, card->num_links);
125 EXPORT_SYMBOL_GPL(rockchip_of_get_sound_card_info_);
127 int rockchip_of_get_sound_card_info(struct snd_soc_card *card)
129 return rockchip_of_get_sound_card_info_(card, true);
131 EXPORT_SYMBOL_GPL(rockchip_of_get_sound_card_info);
133 /* Module information */
134 MODULE_AUTHOR("Jear <Jear.Chen@rock-chips.com>");
135 MODULE_DESCRIPTION("ROCKCHIP ASoC Interface");
136 MODULE_LICENSE("GPL");