| From 561708574711cb9515faefe3c9c4ca754540f9c3 Mon Sep 17 00:00:00 2001 |
| From: Bard liao <yung-chuan.liao@linux.intel.com> |
| Date: Sun, 28 Apr 2019 04:53:39 +0800 |
| Subject: ALSA: hda: fix unregister device twice on ASoC driver |
| |
| [ Upstream commit 4d95c51776b2edb4d4ebcea00b6e5a1fe538ce66 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/pci/hda/hda_codec.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c |
| index 701a69d856f5f..b20eb7fc83eb2 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; |
| -- |
| 2.20.1 |
| |