Skip to content

Commit

Permalink
ASoC: Move name_prefix from CODEC to component
Browse files Browse the repository at this point in the history
Move the name_prefix from the CODEC struct to the component struct. This will
eventually allow to specify prefixes for all types of components. It is also
necessary to make the DAPM code component type independent (i.e. a DAPM context
does not need to know whether it belongs to a CODEC or a platform or something
else).

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Lars-Peter Clausen authored and Mark Brown committed Jun 21, 2014
1 parent 7171511 commit 94f99c8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 21 deletions.
2 changes: 1 addition & 1 deletion include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -682,6 +682,7 @@ struct snd_soc_component_driver {
struct snd_soc_component {
const char *name;
int id;
const char *name_prefix;
struct device *dev;

unsigned int active;
Expand Down Expand Up @@ -710,7 +711,6 @@ struct snd_soc_component {
/* SoC Audio Codec device */
struct snd_soc_codec {
const char *name;
const char *name_prefix;
int id;
struct device *dev;
const struct snd_soc_codec_driver *driver;
Expand Down
12 changes: 6 additions & 6 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1108,7 +1108,7 @@ static void soc_remove_dai_links(struct snd_soc_card *card)
}

static void soc_set_name_prefix(struct snd_soc_card *card,
struct snd_soc_codec *codec)
struct snd_soc_component *component)
{
int i;

Expand All @@ -1117,11 +1117,11 @@ static void soc_set_name_prefix(struct snd_soc_card *card,

for (i = 0; i < card->num_configs; i++) {
struct snd_soc_codec_conf *map = &card->codec_conf[i];
if (map->of_node && codec->dev->of_node != map->of_node)
if (map->of_node && component->dev->of_node != map->of_node)
continue;
if (map->dev_name && strcmp(codec->name, map->dev_name))
if (map->dev_name && strcmp(component->name, map->dev_name))
continue;
codec->name_prefix = map->name_prefix;
component->name_prefix = map->name_prefix;
break;
}
}
Expand All @@ -1135,7 +1135,7 @@ static int soc_probe_codec(struct snd_soc_card *card,

codec->card = card;
codec->dapm.card = card;
soc_set_name_prefix(card, codec);
soc_set_name_prefix(card, &codec->component);

if (!try_module_get(codec->dev->driver->owner))
return -ENODEV;
Expand Down Expand Up @@ -2403,7 +2403,7 @@ int snd_soc_add_codec_controls(struct snd_soc_codec *codec,
struct snd_card *card = codec->card->snd_card;

return snd_soc_add_controls(card, codec->dev, controls, num_controls,
codec->name_prefix, &codec->component);
codec->component.name_prefix, &codec->component);
}
EXPORT_SYMBOL_GPL(snd_soc_add_codec_controls);

Expand Down
36 changes: 22 additions & 14 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,13 @@ static void dapm_reset(struct snd_soc_card *card)
}
}

static const char *soc_dapm_prefix(struct snd_soc_dapm_context *dapm)
{
if (!dapm->component)
return NULL;
return dapm->component->name_prefix;
}

static int soc_widget_read(struct snd_soc_dapm_widget *w, int reg,
unsigned int *value)
{
Expand Down Expand Up @@ -570,11 +577,7 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
const char *name;
int ret;

if (dapm->codec)
prefix = dapm->codec->name_prefix;
else
prefix = NULL;

prefix = soc_dapm_prefix(dapm);
if (prefix)
prefix_len = strlen(prefix) + 1;
else
Expand Down Expand Up @@ -2371,14 +2374,16 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
const char *source;
char prefixed_sink[80];
char prefixed_source[80];
const char *prefix;
int ret;

if (dapm->codec && dapm->codec->name_prefix) {
prefix = soc_dapm_prefix(dapm);
if (prefix) {
snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
dapm->codec->name_prefix, route->sink);
prefix, route->sink);
sink = prefixed_sink;
snprintf(prefixed_source, sizeof(prefixed_source), "%s %s",
dapm->codec->name_prefix, route->source);
prefix, route->source);
source = prefixed_source;
} else {
sink = route->sink;
Expand Down Expand Up @@ -2439,19 +2444,21 @@ static int snd_soc_dapm_del_route(struct snd_soc_dapm_context *dapm,
const char *source;
char prefixed_sink[80];
char prefixed_source[80];
const char *prefix;

if (route->control) {
dev_err(dapm->dev,
"ASoC: Removal of routes with controls not supported\n");
return -EINVAL;
}

if (dapm->codec && dapm->codec->name_prefix) {
prefix = soc_dapm_prefix(dapm);
if (prefix) {
snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
dapm->codec->name_prefix, route->sink);
prefix, route->sink);
sink = prefixed_sink;
snprintf(prefixed_source, sizeof(prefixed_source), "%s %s",
dapm->codec->name_prefix, route->source);
prefix, route->source);
source = prefixed_source;
} else {
sink = route->sink;
Expand Down Expand Up @@ -2968,6 +2975,7 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
const struct snd_soc_dapm_widget *widget)
{
struct snd_soc_dapm_widget *w;
const char *prefix;
int ret;

if ((w = dapm_cnew_widget(widget)) == NULL)
Expand Down Expand Up @@ -3008,9 +3016,9 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
break;
}

if (dapm->codec && dapm->codec->name_prefix)
w->name = kasprintf(GFP_KERNEL, "%s %s",
dapm->codec->name_prefix, widget->name);
prefix = soc_dapm_prefix(dapm);
if (prefix)
w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name);
else
w->name = kasprintf(GFP_KERNEL, "%s", widget->name);

Expand Down

0 comments on commit 94f99c8

Please sign in to comment.