bzero(pcm, sizeof(struct pcm));
                pcm->no = device;
                pcm->info.device = device;
+               pcm->info.stream = -1;
+               pcm->info.subdevice = -1;
                if ((err = snd_ctl_pcm_info(handle, &pcm->info)) < 0) {
                        snd_ctl_close(handle);
                        error("PCM info error: %s", snd_strerror(err));
 
                }
                for (dev = 0; dev < info.pcmdevs; dev++) {
                        pcminfo.device = dev;
-                       pcminfo.stream = stream;
+                       pcminfo.stream = -stream - 1;
                        pcminfo.subdevice = -1;
                        if ((err = snd_ctl_pcm_info(handle, &pcminfo)) < 0) {
                                fprintf(stderr, "Error: control digital audio info (%i): %s\n", card, snd_strerror(err));
                                continue;
                        }
+                       if (pcminfo.stream != stream)
+                               continue;
                        fprintf(stderr, "%s: %i [%s] / #%i: %s\n",
                               info.name,
                               card + 1,