[alsa-devel] [PATCH v2 146/146] ASoC: soc-core: remove legacy style dai_link
Rojewski, Cezary
cezary.rojewski at intel.com
Thu Jun 6 20:25:16 CEST 2019
Hmm, guess reviewing 001 proved redundant after all. Unless I got it wrong, you are removing code implemented in that very patch (the 001).
Any chance for eliminating ping-pong effect and doing the "right" changes from the get-go? Especially the renames are confusing here (s/cleanup_platform/cleanup_legacy/) if you intend to remove them soon after.
If there is no other way around it and solution is accepted, a note, perhaps in 001 would be helpful for future readers.
Czarek
>From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>
>All drivers switched to modern style dai_link
>(= struct snd_soc_dai_link_component).
>Let's remove legacy style dai_link.
>
>Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>---
> include/sound/soc.h | 65 ++------------------
> sound/soc/soc-core.c | 165 +++------------------------------------------------
> 2 files changed, 12 insertions(+), 218 deletions(-)
>
>diff --git a/include/sound/soc.h b/include/sound/soc.h
>index 0fa79b8..055e6d0 100644
>--- a/include/sound/soc.h
>+++ b/include/sound/soc.h
>@@ -901,77 +901,33 @@ struct snd_soc_dai_link {
> const char *stream_name; /* Stream name */
>
> /*
>- * cpu_name
>- * cpu_of_node
>- * cpu_dai_name
>- *
>- * These are legacy style, and will be replaced to
>- * modern style (= snd_soc_dai_link_component) in the future,
>- * but, not yet supported so far.
>- * If modern style was supported for CPU, all driver will switch
>- * to use it, and, legacy style code will be removed from ALSA SoC.
>- */
>- /*
> * You MAY specify the link's CPU-side device, either by device name,
> * or by DT/OF node, but not both. If this information is omitted,
> * the CPU-side DAI is matched using .cpu_dai_name only, which
>hence
> * must be globally unique. These fields are currently typically used
> * only for codec to codec links, or systems using device tree.
> */
>- const char *cpu_name;
>- struct device_node *cpu_of_node;
> /*
> * You MAY specify the DAI name of the CPU DAI. If this information is
> * omitted, the CPU-side DAI is matched using
>.cpu_name/.cpu_of_node
> * only, which only works well when that device exposes a single DAI.
> */
>- const char *cpu_dai_name;
>-
> struct snd_soc_dai_link_component *cpus;
> unsigned int num_cpus;
>
> /*
>- * codec_name
>- * codec_of_node
>- * codec_dai_name
>- *
>- * These are legacy style, it will be converted to modern style
>- * (= snd_soc_dai_link_component) automatically in soc-core
>- * if driver is using legacy style.
>- * Driver shouldn't use both legacy and modern style in the same time.
>- * If modern style was supported for CPU, all driver will switch
>- * to use it, and, legacy style code will be removed from ALSA SoC.
>- */
>- /*
> * You MUST specify the link's codec, either by device name, or by
> * DT/OF node, but not both.
> */
>- const char *codec_name;
>- struct device_node *codec_of_node;
> /* You MUST specify the DAI name within the codec */
>- const char *codec_dai_name;
>-
> struct snd_soc_dai_link_component *codecs;
> unsigned int num_codecs;
>
> /*
>- * platform_name
>- * platform_of_node
>- *
>- * These are legacy style, it will be converted to modern style
>- * (= snd_soc_dai_link_component) automatically in soc-core
>- * if driver is using legacy style.
>- * Driver shouldn't use both legacy and modern style in the same time.
>- * If modern style was supported for CPU, all driver will switch
>- * to use it, and, legacy style code will be removed from ALSA SoC.
>- */
>- /*
> * You MAY specify the link's platform/PCM/DMA driver, either by
> * device name, or by DT/OF node, but not both. Some forms of link
> * do not need a platform.
> */
>- const char *platform_name;
>- struct device_node *platform_of_node;
> struct snd_soc_dai_link_component *platforms;
> unsigned int num_platforms;
>
>@@ -1033,13 +989,6 @@ struct snd_soc_dai_link {
> /* Do not create a PCM for this DAI link (Backend link) */
> unsigned int ignore:1;
>
>- /*
>- * This driver uses legacy platform naming. Set by the core, machine
>- * drivers should not modify this value.
>- */
>- unsigned int legacy_platform:1;
>- unsigned int legacy_cpu:1;
>-
> struct list_head list; /* DAI link list of the soc card */
> struct snd_soc_dobj dobj; /* For topology */
> };
>@@ -1699,15 +1648,11 @@ int
>snd_soc_fixup_dai_links_platform_name(struct snd_soc_card *card,
> 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;
>+ if (!dai_link->platforms)
>+ return -EINVAL;
>+
>+ /* only single platform is supported for now */
>+ dai_link->platforms->name = name;
> }
>
> return 0;
>diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
>index e069dfb..b28dda9 100644
>--- a/sound/soc/soc-core.c
>+++ b/sound/soc/soc-core.c
>@@ -1052,167 +1052,18 @@ static void soc_remove_dai_links(struct
>snd_soc_card *card)
> }
> }
>
>-static int snd_soc_init_cpu(struct snd_soc_card *card,
>- struct snd_soc_dai_link *dai_link)
>-{
>- struct snd_soc_dai_link_component *cpu = dai_link->cpus;
>-
>- /*
>- * REMOVE ME
>- *
>- * This is glue code for Legacy vs Modern dai_link.
>- * This function will be removed if all derivers are switched to
>- * modern style dai_link.
>- * Driver shouldn't use both legacy and modern style in the same time.
>- * see
>- * soc.h :: struct snd_soc_dai_link
>- */
>- /* convert Legacy platform link */
>- if (!cpu) {
>- cpu = devm_kzalloc(card->dev,
>- sizeof(struct snd_soc_dai_link_component),
>- GFP_KERNEL);
>- if (!cpu)
>- return -ENOMEM;
>-
>- dai_link->cpus = cpu;
>- dai_link->num_cpus = 1;
>- dai_link->legacy_cpu = 1;
>-
>- cpu->name = dai_link->cpu_name;
>- cpu->of_node = dai_link->cpu_of_node;
>- cpu->dai_name = dai_link->cpu_dai_name;
>- }
>-
>- if (!dai_link->cpus) {
>- dev_err(card->dev, "ASoC: DAI link has no CPUs\n");
>- return -EINVAL;
>- }
>-
>- return 0;
>-}
>-
>-static int snd_soc_init_platform(struct snd_soc_card *card,
>- struct snd_soc_dai_link *dai_link)
>-{
>- struct snd_soc_dai_link_component *platform = dai_link->platforms;
>-
>- /*
>- * REMOVE ME
>- *
>- * This is glue code for Legacy vs Modern dai_link.
>- * This function will be removed if all derivers are switched to
>- * modern style dai_link.
>- * Driver shouldn't use both legacy and modern style in the same time.
>- * see
>- * soc.h :: struct snd_soc_dai_link
>- */
>- /* convert Legacy platform link */
>- if (!platform) {
>- platform = devm_kzalloc(card->dev,
>- sizeof(struct snd_soc_dai_link_component),
>- GFP_KERNEL);
>- if (!platform)
>- return -ENOMEM;
>-
>- dai_link->platforms = platform;
>- dai_link->num_platforms = 1;
>- dai_link->legacy_platform = 1;
>- platform->name = dai_link->platform_name;
>- platform->of_node = dai_link->platform_of_node;
>- platform->dai_name = NULL;
>- }
>-
>- /* if there's no platform we match on the empty platform */
>- if (!platform->name &&
>- !platform->of_node)
>- platform->name = "snd-soc-dummy";
>-
>- return 0;
>-}
>-
>-static void soc_cleanup_legacy(struct snd_soc_card *card)
>-{
>- struct snd_soc_dai_link *link;
>- int i;
>- /*
>- * FIXME
>- *
>- * this function should be removed with snd_soc_init_platform
>- */
>-
>- for_each_card_prelinks(card, i, link) {
>- if (link->legacy_platform) {
>- link->legacy_platform = 0;
>- link->platforms = NULL;
>- }
>- if (link->legacy_cpu) {
>- link->legacy_cpu = 0;
>- link->cpus = NULL;
>- }
>- }
>-}
>-
>-static int snd_soc_init_multicodec(struct snd_soc_card *card,
>- struct snd_soc_dai_link *dai_link)
>-{
>- /*
>- * REMOVE ME
>- *
>- * This is glue code for Legacy vs Modern dai_link.
>- * This function will be removed if all derivers are switched to
>- * modern style dai_link.
>- * Driver shouldn't use both legacy and modern style in the same time.
>- * see
>- * soc.h :: struct snd_soc_dai_link
>- */
>-
>- /* Legacy codec/codec_dai link is a single entry in multicodec */
>- if (dai_link->codec_name || dai_link->codec_of_node ||
>- dai_link->codec_dai_name) {
>- dai_link->num_codecs = 1;
>-
>- dai_link->codecs = devm_kzalloc(card->dev,
>- sizeof(struct snd_soc_dai_link_component),
>- GFP_KERNEL);
>- if (!dai_link->codecs)
>- return -ENOMEM;
>-
>- dai_link->codecs[0].name = dai_link->codec_name;
>- dai_link->codecs[0].of_node = dai_link->codec_of_node;
>- dai_link->codecs[0].dai_name = dai_link->codec_dai_name;
>- }
>-
>- if (!dai_link->codecs) {
>- dev_err(card->dev, "ASoC: DAI link has no CODECs\n");
>- return -EINVAL;
>- }
>-
>- return 0;
>-}
>+static struct snd_soc_dai_link_component dummy_link = COMP_DUMMY();
>
> static int soc_init_dai_link(struct snd_soc_card *card,
> struct snd_soc_dai_link *link)
> {
>- int i, ret;
>+ int i;
> struct snd_soc_dai_link_component *codec;
>
>- ret = snd_soc_init_cpu(card, link);
>- if (ret) {
>- dev_err(card->dev, "ASoC: failed to init cpu\n");
>- return ret;
>- }
>-
>- ret = snd_soc_init_platform(card, link);
>- if (ret) {
>- dev_err(card->dev, "ASoC: failed to init multiplatform\n");
>- return ret;
>- }
>-
>- ret = snd_soc_init_multicodec(card, link);
>- if (ret) {
>- dev_err(card->dev, "ASoC: failed to init multicodec\n");
>- return ret;
>+ /* default Platform */
>+ if (!link->platforms || !link->num_platforms) {
>+ link->platforms = &dummy_link;
>+ link->num_platforms = 1;
> }
>
> for_each_link_codecs(link, i, codec) {
>@@ -2059,7 +1910,7 @@ static void soc_check_tplg_fes(struct snd_soc_card
>*card)
> card->dai_link[i].name);
>
> /* override platform component */
>- if (snd_soc_init_platform(card, dai_link) < 0) {
>+ if (!dai_link->platforms) {
> dev_err(card->dev, "init platform error");
> continue;
> }
>@@ -2110,7 +1961,6 @@ static int soc_cleanup_card_resources(struct
>snd_soc_card *card)
> /* remove and free each DAI */
> soc_remove_dai_links(card);
> soc_remove_pcm_runtimes(card);
>- soc_cleanup_legacy(card);
>
> /* remove auxiliary devices */
> soc_remove_aux_devices(card);
>@@ -2867,7 +2717,6 @@ int snd_soc_register_card(struct snd_soc_card
>*card)
>
> ret = soc_init_dai_link(card, link);
> if (ret) {
>- soc_cleanup_legacy(card);
> dev_err(card->dev, "ASoC: failed to init link %s\n",
> link->name);
> mutex_unlock(&client_mutex);
>--
>2.7.4
More information about the Alsa-devel
mailing list