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
next prev parent 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