*参照元 [#a0eea70a]
#backlinks

*説明 [#p679e1c4]
-パス: [[linux-4.4.1/sound/soc/soc-core.c]]

-FIXME: これは何?
--説明


**引数 [#f40a0694]
-struct snd_soc_card *card
--
--[[linux-4.4.1/snd_soc_card]]
-const char *propname
--


**返り値 [#cdaf769a]
-int
--


**参考 [#tde2233a]


*実装 [#x2527f7c]
 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
                                           const char *propname)
 {
         struct device_node *np = card->dev->of_node;
         struct snd_soc_dapm_widget *widgets;
         const char *template, *wname;
         int i, j, num_widgets, ret;
 
-
--[[linux-4.4.1/device_node]]
--[[linux-4.4.1/snd_soc_dapm_widget]]

         num_widgets = of_property_count_strings(np, propname);
         if (num_widgets < 0) {
                 dev_err(card->dev,
                         "ASoC: Property '%s' does not exist\n", propname);
                 return -EINVAL;
         }
         if (num_widgets & 1) {
                 dev_err(card->dev,
                         "ASoC: Property '%s' length is not even\n", propname);
                 return -EINVAL;
         }
 
-
--[[linux-4.4.1/of_property_count_strings()]]

         num_widgets /= 2;
         if (!num_widgets) {
                 dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
                         propname);
                 return -EINVAL;
         }
 
-
--[[linux-4.4.1/dev_err()]]

         widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets),
                                GFP_KERNEL);
         if (!widgets) {
                 dev_err(card->dev,
                         "ASoC: Could not allocate memory for widgets\n");
                 return -ENOMEM;
         }
 
-
--[[linux-4.4.1/devm_kcalloc()]]

         for (i = 0; i < num_widgets; i++) {
                 ret = of_property_read_string_index(np, propname,
                         2 * i, &template);
                 if (ret) {
                         dev_err(card->dev,
                                 "ASoC: Property '%s' index %d read error:%d\n",
                                 propname, 2 * i, ret);
                         return -EINVAL;
                 }
 
-
--[[linux-4.4.1/of_property_read_string_index()]]

                 for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) {
                         if (!strncmp(template, simple_widgets[j].name,
                                      strlen(simple_widgets[j].name))) {
                                 widgets[i] = simple_widgets[j];
                                 break;
                         }
                 }
 
-
--[[linux-4.4.1/simple_widgets(global)]]
--[[linux-4.4.1/ARRAY_SIZE()]]
--[[linux-4.4.1/strncmp()]]
--[[linux-4.4.1/strlen()]]

                 if (j >= ARRAY_SIZE(simple_widgets)) {
                         dev_err(card->dev,
                                 "ASoC: DAPM widget '%s' is not supported\n",
                                 template);
                         return -EINVAL;
                 }
 
                 ret = of_property_read_string_index(np, propname,
                                                     (2 * i) + 1,
                                                     &wname);
                 if (ret) {
                         dev_err(card->dev,
                                 "ASoC: Property '%s' index %d read error:%d\n",
                                 propname, (2 * i) + 1, ret);
                         return -EINVAL;
                 }
 
                 widgets[i].name = wname;
         }
 
         card->of_dapm_widgets = widgets;
         card->num_of_dapm_widgets = num_widgets;
 
         return 0;
 }
 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets);
-
--[[linux-4.4.1/EXPORT_SYMBOL_GPL()]]


*コメント [#u613a2e3]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS