aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJarkko Nikula <jhnikula@gmail.com>2010-11-13 13:40:44 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-11-15 10:24:58 -0500
commitead9b9199c09653dd9b889933c7af75f020c7286 (patch)
tree54ea7e4e8b8954236387f1131a9a09e305704c46 /include
parent6ccd744123679c1f19fb6e414e3df717d9ed57f6 (diff)
ASoC: Add optional name_prefix for codec kcontrol, widget and route names
There is a need to prefix codec kcontrol, widget and internal route names in an ASoC machine that has multiple codecs with conflicting names. The name collision would occur when codec drivers try to registering kcontrols with the same name or when building audio paths. This patch introduces optional prefix_map into struct snd_soc_card. With it machine drivers can specify a unique name prefix to each codec that have conflicting names with anothers. Prefix to codec is matched with codec name. Following example illustrates a machine that has two same codec instances. Name collision from kcontrol registration is avoided by specifying a name prefix "foo" for the second codec. As the codec widget names are prefixed then second audio map for that codec shows a prefixed widget name. static const struct snd_soc_dapm_route map0[] = { {"Spk", NULL, "MONO"}, }; static const struct snd_soc_dapm_route map1[] = { {"Vibra", NULL, "foo MONO"}, }; static struct snd_soc_prefix_map codec_prefix[] = { { .dev_name = "codec.2", .name_prefix = "foo", }, }; static struct snd_soc_card card = { ... .prefix_map = codec_prefix, .num_prefixes = ARRAY_SIZE(codec_prefix), }; Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'include')
-rw-r--r--include/sound/soc.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index af23f4228869..3eb92ef6c83f 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -450,6 +450,7 @@ struct snd_soc_cache_ops {
450/* SoC Audio Codec device */ 450/* SoC Audio Codec device */
451struct snd_soc_codec { 451struct snd_soc_codec {
452 const char *name; 452 const char *name;
453 const char *name_prefix;
453 int id; 454 int id;
454 struct device *dev; 455 struct device *dev;
455 struct snd_soc_codec_driver *driver; 456 struct snd_soc_codec_driver *driver;
@@ -577,6 +578,11 @@ struct snd_soc_dai_link {
577 struct snd_soc_ops *ops; 578 struct snd_soc_ops *ops;
578}; 579};
579 580
581struct snd_soc_prefix_map {
582 const char *dev_name;
583 const char *name_prefix;
584};
585
580/* SoC card */ 586/* SoC card */
581struct snd_soc_card { 587struct snd_soc_card {
582 const char *name; 588 const char *name;
@@ -611,6 +617,13 @@ struct snd_soc_card {
611 struct snd_soc_pcm_runtime *rtd; 617 struct snd_soc_pcm_runtime *rtd;
612 int num_rtd; 618 int num_rtd;
613 619
620 /*
621 * optional map of kcontrol, widget and path name prefixes that are
622 * associated per device
623 */
624 struct snd_soc_prefix_map *prefix_map;
625 int num_prefixes;
626
614 struct work_struct deferred_resume_work; 627 struct work_struct deferred_resume_work;
615 628
616 /* lists of probed devices belonging to this card */ 629 /* lists of probed devices belonging to this card */