On Sat, 27 Apr 2019 22:53:40 +0200, Bard liao wrote: > > In ASoC driver, snd_hdac_device_register() will be called by > snd_hdac_ext_bus_device_init() and snd_hdac_device_unregister() > will called by snd_hdac_ext_bus_device_remove(). However when > ASoC codec driver call snd_hda_codec_device_new() to create a > new hda codec, it will assign snd_hda_codec_dev_free() to the > dev_free ops and snd_hda_codec_dev_free() will call > snd_hdac_device_unregister(). As a result, snd_hdac_device_unregister() > will be called twice in ASoC driver. To prevent it, we use hdev > type to determine if the hda codec is registered by legacy HDA > driver or ASoC driver and unregister device in snd_hda_codec_dev_free() > only if it is a legacy HDA device. > This patch will overwrite the hdev type so that we can know it is > a ASoC device. > > Signed-off-by: Bard liao <yung-chuan.liao@xxxxxxxxxxxxxxx> Applied, thanks. Takashi > --- > sound/soc/codecs/hdac_hda.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c > index f889d94c8e3c..7d4940256914 100644 > --- a/sound/soc/codecs/hdac_hda.c > +++ b/sound/soc/codecs/hdac_hda.c > @@ -328,6 +328,12 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component) > dev_err(&hdev->dev, "failed to create hda codec %d\n", ret); > goto error_no_pm; > } > + /* > + * Overwrite type to HDA_DEV_ASOC since it is a ASoC driver > + * hda_codec.c will check this flag to determine if unregister > + * device is needed. > + */ > + hdev->type = HDA_DEV_ASOC; > > /* > * snd_hda_codec_device_new decrements the usage count so call get pm > -- > 2.17.1 > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel