linux-4.4.1/snd_soc_dapm_add_route()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#paaf64be]
#backlinks
*説明 [#zc094550]
-パス: [[linux-4.4.1/sound/soc/soc-dapm.c]]
-FIXME: これは何?
--説明
**引数 [#s90553ba]
-struct snd_soc_dapm_context *dapm
--
--[[linux-4.4.1/snd_soc_dapm_context]]
-const struct snd_soc_dapm_route *route
--
--[[linux-4.4.1/snd_soc_dapm_route]]
**返り値 [#g158e223]
-int
--
**参考 [#n20f68f1]
*実装 [#r1717363]
static int snd_soc_dapm_add_route(struct snd_soc_dapm_co...
const struct snd_soc_dapm_route *route)
{
struct snd_soc_dapm_widget *wsource = NULL, *wsink = NU...
struct snd_soc_dapm_widget *wtsource = NULL, *wtsink = ...
const char *sink;
const char *source;
char prefixed_sink[80];
char prefixed_source[80];
const char *prefix;
int ret;
-
--[[linux-4.4.1/snd_soc_dapm_widget]]
prefix = soc_dapm_prefix(dapm);
if (prefix) {
snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
prefix, route->sink);
sink = prefixed_sink;
snprintf(prefixed_source, sizeof(prefixed_source), "%s...
prefix, route->source);
source = prefixed_source;
} else {
sink = route->sink;
source = route->source;
}
-
--[[linux-4.4.1/soc_dapm_prefix()]]
--[[linux-4.4.1/snprintf()]]
wsource = dapm_wcache_lookup(&dapm->path_source_cache, ...
wsink = dapm_wcache_lookup(&dapm->path_sink_cache, sink);
if (wsink && wsource)
goto skip_search;
-
--[[linux-4.4.1/dapm_wcache_lookup()]]
/*
* find src and dest widgets over all widgets but favor...
* current DAPM context
*/
list_for_each_entry(w, &dapm->card->widgets, list) {
if (!wsink && !(strcmp(w->name, sink))) {
wtsink = w;
if (w->dapm == dapm) {
wsink = w;
if (wsource)
break;
}
continue;
}
if (!wsource && !(strcmp(w->name, source))) {
wtsource = w;
if (w->dapm == dapm) {
wsource = w;
if (wsink)
break;
}
}
}
-
--[[linux-4.4.1/list_for_each_entry()]]
--[[linux-4.4.1/strcmp()]]
/* use widget from another DAPM context if not found fr...
if (!wsink)
wsink = wtsink;
if (!wsource)
wsource = wtsource;
if (wsource == NULL) {
dev_err(dapm->dev, "ASoC: no source widget found for %...
route->source);
return -ENODEV;
}
if (wsink == NULL) {
dev_err(dapm->dev, "ASoC: no sink widget found for %s\...
route->sink);
return -ENODEV;
}
-
--[[linux-4.4.1/dev_err()]]
skip_search:
dapm_wcache_update(&dapm->path_sink_cache, wsink);
dapm_wcache_update(&dapm->path_source_cache, wsource);
ret = snd_soc_dapm_add_path(dapm, wsource, wsink, route...
route->connected);
if (ret)
goto err;
-
--[[linux-4.4.1/dapm_wcache_update()]]
--[[linux-4.4.1/snd_soc_dapm_add_path()]]
-ドライバでは下記のように定義することが多い。
このとき route->control は「真ん中」のメンバに相当する。
static const struct snd_soc_dapm_route foo_routes[] = {
// sink control source
{ "SinkAAA", "ValueA", "SourceA" },
{ "SinkAAA", "ValueB", "SourceB" },
{ "SinkAAA", "ValueC", "SourceC" },
{ "SinkBBB", NULL, "SourceD" },
//...
};
return 0;
err:
dev_warn(dapm->dev, "ASoC: no dapm match for %s --> %s ...
source, route->control, sink);
return ret;
-
--[[linux-4.4.1/dev_warn()]]
}
*コメント [#qc4dc7a8]
終了行:
*参照元 [#paaf64be]
#backlinks
*説明 [#zc094550]
-パス: [[linux-4.4.1/sound/soc/soc-dapm.c]]
-FIXME: これは何?
--説明
**引数 [#s90553ba]
-struct snd_soc_dapm_context *dapm
--
--[[linux-4.4.1/snd_soc_dapm_context]]
-const struct snd_soc_dapm_route *route
--
--[[linux-4.4.1/snd_soc_dapm_route]]
**返り値 [#g158e223]
-int
--
**参考 [#n20f68f1]
*実装 [#r1717363]
static int snd_soc_dapm_add_route(struct snd_soc_dapm_co...
const struct snd_soc_dapm_route *route)
{
struct snd_soc_dapm_widget *wsource = NULL, *wsink = NU...
struct snd_soc_dapm_widget *wtsource = NULL, *wtsink = ...
const char *sink;
const char *source;
char prefixed_sink[80];
char prefixed_source[80];
const char *prefix;
int ret;
-
--[[linux-4.4.1/snd_soc_dapm_widget]]
prefix = soc_dapm_prefix(dapm);
if (prefix) {
snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
prefix, route->sink);
sink = prefixed_sink;
snprintf(prefixed_source, sizeof(prefixed_source), "%s...
prefix, route->source);
source = prefixed_source;
} else {
sink = route->sink;
source = route->source;
}
-
--[[linux-4.4.1/soc_dapm_prefix()]]
--[[linux-4.4.1/snprintf()]]
wsource = dapm_wcache_lookup(&dapm->path_source_cache, ...
wsink = dapm_wcache_lookup(&dapm->path_sink_cache, sink);
if (wsink && wsource)
goto skip_search;
-
--[[linux-4.4.1/dapm_wcache_lookup()]]
/*
* find src and dest widgets over all widgets but favor...
* current DAPM context
*/
list_for_each_entry(w, &dapm->card->widgets, list) {
if (!wsink && !(strcmp(w->name, sink))) {
wtsink = w;
if (w->dapm == dapm) {
wsink = w;
if (wsource)
break;
}
continue;
}
if (!wsource && !(strcmp(w->name, source))) {
wtsource = w;
if (w->dapm == dapm) {
wsource = w;
if (wsink)
break;
}
}
}
-
--[[linux-4.4.1/list_for_each_entry()]]
--[[linux-4.4.1/strcmp()]]
/* use widget from another DAPM context if not found fr...
if (!wsink)
wsink = wtsink;
if (!wsource)
wsource = wtsource;
if (wsource == NULL) {
dev_err(dapm->dev, "ASoC: no source widget found for %...
route->source);
return -ENODEV;
}
if (wsink == NULL) {
dev_err(dapm->dev, "ASoC: no sink widget found for %s\...
route->sink);
return -ENODEV;
}
-
--[[linux-4.4.1/dev_err()]]
skip_search:
dapm_wcache_update(&dapm->path_sink_cache, wsink);
dapm_wcache_update(&dapm->path_source_cache, wsource);
ret = snd_soc_dapm_add_path(dapm, wsource, wsink, route...
route->connected);
if (ret)
goto err;
-
--[[linux-4.4.1/dapm_wcache_update()]]
--[[linux-4.4.1/snd_soc_dapm_add_path()]]
-ドライバでは下記のように定義することが多い。
このとき route->control は「真ん中」のメンバに相当する。
static const struct snd_soc_dapm_route foo_routes[] = {
// sink control source
{ "SinkAAA", "ValueA", "SourceA" },
{ "SinkAAA", "ValueB", "SourceB" },
{ "SinkAAA", "ValueC", "SourceC" },
{ "SinkBBB", NULL, "SourceD" },
//...
};
return 0;
err:
dev_warn(dapm->dev, "ASoC: no dapm match for %s --> %s ...
source, route->control, sink);
return ret;
-
--[[linux-4.4.1/dev_warn()]]
}
*コメント [#qc4dc7a8]
ページ名: