Unverified Commit d6947bb2 authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown
Browse files

ASoC: hda: fix unbalanced codec dev refcount for HDA_DEV_ASOC



HDA_DEV_ASOC type codec device refcounts are managed differently
from HDA_DEV_LEGACY devices. The refcount is released explicitly
in snd_hdac_ext_bus_device_remove() for ASOC type devices.
So, remove the put_device() call in snd_hda_codec_dev_free()
for such devices to make the refcount balanced. This will prevent
the NULL pointer exception when the codec driver is released
after the card is freed.

Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 347d1c4b
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -834,7 +834,14 @@ static int snd_hda_codec_dev_free(struct snd_device *device)
	codec->in_freeing = 1;
	snd_hdac_device_unregister(&codec->core);
	codec_display_power(codec, false);

	/*
	 * In the case of ASoC HD-audio bus, the device refcount is released in
	 * snd_hdac_ext_bus_device_remove() explicitly.
	 */
	if (codec->core.type == HDA_DEV_LEGACY)
		put_device(hda_codec_dev(codec));

	return 0;
}