ASoC: fix pcm-creation regression
Subsystems (3)
PATCH 1/2 ASoC: fix pcm-creation regression
This reverts commit 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free"), which started calling the pcm_new callback for every component in a *card* when creating a new pcm, something which does not seem to make any sense.
This specifically led to memory leaks in systems with more than one platform component and where DMA memory is allocated in the platform-driver callback. For example, when both mcasp devices are being used on an am335x board, DMA memory would be allocated twice for every DAI link during probe.
When CONFIG_SND_VERBOSE_PROCFS was set this fortunately also led to warnings such as:
WARNING: CPU: 0 PID: 565 at ../fs/proc/generic.c:346 proc_register+0x110/0x154
proc_dir_entry 'sub0/prealloc' already registered
Since there seems to be no users of the new component callbacks, and the current implementation introduced a regression, let's revert the offending commit for now.
--- include/sound/soc.h | 6 ------ sound/soc/soc-core.c | 25 ------------------------- sound/soc/soc-pcm.c | 32 +++++++++----------------------- 3 files changed, 9 insertions(+), 54 deletions(-)
include/sound/soc.h +0 -6
@@ -795,10 +795,6 @@ struct snd_soc_component_driver {int (*suspend)(struct snd_soc_component *);int (*resume)(struct snd_soc_component *); -/* pcm creation and destruction */ -int (*pcm_new)(struct snd_soc_pcm_runtime *); -void (*pcm_free)(struct snd_pcm *); -/* DT */ int (*of_xlate_dai_name)(struct snd_soc_component *component, struct of_phandle_args *args,
@@ -874,8 +870,6 @@ struct snd_soc_component {void (*remove)(struct snd_soc_component *);int (*suspend)(struct snd_soc_component *);int (*resume)(struct snd_soc_component *); -int (*pcm_new)(struct snd_soc_pcm_runtime *); -void (*pcm_free)(struct snd_pcm *);/* machine specific init */ int (*init)(struct snd_soc_component *component);
sound/soc/soc-core.c +0 -25
@@ -3171,8 +3171,6 @@ static int snd_soc_component_initialize(struct snd_soc_component *component, component->remove = component->driver->remove; component->suspend = component->driver->suspend; component->resume = component->driver->resume; - component->pcm_new = component->driver->pcm_new; - component->pcm_free = component->driver->pcm_free; dapm = &component->dapm; dapm->dev = dev;
@@ -3360,25 +3358,6 @@ static void snd_soc_platform_drv_remove(struct snd_soc_component *component) platform->driver->remove (platform); } -static int snd_soc_platform_drv_pcm_new (struct snd_soc_pcm_runtime *rtd) -{ -struct snd_soc_platform *platform = rtd->platform; - -if (platform->driver->pcm_new) -return platform->driver->pcm_new (rtd); -else -return 0 ; -} - -static void snd_soc_platform_drv_pcm_free (struct snd_pcm *pcm) -{ -struct snd_soc_pcm_runtime *rtd = pcm->private_data; -struct snd_soc_platform *platform = rtd->platform; - -if (platform->driver->pcm_free) - platform->driver->pcm_free (pcm); -} -/** * snd_soc_add_platform - Add a platform to the ASoC core * @dev: The parent device for the platform
@@ -3402,10 +3381,6 @@ int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform, platform->component.probe = snd_soc_platform_drv_probe;if (platform_drv->remove) platform->component.remove = snd_soc_platform_drv_remove; -if (platform_drv->pcm_new) - platform->component.pcm_new = snd_soc_platform_drv_pcm_new; -if (platform_drv->pcm_free) - platform->component.pcm_free = snd_soc_platform_drv_pcm_free;#ifdef CONFIG_DEBUG_FS platform->component.debugfs_prefix ="platform" ;
sound/soc/soc-pcm.c +9 -23
@@ -2628,25 +2628,12 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)return ret; } -static void soc_pcm_free (struct snd_pcm *pcm) -{ -struct snd_soc_pcm_runtime *rtd = pcm->private_data; -struct snd_soc_component *component; - -list_for_each_entry (component, &rtd->card->component_dev_list, - card_list) { -if (component->pcm_free) - component->pcm_free (pcm); - } -} -/* create a new pcm */ int soc_new_pcm (struct snd_soc_pcm_runtime *rtd,int num) {struct snd_soc_platform *platform = rtd->platform;struct snd_soc_dai *codec_dai;struct snd_soc_dai *cpu_dai = rtd->cpu_dai; -struct snd_soc_component *component;struct snd_pcm *pcm;char new_name[64 ];int ret =0 , playback =0 , capture =0 ;
@@ -2756,18 +2743,17 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)if (capture)snd_pcm_set_ops (pcm,SNDRV_PCM_STREAM_CAPTURE , &rtd->ops); -list_for_each_entry (component, &rtd->card->component_dev_list, card_list) { -if (component->pcm_new) { - ret = component->pcm_new (rtd); -if (ret <0 ) { -dev_err (component->dev, -"ASoC: pcm constructor failed: %d\n" , - ret); -return ret; - } +if (platform->driver->pcm_new) { + ret = platform->driver->pcm_new (rtd); +if (ret <0 ) { +dev_err (platform->dev, +"ASoC: pcm constructor failed: %d\n" , + ret); +return ret; } } - pcm->private_free = soc_pcm_free; + + pcm->private_free = platform->driver->pcm_free; out: dev_info(rtd->card->dev, "%s <-> %s mapping ok\n", (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,
Signature · 1 line
2.13.2
PATCH 2/2 Revert "ASoC: ux500: drop platform DAI assignments"
This reverts commit f1013cdeeeb9 ("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).
The real culprit for the warnings about attempts to create duplicate procfs entries was commit 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free" that broke PCM creation on systems that use more than one platform component.
--- sound/soc/ux500/mop500.c | 4 ++++ 1 file changed, 4 insertions(+)
sound/soc/ux500/mop500.c +4 -0
@@ -33,6 +33,7 @@ static struct snd_soc_dai_link mop500_dai_links[] = { .stream_name = "ab8500_0", .cpu_dai_name = "ux500-msp-i2s.1", .codec_dai_name = "ab8500-codec-dai.0", + .platform_name = "ux500-msp-i2s.1", .codec_name = "ab8500-codec.0", .init = mop500_ab8500_machine_init, .ops = mop500_ab8500_ops,
@@ -42,6 +43,7 @@ static struct snd_soc_dai_link mop500_dai_links[] = { .stream_name = "ab8500_1", .cpu_dai_name = "ux500-msp-i2s.3", .codec_dai_name = "ab8500-codec-dai.1", + .platform_name = "ux500-msp-i2s.3", .codec_name = "ab8500-codec.0", .init = NULL, .ops = mop500_ab8500_ops,
@@ -85,6 +87,8 @@ static int mop500_of_probe(struct platform_device *pdev,for (i =0 ; i <2 ; i++) { mop500_dai_links[i].cpu_of_node = msp_np[i]; mop500_dai_links[i].cpu_dai_name =NULL ; + mop500_dai_links[i].platform_of_node = msp_np[i]; + mop500_dai_links[i].platform_name =NULL ; mop500_dai_links[i].codec_of_node = codec_np; mop500_dai_links[i].codec_name =NULL ; }
Signature · 1 line
2.13.2
Re: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 10 lines · Johan Hovold
This reverts commit
f1013cdeeeb9("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).The real culprit for the warnings about attempts to create duplicate procfs entries was commit
99b04f4c4051("ASoC: add Component level pcm_new/pcm_free" that broke PCM creation on systems that use more than one platform component.
Quoted 4 lines
Fixes f1013cdeeeb9 ("ASoC: ux500: drop platform DAI assignments")Cc stable <[email protected]> # 4.11Cc Linus Walleij <[email protected]>Signed-off-by Johan Hovold <[email protected]>
These static assignments should go away, but not for the wrong reason. So this patch is fully in order given the source of the bug.
Yours,
Linus Walleij
Re: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 17 lines · Linus Walleij
Quoted 10 lines · Johan Hovold
This reverts commit
f1013cdeeeb9("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).The real culprit for the warnings about attempts to create duplicate procfs entries was commit
99b04f4c4051("ASoC: add Component level pcm_new/pcm_free" that broke PCM creation on systems that use more than one platform component.Quoted 4 lines
Fixes f1013cdeeeb9 ("ASoC: ux500: drop platform DAI assignments")Cc stable <[email protected]> # 4.11Cc Linus Walleij <[email protected]>Signed-off-by Johan Hovold <[email protected]>
Quoted 5 lines
Reviewed-by Linus Walleij <[email protected]>Tested-by Linus Walleij <[email protected]>These static assignments should go away, but not for the wrong reason. So this patch is fully in order given the source of the bug.
I assume you'll still need the of-related bits though (platform_of_node) even if you eventually make this driver use DT-instantiation only.
Thanks again,
Johan
Mark Brown
maintainerRe: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
In reply to Johan HovoldQuoted 4 lines · Johan Hovold
This reverts commit
f1013cdeeeb9("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
Re: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 11 lines · Mark Brown
Quoted 4 lines · Johan Hovold
This reverts commit
f1013cdeeeb9("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
I try to, but reverts are special as the default commit summary tend to already contain the subsystem prefix and some maintainers find that sufficient (or even preferred as this also makes reverts stand out more clearly).
But now I know your preference, and thanks for fixing it up this time before applying.
Johan
Mark Brown
maintainerRe: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 8 lines · Johan Hovold
Quoted 5 lines · Mark Brown
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
Quoted 4 lines
I try to, but reverts are special as the default commit summary tend to already contain the subsystem prefix and some maintainers find that sufficient (or even preferred as this also makes reverts stand out more clearly).
Reverts shouldn't be special - they're just regular patches and should have sensible changelogs like any others.
Re: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 9 lines · Mark Brown
Quoted 7 lines · Johan Hovold
Quoted 5 lines · Mark Brown
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
Quoted 7 lines
Quoted 4 lines
I try to, but reverts are special as the default commit summary tend to already contain the subsystem prefix and some maintainers find that sufficient (or even preferred as this also makes reverts stand out more clearly).
Reverts shouldn't be special - they're just regular patches and should have sensible changelogs like any others.
Stating that you're reverting a commit and which commit that is is in the summary is arguable sensible (of course, you still also need further details in the commit message body itself describing why it was needed).
Check the logs and you'll see that we have a ton of "Revert <reverted commit summary>" for various subsystems. In fact, it seems to be by far the most common summary for direct reverts.
But again, now I know your preference.
Johan
Mark Brown
maintainerRe: [PATCH 2/2] Revert "ASoC: ux500: drop platform DAI assignments"
Quoted 5 lines · Johan Hovold
Quoted 2 lines · Mark Brown
Reverts shouldn't be special - they're just regular patches and should have sensible changelogs like any others.
Quoted 7 lines
Stating that you're reverting a commit and which commit that is is in the summary is arguable sensible (of course, you still also need further details in the commit message body itself describing why it was needed).
Check the logs and you'll see that we have a ton of "Revert <reverted commit summary>" for various subsystems. In fact, it seems to be by far the most common summary for direct reverts.
The easily findable ones are, and it doesn't mean it's good practice - reverts seem to attract particularly bad commit messages in general, not just the subject lines, and I happen to have a pre-canned response for this so...
Mark Brown
maintainerApplied "ASoC: ux500: Restore platform DAI assignments" to the asoc tree
In reply to Johan HovoldThe patch
ASoC: ux500: Restore platform DAI assignments
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
651e9268fb9b9944e063d731b09c0d2ad339bedbMon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Wed, 12 Jul 2017 17:55:30 +0200
Subject: [PATCH] ASoC: ux500: Restore platform DAI assignments
This reverts commit f1013cdeeeb9 ("ASoC: ux500: drop platform DAI assignments"), which seems to have been based on a misunderstanding and prevents the platform driver callbacks from being made (e.g. to preallocate DMA memory).
The real culprit for the warnings about attempts to create duplicate procfs entries was commit 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free" that broke PCM creation on systems that use more than one platform component.
--- sound/soc/ux500/mop500.c | 4 ++++ 1 file changed, 4 insertions(+)
sound/soc/ux500/mop500.c +4 -0
@@ -33,6 +33,7 @@ static struct snd_soc_dai_link mop500_dai_links[] = { .stream_name = "ab8500_0", .cpu_dai_name = "ux500-msp-i2s.1", .codec_dai_name = "ab8500-codec-dai.0", + .platform_name = "ux500-msp-i2s.1", .codec_name = "ab8500-codec.0", .init = mop500_ab8500_machine_init, .ops = mop500_ab8500_ops,
@@ -42,6 +43,7 @@ static struct snd_soc_dai_link mop500_dai_links[] = { .stream_name = "ab8500_1", .cpu_dai_name = "ux500-msp-i2s.3", .codec_dai_name = "ab8500-codec-dai.1", + .platform_name = "ux500-msp-i2s.3", .codec_name = "ab8500-codec.0", .init = NULL, .ops = mop500_ab8500_ops,
@@ -85,6 +87,8 @@ static int mop500_of_probe(struct platform_device *pdev,for (i =0 ; i <2 ; i++) { mop500_dai_links[i].cpu_of_node = msp_np[i]; mop500_dai_links[i].cpu_dai_name =NULL ; + mop500_dai_links[i].platform_of_node = msp_np[i]; + mop500_dai_links[i].platform_name =NULL ; mop500_dai_links[i].codec_of_node = codec_np; mop500_dai_links[i].codec_name =NULL ; }
Signature · 1 line
2.13.2
Quoted 21 lines · Johan Hovold
This reverts commit
99b04f4c4051("ASoC: add Component level pcm_new/pcm_free"), which started calling thepcm_newcallback for every component in a *card* when creating a new pcm, something which does not seem to make any sense.This specifically led to memory leaks in systems with more than one platform component and where DMA memory is allocated in the platform-driver callback. For example, when both mcasp devices are being used on an am335x board, DMA memory would be allocated twice for every DAI link during probe.
When
CONFIG_SND_VERBOSE_PROCFSwas set this fortunately also led to warnings such as:WARNING: CPU: 0 PID: 565 at ../fs/proc/generic.c:346 proc_register+0x110/0x154
proc_dir_entry'sub0/prealloc' already registeredSince there seems to be no users of the new component callbacks, and the current implementation introduced a regression, let's revert the offending commit for now.
Quoted 5 lines
Fixes 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free")Cc stable <[email protected]> # 4.10Cc Kuninori Morimoto <[email protected]>Cc Brian Norris <[email protected]>Signed-off-by Johan Hovold <[email protected]>
I have repeatedly ran into this bug, thanks a *lot* for fixing it. It solves a problem not only on this old code but also in my development tree where I try to move the Ux500 audio to DT-only instantiation and this was a blocker that I just ran my head into the last month or two.
Yours,
Linus Walleij
Quoted 29 lines · Linus Walleij
Quoted 21 lines · Johan Hovold
This reverts commit
99b04f4c4051("ASoC: add Component level pcm_new/pcm_free"), which started calling thepcm_newcallback for every component in a *card* when creating a new pcm, something which does not seem to make any sense.This specifically led to memory leaks in systems with more than one platform component and where DMA memory is allocated in the platform-driver callback. For example, when both mcasp devices are being used on an am335x board, DMA memory would be allocated twice for every DAI link during probe.
When
CONFIG_SND_VERBOSE_PROCFSwas set this fortunately also led to warnings such as:WARNING: CPU: 0 PID: 565 at ../fs/proc/generic.c:346 proc_register+0x110/0x154
proc_dir_entry'sub0/prealloc' already registeredSince there seems to be no users of the new component callbacks, and the current implementation introduced a regression, let's revert the offending commit for now.
Quoted 5 lines
Fixes 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free")Cc stable <[email protected]> # 4.10Cc Kuninori Morimoto <[email protected]>Cc Brian Norris <[email protected]>Signed-off-by Johan Hovold <[email protected]>
Quoted 8 lines
I have repeatedly ran into this bug, thanks a *lot* for fixing it. It solves a problem not only on this old code but also in my development tree where I try to move the Ux500 audio to DT-only instantiation and this was a blocker that I just ran my head into the last month or two.
Reviewed-by Linus Walleij <[email protected]>Tested-by Linus Walleij <[email protected]>
Thanks for testing these, Linus.
Johan
Mark Brown
maintainerApplied "ASoC: fix pcm-creation regression" to the asoc tree
In reply to Johan HovoldThe patch
ASoC: fix pcm-creation regression
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
c641e5b207ed7dfaa692820aeb5b6dde3de3e9b0Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Wed, 12 Jul 2017 17:55:29 +0200
Subject: [PATCH] ASoC: fix pcm-creation regression
This reverts commit 99b04f4c4051 ("ASoC: add Component level pcm_new/pcm_free"), which started calling the pcm_new callback for every component in a *card* when creating a new pcm, something which does not seem to make any sense.
This specifically led to memory leaks in systems with more than one platform component and where DMA memory is allocated in the platform-driver callback. For example, when both mcasp devices are being used on an am335x board, DMA memory would be allocated twice for every DAI link during probe.
When CONFIG_SND_VERBOSE_PROCFS was set this fortunately also led to warnings such as:
WARNING: CPU: 0 PID: 565 at ../fs/proc/generic.c:346 proc_register+0x110/0x154
proc_dir_entry 'sub0/prealloc' already registered
Since there seems to be no users of the new component callbacks, and the current implementation introduced a regression, let's revert the offending commit for now.
--- include/sound/soc.h | 6 ------ sound/soc/soc-core.c | 25 ------------------------- sound/soc/soc-pcm.c | 32 +++++++++----------------------- 3 files changed, 9 insertions(+), 54 deletions(-)
include/sound/soc.h +0 -6
@@ -795,10 +795,6 @@ struct snd_soc_component_driver {int (*suspend)(struct snd_soc_component *);int (*resume)(struct snd_soc_component *); -/* pcm creation and destruction */ -int (*pcm_new)(struct snd_soc_pcm_runtime *); -void (*pcm_free)(struct snd_pcm *); -/* DT */ int (*of_xlate_dai_name)(struct snd_soc_component *component, struct of_phandle_args *args,
@@ -874,8 +870,6 @@ struct snd_soc_component {void (*remove)(struct snd_soc_component *);int (*suspend)(struct snd_soc_component *);int (*resume)(struct snd_soc_component *); -int (*pcm_new)(struct snd_soc_pcm_runtime *); -void (*pcm_free)(struct snd_pcm *);/* machine specific init */ int (*init)(struct snd_soc_component *component);
sound/soc/soc-core.c +0 -25
@@ -3171,8 +3171,6 @@ static int snd_soc_component_initialize(struct snd_soc_component *component, component->remove = component->driver->remove; component->suspend = component->driver->suspend; component->resume = component->driver->resume; - component->pcm_new = component->driver->pcm_new; - component->pcm_free = component->driver->pcm_free; dapm = &component->dapm; dapm->dev = dev;
@@ -3360,25 +3358,6 @@ static void snd_soc_platform_drv_remove(struct snd_soc_component *component) platform->driver->remove (platform); } -static int snd_soc_platform_drv_pcm_new (struct snd_soc_pcm_runtime *rtd) -{ -struct snd_soc_platform *platform = rtd->platform; - -if (platform->driver->pcm_new) -return platform->driver->pcm_new (rtd); -else -return 0 ; -} - -static void snd_soc_platform_drv_pcm_free (struct snd_pcm *pcm) -{ -struct snd_soc_pcm_runtime *rtd = pcm->private_data; -struct snd_soc_platform *platform = rtd->platform; - -if (platform->driver->pcm_free) - platform->driver->pcm_free (pcm); -} -/** * snd_soc_add_platform - Add a platform to the ASoC core * @dev: The parent device for the platform
@@ -3402,10 +3381,6 @@ int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform, platform->component.probe = snd_soc_platform_drv_probe;if (platform_drv->remove) platform->component.remove = snd_soc_platform_drv_remove; -if (platform_drv->pcm_new) - platform->component.pcm_new = snd_soc_platform_drv_pcm_new; -if (platform_drv->pcm_free) - platform->component.pcm_free = snd_soc_platform_drv_pcm_free;#ifdef CONFIG_DEBUG_FS platform->component.debugfs_prefix ="platform" ;
sound/soc/soc-pcm.c +9 -23
@@ -2628,25 +2628,12 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)return ret; } -static void soc_pcm_free (struct snd_pcm *pcm) -{ -struct snd_soc_pcm_runtime *rtd = pcm->private_data; -struct snd_soc_component *component; - -list_for_each_entry (component, &rtd->card->component_dev_list, - card_list) { -if (component->pcm_free) - component->pcm_free (pcm); - } -} -/* create a new pcm */ int soc_new_pcm (struct snd_soc_pcm_runtime *rtd,int num) {struct snd_soc_platform *platform = rtd->platform;struct snd_soc_dai *codec_dai;struct snd_soc_dai *cpu_dai = rtd->cpu_dai; -struct snd_soc_component *component;struct snd_pcm *pcm;char new_name[64 ];int ret =0 , playback =0 , capture =0 ;
@@ -2756,18 +2743,17 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)if (capture)snd_pcm_set_ops (pcm,SNDRV_PCM_STREAM_CAPTURE , &rtd->ops); -list_for_each_entry (component, &rtd->card->component_dev_list, card_list) { -if (component->pcm_new) { - ret = component->pcm_new (rtd); -if (ret <0 ) { -dev_err (component->dev, -"ASoC: pcm constructor failed: %d\n" , - ret); -return ret; - } +if (platform->driver->pcm_new) { + ret = platform->driver->pcm_new (rtd); +if (ret <0 ) { +dev_err (platform->dev, +"ASoC: pcm constructor failed: %d\n" , + ret); +return ret; } } - pcm->private_free = soc_pcm_free; + + pcm->private_free = platform->driver->pcm_free; out: dev_info(rtd->card->dev, "%s <-> %s mapping ok\n", (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,
Signature · 1 line
2.13.2