diff options
Diffstat (limited to 'sound/soc/generic')
-rw-r--r-- | sound/soc/generic/audio-graph-card.c | 15 | ||||
-rw-r--r-- | sound/soc/generic/audio-graph-card2-custom-sample.c | 3 | ||||
-rw-r--r-- | sound/soc/generic/audio-graph-card2.c | 23 | ||||
-rw-r--r-- | sound/soc/generic/simple-card-utils.c | 35 | ||||
-rw-r--r-- | sound/soc/generic/simple-card.c | 23 | ||||
-rw-r--r-- | sound/soc/generic/test-component.c | 6 |
6 files changed, 82 insertions, 23 deletions
diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c index 5daa824a4ffc..4e85536a1b26 100644 --- a/sound/soc/generic/audio-graph-card.c +++ b/sound/soc/generic/audio-graph-card.c @@ -78,7 +78,7 @@ static int graph_get_dai_id(struct device_node *ep) * only of_graph_parse_endpoint(). * We need to check "reg" property */ - if (of_get_property(ep, "reg", NULL)) + if (of_property_present(ep, "reg")) return info.id; node = of_get_parent(ep); @@ -613,10 +613,16 @@ static int graph_count_noml(struct asoc_simple_priv *priv, return -EINVAL; } + /* + * DON'T REMOVE platforms + * see + * simple-card.c :: simple_count_noml() + */ li->num[li->link].cpus = 1; - li->num[li->link].codecs = 1; li->num[li->link].platforms = 1; + li->num[li->link].codecs = 1; + li->link += 1; /* 1xCPU-Codec */ dev_dbg(dev, "Count As Normal\n"); @@ -637,6 +643,11 @@ static int graph_count_dpcm(struct asoc_simple_priv *priv, } if (li->cpu) { + /* + * DON'T REMOVE platforms + * see + * simple-card.c :: simple_count_noml() + */ li->num[li->link].cpus = 1; li->num[li->link].platforms = 1; diff --git a/sound/soc/generic/audio-graph-card2-custom-sample.c b/sound/soc/generic/audio-graph-card2-custom-sample.c index 4a2c743e286c..a3142be9323e 100644 --- a/sound/soc/generic/audio-graph-card2-custom-sample.c +++ b/sound/soc/generic/audio-graph-card2-custom-sample.c @@ -151,6 +151,9 @@ static int custom_probe(struct platform_device *pdev) simple_priv = &custom_priv->simple_priv; simple_priv->ops = &custom_ops; /* customize dai_link ops */ + /* "audio-graph-card2-custom-sample" is too long */ + simple_priv->snd_card.name = "card2-custom"; + /* use audio-graph-card2 parsing with own custom hooks */ ret = audio_graph2_parse_of(simple_priv, dev, &custom_hooks); if (ret < 0) diff --git a/sound/soc/generic/audio-graph-card2.c b/sound/soc/generic/audio-graph-card2.c index 06609a526b78..25aa79dd55b3 100644 --- a/sound/soc/generic/audio-graph-card2.c +++ b/sound/soc/generic/audio-graph-card2.c @@ -376,7 +376,7 @@ static int graph_get_dai_id(struct device_node *ep) * only of_graph_parse_endpoint(). * We need to check "reg" property */ - if (of_get_property(ep, "reg", NULL)) + if (of_property_present(ep, "reg")) return info.id; node = of_get_parent(ep); @@ -920,8 +920,8 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, c2c_conf->channels_min = c2c_conf->channels_max = 2; /* update ME */ - dai_link->params = c2c_conf; - dai_link->num_params = 1; + dai_link->c2c_params = c2c_conf; + dai_link->num_c2c_params = 1; } ep0 = port_to_endpoint(port0); @@ -1046,8 +1046,14 @@ static int graph_count_normal(struct asoc_simple_priv *priv, * => lnk: port { endpoint { .. }; }; * }; */ + /* + * DON'T REMOVE platforms + * see + * simple-card.c :: simple_count_noml() + */ li->num[li->link].cpus = li->num[li->link].platforms = graph_counter(cpu_port); + li->num[li->link].codecs = graph_counter(codec_port); of_node_put(cpu_ep); @@ -1079,6 +1085,11 @@ static int graph_count_dpcm(struct asoc_simple_priv *priv, */ if (asoc_graph_is_ports0(lnk)) { + /* + * DON'T REMOVE platforms + * see + * simple-card.c :: simple_count_noml() + */ li->num[li->link].cpus = graph_counter(rport); /* FE */ li->num[li->link].platforms = graph_counter(rport); } else { @@ -1113,8 +1124,14 @@ static int graph_count_c2c(struct asoc_simple_priv *priv, * }; * }; */ + /* + * DON'T REMOVE platforms + * see + * simple-card.c :: simple_count_noml() + */ li->num[li->link].cpus = li->num[li->link].platforms = graph_counter(codec0); + li->num[li->link].codecs = graph_counter(codec1); of_node_put(ports); diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index 56552a616f21..467edd96eae5 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -562,12 +562,12 @@ static int asoc_simple_init_for_codec2codec(struct snd_soc_pcm_runtime *rtd, { struct snd_soc_dai_link *dai_link = rtd->dai_link; struct snd_soc_component *component; - struct snd_soc_pcm_stream *params; + struct snd_soc_pcm_stream *c2c_params; struct snd_pcm_hardware hw; int i, ret, stream; /* Do nothing if it already has Codec2Codec settings */ - if (dai_link->params) + if (dai_link->c2c_params) return 0; /* Do nothing if it was DPCM :: BE */ @@ -592,19 +592,19 @@ static int asoc_simple_init_for_codec2codec(struct snd_soc_pcm_runtime *rtd, return ret; } - params = devm_kzalloc(rtd->dev, sizeof(*params), GFP_KERNEL); - if (!params) + c2c_params = devm_kzalloc(rtd->dev, sizeof(*c2c_params), GFP_KERNEL); + if (!c2c_params) return -ENOMEM; - params->formats = hw.formats; - params->rates = hw.rates; - params->rate_min = hw.rate_min; - params->rate_max = hw.rate_max; - params->channels_min = hw.channels_min; - params->channels_max = hw.channels_max; + c2c_params->formats = hw.formats; + c2c_params->rates = hw.rates; + c2c_params->rate_min = hw.rate_min; + c2c_params->rate_max = hw.rate_max; + c2c_params->channels_min = hw.channels_min; + c2c_params->channels_max = hw.channels_max; - dai_link->params = params; - dai_link->num_params = 1; + dai_link->c2c_params = c2c_params; + dai_link->num_c2c_params = 1; return 0; } @@ -638,7 +638,16 @@ EXPORT_SYMBOL_GPL(asoc_simple_dai_init); void asoc_simple_canonicalize_platform(struct snd_soc_dai_link_component *platforms, struct snd_soc_dai_link_component *cpus) { - /* Assumes platform == cpu */ + /* + * Assumes Platform == CPU + * + * Some CPU might be using soc-generic-dmaengine-pcm. This means CPU and Platform + * are different Component, but are sharing same component->dev. + * + * Let's assume Platform is same as CPU if it doesn't identify Platform on DT. + * see + * simple-card.c :: simple_count_noml() + */ if (!platforms->of_node) platforms->of_node = cpus->of_node; } diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index e98932c16754..6f044cc8357e 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -422,6 +422,7 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv, } of_node_put(codec); + of_node_put(plat); node = of_get_next_child(top, node); } while (!is_top && node); @@ -509,10 +510,25 @@ static int simple_count_noml(struct asoc_simple_priv *priv, return -EINVAL; } + /* + * DON'T REMOVE platforms + * + * Some CPU might be using soc-generic-dmaengine-pcm. This means CPU and Platform + * are different Component, but are sharing same component->dev. + * Simple Card had been supported it without special Platform selection. + * We need platforms here. + * + * In case of no Platform, it will be Platform == CPU, but Platform will be + * ignored by snd_soc_rtd_add_component(). + * + * see + * simple-card-utils.c :: asoc_simple_canonicalize_platform() + */ li->num[li->link].cpus = 1; - li->num[li->link].codecs = 1; li->num[li->link].platforms = 1; + li->num[li->link].codecs = 1; + li->link += 1; return 0; @@ -531,6 +547,11 @@ static int simple_count_dpcm(struct asoc_simple_priv *priv, } if (li->cpu) { + /* + * DON'T REMOVE platforms + * see + * simple_count_noml() + */ li->num[li->link].cpus = 1; li->num[li->link].platforms = 1; diff --git a/sound/soc/generic/test-component.c b/sound/soc/generic/test-component.c index 98c8990596a8..e10e5bf28432 100644 --- a/sound/soc/generic/test-component.c +++ b/sound/soc/generic/test-component.c @@ -635,11 +635,9 @@ static int test_driver_probe(struct platform_device *pdev) return 0; } -static int test_driver_remove(struct platform_device *pdev) +static void test_driver_remove(struct platform_device *pdev) { mile_stone_x(&pdev->dev); - - return 0; } static struct platform_driver test_driver = { @@ -648,7 +646,7 @@ static struct platform_driver test_driver = { .of_match_table = test_of_match, }, .probe = test_driver_probe, - .remove = test_driver_remove, + .remove_new = test_driver_remove, }; module_platform_driver(test_driver); |