ASoC: topology: Add support for FE DAI & DAI links
cover ASoC: topology: Add support for FE DAI & DAI links
From: Mengdong Lin <[email protected]>
This series allows topology to create FE DAI and DAI links from the PCM topology objects defined by the user space.
Mengdong Lin (5):
ASoC: Define soc_add_dai() to add a DAI to a component
ASoC: Support registering a DAI dynamically
ALSA: pcm: Add snd_pcm_rate_range_to_bits()
ASoC: topology: Add FE DAIs dynamically
ASoC: topology: Add FE DAI links dynamically
include/sound/pcm.h | 2 + include/sound/soc-dai.h | 1 + include/sound/soc-topology.h | 21 +++-- include/sound/soc.h | 5 +- sound/core/pcm_misc.c | 27 ++++++ sound/soc/soc-core.c | 128 ++++++++++++++++++++-------- sound/soc/soc-topology.c | 195 ++++++++++++++++++++++++++++++++++--------- 7 files changed, 291 insertions(+), 88 deletions(-)
Signature · 1 line
2.5.0
PATCH 1/5 ASoC: Define soc_add_dai() to add a DAI to a component
From: Mengdong Lin <[email protected]>
Define soc_add_dai() as a wrapper to add a single DAI to a component. It can be reused to register a DAI dynamically by topology.
sound/soc/soc-core.c +52 -36
@@ -2771,6 +2771,56 @@ static void snd_soc_unregister_dais(struct snd_soc_component *component) } } +/* Create a DAI and add it to the component's DAI list */ +static struct snd_soc_dai *soc_add_dai (struct snd_soc_component *component, +struct snd_soc_dai_driver *dai_drv, +bool legacy_dai_naming) +{ +struct device *dev = component->dev; +struct snd_soc_dai *dai; + +dev_dbg (dev,"ASoC: dynamically register DAI %s\n" ,dev_name (dev)); + + dai =kzalloc (sizeof (struct snd_soc_dai ),GFP_KERNEL ); +if (dai ==NULL ) +return NULL ; + +/* +* Back in the old days when we still had component-less DAIs, +* instead of having a static name, component-less DAIs would +* inherit the name of the parent device so it is possible to +* register multiple instances of the DAI. We still need to keep +* the same naming style even though those DAIs are not +* component-less anymore. +*/ +if (legacy_dai_naming && + (dai_drv->id ==0 || dai_drv->name ==NULL )) { + dai->name =fmt_single_name (dev, &dai->id); + }else { + dai->name =fmt_multiple_name (dev, dai_drv); +if (dai_drv->id) + dai->id = dai_drv->id; +else + dai->id = component->num_dai; + } +if (dai->name ==NULL ) { +kfree (dai); +return NULL ; + } + + dai->component = component; + dai->dev = dev; + dai->driver = dai_drv; +if (!dai->driver->ops) + dai->driver->ops = &null_dai_ops; + +list_add (&dai->list, &component->dai_list); + component->num_dai++; + +dev_dbg (dev,"ASoC: Registered DAI '%s'\n" , dai->name); +return dai; +} +/** * snd_soc_register_dais - Register a DAI with the ASoC core *
@@ -2792,49 +2842,15 @@ static int snd_soc_register_dais(struct snd_soc_component *component,dev_dbg (dev,"ASoC: dai register %s #%Zu\n" ,dev_name (dev), count); component->dai_drv = dai_drv; - component->num_dai = count;for (i =0 ; i < count; i++) { - dai =kzalloc (sizeof (struct snd_soc_dai ),GFP_KERNEL ); + dai =soc_add_dai (component, dai_drv + i, + count ==1 && legacy_dai_naming);if (dai ==NULL ) { ret = -ENOMEM ; goto err; } - -/* -* Back in the old days when we still had component-less DAIs, -* instead of having a static name, component-less DAIs would -* inherit the name of the parent device so it is possible to -* register multiple instances of the DAI. We still need to keep -* the same naming style even though those DAIs are not -* component-less anymore. -*/ -if (count ==1 && legacy_dai_naming && - (dai_drv[i].id ==0 || dai_drv[i].name ==NULL )) { - dai->name =fmt_single_name (dev, &dai->id); - }else { - dai->name =fmt_multiple_name (dev, &dai_drv[i]); -if (dai_drv[i].id) - dai->id = dai_drv[i].id; -else - dai->id = i; - } -if (dai->name ==NULL ) { -kfree (dai); - ret = -ENOMEM ; - goto err; - } - - dai->component = component; - dai->dev = dev; - dai->driver = &dai_drv[i]; -if (!dai->driver->ops) - dai->driver->ops = &null_dai_ops; - -list_add (&dai->list, &component->dai_list); - -dev_dbg (dev,"ASoC: Registered DAI '%s'\n" , dai->name); }return 0 ;
Signature · 1 line
2.5.0
Mark Brown
maintainerApplied "ASoC: Define soc_add_dai() to add a DAI to a component" to the asoc tree
The patch
ASoC: Define soc_add_dai() to add a DAI to a component
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
5e4fb372117f476e0c7f85418ed3e39506fbb75cMon Sep 17 00:00:00 2001
From: Mengdong Lin <[email protected]>
Date: Thu, 31 Dec 2015 16:40:20 +0800
Subject: [PATCH] ASoC: Define soc_add_dai() to add a DAI to a component
Define soc_add_dai() as a wrapper to add a single DAI to a component. It can be reused to register a DAI dynamically by topology.
--- sound/soc/soc-core.c | 88 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 36 deletions(-)
sound/soc/soc-core.c +52 -36
@@ -2744,6 +2744,56 @@ static void snd_soc_unregister_dais(struct snd_soc_component *component) } } +/* Create a DAI and add it to the component's DAI list */ +static struct snd_soc_dai *soc_add_dai (struct snd_soc_component *component, +struct snd_soc_dai_driver *dai_drv, +bool legacy_dai_naming) +{ +struct device *dev = component->dev; +struct snd_soc_dai *dai; + +dev_dbg (dev,"ASoC: dynamically register DAI %s\n" ,dev_name (dev)); + + dai =kzalloc (sizeof (struct snd_soc_dai ),GFP_KERNEL ); +if (dai ==NULL ) +return NULL ; + +/* +* Back in the old days when we still had component-less DAIs, +* instead of having a static name, component-less DAIs would +* inherit the name of the parent device so it is possible to +* register multiple instances of the DAI. We still need to keep +* the same naming style even though those DAIs are not +* component-less anymore. +*/ +if (legacy_dai_naming && + (dai_drv->id ==0 || dai_drv->name ==NULL )) { + dai->name =fmt_single_name (dev, &dai->id); + }else { + dai->name =fmt_multiple_name (dev, dai_drv); +if (dai_drv->id) + dai->id = dai_drv->id; +else + dai->id = component->num_dai; + } +if (dai->name ==NULL ) { +kfree (dai); +return NULL ; + } + + dai->component = component; + dai->dev = dev; + dai->driver = dai_drv; +if (!dai->driver->ops) + dai->driver->ops = &null_dai_ops; + +list_add (&dai->list, &component->dai_list); + component->num_dai++; + +dev_dbg (dev,"ASoC: Registered DAI '%s'\n" , dai->name); +return dai; +} +/** * snd_soc_register_dais - Register a DAI with the ASoC core *
@@ -2765,49 +2815,15 @@ static int snd_soc_register_dais(struct snd_soc_component *component,dev_dbg (dev,"ASoC: dai register %s #%Zu\n" ,dev_name (dev), count); component->dai_drv = dai_drv; - component->num_dai = count;for (i =0 ; i < count; i++) { - dai =kzalloc (sizeof (struct snd_soc_dai ),GFP_KERNEL ); + dai =soc_add_dai (component, dai_drv + i, + count ==1 && legacy_dai_naming);if (dai ==NULL ) { ret = -ENOMEM ; goto err; } - -/* -* Back in the old days when we still had component-less DAIs, -* instead of having a static name, component-less DAIs would -* inherit the name of the parent device so it is possible to -* register multiple instances of the DAI. We still need to keep -* the same naming style even though those DAIs are not -* component-less anymore. -*/ -if (count ==1 && legacy_dai_naming && - (dai_drv[i].id ==0 || dai_drv[i].name ==NULL )) { - dai->name =fmt_single_name (dev, &dai->id); - }else { - dai->name =fmt_multiple_name (dev, &dai_drv[i]); -if (dai_drv[i].id) - dai->id = dai_drv[i].id; -else - dai->id = i; - } -if (dai->name ==NULL ) { -kfree (dai); - ret = -ENOMEM ; - goto err; - } - - dai->component = component; - dai->dev = dev; - dai->driver = &dai_drv[i]; -if (!dai->driver->ops) - dai->driver->ops = &null_dai_ops; - -list_add (&dai->list, &component->dai_list); - -dev_dbg (dev,"ASoC: Registered DAI '%s'\n" , dai->name); }return 0 ;
Signature · 1 line
2.7.0.rc3
PATCH 2/5 ASoC: Support registering a DAI dynamically
In reply to [email protected]From: Mengdong Lin <[email protected]>
Define API snd_soc_register_dai() to add a DAI dynamically and create the DAI widgets. Topology can use this API to register DAIs when probing a component with topology info. These DAIs's playback & capture widgets will be freed when the sound card is unregistered and the DAIs will be freed when cleaning up the component.
And a dobj is embedded into the struct snd_soc_dai_driver. Topology can use the dobj to find the DAI drivers created by it and free them when the topology component is removed.
include/sound/soc-dai.h +1 -0
@@ -222,6 +222,7 @@ struct snd_soc_dai_driver {const char *name;unsigned int id;unsigned int base; +struct snd_soc_dobj dobj;/* DAI driver callbacks */ int (*probe)(struct snd_soc_dai *dai);
include/sound/soc.h +3 -0
@@ -1685,6 +1685,9 @@ int snd_soc_add_dai_link(struct snd_soc_card *card,void snd_soc_remove_dai_link (struct snd_soc_card *card,struct snd_soc_dai_link *dai_link); +int snd_soc_register_dai (struct snd_soc_component *component, +struct snd_soc_dai_driver *dai_drv); +#include <sound/soc-dai.h> #ifdef CONFIG_DEBUG_FS
sound/soc/soc-core.c +42 -0
48 lines not on this page · raw message
Signature · 1 line
2.5.0
Mark Brown
maintainerApplied "ASoC: Support registering a DAI dynamically" to the asoc tree
The patch
ASoC: Support registering a DAI dynamically
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
68003e6cf2bbd239a322bd8a28dacfaf8174fdeeMon Sep 17 00:00:00 2001
From: Mengdong Lin <[email protected]>
Date: Thu, 31 Dec 2015 16:40:43 +0800
Subject: [PATCH] ASoC: Support registering a DAI dynamically
Define API snd_soc_register_dai() to add a DAI dynamically and create the DAI widgets. Topology can use this API to register DAIs when probing a component with topology info. These DAIs's playback & capture widgets will be freed when the sound card is unregistered and the DAIs will be freed when cleaning up the component.
And a dobj is embedded into the struct snd_soc_dai_driver. Topology can use the dobj to find the DAI drivers created by it and free them when the topology component is removed.
--- include/sound/soc-dai.h | 1 + include/sound/soc.h | 3 +++ sound/soc/soc-core.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+)
include/sound/soc-dai.h +1 -0
@@ -222,6 +222,7 @@ struct snd_soc_dai_driver {const char *name;unsigned int id;unsigned int base; +struct snd_soc_dobj dobj;/* DAI driver callbacks */ int (*probe)(struct snd_soc_dai *dai);
include/sound/soc.h +3 -0
@@ -1663,6 +1663,9 @@ int snd_soc_add_dai_link(struct snd_soc_card *card,void snd_soc_remove_dai_link (struct snd_soc_card *card,struct snd_soc_dai_link *dai_link); +int snd_soc_register_dai (struct snd_soc_component *component, +struct snd_soc_dai_driver *dai_drv); +#include <sound/soc-dai.h> #ifdef CONFIG_DEBUG_FS
sound/soc/soc-core.c +42 -0
48 lines not on this page · raw message
Signature · 1 line
2.7.0.rc3
PATCH 3/5 ALSA: pcm: Add snd_pcm_rate_range_to_bits()
In reply to [email protected]From: Mengdong Lin <[email protected]>
This helper function can convert a given sample rate range to SNDRV_PCM_RATE_xxx bits.
include/sound/pcm.h +2 -0
@@ -1093,6 +1093,8 @@ unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);unsigned int snd_pcm_rate_bit_to_rate (unsigned int rate_bit);unsigned int snd_pcm_rate_mask_intersect (unsigned int rates_a,unsigned int rates_b); +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max);/** * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer
sound/core/pcm_misc.c +27 -0
@@ -565,3 +565,30 @@ unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,return rates_a & rates_b; }EXPORT_SYMBOL_GPL (snd_pcm_rate_mask_intersect); + +/** +* snd_pcm_rate_range_to_bits - converts rate range to SNDRV_PCM_RATE_xxx bit +* @rate_min: the minimum sample rate +* @rate_max: the maximum sample rate +* +* Return: The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate range, +* or SNDRV_PCM_RATE_KNOT for an unknown range. +*/ +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max) +{ +unsigned int rates =0 ; +int i; + +for (i =0 ; i < snd_pcm_known_rates.count; i++) { +if (snd_pcm_known_rates.list[i] >= rate_min + && snd_pcm_known_rates.list[i] <= rate_max) + rates |=1 << i; + } + +if (!rates) + rates =SNDRV_PCM_RATE_KNOT ; + +return rates; +} +EXPORT_SYMBOL_GPL (snd_pcm_rate_range_to_bits);
Signature · 1 line
2.5.0
Mark Brown
maintainerRe: [PATCH 3/5] ALSA: pcm: Add snd_pcm_rate_range_to_bits()
Quoted 4 lines · On Thu, Dec 31, 2015 at 04:40:50PM +0800, [email protected] wrote:
From: Mengdong Lin <[email protected]>
This helper function can convert a given sample rate range to
SNDRV_PCM_RATE_xxxbits.
Please CC any core ALSA changes to Takashi and Jaroslav, I'll generally want to see some review from them before I apply anything.
PATCH RESEND 3/5 ALSA: pcm: Add snd_pcm_rate_range_to_bits()
In reply to [email protected]From: Mengdong Lin <[email protected]>
This helper function can convert a given sample rate range to SNDRV_PCM_RATE_xxx bits.
include/sound/pcm.h +2 -0
@@ -1093,6 +1093,8 @@ unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);unsigned int snd_pcm_rate_bit_to_rate (unsigned int rate_bit);unsigned int snd_pcm_rate_mask_intersect (unsigned int rates_a,unsigned int rates_b); +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max);/** * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer
sound/core/pcm_misc.c +27 -0
@@ -565,3 +565,30 @@ unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,return rates_a & rates_b; }EXPORT_SYMBOL_GPL (snd_pcm_rate_mask_intersect); + +/** +* snd_pcm_rate_range_to_bits - converts rate range to SNDRV_PCM_RATE_xxx bit +* @rate_min: the minimum sample rate +* @rate_max: the maximum sample rate +* +* Return: The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate range, +* or SNDRV_PCM_RATE_KNOT for an unknown range. +*/ +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max) +{ +unsigned int rates =0 ; +int i; + +for (i =0 ; i < snd_pcm_known_rates.count; i++) { +if (snd_pcm_known_rates.list[i] >= rate_min + && snd_pcm_known_rates.list[i] <= rate_max) + rates |=1 << i; + } + +if (!rates) + rates =SNDRV_PCM_RATE_KNOT ; + +return rates; +} +EXPORT_SYMBOL_GPL (snd_pcm_rate_range_to_bits);
Signature · 1 line
2.5.0
Re: [RESEND PATCH 3/5] ALSA: pcm: Add snd_pcm_rate_range_to_bits()
Quoted 7 lines · On Mon, 11 Jan 2016 06:22:19 +0100, [email protected] wrote:
From: Mengdong Lin <[email protected]>
This helper function can convert a given sample rate range to
SNDRV_PCM_RATE_xxxbits.Signed-off-by Mengdong Lin <[email protected]>
This function has an implicit assumption: the rates in the given range have only the pre-defined rates like 44100 or 16000.
In anyway, feel free to take my ack:
Takashi
Quoted 52 lines
include/sound/pcm.h +2
-0@@ -1093,6 +1093,8 @@ unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);unsigned int snd_pcm_rate_bit_to_rate (unsigned int rate_bit);unsigned int snd_pcm_rate_mask_intersect (unsigned int rates_a,unsigned int rates_b); +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max);/** * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer sound/core/pcm_misc.c +27
-0@@ -565,3 +565,30 @@ unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,return rates_a & rates_b; }EXPORT_SYMBOL_GPL (snd_pcm_rate_mask_intersect); + +/** +* snd_pcm_rate_range_to_bits - converts rate range to SNDRV_PCM_RATE_xxx bit +* @rate_min: the minimum sample rate +* @rate_max: the maximum sample rate +* +* Return: The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate range, +* or SNDRV_PCM_RATE_KNOT for an unknown range. +*/ +unsigned int snd_pcm_rate_range_to_bits (unsigned int rate_min, +unsigned int rate_max) +{ +unsigned int rates =0 ; +int i; + +for (i =0 ; i < snd_pcm_known_rates.count; i++) { +if (snd_pcm_known_rates.list[i] >= rate_min + && snd_pcm_known_rates.list[i] <= rate_max) + rates |=1 << i; + } + +if (!rates) + rates =SNDRV_PCM_RATE_KNOT ; + +return rates; +} +EXPORT_SYMBOL_GPL (snd_pcm_rate_range_to_bits);Signature · 1 line
2.5.0
PATCH 4/5 ASoC: topology: Add FE DAIs dynamically
In reply to [email protected]From: Mengdong Lin <[email protected]>
Topology will create FE DAIs dynamically from the PCM objects, and register them to the component.
A PCM topoplogy object describes a FE DAI and DAI link. Later patch will add FE DAI links as well.
Change tplg load ops for DAI:
- Only process a DAI.
- Pass the DAI driver pointer to the component driver for extra initialization.
include/sound/soc-topology.h +4 -11
@@ -56,12 +56,6 @@ struct snd_soc_dobj_widget { unsigned int kcontrol_enum:1; /* this widget is an enum kcontrol */ }; -/* dynamic PCM DAI object */ -struct snd_soc_dobj_pcm_dai { -struct snd_soc_tplg_pcm_dai *pd; -unsigned int count; -}; -/* generic dynamic object - all dynamic objects belong to this struct */ struct snd_soc_dobj {enum snd_soc_dobj_type type;
@@ -71,7 +65,6 @@ struct snd_soc_dobj {union {struct snd_soc_dobj_control control;struct snd_soc_dobj_widget widget; -struct snd_soc_dobj_pcm_dai pcm_dai; };void *private;/* core does not touch this */ };
@@ -126,10 +119,10 @@ struct snd_soc_tplg_ops {int (*widget_unload)(struct snd_soc_component *,struct snd_soc_dobj *); -/* FE - used for any driver specific init */ -int (*pcm_dai_load)(struct snd_soc_component *, -struct snd_soc_tplg_pcm_dai *pcm_dai,int num_fe); -int (*pcm_dai_unload)(struct snd_soc_component *, +/* FE DAI - used for any driver specific init */ +int (*dai_load)(struct snd_soc_component *, +struct snd_soc_dai_driver *dai_drv); +int (*dai_unload)(struct snd_soc_component *,struct snd_soc_dobj *);/* callback to handle vendor bespoke data */
include/sound/soc.h +1 -1
@@ -27,7 +27,6 @@#include <sound/compress_driver.h> #include <sound/control.h> #include <sound/ac97_codec.h> -#include <sound/soc-topology.h> /* * Convenience kcontrol builders
@@ -404,6 +403,7 @@ struct snd_soc_jack_zone;struct snd_soc_jack_pin ;#include <sound/soc-dapm.h> #include <sound/soc-dpcm.h> +#include <sound/soc-topology.h> struct snd_soc_jack_gpio ;
sound/soc/soc-topology.c +87 -42
184 lines not on this page · raw message
Signature · 1 line
2.5.0
Mark Brown
maintainerApplied "ASoC: topology: Add FE DAIs dynamically" to the asoc tree
The patch
ASoC: topology: Add FE DAIs dynamically
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
64527e8a352968bda529f01df1c9dd5fe581ff04Mon Sep 17 00:00:00 2001
From: Mengdong Lin <[email protected]>
Date: Fri, 15 Jan 2016 16:13:28 +0800
Subject: [PATCH] ASoC: topology: Add FE DAIs dynamically
Topology will create FE DAIs dynamically from the PCM objects, and register them to the component.
A PCM topoplogy object describes a FE DAI and DAI link. Later patch will add FE DAI links as well.
Change tplg load ops for DAI:
- Only process a DAI.
- Pass the DAI driver pointer to the component driver for extra initialization.
--- include/sound/soc-topology.h | 15 ++--- include/sound/soc.h | 2 +- sound/soc/soc-topology.c | 129 +++++++++++++++++++++++++++++-------------- 3 files changed, 92 insertions(+), 54 deletions(-)
include/sound/soc-topology.h +4 -11
@@ -56,12 +56,6 @@ struct snd_soc_dobj_widget { unsigned int kcontrol_enum:1; /* this widget is an enum kcontrol */ }; -/* dynamic PCM DAI object */ -struct snd_soc_dobj_pcm_dai { -struct snd_soc_tplg_pcm_dai *pd; -unsigned int count; -}; -/* generic dynamic object - all dynamic objects belong to this struct */ struct snd_soc_dobj {enum snd_soc_dobj_type type;
@@ -71,7 +65,6 @@ struct snd_soc_dobj {union {struct snd_soc_dobj_control control;struct snd_soc_dobj_widget widget; -struct snd_soc_dobj_pcm_dai pcm_dai; };void *private;/* core does not touch this */ };
@@ -126,10 +119,10 @@ struct snd_soc_tplg_ops {int (*widget_unload)(struct snd_soc_component *,struct snd_soc_dobj *); -/* FE - used for any driver specific init */ -int (*pcm_dai_load)(struct snd_soc_component *, -struct snd_soc_tplg_pcm_dai *pcm_dai,int num_fe); -int (*pcm_dai_unload)(struct snd_soc_component *, +/* FE DAI - used for any driver specific init */ +int (*dai_load)(struct snd_soc_component *, +struct snd_soc_dai_driver *dai_drv); +int (*dai_unload)(struct snd_soc_component *,struct snd_soc_dobj *);/* callback to handle vendor bespoke data */
include/sound/soc.h +1 -1
@@ -27,7 +27,6 @@#include <sound/compress_driver.h> #include <sound/control.h> #include <sound/ac97_codec.h> -#include <sound/soc-topology.h> /* * Convenience kcontrol builders
@@ -404,6 +403,7 @@ struct snd_soc_jack_zone;struct snd_soc_jack_pin ;#include <sound/soc-dapm.h> #include <sound/soc-dpcm.h> +#include <sound/soc-topology.h> struct snd_soc_jack_gpio ;
sound/soc/soc-topology.c +87 -42
184 lines not on this page · raw message
Signature · 1 line
2.7.0
PATCH 5/5 ASoC: topology: Add FE DAI links dynamically
In reply to [email protected]From: Mengdong Lin <[email protected]>
Topology will also create FE DAI links dynamically from the PCM objects. These links will be removed when the component is removed and its topology info is unloaded.
The component driver can implement link_load/unload ops for extra intialization (e.g. error check) and destruction.
include/sound/soc-topology.h +6 -0
@@ -125,6 +125,12 @@ struct snd_soc_tplg_ops {int (*dai_unload)(struct snd_soc_component *,struct snd_soc_dobj *); +/* DAI link - used for any driver specific init */ +int (*link_load)(struct snd_soc_component *, +struct snd_soc_dai_link *link); +int (*link_unload)(struct snd_soc_component *, +struct snd_soc_dobj *); +/* callback to handle vendor bespoke data */ int (*vendor_load)(struct snd_soc_component *,struct snd_soc_tplg_hdr *);
sound/soc/soc-topology.c +69 -1
97 lines not on this page · raw message
Signature · 1 line
2.5.0
Mark Brown
maintainerApplied "ASoC: topology: Add FE DAI links dynamically" to the asoc tree
The patch
ASoC: topology: Add FE DAI links dynamically
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
acfc7d46cddcf71cf18772bbe8717b84eac5f672Mon Sep 17 00:00:00 2001
From: Mengdong Lin <[email protected]>
Date: Fri, 15 Jan 2016 16:13:37 +0800
Subject: [PATCH] ASoC: topology: Add FE DAI links dynamically
Topology will also create FE DAI links dynamically from the PCM objects. These links will be removed when the component is removed and its topology info is unloaded.
The component driver can implement link_load/unload ops for extra intialization (e.g. error check) and destruction.
--- include/sound/soc-topology.h | 6 ++++ sound/soc/soc-topology.c | 70 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-)
include/sound/soc-topology.h +6 -0
@@ -125,6 +125,12 @@ struct snd_soc_tplg_ops {int (*dai_unload)(struct snd_soc_component *,struct snd_soc_dobj *); +/* DAI link - used for any driver specific init */ +int (*link_load)(struct snd_soc_component *, +struct snd_soc_dai_link *link); +int (*link_unload)(struct snd_soc_component *, +struct snd_soc_dobj *); +/* callback to handle vendor bespoke data */ int (*vendor_load)(struct snd_soc_component *,struct snd_soc_tplg_hdr *);
sound/soc/soc-topology.c +69 -1
97 lines not on this page · raw message
Signature · 1 line
2.7.0