alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 01/19] ASoC: atmel: Don't set unused struct snd_pcm_hardware fields
@ 2013-12-20 13:20 Lars-Peter Clausen
  2013-12-20 13:20 ` [PATCH 02/19] ASoC: au1x: " Lars-Peter Clausen
                   ` (19 more replies)
  0 siblings, 20 replies; 50+ messages in thread
From: Lars-Peter Clausen @ 2013-12-20 13:20 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: alsa-devel, Lars-Peter Clausen, Nicolas Ferre, Bo Shen

The ASoC core assumes that the PCM component of the ASoC card transparently
moves data around and does not impose any restrictions on the memory layout or
the transfer speed. It ignores all fields from the snd_pcm_hardware struct for
the PCM driver that are related to this. Setting these fields in the PCM driver
might suggest otherwise though, so rather not set them.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 sound/soc/atmel/atmel-pcm-dma.c | 1 -
 sound/soc/atmel/atmel-pcm-pdc.c | 1 -
 2 files changed, 2 deletions(-)

diff --git a/sound/soc/atmel/atmel-pcm-dma.c b/sound/soc/atmel/atmel-pcm-dma.c
index 06082e5..b79a2a8 100644
--- a/sound/soc/atmel/atmel-pcm-dma.c
+++ b/sound/soc/atmel/atmel-pcm-dma.c
@@ -50,7 +50,6 @@ static const struct snd_pcm_hardware atmel_pcm_dma_hardware = {
 				  SNDRV_PCM_INFO_INTERLEAVED |
 				  SNDRV_PCM_INFO_RESUME |
 				  SNDRV_PCM_INFO_PAUSE,
-	.formats		= SNDRV_PCM_FMTBIT_S16_LE,
 	.period_bytes_min	= 256,		/* lighting DMA overhead */
 	.period_bytes_max	= 2 * 0xffff,	/* if 2 bytes format */
 	.periods_min		= 8,
diff --git a/sound/soc/atmel/atmel-pcm-pdc.c b/sound/soc/atmel/atmel-pcm-pdc.c
index 054ea4d..33ec592 100644
--- a/sound/soc/atmel/atmel-pcm-pdc.c
+++ b/sound/soc/atmel/atmel-pcm-pdc.c
@@ -58,7 +58,6 @@ static const struct snd_pcm_hardware atmel_pcm_hardware = {
 				  SNDRV_PCM_INFO_MMAP_VALID |
 				  SNDRV_PCM_INFO_INTERLEAVED |
 				  SNDRV_PCM_INFO_PAUSE,
-	.formats		= SNDRV_PCM_FMTBIT_S16_LE,
 	.period_bytes_min	= 32,
 	.period_bytes_max	= 8192,
 	.periods_min		= 2,
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 50+ messages in thread
* Re: [PATCH 08/19] ASoC: kirkwood: Don't set unused struct snd_pcm_hardware fields
@ 2013-12-30 19:42 Jean-Francois Moine
  2014-01-01 20:10 ` Lars-Peter Clausen
  0 siblings, 1 reply; 50+ messages in thread
From: Jean-Francois Moine @ 2013-12-30 19:42 UTC (permalink / raw)
  To: Lars-Peter Clausen, Mark Brown, Liam Girdwood; +Cc: alsa-devel

> On 12/20/2013 08:13 PM, Jean-Francois Moine wrote:
> > On Fri, 20 Dec 2013 18:18:49 +0100
> > Lars-Peter Clausen <lars@metafoo.de> wrote:
> >   
> >> On 12/20/2013 07:05 PM, Jean-Francois Moine wrote:  
> >>>> diff --git a/sound/soc/kirkwood/kirkwood-dma.c b/sound/soc/kirkwood/kirkwood-dma.c
> >>>> index 4af1936..aac22fc 100644
> >>>> --- a/sound/soc/kirkwood/kirkwood-dma.c
> >>>> +++ b/sound/soc/kirkwood/kirkwood-dma.c  
> >>> 	[snip]  
> >>>> @@ -43,12 +33,6 @@ static struct snd_pcm_hardware kirkwood_dma_snd_hw = {
> >>>>  		 SNDRV_PCM_INFO_MMAP_VALID |
> >>>>  		 SNDRV_PCM_INFO_BLOCK_TRANSFER |
> >>>>  		 SNDRV_PCM_INFO_PAUSE),
> >>>> -	.formats		= KIRKWOOD_FORMATS,
> >>>> -	.rates			= KIRKWOOD_RATES,
> >>>> -	.rate_min		= 8000,
> >>>> -	.rate_max		= 384000,
> >>>> -	.channels_min		= 1,
> >>>> -	.channels_max		= 8,
> >>>>  	.buffer_bytes_max	= KIRKWOOD_SND_MAX_BUFFER_BYTES,
> >>>>  	.period_bytes_min	= KIRKWOOD_SND_MIN_PERIOD_BYTES,
> >>>>  	.period_bytes_max	= KIRKWOOD_SND_MAX_PERIOD_BYTES,  
> >>>
> >>> Lars,
> >>>
> >>> You removed too many things. The 'formats' field is mandatory.  
> >>
> >> No it is not. While snd_soc_set_runtime_hwparams() uses it it is later
> >> overwritten again in soc_pcm_init_runtime_hw().  
> > 
> > I have a DPCM system and soc_pcm_init_runtime_hw() is not called
> > (either 'dynamic' or 'no_pcm' is set in the DAI links).
> 
> Ok, I see dpcm_set_fe_runtime() does things slightly different.

Well, I advanced a bit with DPCM, and I have a problem with this field.

In the driver, the front-end DAI is the audio controller and the
back-ends DAIs are the HDMI and SPDIF outputs. These back-end DAIs
have different rates and formats, as have the audio controller outputs
(I2S and SPDIF). So, I used intermediate DAIs which represent the audio
controller outputs, and they are described in the DAI links:

link 0 (FE): audio controller <-> dummy DAI
link 1 (BE): i2s audio controller output <-> HDMI output
link 2 (BE): spdif audio controller output <-> HDMI output
link 3 (BE): spdif audio controller output <-> SPDIF output

Without any patch in the core, the rates and formats are always the
rates and formats of the audio controller (FE). This is due to the
'goto dynamic' in soc_pcm_open(): as the back-ends are linked to real
DAIs, the rate and format constraints must be checked. So, as a
temporary patch, I replaced:

	if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm)
		goto dynamic;
by:
	if (rtd->dai_link->dynamic)
		goto dynamic;

(indeed, this will not work if the back-end is linked to the dummy DAI)

and, I get the correct rates and formats in the runtime hardware
parameters. But these values are lost:

- on DMA open (FE pcm open), when the driver calls
  snd_soc_set_runtime_hwparams() (loss of the formats), and

- on dpcm_set_fe_runtime() call (loss of the rates).

The first problem can be fixed in the audio controller by a hack,
saving /restoring the formats on calling snd_soc_set_runtime_hwparams(),
and the second problem is easily fixed moving dpcm_set_fe_runtime() at
the beginning of dpcm_fe_dai_startup(). Are these good solutions?

-- 
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

end of thread, other threads:[~2014-01-06 16:46 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-20 13:20 [PATCH 01/19] ASoC: atmel: Don't set unused struct snd_pcm_hardware fields Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 02/19] ASoC: au1x: " Lars-Peter Clausen
2013-12-20 15:24   ` Manuel Lauss
2013-12-21 14:24   ` Mark Brown
2013-12-20 13:20 ` [PATCH 03/19] ASoC: blackfin: " Lars-Peter Clausen
2013-12-24 11:54   ` Mark Brown
2013-12-20 13:20 ` [PATCH 04/19] ASoC: davinci: " Lars-Peter Clausen
2013-12-23  7:04   ` Peter Ujfalusi
2013-12-24 12:01   ` Mark Brown
2013-12-20 13:20 ` [PATCH 05/19] ASoC: ep93xx: " Lars-Peter Clausen
2013-12-30 13:59   ` Mark Brown
2013-12-20 13:20 ` [PATCH 06/19] ASoC: fsl: " Lars-Peter Clausen
2013-12-20 14:25   ` Timur Tabi
2013-12-20 14:04     ` Lars-Peter Clausen
2013-12-20 18:27       ` Mark Brown
2013-12-20 18:16         ` Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 07/19] ASoC: intel: " Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 08/19] ASoC: kirkwood: " Lars-Peter Clausen
2013-12-20 18:05   ` Jean-Francois Moine
2013-12-20 17:18     ` Lars-Peter Clausen
2013-12-20 19:13       ` Jean-Francois Moine
2013-12-20 18:29         ` Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 09/19] ASoC: mxs: " Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 10/19] ASoC: nuc900: " Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 11/19] ASoC: omap: " Lars-Peter Clausen
2013-12-22 17:19   ` Jarkko Nikula
2013-12-23  7:04   ` Peter Ujfalusi
2013-12-24 12:04   ` Mark Brown
2013-12-20 13:20 ` [PATCH 12/19] ASoC: mmp: " Lars-Peter Clausen
2013-12-30 13:59   ` Mark Brown
2013-12-20 13:20 ` [PATCH 13/19] ASoC: s6000: " Lars-Peter Clausen
2013-12-22 22:21   ` Daniel Glöckner
2013-12-24 12:02   ` Mark Brown
2013-12-20 13:20 ` [PATCH 14/19] ASoC: samsung: " Lars-Peter Clausen
2013-12-30 13:57   ` Mark Brown
2013-12-20 13:20 ` [PATCH 15/19] ASoC: sh: " Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 16/19] ASoC: tegra: " Lars-Peter Clausen
2013-12-20 17:43   ` Stephen Warren
2013-12-21 14:27   ` Mark Brown
2013-12-20 13:20 ` [PATCH 17/19] ASoC: txx9: " Lars-Peter Clausen
2013-12-30 13:58   ` Mark Brown
2013-12-20 13:20 ` [PATCH 18/19] ASoC: ux500: " Lars-Peter Clausen
2013-12-20 13:20 ` [PATCH 19/19] ASoC: soc-utils: " Lars-Peter Clausen
2013-12-30 13:56   ` Mark Brown
2014-01-04 18:15 ` [PATCH 01/19] ASoC: atmel: " Lars-Peter Clausen
2014-01-06  3:01   ` Bo Shen
2014-01-06 16:45 ` Mark Brown
  -- strict thread matches above, loose matches on Subject: below --
2013-12-30 19:42 [PATCH 08/19] ASoC: kirkwood: " Jean-Francois Moine
2014-01-01 20:10 ` Lars-Peter Clausen
2014-01-02 11:53   ` 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).