[alsa-devel] [PATCH 01/15] ASoC: add helper to change platform name for all dailinks

Takashi Iwai tiwai at suse.de
Sat Jan 26 18:47:57 CET 2019


On Fri, 25 Jan 2019 21:34:55 +0100,
Pierre-Louis Bossart wrote:
> 
> To reuse the same machine drivers with Atom/SST, Skylake and SOF, we
> need to change the default platform_name (or platforms->name in the
> "modern" representation).
> 
> So far, this override was done with an automatic override, which was
> broken by a set of changes for DT platforms related to deferred probe
> handling.
> 
> This automatic override is actually not really needed, the machine
> driver can already receive the platform name as a platform_data
> parameter. This is used e.g. for HDaudio support where we have
> different PCI aliases used for different platforms. We can reuse the
> same mechanism and modify the machine drivers to override the dailinks
> prior to registrating the card.
> 
> This will require additional work for SOF, but with this helper it'll
> be just two lines of additional code per machine driver which is
> reused, not the end of the world.
> 
> This helper can be simplified when all drivers have transitioned to
> the "modern" representation of dailinks.
> 
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> ---
>  include/sound/soc.h | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
> 
> diff --git a/include/sound/soc.h b/include/sound/soc.h
> index 3089257ead95..95689680336b 100644
> --- a/include/sound/soc.h
> +++ b/include/sound/soc.h
> @@ -1580,6 +1580,37 @@ struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card,
>  	return NULL;
>  }
>  
> +static inline
> +int snd_soc_fixup_dai_links_platform_name(struct snd_soc_card *card,
> +					  const char *platform_name)
> +{
> +	struct snd_soc_dai_link *dai_link;
> +	const char *name;
> +	int i;
> +
> +	if (!platform_name) /* nothing to do */
> +		return 0;
> +
> +	/* set platform name for each dailink */
> +	for_each_card_prelinks(card, i, dai_link) {
> +		name = devm_kstrdup(card->dev, platform_name, GFP_KERNEL);
> +		if (!name)
> +			return -ENOMEM;
> +
> +		if (dai_link->platforms)
> +			/* only single platform is supported for now */
> +			dai_link->platforms->name = name;
> +		else
> +			/*
> +			 * legacy mode, this case will be removed when all
> +			 * derivers are switched to modern style dai_link.
> +			 */
> +			dai_link->platform_name = name;
> +	}
> +
> +	return 0;
> +}

Does it have to be inline?  The function has a significant size, and
it's supposed to be called by every Intel driver.


thanks,

Takashi


More information about the Alsa-devel mailing list