>>> +static struct snd_soc_dai_driver q6usb_be_dais[] = { >>> + { >>> + .playback = { >>> + .stream_name = "USB BE RX", >>> + .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | >>> + SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | >>> + SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | >>> + SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | >>> + SNDRV_PCM_RATE_192000, >>> + .formats = SNDRV_PCM_FMTBIT_S16_LE | >>> SNDRV_PCM_FMTBIT_S16_BE | >>> + SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE | >>> + SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE | >>> + SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE, >>> + .channels_min = 1, >>> + .channels_max = 2, >>> + .rate_max = 192000, >>> + .rate_min = 8000, >>> + }, >>> + .id = USB_RX, >>> + .name = "USB_RX_BE", >>> + .ops = &q6usb_ops, >>> + }, >>> +}; >> >> ... here I see a single DAI, so presumably ONE endpoint can be supported? >> > > One USB audio device can be supported. > one AFE port = one USB audio device > >> I didn't see in the rest of the code how a card with multiple endpoint >> would be rejected, nor how the capabilities are checked? >> > > Need to take a look at this query a bit more. Let me try to pass in a > format that can't be supported by the audio DSP, and see if the formats > specified in this structure will not allow userspace to start the session. > > When you say a "card with multiple endpoints" are you referring to a USB > device that exposes multiple data (ISOC let's say) eps for its data > interface? I haven't run into a device like that. A headset will typically only have two isoc endpoints for playback and capture respectively, but while that's a very large market USB audio is far from restricted to this configuration. It's not uncommon for the pro or prosumer market to see devices with multiple input/output capabilities and run-time mixing on the host.