• Jarkko Nikula's avatar
    ASoC: Add optional name_prefix for codec kcontrol, widget and route names · ead9b919
    Jarkko Nikula authored
    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: default avatarJarkko Nikula <jhnikula@gmail.com>
    Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    ead9b919
soc-core.c 89.3 KB