diff options
author | Bard liao <yung-chuan.liao@linux.intel.com> | 2019-04-28 04:53:39 +0800 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2019-04-29 09:11:59 +0200 |
commit | 4d95c51776b2edb4d4ebcea00b6e5a1fe538ce66 (patch) | |
tree | 40955c2b4596b4a0f62a232189c5867c6c63795d /sound/pci/hda | |
parent | cb5173594d50c72b7bfa14113dfc5084b4d2f726 (diff) | |
download | linux-4d95c51776b2edb4d4ebcea00b6e5a1fe538ce66.tar.bz2 |
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: Bard liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 701a69d856f5..b20eb7fc83eb 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -832,7 +832,13 @@ static int snd_hda_codec_dev_free(struct snd_device *device) struct hda_codec *codec = device->device_data; codec->in_freeing = 1; - snd_hdac_device_unregister(&codec->core); + /* + * 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)); return 0; |