ASoC: SOF: Intel: Fix error handling in hda_init()
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Mon, 9 Oct 2023 11:54:28 +0000 (13:54 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 19 Oct 2023 12:54:49 +0000 (14:54 +0200)
The hda_codec_i915_init() errors are ignored in
hda_init() so it can never return -EPROBE_DEFER.

Fix this before we move the call to hda_init() from the
deferred probe to early probe.

While at it, also fix error handling when hda_dsp_ctrl_get_caps
fails.

Suggested-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20231009115437.99976-5-maarten.lankhorst@linux.intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/soc/sof/intel/hda.c

index 86a2571488bcce42cd3b27b02bd4ca6c2c244488..2f189473323f382bda64037bb2b4a34856ec9dbc 100644 (file)
@@ -848,13 +848,21 @@ static int hda_init(struct snd_sof_dev *sdev)
 
        /* init i915 and HDMI codecs */
        ret = hda_codec_i915_init(sdev);
-       if (ret < 0)
-               dev_warn(sdev->dev, "init of i915 and HDMI codec failed\n");
+       if (ret < 0 && ret != -ENODEV) {
+               dev_err_probe(sdev->dev, ret, "init of i915 and HDMI codec failed\n");
+               goto out;
+       }
 
        /* get controller capabilities */
        ret = hda_dsp_ctrl_get_caps(sdev);
-       if (ret < 0)
+       if (ret < 0) {
                dev_err(sdev->dev, "error: get caps error\n");
+               hda_codec_i915_exit(sdev);
+       }
+
+out:
+       if (ret < 0)
+               iounmap(sof_to_bus(sdev)->remap_addr);
 
        return ret;
 }