On driver remove, sound/soc/codecs/hdmi-codec.c calls the plugged_cb
with NULL as the callback function and codec_dev, as seen in its
hdmi_remove function.

The HDMI audio helper then happily tries calling said null function
pointer, and produces an Oops as a result.

Fix this by only executing the callback if fn is non-null. This means
the .plugged_cb and .plugged_cb_dev members still get appropriately
cleared.

Fixes: baf616647fe6 ("drm/connector: implement generic HDMI audio helpers")
Signed-off-by: Nicolas Frattaroli <nicolas.frattar...@collabora.com>
---
 drivers/gpu/drm/display/drm_hdmi_audio_helper.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/display/drm_hdmi_audio_helper.c 
b/drivers/gpu/drm/display/drm_hdmi_audio_helper.c
index 
05afc9f0bdd6b6f00d74223a9d8875e6d16aea5f..ae8a0cf595fc6fb11eecd820c7e8c5b75a746e18
 100644
--- a/drivers/gpu/drm/display/drm_hdmi_audio_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_audio_helper.c
@@ -103,7 +103,8 @@ static int drm_connector_hdmi_audio_hook_plugged_cb(struct 
device *dev,
        connector->hdmi_audio.plugged_cb = fn;
        connector->hdmi_audio.plugged_cb_dev = codec_dev;
 
-       fn(codec_dev, connector->hdmi_audio.last_state);
+       if (fn)
+               fn(codec_dev, connector->hdmi_audio.last_state);
 
        mutex_unlock(&connector->hdmi_audio.lock);
 

---
base-commit: 502d44c1a440c5f428f50f02e58cd5633454ea8d
change-id: 20250527-hdmi-audio-helper-remove-fix-43b2cd0e648a

Best regards,
-- 
Nicolas Frattaroli <nicolas.frattar...@collabora.com>

Reply via email to