Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: alsa-devel@alsa-project.org,
	linux1394-devel@lists.sourceforge.net, clemens@ladisch.de,
	ffado-devel@lists.sf.net
Subject: Re: [PATCH 11/49] firewire-lib/dice/speakers: Add common PCM constraints for AMDTP streams
Date: Mon, 26 May 2014 14:34:55 +0200	[thread overview]
Message-ID: <s5ha9a4lnv4.wl%tiwai@suse.de> (raw)
In-Reply-To: <1398433530-13136-12-git-send-email-o-takashi@sakamocchi.jp>

At Fri, 25 Apr 2014 22:44:52 +0900,
Takashi Sakamoto wrote:
> 
> This commit adds common PCM constraints according to current firewire-lib
> implementation.
> 
> 1.Maximum width for each sample is limited by 24.
> AM824 in IEC 61883-6 can deliver 24bit data.
> 
> 2. Minimum time for period is 5msec.
> Apply the old value. For shorter latency, further works are needed.
> 
> 3. In blocking mode, frames per period/buffer is aligned to 32.
> Each packet can include some frames depending on its sampling rate. In
> blocking mode, the number equals to SYT_INTERVAL. Currently firewire-lib
> can schedule snd_pcm_period_elapsed() for each packet. So, for accurate
> PCM interrupt, the number of frames per period/buffer should be aligned
> to SYT_INTERVAL.
> Currently firewire-lib is lack of better rules to achieve this. So LCM of
> each value of SYT_INTERVALs (=32) is applied. This can be improved for
> further work.
> 
> Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
> ---
>  sound/firewire/amdtp.c    | 56 +++++++++++++++++++++++++++++++++++++++++++++++
>  sound/firewire/amdtp.h    |  3 +++
>  sound/firewire/dice.c     | 17 +-------------
>  sound/firewire/speakers.c |  8 +------
>  4 files changed, 61 insertions(+), 23 deletions(-)
> 
> diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
> index 3475b76..ac8c358 100644
> --- a/sound/firewire/amdtp.c
> +++ b/sound/firewire/amdtp.c
> @@ -13,6 +13,7 @@
>  #include <linux/slab.h>
>  #include <linux/sched.h>
>  #include <sound/pcm.h>
> +#include <sound/pcm_params.h>
>  #include <sound/rawmidi.h>
>  #include "amdtp.h"
>  
> @@ -105,6 +106,61 @@ const unsigned int amdtp_syt_intervals[CIP_SFC_COUNT] = {
>  EXPORT_SYMBOL(amdtp_syt_intervals);
>  
>  /**
> + * amdtp_stream_add_pcm_hw_constraints - add hw constraints for PCM substream
> + * @s:		the AMDTP stream, which must be initialized.
> + * @runtime:	the PCM substream runtime
> + */
> +int amdtp_stream_add_pcm_hw_constraints(struct amdtp_stream *s,
> +					struct snd_pcm_runtime *runtime)
> +{
> +	int err;
> +
> +	/* AM824 in IEC 61883-6 can deliver 24bit data */
> +	err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
> +	if (err < 0)
> +		goto end;
> +
> +	/*
> +	 * Currently firewire-lib processes 16 packets in one software
> +	 * interrupt callback. This equals to 2msec but actually the
> +	 * interval of the interrupts has a jitter.
> +	 * Additionally, even if adding a constraint to fit period size to
> +	 * 2msec, actual calculated frames per period doesn't equal to 2msec,
> +	 * depending on sampling rate.
> +	 * Anyway, the interval to call snd_pcm_period_elapsed() cannot 2msec.
> +	 * Here let us use 5msec for safe period interrupt.
> +	 */
> +	err = snd_pcm_hw_constraint_minmax(runtime,
> +					   SNDRV_PCM_HW_PARAM_PERIOD_TIME,
> +					   5000, UINT_MAX);
> +	if (err < 0)
> +		goto end;
> +
> +	/* Non-Blocking stream has no more constraints */
> +	if (!(s->flags & CIP_BLOCKING))
> +		goto end;
> +
> +	/*
> +	 * One AMDTP packet can include some frames. In blocking mode, the
> +	 * number equals to SYT_INTERVAL. So the number is 8, 16 or 32,
> +	 * depending on its sampling rate. For accurate period interrupt, it's
> +	 * preferrable to aligh period/buffer sizes to current SYT_INTERVAL.
> +	 *
> +	 * TODO: These constraints can be improved with propper rules.
> +	 * Currently apply LCM of SYT_INTEVALs.
> +	 */
> +	err = snd_pcm_hw_constraint_step(runtime, 0,
> +					 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 32);
> +	if (err < 0)
> +		goto end;
> +	err = snd_pcm_hw_constraint_step(runtime, 0,
> +					 SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 32);
> +end:
> +	return err;
> +}
> +EXPORT_SYMBOL(amdtp_stream_add_pcm_hw_constraints);
> +
> +/**
>   * amdtp_stream_set_parameters - set stream parameters
>   * @s: the AMDTP stream to configure
>   * @rate: the sample rate
> diff --git a/sound/firewire/amdtp.h b/sound/firewire/amdtp.h
> index db60425..d6bb7eb 100644
> --- a/sound/firewire/amdtp.h
> +++ b/sound/firewire/amdtp.h
> @@ -64,6 +64,7 @@ enum cip_sfc {
>  struct fw_unit;
>  struct fw_iso_context;
>  struct snd_pcm_substream;
> +struct snd_pcm_runtime;
>  struct snd_rawmidi_substream;
>  
>  enum amdtp_stream_direction {
> @@ -130,6 +131,8 @@ int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed);
>  void amdtp_stream_update(struct amdtp_stream *s);
>  void amdtp_stream_stop(struct amdtp_stream *s);
>  
> +int amdtp_stream_add_pcm_hw_constraints(struct amdtp_stream *s,
> +					struct snd_pcm_runtime *runtime);
>  void amdtp_stream_set_pcm_format(struct amdtp_stream *s,
>  				 snd_pcm_format_t format);
>  void amdtp_stream_pcm_prepare(struct amdtp_stream *s);
> diff --git a/sound/firewire/dice.c b/sound/firewire/dice.c
> index cd4c6b6..a9a30c0 100644
> --- a/sound/firewire/dice.c
> +++ b/sound/firewire/dice.c
> @@ -420,22 +420,7 @@ static int dice_open(struct snd_pcm_substream *substream)
>  	if (err < 0)
>  		goto err_lock;
>  
> -	err = snd_pcm_hw_constraint_step(runtime, 0,
> -					 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 32);
> -	if (err < 0)
> -		goto err_lock;
> -	err = snd_pcm_hw_constraint_step(runtime, 0,
> -					 SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 32);
> -	if (err < 0)
> -		goto err_lock;
> -
> -	err = snd_pcm_hw_constraint_minmax(runtime,
> -					   SNDRV_PCM_HW_PARAM_PERIOD_TIME,
> -					   5000, UINT_MAX);
> -	if (err < 0)
> -		goto err_lock;
> -
> -	err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
> +	err = amdtp_stream_add_pcm_hw_constraints(&dice->stream, runtime);
>  	if (err < 0)
>  		goto err_lock;
>  
> diff --git a/sound/firewire/speakers.c b/sound/firewire/speakers.c
> index c07e7cd..3427527 100644
> --- a/sound/firewire/speakers.c
> +++ b/sound/firewire/speakers.c
> @@ -167,13 +167,7 @@ static int fwspk_open(struct snd_pcm_substream *substream)
>  	if (err < 0)
>  		return err;
>  
> -	err = snd_pcm_hw_constraint_minmax(runtime,
> -					   SNDRV_PCM_HW_PARAM_PERIOD_TIME,
> -					   5000, UINT_MAX);
> -	if (err < 0)
> -		return err;
> -
> -	err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
> +	err = amdtp_stream_add_pcm_hw_constraints(fwspk->stream, runtime);

"&" is missing here.  I applied the patch with the fix.


Takashi

  reply	other threads:[~2014-05-26 12:34 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-25 13:44 [PATCH 00/49 v4] Enhancement for support of Firewire devices Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 01/49] firewire-lib: Rename functions, structure, member for AMDTP Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 02/49] firewire-lib: Add macros instead of fixed value " Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 03/49] firewire-lib: Add 'direction' member to 'amdtp_stream' structure Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 04/49] firewire-lib: Split some codes into functions to reuse for both streams Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 05/49] firewire-lib: Add support for AMDTP in-stream and PCM capture Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 06/49] firewire-lib: Add support for MIDI capture/playback Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 07/49] firewire-lib: Give syt value as parameter to handle_out_packet() Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 08/49] firewire-lib: Add support for duplex streams synchronization in blocking mode Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 09/49] firewire-lib: Add support for channel mapping Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 10/49] dice/firewire-lib: Keep dualwire mode but obsolete CIP_HI_DUALWIRE Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 11/49] firewire-lib/dice/speakers: Add common PCM constraints for AMDTP streams Takashi Sakamoto
2014-05-26 12:34   ` Takashi Iwai [this message]
2014-04-25 13:44 ` [PATCH 12/49] firewire-lib: Restrict calling flush_context_completion() when context exists Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 13/49] firewire-lib: Rename macros, variables and functions for CMP Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 14/49] firewire-lib: Add 'direction' member to 'cmp_connection' structure Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 15/49] firewire-lib: Add handling output connection by CMP Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 16/49] firewire-lib: Add a new function to check others' connection Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 17/49] firewire-lib: Add support for deferred transaction Takashi Sakamoto
2014-04-25 13:44 ` [PATCH 18/49] firewire-lib: Add some AV/C general commands Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 19/49] fireworks: Add skelton for Fireworks based devices Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 20/49] fireworks: Add transaction and some commands Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 21/49] fireworks: Add connection and stream management Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 22/49] fireworks/firewire-lib: Add a quirk for empty packet with TAG0 Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 23/49] fireworks/firewire-lib: Add a quirk for the meaning of dbc Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 24/49] fireworks/firewire-lib: Add a quirk for wrong dbs in tx packets Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 25/49] fireworks/firewire-lib: Add a quirk for fixed interval of reported dbc Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 26/49] fireworks/firewire-lib: Add a quirk to reset data block counter at bus reset Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 27/49] fireworks: Add proc interface for debugging purpose Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 28/49] fireworks: Add MIDI interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 29/49] fireworks/firewire-lib: Add a quirk of data blocks for MIDI in out-stream Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 30/49] fireworks: Add PCM interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 31/49] fireworks: Add hwdep interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 32/49] fireworks: Add command/response functionality into " Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 33/49] bebob: Add skelton for BeBoB based devices Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 34/49] bebob: Add commands and connections/streams management Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 35/49] bebob/firewire-lib: Add a quirk for discontinuity at bus reset Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 36/49] bebob: Add proc interface for debugging purpose Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 37/49] bebob: Add MIDI interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 38/49] bebob: Add PCM interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 39/49] bebob: Add hwdep interface Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 40/49] bebob: Prepare for device specific operations Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 41/49] bebob: Add support for Terratec PHASE, EWS series and Aureon Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 42/49] bebob: Add support for Yamaha GO series Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 43/49] bebob: Add support for Focusrite Saffire/SaffirePro series Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 44/49] bebob: Add support for M-Audio usual Firewire series Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 45/49] bebob: Add support for M-Audio special " Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 46/49] bebob/firewire-lib: Add a quirk of wrong dbc in empty packet " Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 47/49] bebob: Add a quirk of data blocks for MIDI messages for some M-Audio devices Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 48/49] bebob: Send a cue to load firmware for M-Audio Firewire series Takashi Sakamoto
2014-04-25 13:45 ` [PATCH 49/49] firewire/bebob: Add a workaround for M-Audio special " Takashi Sakamoto
2014-05-30 16:24   ` Takashi Iwai
2014-05-30 20:22     ` Stefan Richter
2014-05-31  5:56       ` Takashi Iwai
2014-04-25 22:58 ` A Restriction and rest of issues for this patchsets Takashi Sakamoto
2014-04-29 11:21 ` [PATCH 00/49 v4] Enhancement for support of Firewire devices Takashi Sakamoto
2014-05-25  5:55 ` Takashi Sakamoto
2014-05-26  8:41   ` Clemens Ladisch
2014-05-26  8:55     ` Takashi Iwai
2014-05-26 12:38       ` [alsa-devel] " Takashi Iwai
2014-05-26 22:45         ` Takashi Sakamoto
2014-05-27  4:13           ` Takashi Sakamoto
2014-05-27  5:35             ` Takashi Iwai
2014-05-27  5:20           ` Takashi Iwai
2014-05-27  5:30             ` Takashi Sakamoto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5ha9a4lnv4.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=ffado-devel@lists.sf.net \
    --cc=linux1394-devel@lists.sourceforge.net \
    --cc=o-takashi@sakamocchi.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox