*参照元 [#a0eea70a] #backlinks *説明 [#p679e1c4] -パス: [[linux-4.4.1/sound/soc/soc-core.c]] -FIXME: これは何? --説明 **引数 [#f40a0694] -struct snd_soc_card *card -- --[[linux-4.4.1/]] -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/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]