mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
drm/vc4: fix infinite EPROBE_DEFER loop
`vc4_hdmi_audio_init` calls `devm_snd_dmaengine_pcm_register` which may
return EPROBE_DEFER. Calling `drm_connector_hdmi_audio_init` adds a
child device. The driver model docs[1] state that adding a child device
prior to returning EPROBE_DEFER may result in an infinite loop.
[1] https://www.kernel.org/doc/html/v6.14/driver-api/driver-model/driver.html
Fixes: 9640f1437a ("drm/vc4: hdmi: switch to using generic HDMI Codec infrastructure")
Signed-off-by: Gabriel Dalimonte <gabriel.dalimonte@gmail.com>
Link: https://lore.kernel.org/r/20250601-vc4-audio-inf-probe-v2-1-9ad43c7b6147@gmail.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
committed by
Maxime Ripard
parent
779a0c9e06
commit
c0317ad44f
@@ -560,12 +560,6 @@ static int vc4_hdmi_connector_init(struct drm_device *dev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = drm_connector_hdmi_audio_init(connector, dev->dev,
|
||||
&vc4_hdmi_audio_funcs,
|
||||
8, false, -1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
drm_connector_helper_add(connector, &vc4_hdmi_connector_helper_funcs);
|
||||
|
||||
/*
|
||||
@@ -2291,6 +2285,12 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_connector_hdmi_audio_init(&vc4_hdmi->connector, dev,
|
||||
&vc4_hdmi_audio_funcs, 8, false,
|
||||
-1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dai_link->cpus = &vc4_hdmi->audio.cpu;
|
||||
dai_link->codecs = &vc4_hdmi->audio.codec;
|
||||
dai_link->platforms = &vc4_hdmi->audio.platform;
|
||||
|
||||
Reference in New Issue
Block a user