Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41914a57 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ALSA: usb-audio: Kill stray URB at exiting"

parents 071d65da 0a5cd899
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -623,6 +623,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
				     struct snd_usb_audio *chip)
{
	struct snd_card *card;
	struct usb_mixer_interface *mixer;
	struct list_head *p;
	bool was_shutdown;

@@ -654,7 +655,8 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
		}
		/* release mixer resources */
		list_for_each(p, &chip->mixer_list) {
			snd_usb_mixer_disconnect(p);
			mixer = list_entry(p, struct usb_mixer_interface, list);
			snd_usb_mixer_disconnect(mixer);
		}
	}

+11 −6
Original line number Diff line number Diff line
@@ -2169,6 +2169,9 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)

static void snd_usb_mixer_free(struct usb_mixer_interface *mixer)
{
	/* kill pending URBs */
	snd_usb_mixer_disconnect(mixer);

	kfree(mixer->id_elems);
	if (mixer->urb) {
		kfree(mixer->urb->transfer_buffer);
@@ -2500,13 +2503,15 @@ _error:
	return err;
}

void snd_usb_mixer_disconnect(struct list_head *p)
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer)
{
	struct usb_mixer_interface *mixer;

	mixer = list_entry(p, struct usb_mixer_interface, list);
	if (mixer->disconnected)
		return;
	if (mixer->urb)
		usb_kill_urb(mixer->urb);
	if (mixer->rc_urb)
		usb_kill_urb(mixer->rc_urb);
	mixer->disconnected = true;
}

#ifdef CONFIG_PM
+2 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ struct usb_mixer_interface {

	u8 audigy2nx_leds[3];
	u8 xonar_u1_status;
	bool disconnected;
};

#define MAX_CHANNELS	16	/* max logical channels */
@@ -57,7 +58,7 @@ struct usb_mixer_elem_info {

int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
			 int ignore_error);
void snd_usb_mixer_disconnect(struct list_head *p);
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer);

void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid);