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

Commit 4d95c517 authored by Bard liao's avatar Bard liao Committed by Takashi Iwai
Browse files

ALSA: hda: fix unregister device twice on ASoC driver



snd_hda_codec_device_new() is used by both legacy HDA and ASoC
driver. However, we will call snd_hdac_device_unregister() in
snd_hdac_ext_bus_device_remove() for ASoC device. This patch uses
the type flag in hdac_device struct to determine is it a ASoC device
or legacy HDA device and call snd_hdac_device_unregister() in
snd_hda_codec_dev_free() only if it is a legacy HDA device.

Signed-off-by: default avatarBard liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent cb517359
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -832,6 +832,12 @@ static int snd_hda_codec_dev_free(struct snd_device *device)
	struct hda_codec *codec = device->device_data;

	codec->in_freeing = 1;
	/*
	 * snd_hda_codec_device_new() is used by legacy HDA and ASoC driver.
	 * We can't unregister ASoC device since it will be unregistered in
	 * snd_hdac_ext_bus_device_remove().
	 */
	if (codec->core.type == HDA_DEV_LEGACY)
		snd_hdac_device_unregister(&codec->core);
	codec_display_power(codec, false);
	put_device(hda_codec_dev(codec));