ALSA: firewire-tascam: share PCM buffer size for both direction
[sfrench/cifs-2.6.git] / sound / firewire / tascam / tascam-pcm.c
index 6cd3a420fbdf249aa10975ea122a087ac6798970..b18664fdf9558b27db094f95fd0b4964b154608b 100644 (file)
@@ -66,6 +66,7 @@ static int pcm_open(struct snd_pcm_substream *substream)
        // at current one.
        if (clock != SND_TSCM_CLOCK_INTERNAL || tscm->substreams_counter > 0) {
                unsigned int frames_per_period = d->events_per_period;
+               unsigned int frames_per_buffer = d->events_per_buffer;
                unsigned int rate;
 
                err = snd_tscm_stream_get_rate(tscm, &rate);
@@ -83,6 +84,14 @@ static int pcm_open(struct snd_pcm_substream *substream)
                        mutex_unlock(&tscm->mutex);
                        goto err_locked;
                }
+
+               err = snd_pcm_hw_constraint_minmax(substream->runtime,
+                                       SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
+                                       frames_per_buffer, frames_per_buffer);
+               if (err < 0) {
+                       mutex_unlock(&tscm->mutex);
+                       goto err_locked;
+               }
        }
 
        mutex_unlock(&tscm->mutex);
@@ -118,10 +127,11 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
        if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
                unsigned int rate = params_rate(hw_params);
                unsigned int frames_per_period = params_period_size(hw_params);
+               unsigned int frames_per_buffer = params_buffer_size(hw_params);
 
                mutex_lock(&tscm->mutex);
                err = snd_tscm_stream_reserve_duplex(tscm, rate,
-                                                    frames_per_period);
+                                       frames_per_period, frames_per_buffer);
                if (err >= 0)
                        ++tscm->substreams_counter;
                mutex_unlock(&tscm->mutex);