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: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
347d1c4b07
commit
d6947bb234
|
@ -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);
|
||||
put_device(hda_codec_dev(codec));
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue