alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
@ 2012-01-02  8:15 Sangsu Park
  2012-01-02 13:19 ` Mark Brown
  2012-01-02 13:30 ` Mark Brown
  0 siblings, 2 replies; 6+ messages in thread
From: Sangsu Park @ 2012-01-02  8:15 UTC (permalink / raw)
  To: alsa-devel, lrg, broonie; +Cc: sbkim73, sangsu, Sangsu Park

The original code does not cover the case that two DAIs(CPU) have different
ASoC core PCM operations(like mmap, pointer...). Currently we have only one
global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
pointer functions, second DAI's pointer function is set for both first DAI
and second DAI in case of original code.

This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
each DAIs can have different ASoC core PCM operations. This is needed to
support multiple DAIs.
---
 sound/soc/soc-pcm.c |   38 ++++++++++++++++++--------------------
 1 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 8aa7cec..cdc860a 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -598,17 +598,6 @@ static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream)
 	return offset;
 }
 
-/* ASoC PCM operations */
-static struct snd_pcm_ops soc_pcm_ops = {
-	.open		= soc_pcm_open,
-	.close		= soc_pcm_close,
-	.hw_params	= soc_pcm_hw_params,
-	.hw_free	= soc_pcm_hw_free,
-	.prepare	= soc_pcm_prepare,
-	.trigger	= soc_pcm_trigger,
-	.pointer	= soc_pcm_pointer,
-};
-
 /* create a new pcm */
 int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
 {
@@ -616,10 +605,19 @@ 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 = rtd->codec_dai;
 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+	struct snd_pcm_ops *soc_pcm_ops = &rtd->ops;
 	struct snd_pcm *pcm;
 	char new_name[64];
 	int ret = 0, playback = 0, capture = 0;
 
+	soc_pcm_ops->open	= soc_pcm_open;
+	soc_pcm_ops->close	= soc_pcm_close;
+	soc_pcm_ops->hw_params	= soc_pcm_hw_params;
+	soc_pcm_ops->hw_free	= soc_pcm_hw_free;
+	soc_pcm_ops->prepare	= soc_pcm_prepare;
+	soc_pcm_ops->trigger	= soc_pcm_trigger;
+	soc_pcm_ops->pointer	= soc_pcm_pointer;
+
 	/* check client and interface hw capabilities */
 	snprintf(new_name, sizeof(new_name), "%s %s-%d",
 			rtd->dai_link->stream_name, codec_dai->name, num);
@@ -643,20 +641,20 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
 	rtd->pcm = pcm;
 	pcm->private_data = rtd;
 	if (platform->driver->ops) {
-		soc_pcm_ops.mmap = platform->driver->ops->mmap;
-		soc_pcm_ops.pointer = platform->driver->ops->pointer;
-		soc_pcm_ops.ioctl = platform->driver->ops->ioctl;
-		soc_pcm_ops.copy = platform->driver->ops->copy;
-		soc_pcm_ops.silence = platform->driver->ops->silence;
-		soc_pcm_ops.ack = platform->driver->ops->ack;
-		soc_pcm_ops.page = platform->driver->ops->page;
+		soc_pcm_ops->mmap = platform->driver->ops->mmap;
+		soc_pcm_ops->pointer = platform->driver->ops->pointer;
+		soc_pcm_ops->ioctl = platform->driver->ops->ioctl;
+		soc_pcm_ops->copy = platform->driver->ops->copy;
+		soc_pcm_ops->silence = platform->driver->ops->silence;
+		soc_pcm_ops->ack = platform->driver->ops->ack;
+		soc_pcm_ops->page = platform->driver->ops->page;
 	}
 
 	if (playback)
-		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops);
+		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, soc_pcm_ops);
 
 	if (capture)
-		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops);
+		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, soc_pcm_ops);
 
 	if (platform->driver->pcm_new) {
 		ret = platform->driver->pcm_new(rtd);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
  2012-01-02  8:15 [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs Sangsu Park
@ 2012-01-02 13:19 ` Mark Brown
  2012-01-03  0:09   ` Sangsu Park
  2012-01-02 13:30 ` Mark Brown
  1 sibling, 1 reply; 6+ messages in thread
From: Mark Brown @ 2012-01-02 13:19 UTC (permalink / raw)
  To: Sangsu Park; +Cc: sbkim73, alsa-devel, sangsu, lrg

On Mon, Jan 02, 2012 at 05:15:10PM +0900, Sangsu Park wrote:
> The original code does not cover the case that two DAIs(CPU) have different
> ASoC core PCM operations(like mmap, pointer...). Currently we have only one
> global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
> pointer functions, second DAI's pointer function is set for both first DAI
> and second DAI in case of original code.

> This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
> each DAIs can have different ASoC core PCM operations. This is needed to
> support multiple DAIs.

Applied, thanks.

Actually it's not even allocating them dynamically as we already had the
allocation happening.  :/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
  2012-01-02  8:15 [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs Sangsu Park
  2012-01-02 13:19 ` Mark Brown
@ 2012-01-02 13:30 ` Mark Brown
  2012-01-03  0:11   ` Sangsu Park
  1 sibling, 1 reply; 6+ messages in thread
From: Mark Brown @ 2012-01-02 13:30 UTC (permalink / raw)
  To: Sangsu Park; +Cc: sbkim73, alsa-devel, sangsu, lrg

On Mon, Jan 02, 2012 at 05:15:10PM +0900, Sangsu Park wrote:
> The original code does not cover the case that two DAIs(CPU) have different
> ASoC core PCM operations(like mmap, pointer...). Currently we have only one
> global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
> pointer functions, second DAI's pointer function is set for both first DAI
> and second DAI in case of original code.
> 
> This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
> each DAIs can have different ASoC core PCM operations. This is needed to
> support multiple DAIs.
> ---

Actually I can't apply this as you haven't signed it off.  Please supply
a Signed-off-by for the patch.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
  2012-01-02 13:19 ` Mark Brown
@ 2012-01-03  0:09   ` Sangsu Park
  0 siblings, 0 replies; 6+ messages in thread
From: Sangsu Park @ 2012-01-03  0:09 UTC (permalink / raw)
  To: Mark Brown; +Cc: sbkim73, Sangsu Park, alsa-devel, lrg

On Mon, Jan 2, 2012 at 10:19 PM, Mark Brown
<broonie@opensource.wolfsonmicro.com> wrote:
> On Mon, Jan 02, 2012 at 05:15:10PM +0900, Sangsu Park wrote:
>> The original code does not cover the case that two DAIs(CPU) have different
>> ASoC core PCM operations(like mmap, pointer...). Currently we have only one
>> global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
>> pointer functions, second DAI's pointer function is set for both first DAI
>> and second DAI in case of original code.
>
>> This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
>> each DAIs can have different ASoC core PCM operations. This is needed to
>> support multiple DAIs.
>
> Applied, thanks.
>
> Actually it's not even allocating them dynamically as we already had the
> allocation happening.  :/

You're right. but I don't want to happen any confusion :)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
  2012-01-02 13:30 ` Mark Brown
@ 2012-01-03  0:11   ` Sangsu Park
  2012-01-03 20:29     ` Mark Brown
  0 siblings, 1 reply; 6+ messages in thread
From: Sangsu Park @ 2012-01-03  0:11 UTC (permalink / raw)
  To: Mark Brown; +Cc: sbkim73, Sangsu Park, alsa-devel, lrg

On Mon, Jan 2, 2012 at 10:30 PM, Mark Brown
<broonie@opensource.wolfsonmicro.com> wrote:
> On Mon, Jan 02, 2012 at 05:15:10PM +0900, Sangsu Park wrote:
>> The original code does not cover the case that two DAIs(CPU) have different
>> ASoC core PCM operations(like mmap, pointer...). Currently we have only one
>> global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
>> pointer functions, second DAI's pointer function is set for both first DAI
>> and second DAI in case of original code.
>>
>> This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
>> each DAIs can have different ASoC core PCM operations. This is needed to
>> support multiple DAIs.
>> ---
>
> Actually I can't apply this as you haven't signed it off.  Please supply
> a Signed-off-by for the patch.

Sorry for that. I've resent it.
Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
  2012-01-03  0:11   ` Sangsu Park
@ 2012-01-03 20:29     ` Mark Brown
  0 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2012-01-03 20:29 UTC (permalink / raw)
  To: Sangsu Park; +Cc: sbkim73, Sangsu Park, alsa-devel, lrg

On Tue, Jan 03, 2012 at 09:11:04AM +0900, Sangsu Park wrote:

> Sorry for that. I've resent it.

Applied now, thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-01-03 20:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-02  8:15 [PATCH v2] ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs Sangsu Park
2012-01-02 13:19 ` Mark Brown
2012-01-03  0:09   ` Sangsu Park
2012-01-02 13:30 ` Mark Brown
2012-01-03  0:11   ` Sangsu Park
2012-01-03 20:29     ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).