+static int q6usb_update_offload_route(struct snd_soc_component *component, int card,
+ int pcm, int direction, long *route)
+{
+ struct q6usb_port_data *data = dev_get_drvdata(component->dev);
+ struct snd_soc_usb_device *sdev;
+ int ret = 0;
+ int cidx = -1;
+ int pidx = -1;
+
+ mutex_lock(&data->mutex);
+
+ if (list_empty(&data->devices) ||
+ direction == SNDRV_PCM_STREAM_CAPTURE) {
+ ret = -ENODEV;
+ goto out;
+ }
well the code above seems to invalidate what I understood earlier, in
that an error code is returned instead of a set of -1 values...
+
+ sdev = list_last_entry(&data->devices, struct snd_soc_usb_device, list);
+
+ /*
+ * Will always look for last PCM device discovered/probed as the
+ * active offload index.
+ */
+ if (card == sdev->card_idx &&
+ pcm == sdev->ppcm_idx[sdev->num_playback - 1]) {
+ cidx = component->card->snd_card->number;
+ pidx = q6usb_get_pcm_id(component);
+ }
+
+ if (cidx < 0 || pidx < 0) {
+ cidx = -1;
+ pidx = -1;
+ }
+
+out:
+ route[0] = cidx;
+ route[1] = pidx;
+
+ mutex_unlock(&data->mutex);
+
+ return ret;
+}
+