> @@ -113,6 +120,12 @@ static int q6usb_alsa_connection_cb(struct snd_soc_usb *usb, > if (connected) { > /* We only track the latest USB headset plugged in */ > data->active_usb_chip_idx = sdev->card_idx; > + > + set_bit(sdev->card_idx, &data->available_card_slot); > + data->status[sdev->card_idx].sdev = sdev; Not following the 'only track the latest USB headset plugged in', I don't see anything that discard the previously latest headset... If you plug headset1, then headset2, how is headset1 marked as not available for USB offload? > + } else { > + clear_bit(sdev->card_idx, &data->available_card_slot); > + data->status[sdev->card_idx].sdev = NULL; > } > > return 0;