]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/firewire/dice/dice-pcm.c
Merge remote-tracking branch 'block/for-next'
[karo-tx-linux.git] / sound / firewire / dice / dice-pcm.c
index 0b6e6bbed4b8fdf16f83c783619a25957b870a96..a5c9b58655ef2f69141a66e440480ac4f6049bc6 100644 (file)
@@ -294,17 +294,30 @@ int snd_dice_create_pcm(struct snd_dice *dice)
                .page      = snd_pcm_lib_get_vmalloc_page,
                .mmap      = snd_pcm_lib_mmap_vmalloc,
        };
+       __be32 reg;
        struct snd_pcm *pcm;
-       unsigned int i, capture, playback;
+       unsigned int capture, playback;
        int err;
 
-       capture = playback = 0;
-       for (i = 0; i < 3; i++) {
-               if (dice->tx_channels[i] > 0)
-                       capture = 1;
-               if (dice->rx_channels[i] > 0)
-                       playback = 1;
-       }
+       /*
+        * Check whether PCM substreams are required.
+        *
+        * TODO: in the case that any PCM substreams are not avail at a certain
+        * sampling transfer frequency?
+        */
+       err = snd_dice_transaction_read_tx(dice, TX_NUMBER_AUDIO,
+                                          &reg, sizeof(reg));
+       if (err < 0)
+               return err;
+       if (be32_to_cpu(reg) > 0)
+               capture = 1;
+
+       err = snd_dice_transaction_read_rx(dice, RX_NUMBER_AUDIO,
+                                          &reg, sizeof(reg));
+       if (err < 0)
+               return err;
+       if (be32_to_cpu(reg) > 0)
+               playback = 1;
 
        err = snd_pcm_new(dice->card, "DICE", 0, playback, capture, &pcm);
        if (err < 0)