ASoC: Intel: hdac_hdmi: Set ops to NULL on remove
authorAmadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Mon, 17 Jun 2019 11:36:42 +0000 (13:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Jul 2019 07:14:12 +0000 (09:14 +0200)
[ Upstream commit 0f6ff78540bd1b4df1e0f17806b0ce2e1dff0d78 ]

When we unload Skylake driver we may end up calling
hdac_component_master_unbind(), it uses acomp->audio_ops, which we set
in hdmi_codec_probe(), so we need to set it to NULL in hdmi_codec_remove(),
otherwise we will dereference no longer existing pointer.

Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/codecs/hdac_hdmi.c

index 6348724..0981966 100644 (file)
@@ -1854,6 +1854,12 @@ static void hdmi_codec_remove(struct snd_soc_component *component)
 {
        struct hdac_hdmi_priv *hdmi = snd_soc_component_get_drvdata(component);
        struct hdac_device *hdev = hdmi->hdev;
+       int ret;
+
+       ret = snd_hdac_acomp_register_notifier(hdev->bus, NULL);
+       if (ret < 0)
+               dev_err(&hdev->dev, "notifier unregister failed: err: %d\n",
+                               ret);
 
        pm_runtime_disable(&hdev->dev);
 }