These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / sound / firewire / bebob / bebob_pcm.c
index 4a55561..ef224d6 100644 (file)
@@ -122,11 +122,11 @@ pcm_init_hw_params(struct snd_bebob *bebob,
                           SNDRV_PCM_INFO_MMAP_VALID;
 
        if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
-               runtime->hw.formats = AMDTP_IN_PCM_FORMAT_BITS;
+               runtime->hw.formats = AM824_IN_PCM_FORMAT_BITS;
                s = &bebob->tx_stream;
                formations = bebob->tx_stream_formations;
        } else {
-               runtime->hw.formats = AMDTP_OUT_PCM_FORMAT_BITS;
+               runtime->hw.formats = AM824_OUT_PCM_FORMAT_BITS;
                s = &bebob->rx_stream;
                formations = bebob->rx_stream_formations;
        }
@@ -146,7 +146,7 @@ pcm_init_hw_params(struct snd_bebob *bebob,
        if (err < 0)
                goto end;
 
-       err = amdtp_stream_add_pcm_hw_constraints(s, runtime);
+       err = amdtp_am824_add_pcm_hw_constraints(s, runtime);
 end:
        return err;
 }
@@ -155,9 +155,9 @@ static int
 pcm_open(struct snd_pcm_substream *substream)
 {
        struct snd_bebob *bebob = substream->private_data;
-       struct snd_bebob_rate_spec *spec = bebob->spec->rate;
+       const struct snd_bebob_rate_spec *spec = bebob->spec->rate;
        unsigned int sampling_rate;
-       bool internal;
+       enum snd_bebob_clock_type src;
        int err;
 
        err = snd_bebob_stream_lock_try(bebob);
@@ -168,7 +168,7 @@ pcm_open(struct snd_pcm_substream *substream)
        if (err < 0)
                goto err_locked;
 
-       err = snd_bebob_stream_check_internal_clock(bebob, &internal);
+       err = snd_bebob_stream_get_clock_src(bebob, &src);
        if (err < 0)
                goto err_locked;
 
@@ -176,7 +176,7 @@ pcm_open(struct snd_pcm_substream *substream)
         * When source of clock is internal or any PCM stream are running,
         * the available sampling rate is limited at current sampling rate.
         */
-       if (!internal ||
+       if (src == SND_BEBOB_CLOCK_TYPE_EXTERNAL ||
            amdtp_stream_pcm_running(&bebob->tx_stream) ||
            amdtp_stream_pcm_running(&bebob->rx_stream)) {
                err = spec->get(bebob, &sampling_rate);
@@ -211,26 +211,38 @@ pcm_capture_hw_params(struct snd_pcm_substream *substream,
                      struct snd_pcm_hw_params *hw_params)
 {
        struct snd_bebob *bebob = substream->private_data;
+       int err;
+
+       err = snd_pcm_lib_alloc_vmalloc_buffer(substream,
+                                              params_buffer_bytes(hw_params));
+       if (err < 0)
+               return err;
 
        if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN)
-               atomic_inc(&bebob->capture_substreams);
-       amdtp_stream_set_pcm_format(&bebob->tx_stream,
-                                   params_format(hw_params));
-       return snd_pcm_lib_alloc_vmalloc_buffer(substream,
-                                               params_buffer_bytes(hw_params));
+               atomic_inc(&bebob->substreams_counter);
+
+       amdtp_am824_set_pcm_format(&bebob->tx_stream, params_format(hw_params));
+
+       return 0;
 }
 static int
 pcm_playback_hw_params(struct snd_pcm_substream *substream,
                       struct snd_pcm_hw_params *hw_params)
 {
        struct snd_bebob *bebob = substream->private_data;
+       int err;
+
+       err = snd_pcm_lib_alloc_vmalloc_buffer(substream,
+                                              params_buffer_bytes(hw_params));
+       if (err < 0)
+               return err;
 
        if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN)
-               atomic_inc(&bebob->playback_substreams);
-       amdtp_stream_set_pcm_format(&bebob->rx_stream,
-                                   params_format(hw_params));
-       return snd_pcm_lib_alloc_vmalloc_buffer(substream,
-                                               params_buffer_bytes(hw_params));
+               atomic_inc(&bebob->substreams_counter);
+
+       amdtp_am824_set_pcm_format(&bebob->rx_stream, params_format(hw_params));
+
+       return 0;
 }
 
 static int
@@ -239,7 +251,7 @@ pcm_capture_hw_free(struct snd_pcm_substream *substream)
        struct snd_bebob *bebob = substream->private_data;
 
        if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
-               atomic_dec(&bebob->capture_substreams);
+               atomic_dec(&bebob->substreams_counter);
 
        snd_bebob_stream_stop_duplex(bebob);
 
@@ -251,7 +263,7 @@ pcm_playback_hw_free(struct snd_pcm_substream *substream)
        struct snd_bebob *bebob = substream->private_data;
 
        if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
-               atomic_dec(&bebob->playback_substreams);
+               atomic_dec(&bebob->substreams_counter);
 
        snd_bebob_stream_stop_duplex(bebob);